TCP 헤더

HYOSEONG KIM·2021년 7월 12일
0

network

목록 보기
4/5
post-thumbnail

TCP 헤더

TCP 세그먼트는 옵션 필드가 없는 최소 20바이트에서 최대 60바이트 크기의 헤더 필드를 사용하여 데이터를 나타낸다.

TCP 헤더
출처 - http://www.ktword.co.kr/abbr_view.php?nav=&m_temp1=1889&id=1103

TCP 헤더 필드

  1. 포트주소 (발신지 16비트 / 목적지 16비트)
    어느 어플리케이션에 해당하는 데이터인지 알아야 하기 때문에, 포트 주소를 통해 판단한다. TCP/UDP 포스팅에서도 설명했지만, 발신지와 목적지 포트 주소 모두 필요하다. 다른 어플리케이션이 같은 곳에 요청을 했을 경우 발신지의 포트 주소를 통해 판단하여야 하고, 같은 IP 주소에 각각 다른 어플리케이션에 요청을 했을 경우 목적지의 포트 주소를 통해 판단할 수 있기 때문이다.

  2. Sequence Number (32비트)
    보내는 데이터의 순서를 나타내는 필드이다. 데이터 조각들은 보내는 순서대로 도착하지 않는다. 이를 위해, 언제 도착하던 간에 순서를 맞출 수 있도록 데이터의 순서를 TCP 헤더에 표기한다.
    첫 데이터 전송 시에 32비트 안에서 무작위 난수를 생성하여 초기화하는데, 이 수를 ISN(Initial Sequence Number)라고 한다. Sequence Number는 ISN에서 전송하는 데이터 1바이트 당 1씩 증가시킨다.

  3. Acknowledge Number (32비트)
    다음에 받아야 할 데이터의 순서를 나타내는 필드이다. 자신이 어디까지 데이터를 받았으니, 여기부터 데이터를 보내달라는 것을 알리기 위한 용도를 가진다.
    마지막으로 수신한 데이터의 Sequence Number가 ...1101이라면 이에 대한 응답 또는 요청으로 Acknowledge Number는 ...1110이 되는 것이다.

  4. Header Length (4비트)
    지금 보내는 데이터에서 헤더가 차지하는 영역이 어디까지인 지를 나타내는 필드이다. 즉, 헤더를 제외하고 실제 데이터가 시작되는 지점을 알려주는 용도를 가진다.
    단위는 비트나 바이트가 아닌 워드로, 0000 ~ 1111까지 15워드(60바이트)까지 나타낼 수 있다. 옵션을 제외한 TCP 헤더의 크기는 20바이트이므로, 충분히 나타낼 수 있다.

  5. Reserved (3비트)

  6. Flags (9비트)

  • NS, ECW, CWR
    새로 추가된 비트로, 네트워크의 명시적 혼잡 통보를 위한 비트이다.
  • URG
    Urgent Pointer 필드가 채워져 있는지를 나타낸다.
  • ACK
    Acknowledge Number 필드가 채워져 있는지를 나타낸다.
  • PSH
    필드가 채워져 있다면, 수신 측은 받은 데이터를 바로 애플리케이션 계층에 전달하고, 그렇지 않다면 버퍼가 채워질 때까지 기다린다.
  • RST
    이미 연결이 확립되어 있는 ESTABLISHED 상태인 상대방에게 강제 RESET 요청을 하는 필드이다.
  • SYN
    상대방과 초기 연결 중, handshaking을 위한 번호이다.
  • FIN
    상대방과 연결 종료 중, handshaking을 위한 번호이다.
  1. Window Size (16비트)
    한 번에 전송할 수 있는 데이터의 양을 나타낸다. 단위는 KB이다.
  2. Checksum (16비트)
    데이터를 보낼 때, 보내는 데이터를 16비트 씩 쪼개어 모두 더하며, 캐리는 맨 밑 비트부터 더하게 된다. 모두 더했다면 비트를 반전시켜 필드에 담는다.
    수신 측은 보낼 때와 같이 16비트 씩 쪼개어 모두 더한 다음, Checksum의 데이터와 더하는데 모든 비트가 1이 아니라면, 데이터가 깨져 신뢰성이 없다고 판단하게 되는 최소한의 오류 검증 필드이다.
  3. Urgent Pointer
    플래그 비트 중 URG가 1이라면, 이 필드에 해당하는 데이터부터 먼저 처리하게 한다.
profile
20210622 ~

0개의 댓글