MTU-Mini-FAQ (für xDSL-Zugänge über PPPoE) ========================================== Stand: 17. Aug 2002 Autor: Dominik Ruf Die aktuelle Version dieser Mini-FAQ ist online unter http://www.sauff.com/dsl-faq/mtu-mini-faq.txt zu finden. Die "Mastercopy" liegt auf http://ruf.homeip.net/~dominik/txt/mtu-mini-faq.txt. Inhalt: 1. Einleitung und Begriffserklärungen 1.1 PPPoE 1.2 MTU 1.2.1 MTU bei PPPoE-Verbindungen 1.3 Fragmentierung 1.4 Path MTU Discovery 1.5 MSS 1.6 MSS Clamping 2. Auswirkungen/Probleme 3. Abhilfe/Lösungsmaßnahmen 3.1 Wie stelle ich die richtigen Parameter ein? 4. Links 4.1 RFC's 4.X Die einzelnen Links, im Text als Verweis durch [4.X] gekennzeichnet. 5. Danksagungen 1. Einleitung und Begriffserklärungen Seit die schnellen xDSL-Zugänge zum Internet (die deshalb auch gerne, ob legal oder nicht, mit Routern jeglicher Art für mehrere Rechner gleichzeitig eingesetzt werden) immer häufiger anzutreffen sind, geistert ein Begriff quer durch alle möglichen Newsgruppen und Webforen: MTU. Um die immer wieder auftretenden Fragen zu beantworten, habe ich mich aufgemacht, diese Mini-FAQ zu schreiben. Ich hoffe, dass sie möglichst verständlich und hilfreich ist. Anregungen sind jederzeit herzlich willkommen unter dominik+usenet (at) ruf.homeip.net. Ich versuche möglichst sowohl dem Leser gerecht zu werden, der einfach nur möchte, dass sein DSL-Zugang wieder reibungslos funktioniert, als auch dem interessierteren Leser genügend Hintergrundinformationen und weiterführende Links zu bieten. Diese Gratwanderung ist nicht immer ganz einfach. Dem Ersteren empfehle ich, einfach gleich weiter zum Abschnitt 2 und 3 zu blättern. Die Abschnitte 1 und 4 befriedigen hoffentlich auch den zweiteren Leser. 1.1 PPPoE Point-to-Point Protokoll over Ethernet [4.5], [4.6], RFC 2516, RFC 1661 Das Point-to-Point Protokoll (PPP) stellt einen von Zugangsprovidern gerne genutzten Standard für Punkt-zu-Punkt Verbindungen (z.B. zwischen dem Einwahlrechner des Providers und dem PC des Kunden) dar. Viele xDSL Provider nutzen daher dessen Erweiterung PPP over Ethernet (PPPoE) für den Zugang. Dabei werden (wie bei PPP) IP-Pakete in PPP-Pakete gepackt. Diese werden dann aber in einem Ethernet Frame übertragen. Die Kapselung bei PPPoE-Verbindungen sieht also folgendermaßen aus: Das IP-Paket wird in ein PPPoE-Paket gepackt, welches dann in ein Ethernet-Frame gepackt wird. In jeder "Verpackungsstufe" kommen nochmal ein paar Byte an Header-Daten hinzu, damit die einzelnen Schichten auf der jeweiligen Gegenseite auch wieder korrekt ausgepackt werden können. Ein PPPoE-Paket hat einen 8 Byte großen Header. 1.2 MTU = Maximum Transmission Unit [4.2], [4.3], [4.4] Die Maximum Transmission Unit (MTU) einer Netzwerk Schnittstelle (Interface) gibt das größtmögliche IP Datenpaket an, das ohne Fragmentierung (Aufsplittung in mehrere kleinere Pakete) über diese transportiert werden kann. In Netzen auf Ethernet Basis (z.B. die meisten lokalen Netze) werden die IP Datenpakete in sogenannten "Ethernet Frames" transportiert. Die maximale Größe eines einzelnen Ethernet Frame Paketes ist 1518 Byte. Davon werden 14 Byte vom (Ethernet-) Header und 4 Byte von der Checksumme für das Frame beansprucht, sodass also noch genau 1500 Bytes an Nutzdaten (<-> IP Datenpaket) für ein solches Ethernet Frame übrigbleiben. Deshalb ist die Maximum Transmission Unit (MTU) einer Ethernet Schnittstelle (z.B. einer Netzwerkkarte im Rechner) 1500 Byte groß. 1.1.1 MTU bei PPPoE-Verbindungen [4.2] Eine Ethernet-Verbindung (wie u.a. PPPoE) hat laut Standard eine MTU von 1500 Byte. Hierbei sind allerdings noch nicht die 8 zusätzlichen Byte für das PPPoE-Protokoll berücksichtigt. Um also inklusive den PPPoE-Headern noch standardkonforme Ethernet-Pakete zu senden, darf die MTU für PPPoE-Verbindungen höchstens 1492 Byte groß sein (siehe RFC 2516). Genaugenommen [4.8] sollte der MTU-Wert bei PPPoE genau 8 Byte weniger (der zusätzliche PPPoE Protokoll Header) als jedes Interface zwischen dem eigenen Rechner und dem Ziel sein. "Normalerweise" sollten alle Router im Internet auf eine MTU von 1500 konfiguriert sein [1.2], sodass 1492 korrekt sein sollte. Trotzdem kann es aber mal vorkommen, dass sich ein Router nicht daran hält. Abhilfe schafft hier nur ein ständiges Verringern des eigenen MTU-Wertes, bis es "funktioniert". 1.3 Fragmentierung Wenn man ein IP Paket auf die Reise schickt, dann kann es passieren, dass unterwegs die Leitungs-MTU [1.2] kleiner wird und das Paket nicht mehr druchpasst (Etwa bei PPPoE [1.1] [1.2.1]). Normalerweise zerlegt der Router dem das passiert, das IP Paket in Fragmente und schickt die durch. Manchmal will man das nicht, so dass man ein 'Dont Fragment' Bit im IP Header setzen kann, wenn das Paket nicht zerlegt werden darf. In dem Fall schickt der Router, dem das trotzdem passiert ein ICMP 'Destination unreachable: Fragmentation needed, but DF set.' an den Absender zurueck. Der weiss nun, dass es nicht geklappt hat. 1.4 Path MTU Discovery (PMTUD) Leider ist Fragmentierung etwas aufwaendig und Router brauchen ihre beschraenkte Leistung zum Routen. Um den Routern die Fragmentierungsarbeit zu erleichtern ist man darauf gekommen per default alle Pakete mit gesetztem DF Bit zu Senden. Kommt von einem Router eine ICMP Fehlermeldung zurueck, dann benutzt man die in der Fehlermeldung mit angegebene maximale Groesse der Strecke und sendet nur fuer diese Verbindung kleinere Pakete. Das Ganze nennt man "Path MTU Discovery". Leider klappt das nicht, wenn irgendwo die ICMP-Fehlermeldungen verloren gehen (Etwa durch eine Firewall dessen Administrator meint, dass ICMP boese ist und blockiert werden muss). 1.5 MSS = Maximum Segment Size [4.2], RFC 793, RFC 879 Während sich der Begriff MTU auf die Größe von IP Paketen bezieht, gibt die Maximum Segment Size (MSS) die maximale Größe des Datenanteils von TCP Paketen an, die ein Rechner verarbeiten kann. Die MSS gibt also die Größe der reinen Nutzdaten eines TCP Paketes an. Beim Aufbau einer TCP-Verbindung kann jede Seite optional die bevorzugte/gewünschte MSS angeben. Die Gegenseite wird dann auf jeden Fall Pakete senden, die nicht größer als die gewünschte MSS sind. Die meisten IP-Implementationen benutzen als Default-MSS die maximale Groesse die die MTU [1.2] der naechsten Leitung zulaesst. 1.6 MSS Clamping Man sagt dem Router, dass er die MSS der TCP-Packete so veraendern soll, dass sie durch die naechste Leitung gehen, ohne fragmentiert werden zu muessen. Im Regelfall wird dies die MTU [1.2] minus 40 Byte (das ist genau die Größe der TCP- und IP-Header) sein, also 1460 Byte für Ethernet-Verbindungen. Für PPPoE-Verbindungen ergibt sich 1492 - 40 = 1452 Byte als MSS [1.5]. Dadurch wird die Gegenseite keine Packete schicken, die groesser als die MTU der naechsten Leitung sind. Dies muss selbstverstaendlich vor der Leitung mit der kleinsten MTU passieren. Da PPPoE [1.1] eine kleinere MTU als die "normalerweise" verwendete 1500 Byte hat wird diese ein Kandidat fuer eine solche. 2. Auswirkungen/Probleme bei "falscher" - will meist heißen: zu großer - MTU [4.2], [4.7], [4.8], [4.9], [4.10], [4.11] Manche Webseiten funktionieren/laden nicht richtig. Der Internet Explorer zeigt bei diesen Seiten die Fehlermeldung "Die Seite kann nicht angezeigt werden". Der Browser bleibt bei diesen Seiten mit der Meldung "...contacted, waiting for reply!" stehen. Bilder, die größer als der momentan eingestellte MTU-Wert sind, werden auf diesen Websites nicht angezeigt. Das Paradebeispiel sind die Seiten von GMX. Ebenso können z.B. E-Mails die größer sind als der momentan eingestellte MTU-Wert nicht via POP3 von GMX abgeholt werden. Die POP3-Verbindung "hängt" dann einfach. Gründe: Der Server im Internet, z.B. der von GMX (oder einer anderen Site, die nicht funktioniert), sendet IP-Datenpakete mit mehr als 1492 Byte. Leider liegt zwischen diesen beiden Rechnern die "Engstelle" der PPPoE-Verbindung, die eine (maximale) MTU von 1492 hat und deshalb Pakete nicht weiterleiten kann, die größer als dieser MTU-Wert sind. Da der Server aber eine groessere Default-MTU hat als 1492 schickt er Packete die so gross sind wie seine MTU. Normalerweise wuerde der Server jetzt ein ICMP 'Destination unreachable: Fragmentation needed, but DF set.' bekommen und daraufhin via PMTUD [1.4] die maximale MTU der Strecke herauszufinden. Leider meinen manche Leute, dass ICMP boese ist (neben GMX.de gehoert da unter anderem auch microsoft.com zu) und dass das auf der Firewall vor dem Server geblockt werden muss. Dementsprechend bekommt der Server keine "ICMP-Fehlermeldung" und denkt es ist alles in Ordnung. Somit gehen die zu großen Pakete auf der PPPoE-Strecke verlohren, ohne dass dies jemand bemerkt. :-( 3. Abhilfe/Lösungsmaßnahmen * Bei Einzelplatz-Systemen, bei denen der Rechner direkt mit dem DSL-Modem verbunden ist bzw. ein internes DSL-Modem verwendet... ... sollte es ausreichen, die MTU des PPPoE Interfaces auf 1492 Byte zu setzen. (Oder gegebenenfalls - sprich: es funktionieren manche Sites immer noch nicht - noch niedriger, was aber mMn nicht nötig sein sollte. Es ist mir auch noch kein solcher Fall bekannt.) Die meisten (alle?!) PPPoE-Treiber werden dies per Default tun bzw. eine noch niedrigere MTU als das zulässige Maximum (was die beste Performance bringt [4.4]) von 1492 Byte verwenden. Eine Anpassung sollte also bei Einzelplatz-Systemen i.A. nicht nötig sein. Es existieren jedoch z.B. VPN-Implementierungen, die einen noch niedrigeren MTU-Wert benötigen, sodass dieser dann gegebenenfalls "von Hand" eingestellt werden muss. * Bei Mehrplatz-Systemen mit zentraler Einwahl über einen Router... ... gibt es 2 Möglichkeiten, von denen man nur genau *eine* anwenden sollte: * Der Router kann MSS-Clamping [1.6] betreiben. Dann sollte es ausreichen, im Router die CLAMP-MSS auf 1452 Byte [1.5] einzustellen. Dies ist sicher der zu bevorzugende Weg, da damit die Clients im lokalen LAN weiterhin den (Ethernet-Standard-) MTU-Wert von 1500 Byte benutzen können (minimal bessere Performance). Ausserdem müssen neu hinzukommende Clients nicht speziell konfiguriert werden. (Weniger Aufwand: einmal den Router richtig einstellen und für immer Ruhe haben *g*) * Auf *allen* Clients muss die MTU entsprechend angepasst und auf den Wert der MTU des Routers gesetzt werden. Bei standardkonformen PPPoE-Treibern des Routers also auf 1492 Byte. Achtung! Diverse PPPoE-Treiber für Windows (darunter der Enternet, der Engel-Treiber unter Win9x, der XP-PPPoE) verwenden eine kleinere MTU als 1492 Byte. Somit ist auch die MTU auf dahinterliegenden Clients kleiner als 1492 Byte zu setzen. 3.1 Wie stelle ich die richtigen Parameter ein? 3.1.1 Linux * MTU $ ifconfig mtu $ man ifconfig Der Roaring-Penguin (rp-pppoe) Treiber sollte die MTU automatisch auf 1492 Byte setzen, sodass keine weiteren Einstellungen (bzgl. der MTU) notwendig sind. Bei den Kernel-Treibern werden die Einstellungen in der Datei /etc/ppp/options gesetzt. Die beiden Einträge heißen mru 1492 mtu 1492 Eine Einstellung der MSS sollte bei keinem *nix System nötig sein, da die MSS automatisch auf MTU - 40 Byte (TCP + IP Header) gesetzt wird. * CLAMP-MSS Der rp-pppoe Treiber ermöglicht über die Datei /etc/ppp/pppoe.conf die Option CLAMPMSS="". Diese Datei wird jedoch nur ausgewertet, wenn pppoe über die im Paket mitgelieferten Bash-Skripte (adsl-*) gestartet wird. Benutzt man diese Skripte nicht, ist dem pppoe-Binary die Option "-m " zu übergeben. Alternativ, bzw. bei den Kernel-Treibern, die keine solche Option kennen zwingend, kann man das MSS-Clamping ab Kernel 2.4 mit folgender Zeile erreichen: /usr/sbin/iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j \ TCPMSS --clamp-mss-to-pmtu Bei Verwendung von Kernels der Version 2.2 ist hierzu das Modul massclampfw zu laden. 3.1.2 OpenBSD $ man ifconfig $ man ppp Bzw. in der Datei /etc/ppp/ppp.conf die Einträge set MTU max 1492 set MRU max 1492 Achtung! Das "max" ist anscheinend bei OpenBSD von entscheidender Bedeutung. 3.1.3 FreeBSD $ man ifconfig $ man ppp Bzw. in der Datei /etc/ppp/ppp.conf die Einträge set MTU 1492 set MRU 1492 3.1.4 Windows (allgemein) MTU, MSS und andere Parameter werden in der Registry eingestellt. Dies kann man entweder von Hand (mit dem Programm "regedit") machen, oder über diverse "Tools", die einem diese Arbeit erleichtern. Grundsätzlich gilt, dass Tools, die versprechen, die Verbindung "automatisch" für DSL zu optimieren nur bedingt geeignet sind. Besser sind Tools, die es erlauben, die einzelnen Parameter und Werte selbst zu setzen. Empfehlenswertes Tool: DrTCP [4.15] Wenn man den RASPPPOE Treiber [4.14] benutzt, kann man die MTU für die PPPoE Verbindung über die "Eigenschaften" der Verbindung einstellen. Genaueres findet sich in den README's, die der Software beiliegen und auch auf der Homepage zu finden sind. Ebenso ist der RASPPPOE Treiber der einzige Windows Treiber, der die MSS Clamp Option beherrscht (wichtig, wenn der Windows PC als Router für andere Clients im LAN fungiert). 3.1.5 Windows XP Die MTU vom XP-eigenen PPPoE Treiber lässt sich wie auf [4.16] beschrieben einstellen. Die MTU/MSS für gewöhnliche Netzwerkverbindungen werden genau so wie bei Windows 2000 eingestellt. 3.1.6 Windows 9x, ME und NT Registry Einstellungen sind unter [4.12] zu finden. 3.1.7 Windows 2000 Registry Einstellungen sind unter [4.13] zu finden. 4. Links 4.1 RFC's - Request for Comments Infos dazu gibt es unter http://www.rfc-editor.org/ [en]. * RFC 2516 - A Method for Transmitting PPP Over Ethernet (PPPoE) * RFC 1661 - The Point-to-Point Protocol (PPP) * RFC 1191 - Path MTU Discovery * RFC 2923 - TCP Problems with Path MTU Discovery * RFC 0793 - Transmission Control Protocol * RFC 0879 - The TCP Maximum Segment Size and Related Topics * RFC 3251 - Electricity over IP Man achte auf das Erstellungsdatum. Ein Schelm, wer Böses denkt! :-) MTU 4.2 [en] http://www.roaringpenguin.com/pppoe/als-pppoe-paper.pdf Titel: A PPPoE Implementation for Linux Speziell: Kapitel 4.5 The MTU 4.3 [en] http://penguin.dcs.bbk.ac.uk/~mick/academic/e-commerce/pdec/data-link/mtu.shtml Maximum Transmission Unit (MTU) 4.4 [en] http://www.speedguide.net/editorials/packet_size.shtml MTU, what difference does it make? [Allgemeines zur MTU] PPPoE 4.5 [en] http://www.roaringpenguin.com/slides/pppoe-slides.pdf Titel: PPPoE and Linux PPPoE für Dummies. Three Thumbs up! Sehr anschaulich. 4.6 [en] http://www.carricksolutions.com/pppoe.htm PPPoE FAQ (auch viele andere gute Seiten zum Thema) Allgemeines, FAQ, HOWTO, ... 4.7 [de] http://www.adsl4linux.de/faq/ u.a. mit Abschnitten zur MTU 4.8 [en] http://www.linuxdoc.org/HOWTO/DSL-HOWTO/ u.a. mit Abschnitten zur MTU 4.9 [de] http://www.ruhr.de/home/nathan/FreeBSD/tdsl-freebsd.html anschauliche Schilderung des Ablaufes und der Probleme mit der MTU und MSS bei NAT 4.10 [en] http://lartc.org/HOWTO/cvs/2.4routing/output/2.4routing-15.html#ss15.6 Circumventing Path MTU Discovery issues with per route MTU settings 4.11 [en] http://lartc.org/HOWTO/cvs/2.4routing/output/2.4routing-15.html#ss15.7 Circumventing Path MTU Discovery issues with MSS Clamping Seiten speziell zu Windows 4.12 [en] http://www.speedguide.net/Cable_modems/cable_registry.shtml DSL Registry Settings for Win 9x, ME and NT 4.13 [en] http://www.speedguide.net/Cable_modems/cable_reg_win2k.shtml DSL Registry Settings for Windows 2000 and XP 4.14 [en] http://user.cs.tu-berlin.de/~normanb/ RASPPPOE Treiber von Robert Schlabbach. DER PPPoE Treiber! 4.15 [en] http://www.dslreports.com/front/drtcp.html DrTCP, Tool zur Netzwerkoptimierung für Win 9x/ME/NT/2000/XP 4.16 [en] http://support.microsoft.com/default.aspx?scid=kb;EN-US;q283165 HOW TO: Change the PPPoE MTU Size in Windows XP 5. Danksagungen Dank für Unterstützung geht an (alphabetische Reihenfolge) * Lutz Donnerhacke * Oliver Gobin * Norbert Micheel * Raphael Ott * Harald Sauff * Robert Schlabbach * Michael Schlenstedt * Immo 'FaUl' Wehrenberg * und viele Andere.