Optimierung der maximalen TCP-Segmentgröße

Die maximale Größe von Paketen, die TCP sendet, kann erhebliche Auswirkungen auf die Bandbreite haben, da es effizienter ist, die größtmögliche Paketgröße im Netz zu senden.

TCP steuert diese maximale Größe, die als maximale Segmentgröße (Maximum Segment Size, MSS) bezeichnet wird, für jede TCP-Verbindung. Bei direkt verbundenen Netzen berechnet TCP das MSS unter Verwendung der MTU-Größe der Netzschnittstelle und subtrahiert dann die Protokollheader, um die Größe der Daten im TCP-Paket zu erhalten. Ethernet mit einem MTU-Wert von 1500 würde beispielsweise zu einem MSS von 1460 führen, nachdem 20 Byte für IPv4 -Header und 20 Byte für TCP-Header subtrahiert wurden.

Das TCP-Protokoll enthält einen Mechanismus für beide Enden einer Verbindung, um das MSS zugänglich zu machen, das bei der Verbindungserstellung über die Verbindung verwendet werden soll. Jedes Ende verwendet das Feld OPTIONS im TCP-Header, um eine vorgeschlagene MSS zugänglich zu machen. Das ausgewählte MSS ist der kleinere der von den beiden Enden bereitgestellten Werte. Wenn ein Endpunkt seinen MSS nicht bereitstellt, werden 536 Byte angenommen, was die Leistung beeinträchtigt.

Das Problem ist, dass jeder TCP-Endpunkt nur die MTU des Netzes kennt, mit dem er verbunden ist. Sie weiß nicht, wie groß die MTU anderer Netze zwischen den beiden Endpunkten sein könnte. TCP kennt also nur das richtige MSS, wenn sich beide Endpunkte im selben Netz befinden. Aus diesem Grund verarbeitet TCP die Werbung für MSS je nach Netzkonfiguration unterschiedlich, wenn das Senden von Paketen, für die eine IP-Fragmentierung erforderlich sein könnte, über kleinere MTU-Netze vermieden werden soll.

Der Wert von MSS, der von der TCP-Software während des Verbindungsaufbaus zugänglich gemacht wird, hängt davon ab, ob das andere Ende ein lokales System in demselben physischen Netz ist (d. h., die Systeme haben dieselbe Netznummer) oder ob es sich in einem anderen (fernen) Netz befindet.