MTU(Maximum Transmission Unit)란 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 패킷의 크기를 말한다. 이 크기를 기준으로 데이터는 쪼개져서 패킷화된다.
네트워크 경로 상에 있는 아무 장치나 MTU보다 패킷이 크면 그 패킷은 분할될 수도 있다.
패킷을 분할할 수 없어 네트워크 경로 상에 있는 어떠한 라우터나 장치의MTU를 초과할때 분할해서 전달하는 것이 아니라, 전달을 아예 하지 않을 수도 있다.
IPv6
IPv6는 분할을 허용하지 않는다.
IPv4
IPv4 헤더에는 flags라는 필드가 있는데 여기서 bit 이 1이되면 "Don't Fragment" 플래그가 활성화된다라는 의미한다. 이 때 분할은 불가능하다.
MTU와 MSS의 차이를 보면 다음과 같이 MTU는 IP헤더와 TCP헤더의 크기까지 합치지만 MSS(Maximum Segment Size)는 데이터의 크기(payload의 크기)만을 가리킨다.
일반적으로 MTU는 1500바이트이며 MSS는 1460바이트 이다.
따라서 네트워크를 통해 데이터를 보낼 때 MTU가 1500이라도 데이터는 보통 1460바이트 이하의 크기로 보내야 전달이 된다.
다만, TCP를 쓰지 않는다는 등의 이유로 달라질 수도 있다.
ping www.google.com -f -l 1500
앞의 코드는 1500바이트씩 패킷을 보낸다는 의미이며 DF는 패킷분할이 안되는 "Don't Fragment”를 의미한다. 손실률 100%임을 보이고 있다.
ping www.google.com -f -l 1472
여기서 ping의 경우 IP 헤더(20바이트) + ICMP 헤더(8바이트)로 요청을 보내는 것이기 때문에 MSS는 1472(1500 - 28)까지 된다.
따라서 1472바이트씩 데이터를 보내면 올바르게 송수신되는 것을 볼 수 있다.
netsh interface ipv4 show interfaces
MTU가 1500인 것을 알 수 있습니다.
PMTUD(Path MTU Discovery)는 수신자와 송신자의 경로 상에서 장치가 패킷을 누락한 경우 테스트 패킷의 크기를 낮추면서 MTU에 맞게끔 반복해서 보내는 과정을 말한다.