Internet Protocol

youngwiki
Pinkgo (토론 | 기여)님의 2025년 4월 11일 (금) 13:21 판 (IPv4 Datagram Format)

상위 문서: Network Layer

개요

IP(Internet Protocol)은 인터넷에서 패킷을 송신하기 위한 network layer의 프로토콜이다.

IPv4 Datagram Format

Figure 1. IPv4 Datagram format
Figure 1. IPv4 Datagram format

인터넷의 network layer의 데이터 단위는 데이터그램(datagram)이다. 데이터그램의 데이터 그램은 figure 1과 같이 구성되어있다. 이때 이 문서를 이해하기 위해서는, fragmentation/reassembly의 구현을 위한 16-bit identifier, flgs, fragment offset32비트 IP 주소를 나타내기 위한 헤더 필드가 존재가 존재한다는 것만 기억하면 된다.
이때 datagram의 IP 헤더필드는 20bytes이고, TCP 헤더필드는 20bytes이다. 따라서 datagram의 overhead40bytes + app layer overhead이다.

Fragmentation

모든 링크(link)들은 각각의 해당 link-level이 운반할 수 있는 최대 frame[1]의 크기MTU(Max Transfer Size)를 가지고 있다. 각각의 IP 데이터그램은 한 라우터(router)에서 다음 라우터로 이동할 때 link layer의 frame에 캡슐화되기 때문에, MTU는 IP 데이터그램의 크기에 대해 제약을 가한다. 이로 인해 발생하는 진짜 문제는 송신 호스트(host)에서 수신 호스트로 패킷이 이동할 때 거쳐가는 링크의 MTU들이 서로 다른 수 있다는 것이다. 예를 들어, 다양한 링크를 연결하는 라우터에서 한 링크에서 IP 데이터그램을 수신했을 때, 출력 링크의 MTU가 입력 링크의 MTU보다 작으면 문제가 된다. 이 경우 문제는 커다란 IP 데이터그램을 그보다 작은 크기의 MTU를 가지는 링크에 어떻게 전달할지이다.
이때 해결책은 IP 데이터그램의 페이로드를 두 개이상의 더 작은 IP 데이터그램에 나누어 담고(fragment), 각각의 쪼개진 데이터그램을 frame으로 캡슐화해서 전송하는 것이다. 이때 쪼개진 데이터그램을 fragment라고 한다. 이때 fragment들을 라우터에서 합쳐서 다시 이를 보내는 것은 네트워크 성능을 저하시킬 수 있기 때문에, 수신측 호스트에서 fragment들을 받아서 원래대로 재조립(reassemble)한다. 이때 reassemble을 수신측 호스트가 수행할 수 있도록, IP 데이터그램 헤더에는 identifier, flag, fragmentation offset 필드가 존재한다.
Figure 2는 fragmentation과 reassembly가 일어나는 간단한 상황을 보여준다. 그리고 figure 3은 해당 상황에서 어떻게 데이터그램이 쪼개지는지 보여준다. 해당 상황은 4000bytes의 크기를 가지는 데이터그램은 MTU가 1500bytes인 링크에 전송하고자 할 때이다. Figure 3의 각 데이터그램에 있는 필드들의 역할은 다음과 같다.

  • length: datagram의 전체길이
  • ID: 원래 데이터그램의 고유 식별자
  • fragflag: 마지막 fragment이면 0, 아니면 1
  • offset: 데이터그램의 데이터 부분을 기준으로, 8bytes 단위로 몇 번째인지를 의미한다.

이를 바탕으로 각각의 fragment들의 헤더필드가 어떻게 설정되는지를 살펴보면 다음과 같다.

fragment 1
헤더 필드 이유
length 1500 MTU 한도인 1500 바이트까지 전송 (1480 데이터 + 20 헤더)
ID x 동일한 원래 데이터그램이므로 ID는 같음
fragflag 1 뒤에 조각이 더 있음을 나타냄 (More Fragments = 1)
offset 0 데이터의 시작 위치는 0바이트 → 0 / 8 = 0
fragment 2
헤더 필드 이유
length 1500 MTU 한도인 1500 바이트까지 전송 (1480 데이터 + 20 헤더)
ID x 동일한 원래 데이터그램이므로 ID는 같음
fragflag 1 뒤에 조각이 더 있음을 나타냄 (More Fragments = 1)
offset 185 데이터의 시작 위치는 1480바이트 → 1480 / 8 = 185
fragment 3
헤더 필드 이유
length 1000 남은 데이터는 4000 - 2960 = 1040 (1020 데이터 + 20 헤더)
ID x 동일한 원래 데이터그램이므로 ID는 같음
fragflag 0 마지막 조각이므로 더 이상 남은 조각 없음 (MF = 0)
offset 370 데이터의 시작 위치는 2960바이트 → 2960 / 8 = 370

각주

  1. Link layer에서의 데이터 단위이다.