본문 바로가기

이것저것 스터디📚/CS 스터디

TCP 헤더

TCP(Transmission Control Protocol) 헤더에는 어떤 내용이 들어있을까?

- HTTP, TCP, IP와 같은 프로토콜들은 각자 자신이 맡은 역할이 있고, 보내고자 하는 데이터에 자신의 헤더를 붙여서 데이터의 정보를 표현한다.

- TCP는 전송의 신뢰성과 흐름 제어, 혼잡 제어 등의 역할을 맡고 있는 프로토콜이기 때문에 헤더에 이러한 기능을 사용하기 위한 값들이 담겨있다.

TCP 헤더


Source port, Destination port

- 이 필드들은 세그먼트의 출발지와 목적지를 나타내는 필드이다.(각각 16 bits를 할당받는다)

- 출발지와 목적지의 주소를 판별하기 위해서는 IP 주소와 포트 번호가 필요하다.

- IP 주소는 TCP가 사용되는 전송 계층의 한 계층 밑인 네트워크 계층에 있는 IP의 헤더에 담기기 때문에, TCP 헤더에는 포트를 나타내는 필드만 존재한다.


 

Sequence Number

- 이 필드는 시퀀스 번호를 담는데, 시퀀스 번호는 전송하는 데이터의 순서를 의미하며 32 bits를 할당 받는다.

- 최대 4,294,967,296 까지의 수를 담을 수 있다.

- 시퀀스 번호를 통해 수신자는 올바른 순서로 데이터를 재조립할 수 있다.

- 최초 데이터를 전송할 때에는 번호를 랜덤한 수로 초기화 하고, 송신자가 보낼 데이터의 1bytes당 시퀀스 번호를 1씩 증가시키며 데이터의 순서를 표현한다.


Acknowledgement Number

- 승인 번호는 수신자가 예상하는 다음 시퀀스 번호를 의미한다.(32 bits를 할당 받는다.)

- 핸드쉐이크 과정에서는 상대방이 보낸 시퀀스 번호 + 1로 자신의 승인 번호를 만들어낸다.

- 실제로 데이터를 주고 받을 때는 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 bytes로 승인 번호를 만들어낸다.

 

- 즉, 예를들어 송신자가 첫 전송으로 100bytes 만큼의 데이터를 전송하며 시퀀스 번호를 0으로 초기화하면, 그 다음 전송때 시퀀스 번호는 2가 아니라 100이되는 것이다.(1bytes마다 1이 증가하기 때문)


Data Offset

- 데이터 오프셋 필드에는 전체 세그먼트 중에서 헤더를 제외하고 데이터가 시작되는 위치가 어디부터인지를 표시한다.

- 이 필드가 필요한 이유는 TCP 헤더의 옵션(option) 필드의 길이가 고정되어 있지 않기 때문이다.


Reserved (3 bits)

- 미래를 위해 예약된 필드로, 모두 0으로 채워져야 한다.

- 즉, 현재 TCP에서는 사용되지 않지만, 미래의 확장가능성을 위해 예약된 필드이다.(비워진 필드이다.)


 

Flags(NS ~ FIN)

- 9개의 비트 플래그를 담는 필드로, 플래그들은 현재 세그먼트의 속성을 나타낸다.

- 기존에는 6개의 플래그를 사용했지만, Reserved 필드를 사용하여 3개의 플래그가 추가되었다.

* 기존 6개 플래그

필드 의미
URG Urgent Pointer(긴급 포인터) : 필드에 값이 채워져있음을 알리는 플래그. 이 포인터가 가리키는 긴급한 데이터는 높게 처리되어 먼저 처리된다.
ACK Acknowlegment(승인 번호) : 필드에 값이 채워져있음을 알리는 플래그. 이 플래그가 0이면 승인 번호 필드 자체가 무시된다.
PSH Push : 수신 측에게 이 데이터를 빠르게 응용 프로그램에게 전달해달라는 플래그다. 이 플래그가 0이라면 수신 측은 자신의 버퍼가 다 채워질 때까지 기다린다. 즉, 이 플래그가 1이라면 이 세그먼트 이후에 더 이상 연결된 세그먼트가 없음을 의미하기도 한다.
RST Reset : 이미 연결이 확립되어있는 상대방에게 연결을 강제로 리셋해달라는 요청이다.
SYN Synchronize : 상대방과 연결을 생성할 때, 시퀀스 번호의 동기화를 맞추기 위한 세그먼트임을 의미한다.
FIN Finish : 상대방과 연결을 종료하고 싶다는 요청의 세그먼트임을 의미한다.

* 새로 추가된 3개의 플래그

- 네트워크의 명시적 혼잡 통보(Explicit Congestion Notification, ECN)을 위한 플래그

 

필드 의미
NS ECN에서 사용하는 ECE, CWR 필드가 실수나 악의적으로 은폐되는 경우를 방어하기 위해 추가된 필드
ECE ECN Echo 플래그 : 해당 필드와 SYN 플래그가 1이면 ECN을 사용한다고 상대방에게 알리는 의미. SYN 플래그가 0이면 네트워크가 혼잡하니 세그먼트 윈도우의 크기를 줄여달라는 요청의 의미
CWR 이미 ECE 플래그를 받아서 세그먼트 윈도우의 크기를 줄였다는 의미

Window Size

- 이 필드에는 한번에 전송할 수 있는 데이터의 양을 의미하는 값을 담는다.

- 윈도우의 최대 크기는 64KB이다.


Checksum

- 이 필드는 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값을 담는다.


Urgent Pointer

- 긴급 포인터 필드로, 이 필드가 1이면 수신 측은 이 포인터가 가르키고 있는 데이터를 우선 처리한다.


 

Options

- 옵션 필드는 TCP의 기능을 확장할 때 사용하는 필드들이며, 크기가 가변적이다.

- 따라서 수신측이 어디까지가 헤더이고 어디서부터인지 데이터인지 알기 위해 Data Offset 필드를 활용해야 한다.


정리

TCP 헤더에는 전송의 신뢰성과 흐름 제어, 혼잡 제어 등의 역할을 맡고 있는 프로토콜이기 때문에 헤더에 이러한 기능을 사용하기 위한 값들이 담겨있다. 

Source Port, Destination port 필드는 세그먼트의 출발지와 목적지의 포트번호를 나타내는 필드이다.

Sequence Number(시퀀스 번호) 필드는 전송하는 데이터의 순서를 나타내는 필드이다.

Acknowledgment Number(승인 번호) 필드에는 데이터를 받은 수신자가 예상하는 다음 시퀀스 번호를 나타내는 필드이다.

Data Offset(데이터 오프셋) : 전체 세그먼트에서 헤더가 아닌 데이터가 시작되는 위치를 표시하는 필드이다.

Reserved : 미래를 위해 비워둔 필드이다.

Flags(플래그) : 현재 세그먼트의 속성을 나타내는 필드입니다. 기존에는 6개의 플래그가 있었지만, 현재는 3개가 추가되어 총 9개 플래그가 있습니다.

Window Size(윈도우 사이즈) : 한번에 전송할 수 있는 데이터의 양을 의미하는 값을 담는 필드이다.

CheckSum(체크섬) : 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값을 담는 필드이다.

Urgent Pointer(긴급 포인터) : 우선 처리가 필요한 세그먼트인지를 나타내는 필드이다.

Option(옵션) : TCP 기능을 확장할 때 사용하는 필드들이며, 크기가 가변적이기 때문에 Data Offset 필드가 필요하다.


학습 단계로 잘못된 정보가 있을 수 있습니다. 잘못된 부분에 대해 알려주시면 정정하도록 하겠습니다.

참고 : https://evan-moon.github.io/2019/11/10/header-of-tcp/

 

 

'이것저것 스터디📚 > CS 스터디' 카테고리의 다른 글

3-way handshake, 4-way handshake  (0) 2023.09.11
MTU  (0) 2023.09.11
TCP와 UDP  (0) 2023.09.11
'www.google.com'을 브라우저에 입력하면 일어나는 일  (0) 2023.09.04
DNS란?  (0) 2023.09.04