Network/Network

[Network] IPv4 Header 구조와 조각화

Nirsa 2020. 1. 8. 22:51
반응형

 

<IPv4 Header 구조>

IPv4 프로토콜 구조

  • Version : IPv4는 4bits를 사용하며 아직 IPv6는 거의 사용하지 않기 때문에 고정적으로 4bits가 들어감
  • IHL (Header Length) : 실제 헤더 길이 필드, 나누기 4로 계산 후 2진수로 작성하면 값이 나오고 옵션이 붙지 않을 경우 5bits 가 들어감
  • Type of Service (TOS) : 서비스의 품질을 나타내는 필드이지만 현재는 사용되지 않음
  • Total Length : 헤더뿐만이 아니라, 페이로드까지 합쳐진 길이
  • Identification, IP Flags, Fragment Offset : 데이터의 크기가 커져서 짤라졌을때 알아볼 수 있는 값들 

      - Identification : 짤라진 데이터들이 원래 하나였다는걸 알기 위해 똑같은 ID값을 부여함
      - IP Falgs : 3bit로 이루어져 있음
        > x는 사용 안함
        > D 패킷을 보내는 사람이 데이터를 안쪽에서 보내겠다고 명시함, 거의 사용되지 않음(1로 될 경우 최대 단위를 넘어가는 패킷을 보내지 않음)
        > M 최대 단위가 넘는 패킷을 쪼개서 보낼 때 뒤에 다른 패킷이 더 있다는걸 알려주는 필드(최대 단위가 넘어갈 경우 대부분 1로 셋팅됨, 마지막 패킷에는 더이상 뒤에 다른 패킷이 없으므로 0)
       - Fragment Offset : 13bit, 쪼개어진 데이터를 복구할때 필요한 데이터의 순서, 시작 부분으로부터 얼마만큼 떨어져 있다는 값 (일반적으로 IT에서 Offset은 어느 기준으로부터 어느만큼 떨어져 있다.)

  • Time To Live (TTL) : 생명 주기, 각 hop마다 TTL값이 1씩 줄어들며 경로 확인 / 상대 OS 확인등에 자주 사용됨
  • Protocol : 상위 프로토콜이 어떠한것인지 알려주는 필드 (ICMP: 01, TCP : 06, UDP : 17)
  • Header Checksum : 현재 헤더에 오류가 있는지 확인

 

<IPv4의 조각화>

MTU(Maximum Tranmission Unit)보다 크기가 큰 IP 패킷들이 링크롤 통해 전송되려면 여러 개의 작은 패킷으로 쪼개어/조각화 되어 전송 되어야 합니다.

 

즉, 목적이로 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환이 필요하게 되는데, 일단 조각화 되면 최종 목적지에 도착할 때 까지 재조립되지 않는 것이 일반적 입니다.

 

위의 이미지와 같이 MTU인 1500Byte 가 넘어가는 패킷(이미지상 데이터가 큰 ICMP 요청 패킷)은 아래와 같이 조각화가 진행 되어야 합니다.

 

조각화가 된 IPv4 Header

1) MTU가 1500이고 2000byte의 데이터가 있을때, IP 프로토콜의 헤더값(보통 20byte)을 우선적으로 뺀 후 계산을 하게 되면 1480byte, 520byte 가 됩니다.

2) ICMP 요청 헤더는 가장 마지막에 쪼개어진 데이터 앞에 8byte로 붙습니다.

3) 조각화 후 IPv4의 헤더를 다시 붙여서 +20byte인 1500byte, 548byte가 됩니다.

4) 인캡슐레이션 과정에 따라 3계층이 완료 되었으니 2계층 Ethernet 헤더(14byte)가 추가 됩니다.

 

MTU같은 경우 인캡슐레이션 과정에서 2계층까지 오기 전을 기준으로 되어 있습니다.

때문에 일반적으로 MTU가 1500byte로 설정 되어 있으나, 실제 패킷은 1514byte 입니다.

 

 

 

반응형