TCP 가상 헤더(Pseudo-Header)

TCP 가상 헤더(Pseudo-Header)는 네트워크 통신에서 매우 중요하지만, 이름 그대로 '실제로는 전송되지 않는 가상의 헤더'입니다. 이 헤더는 오직 TCP 체크섬(Checksum)을 계산하여 데이터의 무결성과 정확한 목적지 도달 여부를 검증하기 위한 목적으로만 송신자와 수신자의 메모리 내부에서 임시로 만들어집니다.

 

이미지출처 : http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm

 

1. 가상 헤더가 필요한 이유

TCP는 전송 계층(4계층) 프로토콜로, 원칙적으로 네트워크 계층(3계층, IP)의 정보인 IP 주소에 관여하지 않습니다. 하지만 데이터가 전송되는 과정에서 라우터의 오류 등으로 인해 패킷이 전혀 엉뚱한 목적지(IP)로 배달되었음에도 불구하고, 우연히 TCP 체크섬이 맞아떨어져 정상적인 데이터로 오인되는 치명적인 문제가 발생할 수 있습니다.

 

이를 방지하기 위해, TCP는 자체 헤더뿐만 아니라 IP 헤더의 핵심 정보(출발지 IP, 목적지 IP)를 끌어와 함께 체크섬을 계산합니다. 즉, "이 데이터가 깨지지 않았는지(TCP 무결성)" 뿐만 아니라 "정말 나에게 온 것이 맞는지(IP 정확성)"까지 이중으로 확인하기 위해 가상 헤더를 사용하는 것입니다.

 

2. IPv4 기준 가상 헤더의 구조 (총 12 Byte)

가상 헤더는 IP 헤더에서 가져온 정보들로 구성되며, 다음과 같은 5개의 필드로 이루어집니다.

  • Source IP Address (32 bit / 4 Byte) : 송신자의 IP 주소
  • Destination IP Address (32 bit / 4 Byte) : 수신자의 IP 주소
  • Reserved (8 bit / 1 Byte) : 예약된 필드로 항상 00000000 (0)으로 채워집니다.
  • Protocol (8 bit / 1 Byte) : 상위 프로토콜을 나타냅니다. TCP의 경우 항상 6입니다. (참고로 UDP는 17입니다.)
  • TCP Length (16 bit / 2 Byte) : TCP 헤더의 길이와 TCP 데이터(Payload)의 길이를 합친 전체 TCP 세그먼트의 길이입니다. (단위: 바이트)

 

3. 체크섬(Checksum) 계산 방식

가상 헤더를 이용해 체크섬을 계산하고 검증하는 과정은 다음과 같습니다.

① 송신자(보내는 쪽)의 동작

  • 메모리 상에 임시로 '가상 헤더'를 만듭니다.
  • 가상 헤더 + TCP 헤더 + TCP 데이터를 모두 합칩니다. (이때 TCP 헤더 내의 Checksum 필드는 0으로 채워둡니다.)
  • 합친 데이터를 16비트 단위로 쪼개어 모두 더한 후, 1의 보수(비트 반전)를 취해 체크섬 값을 구합니다.
  • 계산된 체크섬 값을 실제 TCP 헤더의 Checksum 필드에 기록합니다.
  • (중요) 데이터를 전송할 때는 가상 헤더는 버리고, IP 헤더 + 실제 TCP 헤더 + 데이터만 전송합니다.
    앞서 계산한 체크섬의 값은 실제 TCP헤더의 체크섬 필드에 저장되어 전송된다는것을 잊지마세요. 그래야 수신측에서 계산을 해서 정확하게 전달된 패킷인지 확인할 수 있습니다.

② 수신자(받는 쪽)의 동작

  • 패킷을 받으면, 수신자 역시 자신이 받은 IP 헤더 정보를 바탕으로 메모리에 '가상 헤더'를 똑같이 만들어 냅니다.
  • 가상 헤더 + 수신한 TCP 헤더(체크섬 포함) + TCP 데이터를 모두 합쳐 16비트 단위로 더합니다.
  • 전송 중 오류가 없었고 올바른 목적지로 왔다면, 더한 최종 결과값이 모두 1(11111111 11111111)이 됩니다.
    (또는 여기에 1의 보수를 취해 0이 되는지 확인합니다.)
  • 결과가 올바르면 데이터를 수용하고, 그렇지 않으면 패킷이 손상되었거나 잘못 배달된 것으로 판단하여 폐기(Drop)합니다.

 

2022년 정보시스템감리사 83번 문제

 

정답은 4번.