Dies ist eine etwas komplizierte Frage, daher beginne ich mit den Grundlagen. Vergib mir, wenn du das alles schon weißt.
MTU ist die Maximum Transmission Unit, das größte Datenpaket, das eine Computerschnittstelle sendet. Für Ethernet ist der Standard 1500 Bytes. Ethernet-Frames dürfen in der Regel bis zu 1522-1542 (abhängig von Ihrer Anzahl) umfassen, und der zusätzliche Speicherplatz ist für Header-Informationen reserviert.
Verschiedene Verbindungen können unterschiedliche Funktionen haben. Es ist ziemlich üblich, im Internet auf einen Link zu stoßen, dessen MTU etwas kleiner als 1500 ist. Dies liegt normalerweise daran, dass der Link zusätzliche Header-Informationen verwendet oder ein anderes Medium als "Standard" -Ethernet verwendet (der Großteil des Internets wird tatsächlich ausgeführt) ATM / SoNet-Verbindungen). Normalerweise wird Datenverkehr, der auf einen solchen Link stößt, einfach in mehrere Teile aufgeteilt und weitergeleitet.
Da dies allgemein üblich war und zu dem Zeitpunkt, als IP erfunden wurde, bestand die Verantwortung des ICMP-Protokolls darin, Probleme mit MTUs zu kommunizieren. Konnte ein Paket aus irgendeinem Grund nicht gebrochen und weitergeleitet werden, wird das Problem über ICMP an den sendenden Computer zurückgemeldet. Der sendende Computer ergreift die entsprechenden Maßnahmen, indem er die Informationen in kleinere Teile aufteilt, und alle sind glücklich. Dieser ganze Prozess wird hinter den Kulissen abgewickelt. In einem gut funktionierenden Netzwerk ist es nie notwendig, die MTU-Einstellungen zu ändern .
Das Qualifikationsmerkmal für diesen letzten Satz ist der Kicker. Es gibt drei häufige Gründe für den Ausfall des automatisierten Prozesses:
- Fehlerhafte Implementierung - Irgendwann funktioniert die Software einfach nicht mehr so, wie sie sollte. Es gibt keine Gesetze, die besagen, dass die Leute den relevanten Standard des Internets einhalten müssen, und es gibt Unternehmen, die gegen die Standards verstoßen, normalerweise, um billig zu sein.
- Administrativ deaktivierte Implementierung - Es kommt vor, dass Personen mit guten Absichten Software brechen, weil sie nicht wirklich wissen, was sie tun. Ich persönlich habe Leute gesehen, die ICMP blockiert haben, weil sie glauben, dass es nur für ICMP.0.0-Pakete verwendet wird (Echo, die meisten Leute wissen das durch das
ping
Dienstprogramm).
- Andere Gründe völlig außerhalb dieses "normalen" Prozesses. Meistens bedeutet dies, dass die Verbindung so verlustbehaftet ist, dass nur kürzere Pakete die Verbindung zuverlässig (oder ohne eine große Anzahl von Wiederholungsversuchen) durchlaufen. Einige frühe DSL- und Kabelmodems hatten solche Probleme. Zuvor hatte die Einwahl häufig Probleme bei der Verwendung von Telefonleitungen mit sehr schlechter Qualität und aggressiven Leitungskodierungen.
Also, warum ist üblich: Faule Techniker / Firmen. Es ist fast allgemein einfacher, die Verbindung mit einer winzigen MTU zu beeinträchtigen, als eines der oben beschriebenen Probleme zu beheben. Wie oben erwähnt, sollte sich heutzutage niemand mehr mit MTU herumschlagen müssen (die einzige Ausnahme, die ich mir vorstellen kann, Jumbo-Frames zu aktivieren, aber das ist wirklich nicht das, worüber wir hier diskutieren). Die richtige Lösung ist auf jeden Fall, das zugrunde liegende Problem herauszufinden und es zu beheben. klassischer Fall der Behandlung der Krankheit nicht das Symptom.
Wie wirkt sich MTU auf eine Verbindung aus? Das Zerlegen der Daten in winzige Teile bedeutet, dass jedes Teil eine bessere Chance hat, ans Ziel zu gelangen, insbesondere bei sehr unzuverlässigen Verbindungen. Da es sich jedoch um kleinere Teile handelt, ist der Overhead für die übertragenen Daten höher. Dies bedeutet, dass die effektive Verbindungsgeschwindigkeit verringert wird. wesentlich, wenn die MTU wirklich klein ist. Die Latenz kann aufgrund der zusätzlichen Verarbeitung und des Overheads des Headers und des Fragmentierungs- / Zusammensetzungsprozesses beeinträchtigt sein, obwohl ich davon ausgehen würde, dass sie gering ist.
Update: - --clamp-mss-to-pmtu
Persönlich habe ich noch nie mit MTU rumgespielt; Ich gebe zu, ich bin ein bisschen ein Perfektionist, und wenn ich mit so hässlichen Hacks konfrontiert werde, finde ich immer die Wurzel des Problems und habe es korrigieren können. Zu diesem Zweck ist mir die iptables
Option --clamp-mss-to-pmtu
unbekannt. Anscheinend ist es äußerst verbreitet und in den meisten Situationen wahrscheinlich sehr ungerechtfertigt, diesen Hack zu verwenden. Es ist immer noch ein Hack, um eines der oben genannten Probleme zu kompensieren. Ich zitiere aus der Linux-Manpage für iptables (8):
Dieses Ziel wird verwendet, um kriminell gehirnlose ISPs oder Server zu überwinden, die "ICMP Fragmentation Needed" - oder "ICMPv6 Packet Too Big" -Pakete blockieren.
Die relativ raue Sprache der Manpage sollte ein Hinweis darauf sein, wie sehr ISPs und Netzwerke, die sich nicht an die RFCs halten (und sich nicht bemühen, dies zu versuchen oder zu kompensieren), verachten.
Bei der Verwendung von UDP in VPNs wurde dies am häufigsten verwendet, um den Overhead des VPN zu minimieren und den vorhandenen Endpunkten die Verwaltung der Sitzungsinformationen zu ermöglichen. Das VPN kann nicht wissen, wie die Sitzung behandelt werden soll, sodass diese Aufgabe am besten den Anwendungen überlassen wird, die dies wissen.
Viele moderne VPN-Tunneling-Protokolle basieren auf einer niedrigeren Ebene (mit noch geringerem Overhead), z. B. GRE und L2TP. oder auf höheren Ebenen getunnelt (normalerweise aus Gründen der Kompatibilität mit restriktiven Firewalls oder aus anderen Gründen), wie z. B. SSTP oder SSH. Diese ersetzen nach und nach UDP als Transportmechanismus.
Update 2: - Diagnose von MTU / ICMP-Problemen
Sie glauben, Sie haben ein MTU / ICMP-Problem und möchten sicher sein. Dieser Vorgang umfasst zwei grundlegende Schritte. Die Anweisungen gelten für eine Linux- oder BSD-Box, können jedoch an nahezu jedes Betriebssystem angepasst werden.
- Wählen Sie ein ICMP-Ping-Ziel (z. B. Google.com, Yahoo.com, Facebook.com usw.). Versuchen Sie , sie mit folgendem Befehl anzusprechen:
ping -c 2 -s 1472 -D google.com
.
- Dies sollte gelingen. Wenn dies nicht gelingt, sollte "Paket muss fragmentiert werden" zurückgegeben werden. Wenn eine dieser Bedingungen erfüllt ist, beenden Sie die Verbindung.
- Wenn dies nichts zurückgibt oder eine "Zeitüberschreitung" anzeigt, liegt ein Problem vor.
- Nur bei unterbrochenen Verbindungen: ausführen
traceroute -F google.com 1472
. Hier erfahren Sie, welcher Hopfen defekt ist. Hinweis: CPE reagiert häufig nicht auf Traceroute-Anfragen. Seien Sie also nicht alarmiert, wenn der erste Hop nicht antwortet.
- Der letzte Hop, der antwortet, ist der letzte, der für Sie richtig funktioniert.
- Wenn keiner von ihnen antwortet, ist es Ihre CPE- oder DSL-Leitung (herauszufinden, was ein bisschen schwierig sein kann, aber es ist fast nie CPE, wenn es modern ist). Hinweis: Wenn Ihre Verbindung einwandfrei funktioniert, wird Traceroute erfolgreich abgeschlossen.
Nebenbei bemerkt: Welcher ISP verwendet heutzutage PPTP ?! Das ist eine Explosion aus der veralteten und nutzlosen Vergangenheit. Sie sollten mindestens PPPoE verwenden. Die Autorisierung des Modems durch MAC und Segment wäre jedoch viel einfacher (sowohl für den ISP als auch für den Kunden).
don't fragment
ist ein Grund dafür, dass das Paket nicht in kleinere Pakete aufgeteilt werden kann.# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
pptp
die manchmal einfriert, und jeder fordert mich auf, dieseniptables
Trick zu spielen . Wie kann ich das Problem untersuchen und den "Kopf" in der Verbindungskette identifizieren?