Die MTU ist immer wieder ein Thema beim Troubleshooten von Netzwerkproblemen. Oft herrscht jedoch Unklarheit darüber wie man die genaue MTU zwischen zwei Endpunkten herausfinden kann.
Natürlich ist der “ping”-Befehl hier das Mittel der Wahl, aber mit welcher Ping-Grösse habe ich welche MTU?
Starten wir mal mit dem Ping-Befehl:
ping -f -l 1000 1.1.1.1 (Windows, Dos)
Mit diesem Befehl pingt man den Host 1.1.1.1 mit einer Ping-Size von 1000 Bytes (-l 1000) und setzt dabei das Don’t Fragment-Bit (-f), welches verhindert, dass das Paket fragmentiert wird, sobald die MTU erreicht ist. So kann man sich also mit der Grösse der Ping-Pakete nach oben schaffen und schauen, ab wann ein Paket ohne Fragmentierung nicht mehr das Ziel erreicht. Damit hätte das Paket die Grösse der MTU gerade überschritten.
BTW – unter MacOS lautet der entsprechende Befehl: ping -D -s 1000 1.1.1.1 und unter Linux ping -M do -s 1000 1.1.1.1.
Was hat jetzt die Ping-Size mit der MTU zu tun?
Mit der Ping-Size wird die Grösse des ICMP Payloads angegeben. Das gesamte Paket umfasst aber zusätzlich noch die Header für ICMP, IP und Ethernet und ist somit grösser als die Ping-Size:
Für die MTU wird die Grösse des IP-Pakets (also ohne dem Ethernet-Header) verwendet. Hat man also die maximale Ping-Size gefunden, muss zu diesem Wert noch 28 Bytes (8 Bytes für den ICMP-Header und 20 Bytes für den IP-Header) hinzu gerechnet werden.
Im obigen Beispiel ist die MTU 1500 Bytes. Ein ping mit Grösse 1472 funktioniert noch, mit der Grösse 1473 müsste es fragementiert werden. 1472 bytes + 28 bytes = 1500 bytes.