😒 저 저 저 개념없는 나/🌐 네트워크

[네트워크] TCP 헤더

우주수첩 2024. 11. 24. 15:35
728x90

# TCP 헤더

 

 

 

크기

  • 기본 : 20byte == 160 bits
    • Option field 미 사용
  • 최대 : 60byte == 480bits
    • Option field 전체 사용

 

# 구성 요소

1. Source Port / Destination Port

  • 크기 : 2byte == 16bits
  • 출발지와 목적지를 나타내는 포트
  • TCP헤더에는 IP주소를 나타내는 필드가 아니라 포트를 나타내는 필드가 존재.
    • IP주소는 한 계층 밑에 있는 IP헤더에 담김

 

 

2. Sequence Number

  • 크기 : 4byte == 32bits
  • 전송하는 데이터의 순서
  • 최대 표현 순서 : 4,294,967,296
    -> 중복 염려 x
  • 수신자는 쪼개진 세그먼트의 순서를 파악하여 올바른 순서로 데이터를 재조립 할 수 있게 된다.
  • 적용
    • 최초 전송 시 seq num을 랜덤한 수로 초기화
    • 자신이 보낼 데이터릐 1byte당 시퀀스 번호를 1씩 증가하며 데이터 순서 표현.
    • 최대 표현 수를 넘어 갈 경우 0부터 다시 시작.

 

3. Acknowledgement Number

  • 크기 : 4byte == 32bits
  • 적용
    • 연결 설정/ 연결 해제  : 상대방이 보낸 시퀀스 번호 +1 로 자신의 승인 번호를 만들어 냄 .
    • 데이터 전달 : 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 byte로 승인 번호를 만들어 냄

 

 

4. Data Offset

  • 크기 : 4 bits
  • 세그멘트 중에서 헤더가 아닌 데이터가 시작되는 위치 표시
  • 32bits word 단위 사용하여 표기 
    • 1word == 4 bytes
    • 해당 필드의 값에 4를 곱하면 실제 데이터 시작 위치 파악 가능
  • 표현 범위
    • 4bits => 0~15 words
      => 0~ 60 bytes의 오프셋 표현 가능.
    • 최소 값 : option 필드 제외  필수 존재 필드
      => 5word == 20 byte

 

 

5. Reserved

  • 크기 : 3 bits
  • 미래를 위해 예약된 필드.
  • 모두 0으로 채워져 있어야 함.

 

 

6. Flags

  • 크기 : 9bits
  • 현재 세그먼트의 속성

종류

URG ; Urgent Pointer

  • 긴급 포인터
  • urg ==1 
    => 해당 세그먼트에 긴급 데이터가 포함되었음을 인지.
  • Urgent Pointer가 가리키는 긴급한 데이터는 우선적으로 먼저 처리 된다.

 

ACK; Acknowledgement

  • 필드에 값이 채워져있음을 알리는 플래그
  • 0 : 승인번호 필드 자체가 무시

 

PSH; Push

  • 수신측에게 해당 데이터를 최대한 빠르게 응용프로그램에 전달해 달라는 플래그
  • 0: 수신측은 자신의 버퍼가 다 채워질 때 까지 기다림.
  • 1: 세그먼트 이후에 더 이상 연결될 세그먼트가 없음을 의미

 

RSH; Reset

  • 연결 확립(;Established)상태인 상대방에게 연결을 강제로 리셋 해달라는 요청의 의미

 

SYN; Synchronize

  • 상대방과 연결 생성 시 시퀀스 번호의 동기화를 맞추기 위한 세그먼트

 

FIN; Finish

  • 상대방에게 연결 종료 요청

 

Reserced필드를 사용하여 새롭게 추가 된 세 개의 플래그

명시적 혼잡 통보(Explicit Congestino Notification, ECN)을 위한 플래그

 

자세히 다루지 않고 의미만 대충 넘어가게따

NS

  • ECN에서 사용하는 CWR, ECE필드가 실수나 악의적으로 은폐되는 경우를 방어하기 위함
  • RFC 3540에서 추가

 

CWR

  • 이미 ECE플래그를 받아서, 전송하는 세그먼트 윈도우의 크기를 줄였다

 

ECE

  • ECN echo
  • ECE==1 && SYN==1 : ECN을 사용하겠다.
  • ECE==1 && SYN==0 : 네트워크가 혼잡하니 세그먼트 원도우의 크기를 줄여달라는 요청의 의미

 

 

7. Window Size

  • 크기 : 2byte == 16bits
  • 한 번에 전송할 수 있는 데이터의 양.
  • 2^16== 65535 byte 까지 표현 가능
    • 윈도우 사이즈  1bit == 데이터 1byte 의미
    • 윈도우 최대 크기 == 64KB
    • 1KB =1024byte
  • +) 대용량 고속 통신 환경
    • 비트를 왼쪽으로 시프트 하는 방식-> 윈도우 사이트의 최대 크기를 키움
    • Option필드 -> WSCALE 필드 : 몇 번 시프트 할 것인가에 대한 정보 존재

 

 

8. Checksum

  • 크기 :  2byte==16bits
  • 데이터를 송신하는 중에 발생하는 오류를 검출하기 위함.
  • 검증 방법 : 추후 기재 예정

 

 

9. Urgent Pointer

  • 크기 : 2byte == 16bits
  • 긴급 포인터
  • URG 플래그 == 1 : 수신측은 이 포인터가 가리키고 있는 데이터를 우선 처리

 

10. Options

  • 크기 : 0 byte~40bytes ; 가변적
  • TCP의 기능 확장 시 사용
  • 데이터 오프셋의 필드 값이 5보다 크나 TCP의 옵션을 하나도 사용하고 있지 않을 경우
    => 초과한 bytes 만큼 필드를 0으로 채워주어야 수신측이 헤더의 크기를 올바르게 측정 가능

 

 

 

 

참고 URL

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

 

 

 

728x90