2강 / 20강
패킷 — 편지를 조각내 봉투에 넣기
데이터를 나르는 기본 단위
손님이 상품 사진 하나를 봅니다. 2MB짜리 JPG예요. 이 2MB를 한 번에 랜선으로 밀어 넣으면 어떻게 될까요?
그동안 다른 손님은 아무것도 못 합니다. 랜선은 하나뿐이니까요. 게다가 중간에 한 비트라도 깨지면 2MB를 통째로 다시 보내야 합니다.
그래서 네트워크는 데이터를 1500바이트 안팎의 조각으로 잘라 보냅니다. 이 조각 하나하나가 패킷(packet)이에요.
통째로 보내기 😵
2MB ───────────────▶ (다른 손님은 대기) 1비트 깨짐 → 2MB 재전송
조각내 보내기 😊
1500B ▶ 1500B ▶ 1500B ▶ … (중간중간 다른 손님도 끼어듦) 1조각 깨짐 → 1500B만 재전송
봉투 안에 봉투 안에 봉투 — 캡슐화
택배를 보낼 때를 떠올려 보세요. 물건을 비닐에 넣고, 그걸 상자에 넣고, 상자에 송장을 붙입니다. 네트워크도 똑같습니다. 이걸 캡슐화(encapsulation)라고 불러요.
HTTPGET /products/12 — 진짜 하고 싶은 말
TCP+ 출발 포트 51422 · 도착 포트 80 · 순서 번호
IP+ 출발 203.0.113.88 · 도착 192.168.10.10
Ethernet+ 출발 MAC · 도착 MAC
받는 쪽은 정확히 거꾸로 벗깁니다. 랜카드가 이더넷 봉투를 뜯고,
커널이 IP 봉투를 뜯고, TCP 봉투를 뜯고, 마지막에 nginx가 GET /products/12 를 읽습니다.
진짜 패킷을 들여다봅시다
tcpdump 는 랜카드를 지나가는 패킷을 그대로 보여 주는 도구입니다.
장애 났을 때 "진짜로 요청이 오긴 오는가?" 를 확인하는 최후의 무기예요.
우리 서버의 80번 포트를 지나는 패킷을 엿봅니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
MTU — 봉투의 최대 크기
이더넷은 한 프레임에 1500바이트까지만 담기로 약속했습니다. 이 한도를 MTU(Maximum Transmission Unit)라고 합니다.
MTU가 왜 실무에서 중요하냐면 — "큰 파일만 안 올라가요" 라는 기묘한 장애의 범인이기 때문입니다. 작은 요청은 잘 되는데 이미지 업로드만 멈춘다면 MTU를 의심하세요. VPN이나 터널을 쓰면 봉투에 봉투를 또 씌우느라 실제 쓸 수 있는 크기가 줄어듭니다.
mtu 1500 이라고 적힌 부분을 찾아보세요.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
이 셀은 브라우저 안의 파이썬으로 실행됩니다.
Python
브라우저 안에서 실행 (계산용)
🤔 확인 문제
2MB 파일을 전송하는 도중 패킷 하나가 깨졌습니다. 다시 보내야 하는 양은?
해설 조각내 보내는 가장 큰 이득이 바로 이것입니다. 깨진 조각 하나만 다시 보내면 됩니다. 누가 그것을 알아채고 다시 보내 달라고 할까요? 6강의 TCP입니다.
🤔 확인 문제
작은 페이지는 잘 열리는데 이미지 업로드만 중간에 멈춥니다. 가장 먼저 의심할 것은?
해설 "작은 것은 되는데 큰 것만 안 된다"는 MTU 문제의 교과서적인 증상입니다. 봉투 크기를 넘는 패킷이 조각나야 하는데, 중간 장비가 조각내기를 거부하고 조용히 버리면 전송이 멈춥니다.