핵심 인사이트 (3줄 요약)
- 본질: IPv4 헤더의 두 번째 줄(4바이트)은 뚱뚱한 패킷이 좁은 네트워크 망(MTU 1500 미만)을 통과하기 위해 **여러 조각으로 찢어졌을 때(단편화), 목적지 컴퓨터가 이를 다시 완벽하게 이어 붙일 수 있도록 설명서를 적어두는 '조립 퍼즐 번호판'**이다.
- 식별자 (Identification): 수많은 패킷이 뒤섞여 날아오는 인터넷 세상에서, "우리는 원래 찢어지기 전 하나의 몸(같은 패킷)이었다!"라는 것을 증명하는 **형제 증명서(고유 일련번호)**다.
- 플래그와 오프셋 (Flags & Offset): Flags는 "내 뒤에 조각이 더 남았어(MF)!"라고 알려주는 신호탄이고, Offset은 "나는 원래 덩어리의 1000번째 위치부터 시작하는 조각이야!"라며 조립 순서를 알려주는 좌표 역할을 한다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
-
개념: IPv4 패킷이 라우터를 지날 때, 라우터의 출력 포트 허용 크기(MTU)보다 패킷이 더 크면 패킷은 여러 조각으로 단편화(Fragmentation)된다. 이때 원본을 복원하기 위한 헤더의 3가지 핵심 필드.
-
필요성: 내가 4000바이트짜리 이메일을 보냈는데, 중간에 거쳐야 하는 스위치 선로가 한 번에 1500바이트(이더넷 MTU)밖에 통과하지 못하는 좁은 길이라면? 라우터는 이 4000바이트를 1500, 1500, 1000으로 세 번 찢어서 보낸다. 도착지 컴퓨터는 찢어진 조각 3개를 받아서 풀로 붙여야 하는데, 1) 이게 누구 조각인지, 2) 몇 번째 조각인지, 3) 마지막 조각인지 알 방법이 없으면 영영 복원할 수 없게 된다.
-
💡 비유: 이케아(IKEA) 가구를 샀을 때 상자가 너무 커서 택배 기사님이 박스를 3개로 찢어서 보냈습니다.
- Identification: 박스 3개 모두에 **"주문번호 #999"**라고 적어둬서 같은 가구 부품임을 증명.
- Flags: 1, 2번 박스에는 "뒤에 박스 더 옴(MF)" 스티커를 붙이고, 3번 박스엔 스티커를 안 붙임.
- Fragment Offset: 조립 설명서에 **"이 부품은 1번, 이 부품은 2번"**이라며 순서를 적어둠.
📢 섹션 요약 비유: 두 번째 줄은 도축업자(라우터)가 소 한 마리를 3등분으로 썰어서 부위별로 포장할 때, 나중에 식당 주인이 다시 온전한 소 한 마리로 꿰맬 수 있도록 뼈마다 "원래 위치 좌표(Offset)와 원래 소의 이름(ID)"을 마커로 적어주는 잔인하지만 친절한 시스템입니다.
Ⅱ. 3대 단편화 필드의 세부 원리와 퍼즐 조립 (Deep Dive)
1. Identification (식별자, 16 Bits = 2 Bytes)
송신 PC가 IP 패킷을 하나 만들어 낼 때마다 카운터를 1씩 올려서 찍어내는 고유 일련번호다. (예: 45000)
만약 이 패킷이 라우터에서 3조각으로 찢어지면, 3조각 모두의 헤더 복사본에 Identification 번호가 똑같이 45000으로 복사된다. 도착지 PC는 인터넷에서 쏟아지는 수백만 개의 패킷 중 ID가 45000인 조각 3개를 골라 한 바구니에 담는다.
2. Flags (플래그 비트, 3 Bits)
단편화 통제 신호탄 3비트. 첫 비트는 안 쓰고 0으로 고정, 두 번째가 DF, 세 번째가 MF다.
- DF (Don't Fragment): "나 절대 찢지 마!" (다음 장에서 상세 설명)
- MF (More Fragment): 1번, 2번 조각의 헤더에는 MF 비트가
1로 세팅된다 ("나 뒤에 형제 더 있어! 아직 조립 끝내지 마!"). 반면 마지막 3번 조각은 꼬리 조각이므로 MF 비트가0이 된다 ("내가 꼬리야. 이제 다 모였으니 조립해!").
3. Fragment Offset (단편화 오프셋, 13 Bits)
"나는 찢어지기 전 원본 페이로드의 어디서부터 시작되는 데이터인가?"를 나타내는 상대 좌표값이다.
- 크기 공간이 13비트밖에 안 돼서 1바이트 단위로 적을 수가 없으므로, 항상 8바이트 단위로 나누어 적는다.
┌─────────────────────────────────────────────────────────────┐
│ 4000바이트 패킷의 3단 분리 시나리오 (MTU 1500) │
├─────────────────────────────────────────────────────────────┤
│ │
│ [ 원본 패킷 ] ID: 99 / MF: 0 / Offset: 0 │
│ │
│ ===== 라우터가 3조각으로 가차 없이 찢어버림! ===== │
│ │
│ [ 1번 조각 ] ID: 99 / MF: 1 (뒤에 더 있음) / Offset: 0 │
│ (0 ~ 1479 바이트 데이터 담김) │
│ │
│ [ 2번 조각 ] ID: 99 / MF: 1 (뒤에 더 있음) / Offset: 185 │
│ (185 * 8 = 1480. 즉 1480바이트부터 1480개 담김) │
│ │
│ [ 3번 조각 ] ID: 99 / MF: 0 (내가 꼬리 끝!) / Offset: 370 │
│ (370 * 8 = 2960. 2960바이트부터 나머지 다 담김) │
│ │
│ ▶ 도착지 PC는 ID 99번 바구니에 3개를 모은 뒤, MF=0이 올 때까지 기다 │
│ 렸다가 Offset 0, 185, 370 순서대로 풀로 이어 붙인다! │
└─────────────────────────────────────────────────────────────┘
📢 섹션 요약 비유: 라우터는 프라모델 박스(패킷)를 억지로 3동강 내면서, 각 동강의 표지에 **"이건 건담 모델(ID 99)이고, 내 뒤에 조각 더 있고(MF 1), 이건 몸통 부분(Offset 185)이다"**라고 견출지를 붙여주는 완벽한 파쇄 분배 시스템입니다.