Mit einem Ping die MTU-Size auf einem Pfad ermitteln
IP-Pakete dürfen eine bestimmte Größe nicht überschreiten, sonst ‚passen sie nicht durch‘. Diese Größe ist die Maximum Transmission Unit (MTU).
Man kann sich als Analogie einen 40-Tonnen-LKW vorstellen, der nicht über eine Brücke fahren darf, die seinem Gewicht nicht standhält. Soll der Inhalt des LKW über die Brücke transportiert werden, geht das nur mit mehreren Fuhren eines kleineren LKWs.
Eine zu große MTU Size kann beispielsweise zu dem Phänomen führen, dass teilweise Webseiten nicht korrekt dargestellt werden können, wenn der Client aufgrund eines VPN-Tunnels nicht die Standard-MTU von 1.500 Byte nutzen kann.
Ein anderes Phänomen tritt beim Routing-Protokoll OSPF auf. Dort kommen zwei Router, die adjacent sind, nicht über den EXSTART State hinaus.
Mit dem ping-Befehl kann man feststellen, ob eine bestimmte MTU Size auf dem Weg zum Ziel möglich ist.
Das Prinzip ist dabei folgendes: man schickt ein ICMP-Paket mit der gewünschten Größe und gesetztem Don’t Fragment (DF) Bit. Wenn das Paket zu groß ist, erhält man eine entsprechende ICMP Reply.
Die Syntax für den Test einer bestimmten MTU Size lautet:
router# ping {ip-adresse} size {zu testende MTU-Size} df-bit
So sieht es aus, wenn die MTU Size zu groß gewählt wurde:
router# ping 10.1.2.3 size 1500 df-bit
Type escape sequence to abort.
Sending 5, 1500-byte ICMP Echos to 10.1.2.3, timeout is 2 seconds: Packet sent with the DF bit set
M.M.M
Das M in der Ausgabe weist einen genau auf dieses Problem hin.
Man kann nun manuell die Paketgröße variieren und sich so an die maximal zulässige MTU Size herantasten. Falls man das nicht selber machen möchte, kann das auf einem Gerät mit Cisco IOS / IOS XE / NX-OS auf mit einem Extended Ping ‚automatisiert‘ werden.
Das kann man auch auf einer Linux-Maschine machen:
$ ping -M do -s 1490 10.1.2.3
PING 10.1.2.3 1490(1518) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- example.com ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 1999ms
Auch Windows bietet eine entsprechende Option:
ping -f -l 1500 10.1.2.3