TCP/IP-Tuning

Seite 6: Byte-Knauserei

Inhaltsverzeichnis

Ein TCP-Wert, an dem gerne gedreht wird, ist die MTU, die Maximum Transmission Unit. MTU gibt die maximale Größe eines Pakets an, das ein Netzwerk ohne Fragmentierung befördern kann. Dabei gibt es widerstreitende Interessen bezüglich der optimalen Größe.

Je größer die MTU, desto günstiger das Verhältnis von TCP/IP-Header zu Nutzdaten. Ein TCP/IP-Header besteht aus 40 Byte. Beim Schritt von einer kleinen MTU (zum Beispiel 576 Byte) zu einer großen MTU von 1500 Byte sinkt der Header-Anteil von 6,9 auf 2,7 Prozent.

Traffic Shaper wie NetLimiter begrenzen die Upload-Geschwindigkeit beliebiger Programme und erzwingen so eine kooperative Nutzung eines Internet-Anschlusses.

Es gilt aber auch: Je größer ein Paket, desto länger braucht es für die Übertragung. Wenn nun interaktive Anwendungen parallel mit einem Upload laufen, etwa eine ssh-Sitzung oder ein VoIP-Telefonat, kommt es vor, dass das ssh-Paket, das ein einziges Eingabezeichen befördert, hinter einem 1500 Byte großen Upload-Paket eingereiht wird. Das kleine Paket kann also erst danach verschickt werden. Bei einer Upstream-Geschwindigkeit von 192 kBit/s (24 kByte/s) dauert das immerhin 62 ms. Das kann bei interaktiven Anwendungen wie eben einer ssh-Sitzung oder beim Telefonieren schon störend sein. Ein kleineres Paket von 576 Byte macht den Weg hingegen schon nach 24 ms frei – der gemischte Verkehr läuft also flüssiger ab. Davon profitieren beispielsweise Online-Spiele.

Steigende Upstream-Bandbreiten mildern dieses Problem zunehmend. Schon MTUs über 1500 Byte sind untypisch und werden kaum zu realisieren sein, da die Ethernet-Leitungen, die viele Provider intern für die Weiterleitung einsetzen, maximal 1500 Byte pro Paket transportieren. Zudem dürfen PPPoE-Pakete nur maximal 1492 Byte groß sein, sodass ein DSL-Router 1500 Byte große Ethernet-Pakete seines LAN in zwei PPPoE-Pakete teilen müsste. Das würde den Durchsatz deutlich senken. Eines hätte die maximale Länge von 1492 Byte IP-Daten plus 8 Byte PPPoE-Header, das zweite jedoch nur die restlichen 8 Byte des Ethernet-Frames als Nutzdaten sowie 20 Byte IP-Header und 8 Byte PPPoE-Header.

Glücklicherweise kann der Sender die optimale MTU feststellen, wenn Path MTU Discovery eingeschaltet ist. Dann senkt er den Wert automatisch, denn TCP tut alles, um zu verhindern, dass Pakete fragmentiert werden. Es kostet Zeit und Speicher, fragmentierte Pakete am Ziel zusammenzusetzen. Auch sind größere Pakete bei Paketverlust kostspieliger – es dauert länger, bis der Fehler korrigiert ist und der Durchsatz sinkt stärker als bei kleinerer MTU.

Bei der Path MTU Discovery werden alle Pakete mit dem "Don't-Fragment-Bit" gekennzeichnet und zunächst mit der am gegebenen Adapter maximalen Größe versandt. Falls ein auf der Strecke befindlicher Router das Paket nicht ohne Fragmentierung weitergeben kann (was ihm das Don't-Fragment-Bit verwehrt), verwirft er das Paket und meldet dem Sender einen Fehler mitsamt seiner maximalen Paketgröße.

Der Sender passt dann die Paketgröße an und wiederholt den Versuch, bis er zum Ziel durchkommt. Weil sich die Route zwischen Sender und Empfänger ändern kann, wendet der Sender die Methode gelegentlich wieder an. Bei DSL mit PPPoE beträgt die MTU 1492 Byte, bei ISDN, DSL mit PPPoA oder Kabel in der Regel 1500 Byte.

Beim Aufbau einer TCP-Verbindung sendet jede Seite die von ihr maximal akzeptierte Maximum Segment Size. Dieser Wert ergibt sich aus der MTU – 40 Bytes für den TCP/IP-Header. Wenn eine Endstellen MSS = 1460 meldet, kann sie also Pakete bis zu 1500 Byte Größe nutzen (1460 + 40). Die MSS ist aber nur eine Obergrenze. Sollte Path MTU Discovery einen kleineren Wert ergeben, wird dieser benutzt.