-
1. TCP 해더의 구조
TCP Header의 구조는 위 그림과 같다.
Options (가변길이) 필드를 제외한 순수 Header사이즈는 20byte이다.
여기서 특이한 부분이 Header Length 필드가 4bit라는 점인데, 4bit로 표현할 수 있는 수는 16이 한계이다.
그렇다고 최대 header 길이가 16bit인것은 아니다.
실제로 header 길이는 4byte단위로 표현되므로 bit값이 1이라면 4byte, 2bit라면 8byte가 되는 셈이다.
2. 와이어 샤크에서 본 TCP
위에선 Header Length 필드에 대해서만 얘기를 했는데. 와이어샤크를 통해 예를 들며 각 필드를 조사해 보자.
위 그림도 함께 참고 할것.
패킷을 까보면 헤더의 내용이 각각 잘 표시되어 있다.
[Source Port / Destination Port]
자신 및 상대의 Port
[Sequence Number]
일명 SEQ, 순차 번호, 고유의 번호를 갖는다. 이값으로 TCP 세그먼트에 대한 식별값을 제공하며,
통신 스트림 일부가 분실되면 확인을 위해 사용된다.
이 번호는 패킷에 포함되어 있는 데이터사이즈만큼 증가한다.
위 그림에서 Header Length가 32이므로,
기본 TCP Header 20byte를 제외한 나머지 12byte가 Option값이라는 것을 알 수 있다.
[Acknowledgment Number]
일명 ACK, 확인 응답 번호, 다음번에 기대되는 SEQ를 표시한다.
[Header Length]
TCP 헤더의 길이. 옵션값 때문에 가변적이다.
다음은 플래그 필드이다. 플래그 필드의 각 뜻은 다음과 같다.
[ECHO]
전송 경로 중에 Congestion이 발생 했을때 사용한다.
[UGR]
긴급하게 처리하라는 의미의 비트. 이 플래그가 활성화 된 패킷을 받으면 다른 일을 멈추고 이 데이터 부터 처리한다.
[ACK]
데이터를 받은 쪽의 버퍼가 차면 버퍼를 처리하면서 마지막까지 잘 받았으니 다음 것을 보내달라고 ACK를 보낸다. 중간에 데이터를 못 받았을 경우에도 어디서부터 보내달라는 신호로 ACK를 보내기도 한다.
[PUSH]
TCP의 경우, 수신측은 데이터를 버퍼에 다 채워야 어플리케이션으로 데이터를 넘겨준다. 중간에 못받은 데이터가 있을 수 있으니 다 받은걸 확인하고 올려주는 것이다. PUSH 플래그가 셋팅된 데이터가 들어오면 버퍼가 다 차지 않아도 TCP는 데이터를 어플리케이션에게 넘겨준다.
[RST]
세션을 강제 종료 시키는 의미로 많이 알고있지만 실제로는 세션에 할당된 메모리 자원을 NULL상태로 만들고 시스템에 반납하라는 내용의 플래그이다.
[SYN]
상대방과의 연결을 맺기 위해 던지는 플래그.
[FIN]
정상적으로 세션의 종료를 하고자 할때 사용하는 플래그.
[Window size value]
16bit로 이루어져 있어서 65535byte까지 표시 할 수 있다. 즉, 윈도우 최대 사이즈는 64kb라고 할 수 있다.
하지만 1Gbps, 10Gbps 시대인 요즘엔 전송할 데이터의 양이 많아지고 있어서 이 최대값이 변경가능하도록 되었다.
[참고]
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/TCP_IP/TCP_Header
'Programming > Network' 카테고리의 다른 글
SO_SNDBUF 0 (0) 2016.12.04 page-locking & non-paged pool (0) 2015.06.19 shutdown()과 closesocket() (1) 2015.06.15 IOCP - 1 (I/O CompletionPort) (0) 2014.12.14 Overlapped I/O (0) 2014.09.18 댓글