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 6128
als auch in der NetworkManager-Applet-GUI, und die Verbindung neu gestartet. ip link show eth0
zeigt das 6128 mtu ja eingestellt ist. ip -6 route
zeigt, 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 -Mdo
erhalte 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?
Antworten:
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.
quelle
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).
quelle
rdisc6 eth0
.Wie das geht, habe ich anhand von Stefan Seidels Kommentar herausgefunden. Es stellt sich heraus, dass es eine andere MTU-Einstellung gibt, die der
ip
Befehl nicht anzeigt . Einstellen eines höheren Wertes in/proc/sys/net/ipv6/conf/eth0/mtu
(Befehlsudo 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 ,0
umaccept_ra
im gleichen Ordner unter/proc
.quelle