Allgemein:PMTU-DiscoveryPMTU-BlackHoles

Aus Fortinet Wiki
Zur Navigation springen Zur Suche springen


Was ist die MTU Grösse?

Wenn Traffic über das Netzwerk gesendet wird so wird durch die Devices im Netzwerk die max MTU (Maximum Transmission Unit) ausgehandelt. Die Settings auf den Devices (Netzwerk Interface) bestimmen die max. MTU Grösse dh. das grösstmögliche Packet (Frame) das über das Netzwerk versendet werden kann. Die Standard Werte sind:

       PMTU Discovery-PMTU BlackHoles-01.jpg

Beispiel
Ein Server sendet über TCP Daten zu einem Empfänger. Der Standard Wert gemäss Tabelle wäre 1500. Die Grösse 1500 beinhaltetdie sogenannten "Ethernet Headers" und "Trailers". Der TCP Header benötigt 20 bytes sowie zusätzlich 20 bytes für den IP Header. Somit ergiebt sich eine max. mögliche Grösse von 1460 bytes für den sogenannte "Data Payload".

In welchem Zusammenhang steht "PMTU Discovery" und die MTU Grösse?

Wie schon erwähnt, wenn ein Server über TCP Daten versendet muss die max MTU Size bestimmt werden. Diese wird bestimmt durch die Devices die für die Datenversendung zuständig sind (Uebertragungsweg). Es kann vorkommen das Router eine kleinere MTU Size anbietet und somit der Server der die Daten versendet seine MTU Size anpassen muss. In dieser Situation können folgende Szenarien eintreten:

       Fragmentation          Wenn der Server/Device der die Daten versendet kein DF bit (Don't Fragment) gesetzt hat,
                              werden die Daten Fragementiert (in kleinere Packete aufgeteilt).
       
       Path MTU Discovery     Wenn das DF bit (Don't Fragment) korrekt gesetzt wurde, sendet/en die Netwzerk Devices 
                              ein ICMP (Ping) Packet zurück um deren MTU Size mitzuteilen.

NOTE
Systeme in der heutigen Zeit benützen keine Fragmentation da der "overhaed" zu gross ist (senden von vielen kleinen Packeten anstelle von einem grossen Packet).

Wenn der Netzwerk Device zB ein Router das Frame erhält und dieses ist grösser als die MTU Size des Servers der die Daten versendet so wird das DF bit (Don't Fragment) überprüft. Wenn das DF bit (Don't Fragment) gesetzt ist wird das Packet nicht Fragmentiert. Dies bedeutet der Router kann/darf die Packete nicht Fragmentieren müsste dies aber um die Uebermittlung durchzuführen da die MTU Size nicht übereinstimmt. Aus diesem Grund sendet der Router dem Server der der die Daten versendet ein ICMP Packet zurück mit derNachricht "Fragmentation Needed". Diese Nachricht die zurückgesendet wird besagt nichts anders als das der Router für die erfolgreiche Uebermittlung die Daten Fragmentieren müsste jedoch da das DF bit gesetzt ist (Don't Fragment) dies nicht durchgeführt werden kann. Gleichzeitig wird durch die Uebermittlung des ICMP Packets zum Server der die Daten versendet die mögliche MTU Size mitgeteilt die nötig wäre um die Daten erfolgreich zu übermitteln. Nach RFC 1911 wird nun der Server die MTU Size auf seiner Seite anpassen und abermals die Uebermittlung starten. Nun wird der Netzwerk Device die neue MTU Size akzeptieren und die Daten übermitteln ohne diese zu Fragmentieren.

       PMTU Discovery-PMTU BlackHoles-02.jpg

Was bedeutet oder was ist "PMTU Black Hole"?

"PMTU Black Hole" bedeutet, dass der ICMP Request der vom Netzwerk Device zB dem Router zurück zum Server -der die Daten versendet- bei diesem nicht ankommt um diesem Server mitzuteilen welche MTU Grösse benutzt werden soll. Der Grund dafür können Netwerk Devices sein die den ICMP Request zurück zum Server der die Daten versendet nicht zulassen (zB Firewalls). In dieser Situatuion wartet der Server der die Daten versendet auf das ACK (acknowledgment) des Netwerk Devices jedoch dieses kommt durch die geblockte Verbindung nicht an. Ebenfalls wartet die Destination auf die Packete die die Daten erhalten soll vom Server der die Daten versendet auf eine Antwort. Da dies nicht geschieht wird die Session beendet und die Datenversendung ist nicht möglich. Nachfolgend 2 Situationen für "PMTU Black Hole":

       PMTU Discovery-PMTU BlackHoles-03.jpg

Diese Situationen können weitere Probleme verursachen wie zB das User/Server eine Site nicht erreichen können. Oft sind SSL basierende WebSites betroffen da der "Data Payload" von SSL einen grösseren Ueberhang erzeugt.

Oft kommt es vor das zwar eine Seite erreichbar ist jedoch enorm viel Zeit vergeht bis diese geladen ist. Der Grund kann sein da die Situation einer "PMTU Black Hole" eintrifft. In so einem Fall empfängt der Server -der die Daten versendet- kein ACK (vom Netwerk Device zB Router) um seine Daten zu versenden, da der ICMP auf dem Weg zurück zum Server -der die Daten versendet- geblockt wird. In so einem Fall wird -nach mehrmaligen Versuchen- der Server der die Daten versendet, autom. die MTU Grösse selber anpassen (verkleinern) um dennoch die Daten zu versenden. Das Phänomen das entsteht ist eine enorme Einbusse der Performance zB langsames laden einer WebSite da der Vorgang zur Anpassung der MTU immer wieder durchgeführt wird.

Troubleshooting "PMTU Black Hole"?

Anhand eines einfachen Pings kann versucht werden den Netzwerk Device (zB Router) zu finden auf dem die " PMTU Black Hole" existiert. Der Vorgang für das Troubleshooting ist nichts anderes als das Ping's abgesetzt werden zum Netzwerk Device und zwar in vers. Grössen sowie DF bit (Don't Fragment) aktiviert um zu sehen ob der Netzwerk Device die richtige Grösse zurücksendet/antwortet (Korrekte ICMP Nachricht sowie MTU Grösse). Dadurch findet man raus ob eine "PMTU Black Hole" existiertund wo sich diese befindet. Der Ping wird folgendermassen ausgeführt:

       ping [destination ip/name] -f -l [MTU Size minus IP/ICMP Header]  
       
       Die Optionen die im Zusammenhang mit dem Ping benutzt werden sind:
       
       -l Setzt die Grösse des Payload mit dem ICMP Packet.
       -f Aktiviert DF (Do Not Fragment) bit. 
       
       NOTE Um ein ICMP Packet zu kalkulieren, dass die Grösse von 1500 MTU 
            aufweist muss folgendes berücksichtigt werden.
       
       MTU = 20 Bytes (IP Header) + 8 bytes (ICMP Header) + 1472 Bytes (ICMP Payload)
       
       Dies bedeutet, dass wenn man die max. zu versendete Grösse der MTU Kalkulieren 
       will, man 28 bytes von der max. MTU Grösse abziehen muss. Die bedeutet wenn 
       die MTU Grösse 1500 versendet werden möchte, setzt man folgenden Befehl ab:
       
       ping [destination ip/name] -f -l 1472
       
       Die Antwort wird folgendermassen intepretiert:
       
       - Der Ping ist erfolgreich da der Device antwortet - Jeder "hop" unterstützt eine MTU von 1500
       
       - Die Antwort auf den Ping die man erhält ist: "Packet needs to be fragmented but DF set"
         Dies bedeutet, dass der Netzwerk Device richtig geantwortet hat mit der richtigen ICMP Antwort.
       
       - Die Antwort auf den Ping ist "Request timed out". Der Netzwerk Device hat keine ICMP Nachricht
         zurückgesendet für die PMTUD.

wenn nun die ICMP Payload Grösse (-l Option) Vergrössert/Verkleinert wird kann herausgefunden werden welche MTU die Netzwerk Devices unterstützen damit die max. MTU benützt werden kann.