6.2 Storing PMTU Information (Speicherung von PMTU-Informationen)
6.2 Storing PMTU Information (Speicherung von PMTU-Informationen)
Im Allgemeinen sollte die IP-Schicht jeden PMTU-Wert, den sie gelernt hat, mit einem bestimmten Pfad verknüpfen. Ein Pfad wird durch eine Quelladresse, eine Zieladresse und einen IP type-of-service (Diensttyp) identifiziert. (Einige Implementierungen zeichnen die Quelladresse von Pfaden nicht auf; dies ist für Single-Homed-Hosts akzeptabel, die nur eine mögliche Quelladresse haben.)
Hinweis: Einige Pfade können durch unterschiedliche Sicherheitsklassifizierungen weiter unterschieden werden. Die Details solcher Klassifizierungen liegen außerhalb des Rahmens dieses Memorandums.
Der offensichtliche Ort, um diese Zuordnung zu speichern, ist als Feld in den Routing-Tabelleneinträgen. Ein Host wird nicht für jedes mögliche Ziel eine Route haben, aber er sollte in der Lage sein, eine Per-Host-Route für jedes aktive Ziel zwischenzuspeichern. (Diese Anforderung wird bereits durch die Notwendigkeit auferlegt, ICMP Redirect (Umleitungs) Nachrichten zu verarbeiten.)
Wenn das erste Paket an einen Host gesendet wird, für den keine Per-Host-Route existiert, wird eine Route entweder aus dem Satz der Per-Network-Routen oder aus dem Satz der Default-Routen gewählt. Die PMTU-Felder in diesen Routeneinträgen sollten auf die MTU der zugehörigen First-Hop-Datenverbindung initialisiert werden und dürfen niemals durch den PMTU Discovery Prozess geändert werden. (PMTU Discovery erstellt oder ändert nur Einträge für Per-Host-Routen). Bis eine Datagram Too Big Nachricht empfangen wird, wird angenommen, dass die mit der anfänglich gewählten Route verbundene PMTU genau ist.
Wenn eine Datagram Too Big Nachricht empfangen wird, bestimmt die ICMP-Schicht eine neue Schätzung für die Path MTU (entweder aus einem nicht-null Next-Hop MTU Wert im Paket oder unter Verwendung der in Abschnitt 5 beschriebenen Methode). Wenn eine Per-Host-Route für diesen Pfad nicht existiert, wird eine erstellt (fast so, als ob eine Per-Host ICMP Redirect verarbeitet würde; die neue Route verwendet denselben First-Hop-Router wie die aktuelle Route). Wenn die mit der Per-Host-Route verbundene PMTU-Schätzung höher als die neue Schätzung ist, wird der Wert im Routing-Eintrag geändert.
Die Paketisierungsschichten müssen über Abnahmen der PMTU benachrichtigt werden. Jede Paketisierungsschicht-Instanz (zum Beispiel eine TCP-Verbindung), die den Pfad aktiv nutzt, muss benachrichtigt werden, wenn die PMTU-Schätzung abnimmt.
Hinweis: Selbst wenn die Datagram Too Big Nachricht einen Original Datagram Header (ursprünglichen Datagramm-Header) enthält, der sich auf ein UDP-Paket bezieht, muss die TCP-Schicht benachrichtigt werden, wenn eine ihrer Verbindungen den angegebenen Pfad verwendet.
Darüber hinaus sollte die Instanz, die das Datagramm gesendet hat, das die Datagram Too Big Nachricht ausgelöst hat, benachrichtigt werden, dass ihr Datagramm verworfen wurde, selbst wenn sich die PMTU-Schätzung nicht geändert hat, damit sie das verworfene Datagramm erneut übertragen kann.
Hinweis: Der Benachrichtigungsmechanismus kann analog zum Mechanismus sein, der zur Bereitstellung der Benachrichtigung einer ICMP Source Quench (Quellenunterdrückungs) Nachricht verwendet wird. In einigen Implementierungen (wie z.B. 4.2BSD-abgeleiteten Systemen) ist der vorhandene Benachrichtigungsmechanismus nicht in der Lage, die spezifische beteiligte Verbindung zu identifizieren, und daher ist ein zusätzlicher Mechanismus erforderlich.
Alternativ kann eine Implementierung die Verwendung eines asynchronen Benachrichtigungsmechanismus für PMTU-Abnahmen vermeiden, indem sie die Benachrichtigung bis zum nächsten Versuch verschiebt, ein Datagramm zu senden, das größer als die PMTU-Schätzung ist. Bei diesem Ansatz sollte die SEND-Funktion fehlschlagen und eine geeignete Fehleranzeige zurückgeben, wenn versucht wird, ein Datagramm mit gesetztem DF-Bit zu SENDEN und das Datagramm größer als die PMTU-Schätzung ist. Dieser Ansatz kann für eine verbindungslose Paketisierungsschicht (wie eine, die UDP verwendet) geeigneter sein, die (in einigen Implementierungen) schwer von der ICMP-Schicht aus zu "benachrichtigen" sein kann. In diesem Fall würden die normalen timeout-basierten Neuübertragungsmechanismen verwendet, um sich von den verworfenen Datagrammen zu erholen.
Es ist wichtig zu verstehen, dass die Benachrichtigung der Paketisierungsschicht-Instanzen, die den Pfad nutzen, über die Änderung der PMTU verschieden ist von der Benachrichtigung einer bestimmten Instanz, dass ein Paket verworfen wurde. Letztere sollte so bald wie möglich erfolgen (d.h. asynchron aus Sicht der Paketisierungsschicht-Instanz), während erstere verzögert werden kann, bis eine Paketisierungsschicht-Instanz ein Paket erstellen möchte. Die Neuübertragung sollte nur für die Pakete durchgeführt werden, von denen bekannt ist, dass sie verworfen wurden, wie durch eine Datagram Too Big Nachricht angezeigt.