Skip to content

Latest commit

 

History

History
103 lines (59 loc) · 5.14 KB

tcp_header.md

File metadata and controls

103 lines (59 loc) · 5.14 KB

TCP Header

Header는 정보기술에서 저장되거나 전송되는 데이터 블록의 맨앞에 위치한 보충 데이터를 가리킨다.

데이터 전송에서 헤더를 다르는 데이터는 페이로드(payload), 바디(body)로 불리기도 한다.

쉽게 말하면 frame, packet, segment 앞에 있는 헤더를 읽고 데이터의 주인이 맞는지 확인하는 과정이라고 생각하면 이해하기 쉽다.

TCP 헤더의 크기는 20 ~ 60 바이트다.

Source/Desntination Port Number(각 16비트)

소켓 주소 = ip 주소 + 포트 번호로 소켓은 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔드 포인트다. 소켓은 포트 번호에 바인딩(연결하는 과정) 되어 tcp 레이어에서 데이터가 전달되어야하는 애플리케이션을 식별할 수 있게 해준다.

Source Port Number는 발신지의 주소를 의미하며 Destination Port Number는 목적지의 주소를 의미한다.


Sequence Number (32 비트)

시퀀스 번호는 전송하는 데이터의 순서를 의미하며 이 시퀀스 번호를 통해서 잘라진 segment를 조립하는데 사용한다. 이를 통해 tcp에서는 신뢰성 및 흐름제어 기능을 제공한다고 한다.


Acknowledgement Number (확인 응답 번호 / 승인 번호) (32 비트)

수신을 기대하는 다음 바이트 번호 = 상대방이 보낸 시퀀스 번호 + 1

쉽게 말해서 숫자 200까지 배운다고 치면 100까지 배웠으니 다음에는 101부터 알려달라고 이해하면 쉽다.


HLEN or Data offset(32 비트)

32비트 워드 단위를 사용하며, 32비트 체계에서의 1 word = 4 bytes를 의미한다. 자료에 따라 용어가 다르지만 헤더의 길이 또는 데이터의 시작 위치를 의미한다.


Reserved(3비트)

자세히는 모르겠지만 찾아보니 차후에 사용을 위해 남겨둔 필드다. 기존에는 6비트였지만 혼잡 제어 기능의 향상을 위해 3비트를 flag 필드로 넘겨 NS, CWR, ECE 플래그가 추가했다고 한다.


Flag bits

9개의 비트 플래그로 이 플래그들은 현재 세그먼트의 속성을 나타낸다.

  • URG(Urgent Pointer 긴급 포인터): 필드의 값이 채워져있음을 알리는 플래그다. 송신측 상위 계층이 긴급 데이터라고 알려주면, 긴급비트 URG를 1로 설정하고, 순서에 상관없이 먼저 송신된다.
  • ACK(Acknowledgment 승인 번호): 1로 세팅되면, 확인 번호가 유효함을 뜻한다. 0으로 세팅되면, 확인 번호 미포함이다. 즉, 32비트 크기의 확인 응답 번호 필드가 무시된다.
  • PSH(Push): 수신측에서 이 데이터를 최대한 빠르게 처리하기 위하여 응용 프로그램 까지 바로 전달해달라는 플래그다. 이 플래그가 0이면 수신 측은 자신의 버퍼가 다 채워질 때 까지 기다리고 1이라면 더 이상 연결된 세그먼트가 없음을 의미하기도 한다.
  • RST(Reset 강제 연결 초기화): ESTABLISHED(연결 확립된)된 회선에 강제 리셋을 요청한다.
  • SYN(Synchronize 연결 시작, 동기화): TCP 연결 설정 초기화를 위한 순서 번호 동기화
    • 연결 요청: SYN = 1, ACK = 0 (Syn 세그먼트)
    • 연결 허락: SYN = 1, ACK = 1 (SYN + ACK 세그먼트)
    • 연결 설정: ACK = 1 (ACK 세그먼트)
  • FIN(Finish 종료): 상대방과 연결을 종료하고 싶다는 요청

NS, CWR, ECE 플래그는 네트워크의 명시적 혼잡 통보(Explicit Congestion Notofication, ECN)을 위한 플래그다.

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

Window Size (16비트)

윈도우 사이즈 필드에는 한 번에 전송할 수 있는 데이터의 양을 의미하는 값을 담는다. 16비트이기 때문에 2^16 = 65535 이라는 범위를 가진다.


Checksum (16비트)

체크섬은 데이터를 송싱하는 중 발생할 수 있는 오류를 검출하기 위한 값이다.

16비트는 너무 길어서 8비트로 예를 들면 
1의 보수(쉽게 주어진 값이 1이면 0인 반대값으로 생각)를 취하고, 그 합에 대한 결과를 전송하면 수신측에서, 같은 합을 해보아서 오류를 검출하는 방식이다.

  10001010
+ 01110101
-----------
  11111111

검사합의 값이 0 이면 오류 없음, 0 이 아니면 오류 있음

Urgent Pointer (16비트)

tcp segment에 포함된 긴급 데이터의 마지막 바이트에 대한 일련 번호다.


Options(0 ~ 40 바이트)

TCP 연결 관리 기능을 확장시키는데 주로 사용되는 옵션 필드다.