TCP 패킷, 세그먼트의 구조, TCP 플래그의 설명

Posted by 미니송
2019.02.22 15:41 IT/네트워크


TCP 패킷(세그먼트)의 구조


TCP는 패킷이라고 부르지만 세그먼트가 원래 맞는 표현입니다. 물론 편의상 패킷이라고 부르지만 원래의 표현은 다릅니다. TCP는 세그먼트라는 프로토콜 데이터 유닛(PDU)으로 표현하고 IP는 데이터그램, 데이터링크 계층의 PDU는 프레임이라고 합니다. 편의상 IP 패킷, TCP 패킷, 데이터링크 패킷이라고 부르는 경우도 있습니다. 저도 세그먼트라는 것을 알지만 패킷과 섞어서 사용하도록 하겠습니다.


TCP는 32비트로 이루어져 있으며 TCP 헤더와 TCP 데이터로 나눌 수 있습니다. 


TCP 세그먼트의 구조



위의 구조를 보면 TCP 패킷의 구조를 알 수 있습니다. 밑에 있는 TCP Data영역을 제외한 윗부분이 헤더입니다. 우선 첫 번째로 나오는 것을 보겠습니다. 처음으로 Source Port가 나옵니다.


Source Port

소스포트는 송신포트라고도 하며 16비트가 할당되어 있습니다. 16비트가 할당되어 있기 때문에 2의 16승까지 표현할 수 있습니다. 총 65536까지의 숫자를 표현할 수 있습니다. 송신포트는 나가는 포트번호를 지정할 수 있습니다.


Destination Port

데스티네이션 포트는 수신포트라고도 하고 송신포트와 마찬가지로 16비트가 할당되어 있습니다. 따라서 65536개의 숫자를 표현할 수 있습니다. 수신포트는 목적지포트라고도 하며 도착할 포트번호를 표현할 수 있습니다.


Sequnce Number

시퀀스넘버입니다. TCP 통신을 하는데 있어서 시퀀스 번호를 통해서 통신할 수 있습니다. SYN 플래그가 1로 설정된 경우 초기 시퀀스 번호가 되며 그 후 ACK응답은 +1의 값을 갖게 됩니다. ( SYN 1 -> ACK 2 )


Acknowledgement Number

ACK 플래그가 설정된 경우에 수신자가 예상하는 다음 시퀀스 번호가 들어갑니다. 


Data Offset( 4비트 )

32비트 워드 단위로 나타낸 TCP 헤더의 크기값입니다. 헤더의 최소 크기는 5워드이며 최대크기는 15워드입니다. 최소값은 20바이트, 최대값은 60바이트이며 크기를 담고있습니다.


Flag ( URG, ACK, PSH, RST, SYN, FIN )

TCP 플래그입니다. 가장 사용이 많은 6가지 종류의 플래그가 있으며 상태를 나타내줍니다. TCP Flag 혹은 Control bits라고도 부릅니다. NS, CWR, ECE, URG, ACK, PSH, RST, SYN, FIN 이렇게 총 9가지의 플래그가 있습니다. 각각의 플래그는 자신의 역할이 있으며 각각 1비트를 사용하여 통신하게 됩니다.


NS - ECN-nonce 은폐보호

CWR - 혼잡 윈도우 축소 ( Congestion Window Reduced)

ECE - ECN-Echo라고 부릅니다.

URG - Urgent Pointer 필드의 값이 유효한지를 나타내 줍니다. 전송하는 데이터중에서 긴급히 전달하는 내용이 있으면 플래그가 on상태로 통신이 이루어지며 다른 데이터에 비해서 높은 우선순위를 가집니다.

ACK - Acknowledgement 응답, 상대방으로부터 패킷을 받았다는 것을 알려주는 플래그입니다.

PSH - Push의 약자로 밀어넣는다는 뜻을 가지고 있습니다.

RST - Reset의 뜻을 가지고 있습니다. RST 플래그가 활성화되면 세션을 끊는 것을 의미합니다. 즉시 연결을 종료할 수 있습니다. ( 비정상종료 ) 

SYN - Synchronization의 뜻을 가지고 있습니다. 동기화라고 해석할 수 있는데 TCP 세션을 만들 때 가장 먼저 보내는 패킷입니다. 시퀀스 번호를 임의로 설정해서 3-way-handshaking에서 가장 먼저 사용합니다.

FIN - Finish의 뜻을 가지고 있습니다. 세션의 연결을 종료시킬 때 사용되며 정상적인 종료를 의미합니다. 더이상 전송할 데이터가 없을때 사용합니다.


Window size

수신 윈도우의 크기입니다.


Checksum

흔히 말하는 첵섬으로 헤더 및 데이터의 에러 확인을 위해 사용되는 16비트 필드입니다.


Urgent Pointer

URG플래그가 설정된 경우 16비트인 Urgent Pointer는 시퀀스 번호로부터 오프셋을 나타냅니다. 이 오프셋이 마지막 긴급 데이터 바이트를 알려줍니다.


Option

TCP통신의 옵션을 사용할 수 있습니다. 필드의 값에 따라 지정된 옵션들이 있습니다.


padding

32비트에 맞추기 위해서 사용되는 padding비트, padding의 뜻은 속, 충전재입니다. 32비트가 맞지 않기 때문에 맞춰주기 위해 사용하는 비트입니다.


TCP Data

TCP 데이터와 헤더로 나눠진다고 했는데 이부분부터가 TCP 데이터에 해당됩니다. 따라서 실제 데이터 전송은 데이터에 담아서 이루어 집니다.



TCP 세그먼트는 이러한 구조를 가지고 있으며 실제 통신 시에 이루어지는 3-way-handshaking이나 4-way-handshaking 동작도 있습니다. TCP는 연결형 서비스이기 때문에 통신시에 연결을 맺어주거나 끊어주는 기본동작이 있습니다. 

Tags
이 댓글을 비밀 댓글로