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 파일을 전송하는 도중 패킷 하나가 깨졌습니다. 다시 보내야 하는 양은?
🤔 확인 문제
작은 페이지는 잘 열리는데 이미지 업로드만 중간에 멈춥니다. 가장 먼저 의심할 것은?