The Cable Guy - Juli 2004

Path Maximum Transmission Unit (PMTU) Black Hole-Router

Aktualisiert: 16. Aug 2004

PMTU Black Hole-Router können für TCP-Verbindungen ein Problem darstellen. Wenn diese Router zu große IP-Pakete erhalten, die sie eigentlich fragmentieren müssten, aufgrund eines gesetzten DF-Flag (Don't Fragment - nicht fragmentieren) aber nicht fragmentieren dürfen, verwerfen sie die Pakete ohne Nachricht an den Versender. Die Folge ist eine fehlgeschlagene Datenkommunikation, auf die Sie noch nicht einmal hingewiesen werden. Lesen Sie in dieser Cable Guy-Kolumne, wodurch sich PMTU Black Hole-Router auszeichnen, wie Sie sie erkennen können und welche Workarounds es für sie gibt.

*
**
Links zu verwandten Themen
**
**
Download

Artikel im Word-Format

Downloadcg0704.doc
89 KB
Microsoft Word-Datei

Artikel im PDF-Format

Downloadcg0704.pdf
53 KB
PDF-Datei
**
Auf dieser Seite
EinleitungEinleitung
Erkennen von PMTU Black Hole-RouternErkennen von PMTU Black Hole-Routern
Lösungen und Workarounds für PMTU Black Hole-RouterLösungen und Workarounds für PMTU Black Hole-Router

Einleitung

Das Internet Protocol (IP) wurde so entworfen, dass es auch in einem Netzwerk funktioniert, in dem unterschiedliche Netzwerktechnologien genutzt werden (zum Beispiel Ethernet und Frame Relay). Jede Netzwerktechnologie hat eine eigene MTU-Größe (Maximum Transmission Unit - maximale Übertragungseinheit) - diese legt die maximale Größe eines gesendeten Rahmens fest. Die IP-MTU ist also die Maximalgröße eines IP-Pakets. Ethernet verwendet eine MTU von 1.526 Byte. Wenn wir Ethernet-Header und -Trailer abziehen (insgesamt 26 Byte), dann beträgt die IP-MTU in einem Ethernet 1.500 Byte.

Um unterschiedliche IP-MTU-Größen von unterschiedlichen Netzwerktechnologien zu berücksichtigen, erlaubt das IP-Protokoll die Fragmentierung von Paketen durch Router. Wenn ein Paket zum Beispiel zu groß ist, um von einem Router über eine bestimmte Netzwerkverbindung (Link) weitergeleitet zu werden, kann der Router den Datenteil des Pakets (Payload) in mehrere IP-Pakete aufteilen (fragmentieren) - solche Pakete werden dann als Fragmente bezeichnet.

Dieses Feature führt dazu, dass IP unabhängig von der Netzwerkschicht arbeiten kann. Aber es kann auch eine hohe Prozessor- und Speicherauslastung verursachen und so Auswirkungen auf die Leistung von IP-Routern haben. Aus diesem Grund wird die Fragmentierung von IP-Paketen durch Router in modernen IP-Netzwerken (inklusive dem Internet) durch die folgenden Maßnahmen verhindert:

Bei UDP-Netzwerkverkehr wird die maximale Paketgröße so gering gewählt, dass eine Fragmentierung nicht notwendig wird.

Bei TCP-Netzwerkverkehr wird das DF-Flag (Don't Fragment - nicht Fragmentieren) im IP-Header auf den Wert 1 gesetzt. So werden IP-Router an der Fragmentierung gehindert.

Wenn eine TCP-Verbindung zwischen zwei Peers aufgebaut wird, tauschen diese ihre jeweilige maximale TCP-Segmentgröße aus (Maximum Segment Size - MSS). Beide TCP-Peers verwenden dann den kleineren der beiden MSS-Werte. Normalerweise entspricht die MSS der MTU minus 40 Byte für den IP- und TCP-Header. Dieser Wert kann sich jedoch durch zusätzliche TCP-Optionen - z. B. Zeitstempel - auf 52 oder mehr Byte erhöhen.

Wenn ein Router ein IP-Paket fragmentieren müsste, er jedoch aufgrund des gesetzten DF-Flags dazu nicht in der Lage ist, hat er die folgenden Möglichkeiten:

Er kann die ICMP-Nachricht 'Destination Unreachable-Fragmentation Needed and DF Set', wie ursprünglich in RFC 792 definiert, zurückschicken und das Paket dann verwerfen.
Das in diesem RFC ursprünglich definierte Nachrichtenformat enthält keine Informationen zur IP-MTU des Links, bei dem die Übermittlung fehlgeschlagen ist.

Er kann die ICMP-Nachricht 'Destination Unreachable-Fragmentation Needed and DF Set' nach RFC 1191 zurückschicken und das Paket dann verwerfen. Dieses neue Nachrichtenformat enthält ein MTU-Feld mit der IP-MTU des Links, bei dem die Übermittlung fehlgeschlagen ist.
RFC 1191 definiert ein Verfahren namens PMTU-Discovery (Path-MTU) - mit diesem können zwei TCP-Peers die IP-MTU dynamisch ermitteln und somit auch die TCP-MSS des Übertragungspfades. Bei Erhalt einer RFC 1191-konformen 'Destination Unreachable-Fragmentation Needed and DF Set'-Nachricht passt TCP die MSS der Verbindung über die IP-MTU minus der TCP- und IP-Headergröße an - so werden die nachfolgenden Pakete nicht mehr verworfen und können ohne Fragmentierung übertragen werden.

Er kann das Paket stillschweigend verwerfen.
Router, die Pakete stillschweigend verwerfen, werden PMTU Black Hole-Router genannt.

Zum SeitenanfangZum Seitenanfang

Erkennen von PMTU Black Hole-Routern

PMTU Black Hole-Router können für TCP-Verbindungen ein Problem darstellen. Die Implementierung des TCP/IP-Protokolls von Microsoft® Windows® XP und Windows ServerT 2003 verwenden standardmäßig das PMTU-Discovery-Verfahren. TCP sendet in diesem Fall Segmente mit gesetztem DF-Flag und erwartet, um die MSS wie benötigt anpassen zu können, RFC 1191-konforme ICMP-Nachrichten ('Destination Unreachable-Fragmentation Needed and DF Set'), die den IP-MTU-Wert enthalten.

Die während des TCP-drei-Wege-Handshakes ausgetauschten Pakete sind nicht groß genug, um von PMTU Black Hole-Routern verworfen zu werden. Wenn jedoch Daten übertragen werden (unter der Annahme, dass die auf der ausgehandelten MSS basierende PMTU größer als die aktuelle PMTU ist), werden die TCP-Segmente stillschweigend verworfen, die größer als die aktuelle PMTU sind.

Es kann z. B. sein, dass Sie mit dem FTP-Kommandozeilentool eine erfolgreiche Verbindung zu einem FTP-Server aufbauen und sich anmelden können. Wenn Sie dann jedoch versuchen, etwas herunterzuladen, verwirft ein PMTU Black Hole-Router auf dem Weg vom FTP-Server zu Ihnen alle TCP-Segmente, die die maximale Größe überschreiten - dies führt dann zu Fehlern und einem fehlgeschlagenen Dateitransfer.

Mit dem Ping-Befehl und der folgenden Syntax können Sie PMTU Black Hole-Router ermitteln:

Ping Ziel -f -l Größe

Ziel ist eine IP-Adresse oder ein Name, der in eine IP-Adresse aufgelöst werden kann.

Die Option -f setzt das DF-Flag auf 1 (aktiv).

Die Option -l gibt die Größe des Datenteils der ICMP-Echo-Nachricht an (Payload).

Größe ist die Zahl der Bytes im Datenteil der ICMP-Echo-Nachricht.

Um den Wert Größe zu berechnen, ziehen Sie von der Größe des TCP-Pakets, das Sie senden möchten, den Wert 28 ab (20 Byte für den IP-Header und 8 Byte für den ICMP-Header der ICMP-Echo-Nachricht). Die folgende Abbildung verdeutlicht dies.

Bild

Mit dem folgenden Befehl können Sie z. B. eine ICMP-Echo-Nachricht von 1.500 Byte Länge senden:

ping Ziel -f -l 1472

Wenn es auf dem Übertragungspfad Links mit kleineren IP-MTUs gibt und ein Router ein 'Destination Unreachable-Fragmentation Needed and DF Set' ICMP-Paket sendet, zeigt Ping die Meldung 'Paket müsste fragmentiert werden, DF-Flag ist jedoch gesetzt' an. Wenn ein Router jedoch in einem solchen Fall die Pakete stillschweigend verwirft (PMTU Black Hole-Router), zeigt Ping die Meldung 'Zeitüberschreitung der Anforderung' an.

Um die mögliche IP-MTU für einen Pfad mit PMTU Black Hole-Routern zu finden, erhöhen Sie schrittweise die Größe des Datenteils. Da die kleinste IP-MTU eines typischen Subnets normalerweise 576 Byte beträgt, beginnen Sie mit einem Datenteil von 548 Byte. Erhöhen Sie den Wert dann um jeweils 100 Byte, bis Sie die tatsächliche PMTU gefunden haben.

Wenn Sie mit ping 10.0.0.10 -f -l 972 z. B. die Meldung 'Antwort von 10.0.0.10' und mit ping 10.0.0.10 -f -l 973 die Meldung 'Zeitüberschreitung der Anfrage' erhalten, dann liegt die tatsächliche PMTU für den Knoten mit der IP-Adresse 10.0.0.10 bei 1.000 Byte (972+28).

Zum SeitenanfangZum Seitenanfang

Lösungen und Workarounds für PMTU Black Hole-Router

Im Folgenden finden Sie eine Liste der möglichen Lösungen und Workarounds für PMTU Black Hole-Router - vom einfachsten Workaround bis zu jenem mit den schwersten Auswirkungen.

1.

Konfigurieren Sie alle Router im Übertragungspfad für routerseitiges PMTU-Discovery
Die einfachste Lösung zur Behebung von Problemen mit PMTU Black Hole-Routern in einem privaten Intranet ist die Konfiguration aller Router für eine serverseitige Unterstützung der RFC 1191. Damit senden die Router die ICMP-Nachricht 'Destination Unreachable-Fragmentation Needed and DF Set' mit der IP-MTU des Links zurück, bei dem die Weiterleitung fehlgeschlagen ist. Diese Konfiguration ist nicht mit hostseitiger Unterstützung von RFC 1191 zu verwechseln - bei dieser verwenden die Router PMTU-Discovery für ihre eigenen TCP-Verbindungen.
Wenn die Kommunikation über das Internet stattfindet, dann ist es normalerweise nicht möglich die Router neu zu konfigurieren. In diesem Fall müssen Sie daher einen der folgenden Workarounds wählen.

2.

Aktivieren Sie die Erkennung von PMTU Black Hole-Routern
DieErkennung von PMTU Black Hole-Routern ist unter Windows 2000, Windows XP und Windows Server 2003 standardmäßig deaktiviert. Mit der folgenden Registrierungseinstellung können Sie einen Router für die serverseitige Unterstützung von RFC 1191 konfigurieren:

Schlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Einstellung: EnablePMTUBHDetect
Typ: REG_DWORD
Wert: 1

Da es diesen Registrierungseintrag standardmäßig nicht gibt, müssen Sie ihn mit einem Registrierungseditor erstellen. Damit die Einstellung aktiv wird, müssen Sie Windows neu starten.

Wenn die Erkennung von PMTU Black Hole-Routern aktiviert ist, versucht TCP nach mehreren nicht bestätigten Übertragungen Segmente mit deaktiviertem DF-Flag (0) zu senden. Wenn ein solches Segment bestätigt wird, wird die MSS verringert. Das DF-Flag wird dann für die folgenden Segmente wieder aktiviert (1). Durch die Aktivierung der PMTU Black Hole-Erkennung steigt die Zahl der maximalen Versuche einer Übertragung eines Segments - dies hat Auswirkungen auf die Gesamtleistung.

3.

Ermitteln Sie die beste IP-MTU und konfigurieren Sie diesen Wert über die MTU-Registrierungseinstellung
Alternativzur Aktivierung der PMTU Black Hole-Erkennung können Sie die tatsächliche PMTU auch manuell über das oben beschriebenen Verfahren feststellen und diesen Wert dann über eine Registrierungseinstellung für die entsprechende Schnittstelle konfigurieren.
Auf diese Art werden Probleme durch PMTU Black Hole-Router vermieden - IP-Pakete werden zwar immer mit gesetztem DF-Flag gesendet (1), sie sind jedoch so klein, dass die PMTU Black Hole-Router die Pakete nicht mehr stillschweigend verwerfen. Wenn Sie die IP-MTU manuell festlegen, bedeutet dies jedoch, dass die kleinere IP-MTU für den gesamten Netzwerkverkehr verwendet wird - inklusive dem Netzwerkverkehr im lokalen Subnetz und dem Netzwerkverkehr, der gar nicht von PMTU Black Hole-Routern betroffen ist.
Nachdem Sie die tatsächliche PMTU ermittelt haben, können Sie mit den folgenden Schritten die IP-MTU einer TCP/IP-Schnittstelle festlegen:

1.

Öffnen Sie den Ordner Netzwerkverbindungen, notieren Sie sich den Namen der entsprechenden Schnittstelle (z. B. ' LAN-Verbindung').

2.

Klicken Sie auf Start und Ausführen. Geben Sie regedit.exe ein und klicken Sie auf OK.

3.

Navigieren Sie zum Schlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control \Network\{4D36E972-E325-11CE-BFC1-08002BE10318}

4.

Unter diesem Schlüssel finden Sie einen oder mehrere weitere Schlüssel. Diese entsprechen den GUIDs (Globally Unique Identifiers) der installieren LAN-Verbindungen. Unter jedem dieser Schlüssel finden Sie einen Unterschlüssel Connection. Öffnen Sie die einzelnen Unterschlüssel GUID\Connection und suchen Sie in jedem nach dem Namen, den Sie sich in Schritt 1 notiert haben.

5.

Wenn Sie den GUID\Connection-Schlüssel gefunden haben, unter dem der Name der LAN-Verbindung angezeigt wird, notieren Sie sich die entsprechende GUID.

6.

Navigieren Sie zum folgenden Schlüssel:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip \Parameters\Interfaces\GUID

7.

Klicken Sie in der linken Konsolenansicht mit der rechten Maustaste auf den GUID-Schlüssel, zeigen Sie auf Neu, und klicken Sie auf DWORD-Wert.

8.

Geben Sie rechts den Namen MTU für den neuen Wert ein und drücken Sie die Eingabetaste.

9.

Klicken Sie doppelt auf den neuen Wert und wählen Sie die Einstellung Dezimal aus. Dann geben Sie die tatsächliche MTU im Feld Wert ein.

10.

Klicken Sie auf OK und schließen Sie den Registrierungseditor.

11.

Starten Sie den Computer neu, damit die neue MTU-Einstellung in Kraft tritt.

4.

Deaktivieren Sie PMTU-Discovery
Wenn es sich als unpraktisch oder unmöglich erweist, passende PMTU-Werte für jede einzelne LAN-Schnittstelle zu ermitteln und zu konfigurieren, bleibt Ihnen als letzter Schritt nur, PMTU-Discovery zu deaktivieren. Dies wird jedoch nicht empfohlen, da in diesem Fall die IP-MTU für alle Remoteziele auf 576 Byte gesetzt wird - was Auswirkungen auf die Leistung haben kann.
Mit der folgenden Registrierungseinstellung können Sie PMTU-Discovery deaktivieren:

Schlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Einstellung: EnablePMTUDiscovery
Typ: REG_DWORD
Wert: 0

Da es auch diesen Registrierungseintrag standardmäßig nicht gibt, müssen Sie ihn mit einem Registrierungseditor erstellen. Damit die Einstellung aktiv wird, müssen Sie Windows neu starten.


The Cable Guy

The Cable Guy
Alle verfügbaren Cable Guy-Kolumnen finden Sie unter http://www.microsoft.com/germany/technet/community/columns/cableguy/cgarch.mspx.


Zum SeitenanfangZum Seitenanfang