* TCP/IP의 이해
1) 네트워크 접속 계층
> 운영체제의 네트워크 카드와 디바이스 드라이버 등과 같이 하드웨어적인 요소와 관련되는 모든 것을 지원하는 계층이다.
> 송신측은 상위 계층으로부터 전달받은 패킷에 MAC 주소 정보를 가지고 있는 헤더를 추가하여 프레임을 생성하고 물리 계층으로 전달한다.
> 수신측은 데이터 링크 계층에서 추가된 헤더를 제거하여 상위 계층인 네트워크 계층으로 전달한다.
- 네트워크 계층
라우팅 - 송수신 호스트 사이의 패킷 전달 경로를 선택하는 과정을 의미한다.
혼잡제어 - 혼잡의 발생을 예방하거나 제거하는 기능이다.
패킷의 분할과 병합 - 송신측은 적절한 크기로 데이터를 분할하고 수신측은 병합한다.
- 전송계층
> 상위 계층에서 볼 때, 두 개의 호스트간의 자료 전송을 담당하는 계층이다.
> TCP, UDP 두 종류의 프로토콜을 사용한다.
> 네트워크 양단의 송수신 호스트 사이에서 신뢰성 있는 전송 기능을 제공한다.
> OSI 모델에서 세션 계층의 일부 기능과 전송 계층에 해당한다.
> 시스템의 논리 주소와 포트가 있어 각 상위 계층의 프로세스를 연결하여 통신한다.
> 송신측은 상위 계층으로부터 전달받은 데이터를 효율적으로 전송하기 위해 패킷단위로 분할한다.
> 수신측은 하위 계층으로부터 전달받은 패킷을 원래 데이터로 재결합한다.
- 응용 계층
> TCP/IP 프로토콜의 범위는 응용 계층의 프로토콜까지 포함한다.
> 해당되는 프로토콜과 서비스에는 Telnet, FTP, SMTP 등이 있다.
2) TCP/IP 주소의 구조
- 물리 주소
> 링크 주소 또는 통신망에서 정의된 노드의 주소, 이더넷 네트워크인터페이스 카드 주소 등을 말한다.
> 이더넷 상에서 각 호스트를 구별하기 위하여 각각의 이더넷 카드에 부여되는 고유 번호를 의미한다.
- 인터넷 주소
> 인터넷에는 기존 물리 주소와는 별도로 각 호스트를 식별할 수 있는 유일한 주소를 지정해야 한다.
> 현재 인터넷에 연결된 호스트를 유일하게 식별할 수 있는 32비트 주소 체계를 사용한다.
- 포트 주소
> 수신지 컴퓨터까지 전송하려면 IP 주소와 물리주소가 필요하다.
> 인터넷 통신의 최종 목적은 한 프로세스가 다른 프로세스와 통신할 수 있도록 하는 것이다.
3) 서비스의 종류
- 비연결형 서비스
> 패킷의 전달 순서
패킷이 서로 다른 경로로 전송되므로 도착 순서가 일정하지 않다.
상위 계층에서 순서를 재조정해야 한다.
> 패킷 분실 가능성
패킷의100% 도착을 보장하지 않는다.
상위 계층에서 패킷 분실 오류를 복구해야 한다.
- 연결형 서비스
> 상대적으로 신뢰성이 높다
4) 라우팅
패킷의 전송 경로를 지정한다.
전송 경로 결정시 고려사항
> 공평 원칙 - 다른 패킷의 우선 처리를 위해 다른 패킷이 손해를 보면 안된다.
> 효율 원칙 - 전체 네트워크의 효율성에 대해 고려해야 한다.
- 정적 라우팅
> 패킷 전송이 이루어지기 전에 경로 정보를 라우터가 미리 저장하여 중개한다.
> 단점 - 경로 정보의 갱신이 어려우므로, 네트워크 변화/네트워크 혼잡도 대처가 부족하다.
- 동적 라우팅
> 라우터의 경로 정보가 네트워크 상황에 따라 적절히 조절된다.
> 단점 : 경로 정보의 수집과 관리로 인한 성능 저하
- HELLO/ECHO 패킷
HELLO : 주변 라우터에 HELLO 패킷을 보내어 주변 경로 정보를 파악하는 용도
ECHO : 라우터 사이의 전송 지연 시간을 측정하는 용도
- 라우팅 테이블
> 라우터가 패킷의 적절한 경로르 찾기 위한 가장 기본적인 도구이다.
- 라우팅 정보의 처리
> 소스 라우팅
송신 호스트가 패킷의 전달 경로를 결정하는 방식
전송 경로는 전송 패킷 내부에 기록된다.
> 분산 라우팅
라우팅 정보를 분산하여 관리하는 방식
호스트의 개수가 많아질수록 효과적이다.
> 중앙 라우팅
특정 호스트( RCC )가 모든 라우팅 정보를 관리
송신 호스트는 패킷 전송 전에 RCC에게 경로 정보를 얻어서 소스 라우팅으로 전송한다.
호스트의 개수가 많아질수록 비효율적이다.
> 계층 라우팅
분산 라우팅과 중앙 라우팅의 조합이다.
네트워크 규모가 커질수록 매우 효과적이다.
5) 혼잡 제어
- 혼잡의 원인
>타임아웃기능에 의한 패킷의 재전송으로 혼잡도 증가
초기 혼잡 과정에서 타임아웃시간이 작으면 혼잡도가 급격히 증가한다.
패킷 도착 순서가 다른 상황에서 패킷을 분실처리하면 타임아웃이 증가한다.
의도적으로 피기배킹을 사용하면 응답시간이 느려져 타임아웃이 증가한다.
패킷 생존 시간을 작게 하면 패킷이 강제로 제거되어 타임아웃이 증가한다.
> 라우팅 알고리즘
혼잡이 발생하지 않는 경로를 배정하도록 설계해야 한다.
혼잡이 발생하는 경로를 선택하면 혼잡이 주변으로 확대된다.
- 트래픽 성형
> 혼잡의 발생은 트래픽이 특정 시간에 집중되는 버스트 현상이 원인이다.
> 패킷 발생 정도를 네트워크에서 예측 가능한 정도로 조절하는 기능이 필요하다
> 리키 버킷 알고리즘
- 혼잡 제거
>특정 지역의 혼잡이 다른 지역으로 확대되지 않도록 하는 것이 중요하다.
> 자원 예약 방식 - 호스트와 서브넷이 미리 네트워크 자원의 사용 정도를 협상한다.
> 초크 패킷
6) 라우팅
- 거리 벡터 프로토콜
> 누가 : 이웃하게 직접 연결된 라우터간에 라우팅 정보를 교환
> 무엇을 : 각 라우터에서 개별 네트워크까지 패킷을 전송하는데 걸리는 거리 정보
- RIP
> 거리 벡터 프로토콜을 사용하는 내부 라우팅 프로토콜
> UDP 프로토콜을 사용한다.
> 라우팅 테이블 적용 원리
거리 벡터 정보가 새로운 네트워크 주소면 적용
목적지까지의 지역이 더 적으면 기존 경로를 대체
거리 벡터 정보가 입력되면 등록 정보를 수정
> 패킷 구조 : 벡터 정보를 교환하는 목적으로 사용한다.
- 링크 상태 프로토콜
> 거리 벡터 프로토콜과 반대의 원리로 동작한다.
> 누가 : 네트워크에 연결된 모든 라우터간에 라우팅 정보를 교환
> 무엇을 : 개별 라우터에서 주변 라우터까지 패킷을 전송하는데 걸리는 거리 정보
> 정보 전달 시점의 차이
거리 벡터 : 주기적으로 전달
링크 상태 : 주변 상황에 변화가 생기는 경우
7) IP 프로토콜
비연결형 서비스를 제공한다.
패킷을 분할/병합하는 기능을 수행한다.
헤더 체크섬만 제공한다.
Best Effort 방식의 전송 기능
- IP 헤더
> Sevice Type
> 패킷 분할
- Identification
분할되지 않은 패킷 : 값을 순차적으로 증가
분할된 패킷 : 동일한 번호 부여
- DF
패킷 분할 금지
- MF
분할된 패킷의 처음과 중간 : 1
분할된 패킷의 마지막 : 0
- Fragment Offset
분할되기 전 데이터에서의 사애적인 위치 정보
8 바이트의 배수로 지정한다.
> 주소 관련 필드
Source Address : 송신 호스트의 IP 주소
Destination Address : 수신 호스트의 IP 주소
> 기타 필드
- Version Number : 버전 4( IPv4 )
- Header Length : 헤더 길이를 32비트 단위로 표시
- Packet Length : 헤더를 포함한 패킷의 전체 길이
- Time To Live( TTL )
패킷의 생존 시간
라우터를 거칠 때마다 1씩 감소되며, 0이 되면 네트워크에서 강제로 제거
- Transport Protocol : 상위 계층 프로토콜
- Header Checksum : 헤더 오류 검출
- Options
- Padding
8) IP
- IPv4
8비트 크기의 필드 네 개를 이용하여 구성한 32비트 논리 주소
- IP 주소 체계
네트워크 주소( net id )와 호스트 주소( host id )로 구분한다.
1) 네트워크 주소
전체 네트워크를 보다 작은 네트워크로 분할하여 각 호스트가 속한 네트워크를 대표하는데 사용한다.
8비트, 16비트, 24비트의 크기로 분류한다.
2) 호스트 주소
네트워크 주소로 표현되는 네트워크 내부에서 각 호스트의 주소를 표현한다.
전체 32비트에서 네트워크 주소를 제외한 나머지에 해당한다.
- IP 주소
> IP 주소의 효률적인 배정을 위하여 설계 시 클래스라는 개념을 도입했다.
> 클래스에는 A, B, C, D, E 다섯 가지 종류가 있다.
D 클래스는 IP 멀티 캐스팅용
E 클래스는 자원 확보를 위한 예비용
실제 사용하는 것은 A, B, C 클래스 세 가지 종류
1) A 클래스
> 네트워크 주소로 8비트, 호스트 주소로 24비트를 사용한다.
> 식별자 : "0"
> 범위 : 0.0.0.0 ~ 127.255.255.255
> 0.0.0.0 -> 사용하지 않는 주소
> 127.X.X.X -> 시스템 루프백 주소라 사용하지 않는다
> 실질적인 범위 : 0.0.0.0 ~ 126.255.255.255
> 대형 기관 및 대형 기업
2) B 클래스
> 식별자 : "10"
> 네트워크 주소에 16비트, 호스트 주소에 16비트를 배정하는 클래스
> IP 주소의 시작이 128 ~ 191로 시작하고, 기본 네트워크 마스크는 255.255.0.0
> 범위 : 128.0.0.0 ~ 191.255.0.0
> 호스트 주소는 2바이트로 호스트 65,534개 구성
> 중형 기업 및 기관
3) C 클래스
> 식별자 : "110"
> 네트워크 주소에 24비트, 호스트 주소에 8 비트를 배정하는 클래스
> 호스트를 최대 254개 사용
> IP 주소의 시작이 192 ~. 23으로 시작, 기본 네트워크 마스크는 255.255.255.0
> 범위 : 192.0.0.0 ~ 223.255.255.255
> 소규모 기관 사용
4) 사설 주소
> IP 주소 중 인터넷에서 사용하지 않는 주소
> IP 주소 부족을 해결하는 방안
5) 서브넷팅
> IP를 효율적으로 낭비 없이 분배하고, Broadcast Domain의 크기를 작게 나눠 주는 것
> Class 별 default Subnet mask를 사용하지 않고 적당한 크기의 Subnet mask로 사용자의 상황에 따라 하나의 네트워크를 작게 여러 개로 나눠 사용한다.
> Classful Network를 여러 개의 네트워크로 나누는 것이다.
> 네트워크가 분리되면 서로 통신하기 위해서는 라우터를 통해야 한다.
- IPv6
16바이트, 즉 128 비트로 구성된다.
주소를 읽기 쉽게 하기 위해 16진수 콜론 표기를 규정한다.
128비트는 길이가 2바이트인 8개의 영역으로 나뉜다.
16진수 표기법에서 2바이트는 4개의 16진수로 표현되어 전체적으로 32개의 16진수로 표현된다.
9) 이중 스택
인터넷의 모든 시스템이 IPv6를 사용할 때까지 IPv4와 IPv6를 동시에 사용한다.
패킷을 목적지로 보낼 때 버전을 결정하기 위해 송신측에서 DNS에 질의를 한다.
10) TCP
- TCP는 연결 지향, 신뢰성 있는 바이트 스트림 서비스를 제공한다.
> 연결지향
응용 프로그램이 데이터를 교환하기 전에 서로 TCP 연결을 확립해야 한다.
> 신뢰성 있는
메시지를 성공적으로 수신했거나 오류가 발생했다는 것을 알린다.
> 순서적인 데이터 전달 서비스
송신측 전송 계층 프로세스와 목적지 전송 계층 프로세스 사이에 연결이라는 논리적 관계가 설정된다.
- 포트 번호
* 포트
> TCP가 상위 계층으로 데이터를 전달하거나 상위 계층에서 TCPfㅗ 데이터를 전달할 때 상호 간에 사용하는 데이터의 이동통로
> 상위 계층 프로토콜과 하위 계층 프로토콜은 같은 포트를 사용해야 한다.
> 다수의 포트를 활용하여 동시 다운로드가 가능하다.
- TCP 세그먼트
> 바이트 스트림을 세그먼트 단위로 나눈다.
> 송신지 포트 번호
세그먼트를 전송하는 호스트에 있는 응용 프로그램의 포트번호
> 수신지 포트 번호
수신지 호스트에서 수행하는 프로세스가 사용하는 포트 번호
> 순서 번호
세그먼트에 포함된 데이터의 첫 번째 바이트에 부여된 것
> 확인 응답 번호
세그먼트를 수신하는 노드가 상대편 노드에서 수신하려는 바이트의 번호
> 헤더 길이
TCP 헤더 길이를 4바이트 워드 값으로 나타낸다. 20~60 바이트
> 예약
나중에 사용하려고 예약된 6비트 필드
> 플래그
프로토콜의 동작을 젱하는데 사용하는 비트 단위의 플래그
> 윈도우 크기
상대방이 유지해야 하는 바이트 단위의 윈도우 크기를 정의한다.
> 검사합
헤드 부분의 오류를 검출하는 검사합 계산을 포함한다.
>긴급 포인터
URG 플래그 설정 시 긴급 데이터의 마지막 바이트의 순서 번호
> 옵션
송신자가 수신하기를 원하는 세그먼트의 최대 크기를 나타낸다.
- TCP 연결 관리
연결 설정( 3-way handshaking )
연결 종료( 4-way handshaking )
- TCP 흐름 제어
> TCP는 원래의 데이터를 패킷이라는 작은 단위로 분할하여 전송하기 때문에 수신측의 컴퓨터는 수신한 패킷들을 재결합하여 다시 원래의 데이터로 만들어 주어야 한다.
> 한번에 패킷을 하나씩 송수신한 후 다음 번 패킷을 송신하는 것보다 한 번에 여러 개의 패킷을 송수신 한 다음 수신 확인 신호를 전송하는 것이 훨씬 효율적이다.
11) UDP
비연결 지향 프로토콜
패킷이나 흐름 제어, 단편화 및 전송 보장 등의 기능 등을 제공하지 않는다.
요청 메시지와 응답 메시지로 구성된다
> 송신지 포트 번호
데이터 영역의 데이터 정보를 만든 전송 시스템의 프로세스나 응용 프로그램
TCP 헤더의 송신지 포트 기능
> 수신지 포트 번호
데이터 영역의 데이터 정보를 처리할 수신 시스템의 프로세스나 응용 프로그램
TCP 헤더의 수신지 포트 기능
> 길이
UDP 헤더와 데이터의 길이를 바이트 단위로 나타낸다.
UDP 메시지에 들어있는 데이터 정보의 양을 나타낸다.
> 검사합
수신측에서 UDP 헤더와 데이터 및 IP 헤더의 에러를 검사한다.
> 데이터
송신지 포트의 응용 계층 프로세스가 만든 데이터 정보