핵심 인사이트 (3줄 요약)
- 본질: 단편화(Fragmentation)는 뚱뚱한 IP 패킷이 자신이 통과해야 할 네트워크 선로의 좁은 문(MTU)을 통과하지 못할 때, 라우터가 임의로 패킷의 알맹이(페이로드)를 여러 개의 작은 조각으로 칼질하여 나누어 보내는 처리 과정이다.
- 재조립의 주체 (목적지 호스트): 중간에 있는 라우터들은 패킷을 찢기만 할 뿐, 다시 붙여주지 않는다. 조각난 패킷들을 최종 목적지 PC가 모두 수신한 뒤에야, IP 헤더의 식별자(ID)와 오프셋(Offset) 정보를 바탕으로 원래의 거대한 패킷으로 **재조립(Reassembly)**한다.
- 성능 저하의 주범: 단편화가 일어나면 라우터의 CPU 연산 부하가 커지고, 조각 중 단 1개만 유실되어도 전체 조각을 전부 버리고 처음부터 다시 전송(Retransmission)받아야 하므로, 현대 네트워크 설계의 1원칙은 **"애초에 단편화가 일어나지 않게 패킷을 작게 만들어 보내는 것"**이다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
-
개념: IP 패킷의 크기가 통과해야 할 링크의 최대 전송 단위(MTU)보다 클 때, 패킷을 여러 개의 더 작은 IP 패킷으로 쪼개는 3계층의 동작 메커니즘.
-
필요성: 세상의 모든 네트워크가 이더넷(MTU 1500)이라면 좋겠지만, 구형 망인 X.25(MTU 576), 토큰 링(MTU 4464) 등 선로마다 허용하는 짐의 크기가 제각각이다. 4000바이트 크기의 패킷이 토큰 링을 잘 가다가 갑자기 이더넷 구간을 만나면, 문이 1500바이트밖에 안 돼서 꽉 끼어버린다. 데이터를 버릴 순 없으니, 라우터가 땀을 뻘뻘 흘리며 4000바이트짜리 짐을 1500, 1500, 1000 사이즈로 찢어서 3개의 새로운 IP 패킷 봉투에 나눠 담는 수고가 필수적이었다.
-
💡 비유: 단편화는 이사할 때 **"큰 장롱을 좁은 방문으로 빼내는 작업"**과 같습니다. 장롱이 문에 걸리면 일꾼(라우터)이 드라이버를 가져와 장롱을 3조각으로 분해(Fragmentation)해서 옮깁니다. 이삿짐이 새 집에 도착하면 집주인(수신 PC)이 설명서(Offset)를 보고 다시 장롱을 원래대로 조립(Reassembly)해야 합니다.
📢 섹션 요약 비유: 라우터는 통과 구멍이 작은 우체통 앞에서, 고객이 보낸 거대한 택배 박스를 가차 없이 칼로 찢어 **여러 개의 작은 박스로 재포장해 구겨 넣는 "무자비한 포장 센터"**입니다.
Ⅱ. 단편화의 수학적 규칙과 치명적 단점 (Deep Dive)
1. 단편화 규칙: 8바이트의 마법 (Fragment Offset)
라우터가 패킷을 찢을 때 마음대로 찢는 것이 아니다. IP 헤더의 '단편화 오프셋' 필드는 13비트의 공간밖에 없어서 숫자를 1바이트 단위로 적어 넣을 수가 없다.
- 따라서 라우터는 페이로드를 찢을 때 무조건 8의 배수(8 Bytes Boundary) 크기로만 찢어야 한다.
- 예시: 1500 MTU 선로를 통과할 때, 헤더 20바이트를 빼면 1480바이트의 데이터를 담을 수 있다. 우연히도 1480은 8로 나누어떨어진다 ($1480 \div 8 = 185$). 따라서 첫 번째 조각은 1480바이트 덩어리로 썰리고 오프셋은
0, 두 번째 조각은 그다음 데이터가 실리며 오프셋은185가 된다.
2. 재조립 타임아웃 (Reassembly Timeout)
목적지 PC가 3개의 조각을 받아야 재조립이 완성되는데, 1번과 2번 조각만 오고 3번 조각이 인터넷 어딘가에서 증발(Drop)해 버렸다.
- PC는 "언젠가 3번이 오겠지?"라며 버퍼 메모리에 1, 2번을 들고 무작정 기다린다.
- 시간이 15초 이상 흐르면(Reassembly Timeout), PC는 "기다리다 지쳤다! 이 조각들은 다 쓸모없어!"라며 1, 2번 조각마저 쓰레기통에 폐기해 버린다.
- TCP는 원본 패킷이 안 온 줄 알고 원본 4000바이트 전체를 처음부터 다시 재전송한다.
┌─────────────────────────────────────────────────────────────┐
│ 단편화의 '전부 아니면 무(All or Nothing)' 딜레마 │
├─────────────────────────────────────────────────────────────┤
│ │
│ [ 송신자 ] ──▶ (원본 4000B 전송) ──▶ [ 라우터 (MTU 1500) ] │
│ │ │
│ ┌─ (조각 1) ── (조립 대기 중) ─┐ │
│ [ 수신자 PC ] ◀────┼─ (조각 2) ── (조립 대기 중) ─┤ │
│ └─ (조각 3) ── (X 분실 X) ─┘ │
│ │
│ * 결과: 조각 3 하나만 잃어버렸는데, 수신자 PC는 15초 뒤에 조각 1, 2 │
│ 마저 폐기해 버림. 결국 4000B "통째로 다시 보내라"고 윽박지름. │
└─────────────────────────────────────────────────────────────┘
3. 현대 네트워크의 회피 전술
단편화는 라우터의 CPU를 갉아먹고(라우터 성능 저하), 패킷 하나만 분실돼도 망 대역폭 전체를 낭비하는 재앙을 부른다. 그래서 현대의 컴퓨터와 서버들은 아예 TCP/IP 통신을 시작할 때, 목적지까지 가는 길목 중 가장 좁은 문(Path MTU)을 미리 알아낸 다음, 처음부터 단편화가 발생하지 않을 크기(보통 1460 바이트 이하)로 미리 잘게 썰어서 패킷을 쏘는 방식을 채택했다. 이를 통해 라우터가 칼질하는 수고를 원천적으로 없앴다.
📢 섹션 요약 비유: 단편화는 3조각으로 나뉜 보물지도와 같습니다. 2조각을 먼저 찾아도 마지막 1조각을 잃어버리면 보물(데이터)을 찾을 수 없으므로, 여태껏 힘들게 찾은 2조각마저 찢어버리고 지도를 처음부터 통째로 다시 그려야 하는 엄청난 삽질을 유발합니다.