
몇 년을 굴러다니다 보면 네트워크 문제의 절반은 눈에 보이지 않는 곳에서 온다는 걸 몸으로 배우게 된다. MTU가 딱 그런 놈이다. 수치 하나, 숫자 하나인데 이걸 잘못 잡으면 현장이 조용히 망가진다. 속도도 애매하고, 끊기는 것도 아닌데 뭔가 이상한 그 느낌. 알고 보면 MTU였던 경우가 한두 번이 아니었다.
MTU가 뭔지 현장 언어로 풀어보면
MTU는 Maximum Transmission Unit, 한 번에 보낼 수 있는 패킷의 최대 크기다. 택배 박스에 비유하면 이해하기 쉽다. 트럭 하나에 박스를 몇 개나 실을 수 있냐가 아니라, 박스 하나의 최대 크기가 얼마냐의 문제다. 박스가 너무 크면 문을 못 통과하고(단편화 또는 드롭), 너무 작으면 왕복 횟수가 늘어나서 시간이 걸린다(오버헤드 증가). 이더넷 기본 MTU는 1500바이트다.
이더넷 표준에서 정해진 기본값이다. 기가비트, 10기가비트 환경에서도 기본값은 여전히 1500이다. 점보 프레임(Jumbo Frame)을 사용하면 9000바이트까지 늘릴 수 있지만, 경로 전체 장비가 지원해야 한다.
현재 MTU 확인하기
일단 지금 뭐로 설정되어 있는지 봐야 한다. 모르고 건드리는 건 지도 없이 산에 들어가는 것과 같다. 설정값 확인이 모든 작업의 출발점이다.
# 리눅스: 인터페이스 MTU 확인
ip link show eth0
# mtu 1500 으로 표시되면 기본값 사용 중
# Windows: 서브인터페이스 MTU 확인
netsh interface ipv4 show subinterfaces
# 모든 인터페이스 한 번에 확인 (리눅스)
ip link show | grep mtu
Path MTU Discovery로 적정값 찾기
내 쪽 MTU만 바꾼다고 되는 게 아니다. 경로 전체에서 병목이 되는 지점의 MTU를 맞춰야 한다. 이걸 Path MTU Discovery라고 한다. 목적지까지 가는 길에서 제일 좁은 문이 어디냐를 찾는 과정이다. 가장 좁은 문 기준으로 박스 크기를 맞춰야 안 막힌다.
# 단편화 금지(-M do) + payload 1472바이트 ping
# 1472 + IP헤더 20 + ICMP헤더 8 = 1500(기본 MTU)
ping -c 4 -M do -s 1472 8.8.8.8
# 실패하면 숫자를 줄여가며 탐색
ping -c 4 -M do -s 1400 8.8.8.8
ping -c 4 -M do -s 1350 8.8.8.8
ping -c 4 -M do -s 1300 8.8.8.8
이진 탐색처럼 줄여가면서 딱 통하는 최대 payload 크기를 찾고, 거기에 28을 더하면 실제 MTU 값이다. VPN 환경이라면 보통 1400~1450 사이에서 통과 여부가 갈린다.
# 스크립트로 자동 탐색 (bash)
#!/bin/bash
TARGET="8.8.8.8"
for SIZE in 1472 1450 1430 1400 1350 1300 1200; do
if ping -c 2 -M do -s $SIZE $TARGET &>/dev/null; then
echo "최대 payload 크기: $SIZE → MTU: $((SIZE + 28))"
break
else
echo "$SIZE 바이트: 실패"
fi
done
MTU 값 변경 적용하기
적정값을 찾았으면 이제 적용이다. 즉시 적용과 영구 적용 두 가지를 구분해서 처리해야 한다. 즉시 적용만 하면 재부팅 시 원래대로 돌아간다.
# 리눅스 즉시 적용 (재부팅 시 초기화됨)
ip link set dev eth0 mtu 1400
# Ubuntu/Debian netplan 영구 적용
# /etc/netplan/01-netcfg.yaml 수정
network:
ethernets:
eth0:
mtu: 1400
version: 2
# netplan 적용
netplan apply
# 적용 확인
ip link show eth0
# RHEL/CentOS nmcli 영구 적용
nmcli con mod "System eth0" ethernet.mtu 1400
nmcli con up "System eth0"
# Windows Server 영구 적용
netsh interface ipv4 set subinterface "이더넷" \
mtu=1400 store=persistent
적용 후 검증하고 모니터링하기
바꿨다고 끝이 아니다. 실제로 나아졌는지 확인해야 한다. 단편화가 줄었는지 Wireshark로 보고, 처리량이 개선됐는지 iperf3으로 측정한다. 수치로 확인되지 않은 개선은 개선이 아니다.
# iperf3 서버 (수신 측)
iperf3 -s
# iperf3 클라이언트 (30초 테스트)
iperf3 -c 서버IP -t 30
# Wireshark 단편화 패킷 필터
ip.flags.mf == 1 || ip.frag_offset > 0
# 커맨드라인에서 단편화 패킷 통계 확인
netstat -s | grep -i fragment
# 리눅스 IP 통계에서 단편화 확인
cat /proc/net/snmp | grep -i frag
마무리 생각
MTU라는 주제를 처음 접했을 때는 그냥 수치 하나 조정하는 거 아닌가 싶었다. 실제로 현장에서 이것 때문에 반나절 넘게 원인을 못 찾고 헤맨 경험이 있고 나서야 비로소 만만한 게 아니라는 걸 알았다.
네트워크는 보이지 않는 곳에서 조용히 어긋나고, 그 어긋남의 원인이 패킷 크기 설정 하나일 수 있다는 게 아이러니하면서도 재미있다. 박스 크기 하나 맞추는 문제인데 그 파급력이 생각보다 훨씬 크다. 현장은 항상 디테일에서 갈린다.
'IT적응기' 카테고리의 다른 글
| 공유기 뒤에 서버를 두고 외부에서 접근하려면 어떻게 해야 할까? (0) | 2026.04.19 |
|---|---|
| MTU(Maximum Transmission Unit) 최적화 패킷 크기 하나 바꿔서 네트워크 성능 올리는 4단계 (0) | 2026.04.18 |
| 컨테이너 네트워크 5가지 핵심 통신 방법– 현장 엔지니어의 실전 기록 (0) | 2026.04.17 |
| SDN 핵심 개념 4가지– 네트워크 자동화 현장 경험기 (0) | 2026.04.17 |
| SDN(소프트웨어 정의 네트워크)하드웨어 없이 네트워크를 바꾸는 기술 (0) | 2026.04.16 |