MTU·MSS 계산기 쉽게 이해하기 — 개념과 원리
MTU(최대 전송 단위)는 링크가 한 프레임에 실을 수 있는 가장 큰 IP 패킷 크기이고, MSS(최대 세그먼트 크기)는 그 안에 들어가는 TCP 데이터의 최대 크기입니다. PPPoE, GRE, VXLAN, WireGuard, IPsec 같은 터널을 쓰면 추가 헤더가 MTU를 차지하므로, 이를 조정하지 않으면 큰 패킷이 조각나거나 소리 없이 버려집니다. 이 계산기는 터널 오버헤드를 뺀 내부 MTU, 설정해야 할 TCP MSS, 그리고 회선 위 이더넷 프레임 중 실제 데이터가 차지하는 비율을 보여 줍니다.
계산 방법
- 내부 MTU = 링크 MTU − 터널 오버헤드
- TCP MSS = 내부 MTU − 내부 IP 헤더(IPv4 20바이트, IPv6 40바이트) − TCP 헤더 20바이트
- 이더넷 효율 = MSS ÷ (링크 MTU + 38) × 100%
38바이트는 이더넷 헤더 14, 프레임 검사 시퀀스 4, 프리앰블과 시작 구분자 8, 프레임 간 간격 12를 합한 값입니다. 터널 오버헤드는 대표값으로, PPPoE 8, IPv4 위 GRE 24, VXLAN 50, WireGuard는 IPv4 위 60·IPv6 위 80, AES-GCM을 쓰는 IPsec ESP 터널 모드는 약 73바이트입니다(ESP는 패딩과 옵션에 따라 달라집니다).
원리
각 계층은 위 계층의 데이터를 자기 헤더로 감쌉니다. 봉투 안에 봉투를 넣는 것과 같습니다. 바깥 링크의 한계는 그대로이므로 봉투가 하나 늘 때마다 안쪽 공간이 줄어듭니다. TCP는 연결을 맺을 때 MSS를 알려 상대가 경로에 비해 너무 큰 세그먼트를 만들지 않게 합니다. 라우터와 방화벽은 터널 인터페이스에서 MSS를 작은 값으로 맞추는 "MSS 클램핑"으로 조각화를 막습니다.
예제 풀이
- 입력: 링크 MTU 1,500, 터널 없음, 내부 IPv4
- 내부 MTU: 1,500 − 0 = 1,500바이트
- MSS: 1,500 − 20 − 20 = 1,460바이트
- 프레임 하나의 회선 위 크기: 1,500 + 38 = 1,538바이트
- 효율: 1,460 ÷ 1,538 × 100 = 94.93%
- 참고로 IPv4 위 WireGuard라면 내부 MTU 1,440, MSS 1,400입니다.
| 링크 MTU (바이트) | 내부 MTU |
|---|---|
| 375 | 375 |
| 750 | 750 |
| 1,125 | 1,125 |
| 1,500 | 1,500 |
| 1,875 | 1,875 |
| 2,250 | 2,250 |
| 3,000 | 3,000 |
결과 해석
MSS 값은 MSS 클램핑에, 내부 MTU는 터널 인터페이스 MTU에 씁니다. 일반 이더넷에서 TCP 효율은 약 95%가 상한이며, 점보 프레임(MTU 9,000)을 쓰면 약 99%로 올라갑니다. 작은 핑은 되는데 웹 페이지가 멈춘다면 MTU 불일치가 대표적인 원인입니다.
흔한 실수
- 터널 MTU를 물리 링크 MTU와 같게 두는 경우
- 타임스탬프(12바이트) 같은 TCP 옵션 때문에 실제 데이터가 MSS보다 작아진다는 점을 잊는 경우
- ICMP를 모두 막아 경로 MTU 탐색이 동작하지 않게 하는 경우
자주 묻는 질문
MSS는 왜 보통 1,460인가요?
이더넷 MTU 1,500에서 IPv4 헤더 20과 TCP 헤더 20을 빼면 1,460이 되기 때문입니다.
PPPoE에서는 MTU를 얼마로 하나요?
보통 1,492(1,500 − 8)이며, IPv4 MSS는 1,452입니다.
경로 MTU는 어떻게 알아내나요?
조각화 금지 플래그를 켠 핑을 보내면서 크기를 줄여 통과하는 최댓값을 찾습니다.
출처: IETF RFC 879, The TCP Maximum Segment Size and Related Topics · IETF RFC 1191, Path MTU Discovery · IEEE 802.3, Ethernet standard