[Network] MTU 직접 ping 명령어로 실험해보기
1. MTU란 무엇인가?
MTU(Maximum Transmission Unit)는 하나의 패킷이 한 번에 전송될 수 있는 최대 크기를 의미한다. 이 크기를 초과하는 데이터는 조각(Fragmentation)으로 나뉘어 전송되며, 이 때 네트워크 성능이나 안정성에 영향을 줄 수 있다.
일반적으로 이더넷 환경에서의 MTU는 1500바이트이고, 이 안에는 IP 헤더(20바이트)와 ICMP 헤더(8바이트)가 포함되므로, 실제 데이터(payload)는 1472바이트까지 전송 가능하다고 한다.
( 출발지 목적지 정보 등 + 통신 문제 검출을 위한 데이터 + 진짜 전송할 데이터 )
2. 실험 목표
- 리눅스에서 ping 명령어를 이용해 MTU의 최대치 확인하기
- 단편화를 허용하지 않은 상태에서 MTU를 넘는 패킷이 어떻게 처리되는지 확인하기
- MTU 문제 발생시 해결할 수 있는 MTU 셋팅법 습득하기
3. 실험 명령어 및 결과
3-1. 정상 응답 확인 하기
ping -c 1 8.8.8.8
Google DNS로의 기본 연결이 잘 되고 있는지 테스트를 해본다.
참고로 ping 명령어의 -c 옵션으로 정해진 갯수의 패킷을 보내어 ping 테스트를 수행 할 수 있다. ( man ping 참고)
3-2. MTU 한계 테스트
ping -c 1 -s 1472 -M do 8.8.8.8
- -s 1472 : 1472바이트의 데이터를 전송하는 옵션 추가
- -M do : 단편화 금지 (Don't Fragment) 옵션 추가
-> 패킷 손실없이 테스트에 성공하였다. 즉 현재 경로에서 MTU 1500바이트까지 수용이 가능한다는 것을 의미한다.
(데이터 1472바이트 + IP헤더 20바이트 + ICMP 헤더 8바이트 )
3-3. MTU 초과 테스트 ( 1472 +1 = 1473 크기의 패킷 설정)
ping -c 1 -s 1473 -M do 8.8.8.8
-> 오류 메시지로 Message too long 이 반환 된다. 즉 이 결과는 네트워크 경로의 최대 MTU가 1500바이트 이하라는 뜻이며(데이터는 1472바이트 이하), 단편화 없이는 전송이 불가능하다는 것을 보여준다.
즉 데이터의 크기가 크다면, 전송을 위해서 단편화는 발생한다고 봐야 한다. 그리고 이러한 단편화 전송시에는 데이터 유실, 재전송 (비효율), 정보 부족으로 인한 연결 유지 실패, 보안 취약과 같은 문제가 발생할 수 있다.
4. 어떤 문제가 발생하면 MTU 에 대해 의심해봐야 할까?
상황 | 문제 |
VPN 연결은 되지만 느림 | 터널링으로 인해 MTU가 작아짐 (예: 1400) |
웹페이지가 일부만 로딩됨 | Path MTU 탐지 실패 → ICMP 차단으로 발생 가능 |
특정 클라우드 서버만 접속 불가 | 방화벽/NAT 장비가 ICMP Block 중일 수 있음 |
-> MTU는 일반적인 네트워크 연결에서는 잘 드러나지 않지만, VPN, 클라우드, 보안 장비를 통과할 때 문제가 나타날 가능성이 높다!!
5. 그렇다면 어떻게 MTU 문제를 해결할 수 있을까?
5-1. MTU 수동 조정 ( VPN 문제 시, VPN 인터페이스에 직접 MTU 크기를 조정해준다)
sudo ip link set dev [인터페이스이름] mtu 1400
- 보통 VPN 은 암호화 헤더가 크기 때문에 MTU가 1400 또는 1380 정도로 줄여야 안정적 이라고 한다
-> 다음에 VPN 설정시 해봐야겠다! - OpenVPN, WireGuard, IPsec 클라이언트는 MTU 옵션이 있다고 하니 옵션에서 MTU 값 설정을 해서 실험해보도록 해야겠다.
5-2. MSS 조절로 간접 해결 (TCP 최대 세그먼트 크기 설정)
sudo iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360
- MTU 문제로 단편화가 안 되면 TCP 패킷도 잘리는 경우가 있다.
- 이럴 땐 **MSS(Maximum Segment Size)**를 줄여서 MTU를 우회적으로 맞추는 방식 을 사용할 수 있다.
5-3. ICMP 차단 해제 (Path MTU Discovery가 작동하도록)
- MTU를 자동으로 탐지하려면 ICMP "Fragmentation needed" 메시지를 받아야 한다.
- 그런데 방화벽(NAT, 보안 장비 등)에서 ICMP를 막아두면 자동 탐지에 실패해서 연결 끊김 현상 발생한다.
- 따라서 방화벽에서 ICMP type 3 code 4 허용하도록 하거나 클라우드 보안 그룹에서 ICMP "Destination Unreachable" 허용하여 문제를 해결할 수 있다.