TCP 세그먼트는 옵션 필드가 없는 최소 20바이트에서 최대 60바이트 크기의 헤더 필드를 사용하여 데이터를 나타낸다.
출처 - http://www.ktword.co.kr/abbr_view.php?nav=&m_temp1=1889&id=1103
포트주소 (발신지 16비트 / 목적지 16비트)
어느 어플리케이션에 해당하는 데이터인지 알아야 하기 때문에, 포트 주소를 통해 판단한다. TCP/UDP 포스팅에서도 설명했지만, 발신지와 목적지 포트 주소 모두 필요하다. 다른 어플리케이션이 같은 곳에 요청을 했을 경우 발신지의 포트 주소를 통해 판단하여야 하고, 같은 IP 주소에 각각 다른 어플리케이션에 요청을 했을 경우 목적지의 포트 주소를 통해 판단할 수 있기 때문이다.
Sequence Number (32비트)
보내는 데이터의 순서를 나타내는 필드이다. 데이터 조각들은 보내는 순서대로 도착하지 않는다. 이를 위해, 언제 도착하던 간에 순서를 맞출 수 있도록 데이터의 순서를 TCP 헤더에 표기한다.
첫 데이터 전송 시에 32비트 안에서 무작위 난수를 생성하여 초기화하는데, 이 수를 ISN(Initial Sequence Number)라고 한다. Sequence Number는 ISN에서 전송하는 데이터 1바이트 당 1씩 증가시킨다.
Acknowledge Number (32비트)
다음에 받아야 할 데이터의 순서를 나타내는 필드이다. 자신이 어디까지 데이터를 받았으니, 여기부터 데이터를 보내달라는 것을 알리기 위한 용도를 가진다.
마지막으로 수신한 데이터의 Sequence Number가 ...1101
이라면 이에 대한 응답 또는 요청으로 Acknowledge Number는 ...1110
이 되는 것이다.
Header Length (4비트)
지금 보내는 데이터에서 헤더가 차지하는 영역이 어디까지인 지를 나타내는 필드이다. 즉, 헤더를 제외하고 실제 데이터가 시작되는 지점을 알려주는 용도를 가진다.
단위는 비트나 바이트가 아닌 워드로, 0000
~ 1111
까지 15워드(60바이트)까지 나타낼 수 있다. 옵션을 제외한 TCP 헤더의 크기는 20바이트이므로, 충분히 나타낼 수 있다.
Reserved (3비트)
Flags (9비트)