Programming/Network

TCP Header

xxx123 2015. 6. 19. 15:44

 

 

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