So konfigurieren Sie eine große MTU (Linux)

1

Ich habe eine Gigabit-Ethernet-Verbindung von meinem Laptop zu meinem Router und eine funktionierende IPv6-Verbindung zum Internet. Ich kann sehr große Pakete von Websites im Internet mit einer Größe von bis zu mindestens 10000 Byte empfangen (laut Wireshark). ( edit : entpuppt sich als Linux 'Generic Receive Offload') Wenn ich jedoch versuche, etwas zu senden, fragmentiert sich mein lokaler Computer für ipv6 auf knapp 1500 Bytes. (Unter ipv4 kann ich TCP-Pakete mit einer Größe von mindestens 1514 Byte an das Internet senden. Ich kann mit Paketen bis zur konfigurierten MTU von 6128 pingen, aber sie sind schwarz gelocht.)

Ich bin am Ubuntu 12.04. Ich habe eine MTU für mein eth0 von 6128 konfiguriert (das zulässige Maximum), sowohl mit ip link set dev eth0 mtu 6128als auch in der NetworkManager-Applet-GUI, und die Verbindung neu gestartet. ip link show eth0zeigt das 6128 mtu ja eingestellt ist. ip -6 routezeigt, dass keiner der Pfade, die der Kernel kennt, eine MTU-Menge hat. Ich kann über IPv4 mit Paketen bis zu 6128 Bytes pingen (obwohl ich keine Antworten bekomme), aber wenn ich das tue, ping6 myrouter -c3 -s1500 -Mdoerhalte ich Fehlerantworten von meinem eigenen Computer , die besagen, dass die Pakete zu groß sind und die MTU 1480 ist. Ich habe es mit bestätigt Wireshark, dass nichts auf den Draht gelegt wird und die Antworten in der Tat von meinem eigenen Computer generiert werden.

Wie bringe ich meinen Computer dazu, das größere MTU zu verwenden?

JanKanis
quelle
Die MTU muss auf allen Geräten in Ihrem Netzwerk geändert werden, nicht nur auf Ihrer Workstation. Dies bedeutet, dass Sie Ihren Router, die Switches und alles andere konfigurieren müssen. Wenn ein Gerät keine größere MTU unterstützt, müssen Sie entweder das Gerät austauschen oder eine niedrigere MTU akzeptieren.
Zoredache

Antworten:

2

Was Sie sehen, sind höchstwahrscheinlich keine Jumbo-Frames. So etwas wie 99,9% des Internets läuft immerhin mit einer MTU von 1500 Byte und niedriger. Es ist wahrscheinlich nur Ihr Kernel oder Ihre Netzwerkkarte, die das Zusammenführen von Paketen durchführt.

Dies geschieht mit einer Funktion, die normalerweise als "Generic Recieve Offload" (GRO) oder "Large Receieve Offload" (LRO) bezeichnet wird. Auf diese Weise werden Pakete innerhalb eines einzelnen Datenflusses identifiziert und zusammengeführt und dann an den TCP / IP-Stack weitergeleitet. Dies kann eine erhebliche Menge an CPU-Zyklen einsparen, da die Anzahl der Roundtrips in den Stapel verringert wird.

Versuchen Sie dies: ethtool -K $ INTERFACE gro off

Was diese Funktion ausschaltet und Wireshark glücklicher macht (wenn auch nicht Ihre CPU)

Sie könnten lokal immer noch höhere MTUs verwenden, aber genau aufgrund solcher Funktionen und natürlich immer schnellerer Hardware werden Sie nicht mehr viel Geld verdienen. Es kann auch ein Management-Albtraum sein. Es gibt viele fehlerhafte Treiber und Hardware sowie einen unterschiedlichen Grad an Unterstützung für die Einstellung von MTU über DHCP oder RA in Betriebssystemen. Da auf allen Geräten in einer bestimmten Broadcast-Domäne dieselbe MTU ausgeführt werden soll, sind Jumbo-Frames häufig unpraktisch.

Andre Tomt
quelle
1
Ja das ist korrekt. Ich habe dies bereits entdeckt, aber vergessen, die Frage zu aktualisieren.
JanKanis
1

Die MTU wird meist lokal eingesetzt. Die Verwendung von Jumbo-Frames über mehrere Netzwerk-Hops (wie Router + Internet) ist schwierig und wird höchstwahrscheinlich nicht funktionieren. DSL beispielsweise begrenzt die Pfad-MTU normalerweise auf 1492 Byte. In der Regel wird die Pfad-MTU durch die kleinste Verbindungs-MTU zwischen den beteiligten Routern bestimmt. Sofern Sie nicht den gesamten Pfad kontrollieren und große MTUs für jede Verbindung festlegen, führt die Erhöhung der MTU nur auf Ihrem Computer zu nichts (außer möglicherweise zu einer Verbesserung der LAN-Geschwindigkeit).

Stefan Seidel
quelle
Du beantwortest meine Frage nicht. Was ich zuerst tun möchte, ist, Jumbo-Frames über die lokale Verbindung zu meinem Router zum Laufen zu bringen und dann zu sehen, wohin sie von dort aus gehen sollen. Wie ich in der Frage sagte, habe ich bereits Downstream-Unterstützung für Jumbo-Frames über die DSL-Leitung. Ich möchte das hauptsächlich, weil ich es kann und um zu erfahren, wie Linux funktioniert.
JanKanis
Sie verwechseln zwei OSI-Ebenen. Auf der Verbindungsschicht (Ethernet) werden Jumbo-Frames verwendet. Höhere Schichten kapseln größere Pakete in kleineren Rahmen, wenn sie dazu gezwungen werden. Möglicherweise unterstützt Ihre Netzwerkkarte auch keine IPv6-Jumbogramme, oder Ihr Router stellt die MTU während der automatischen Konfiguration ein. Überprüfen Sie, ob die MTU eingegangen ist rdisc6 eth0.
Stefan Seidel
Jumbo-Frames wurden nicht gesendet, da die höheren Ebenen (in diesem Fall ipv6) keine größeren Pakete zuließen. Der letzte Teil Ihres Kommentars war genau das, wonach ich gesucht habe. Router Advertisements setzen die mtu niedriger.
JanKanis
1

Wie das geht, habe ich anhand von Stefan Seidels Kommentar herausgefunden. Es stellt sich heraus, dass es eine andere MTU-Einstellung gibt, die der ipBefehl nicht anzeigt . Einstellen eines höheren Wertes in /proc/sys/net/ipv6/conf/eth0/mtu(Befehl sudo sh -c "echo 0 > /proc/sys/net/ipv6/conf/eth0/mtu"tat , was ich wollte. (Nicht , dass es sehr geholfen, sank der Router wirklich größere Frames.) Dieser Wert aktualisiert wird / Reset regelmäßig durch Router Advertisement. RA kann durch das Schreiben deaktiviert werden , 0um accept_raim gleichen Ordner unter /proc.

JanKanis
quelle