Mozilla in sid
Jan-Benedict Glaw
jbglaw at lug-owl.de
Sat Jul 12 10:51:15 CEST 2003
On Sat, 2003-07-12 09:56:12 +0200, Pierre Bernhardt <pierre at starcumulus.owl.de>
wrote in message <3F0FBF1C.2010107 at starcumulus.owl.de>:
> Ich hatte das Problem immer dann, wenn ich mich über einen w2k-
> router via eingewählt habe. Nach ein wenig rumsuchen habe ich dann
> irgendwo mal die info gefunden, dass das daran liegt, dass
> grosse Pakete nicht komplett ankommen. W2k schickt dann ein
> icmp need refragmentation zum server, das scheint aber irgendwo
> rausgefiltert zu werden, kommt da also scheinbar net an.
>
> Jedefalls wurde als fix für Linux angegeben, am router folgende
> Zeilen zusätzlich in die FW-Regeln aufzunehmen:
>
> - -A POSTROUTING -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN \
> - -j TCPMSS --clamp-mss-to-pmtu
>
> - -A POSTROUTING -o ppp0 -j MASQUERADE
Das ist kein Fix, bestenfalls ein Workaround. Es geht hier anscheinend
um das Übertragen von Daten über eine DSL-Leitung via PPPoE. Ethernet
hat eine MTU von 1500 Bytes, PPPoE kann aber nur 1492 Bytes (die anderen
8 Bytes sind PPPoE-Overhead).
Wenn jetzt über Ethernet ein Ethernet-Paket in voller Größe (1500 Bytes)
'reinkommt und über PPPoE 'raus muß, dann geht das nicht so ohne
weiteres.
Dann gibt's zwei reale Ansätze:
- Der Router stellt fest, daß das Paket zu groß ist, und zersägt es in
zwei Stücke. Ein Paket mit 1492 Bytes, eines mit ~50 Bytes (8 Bytes
Nutzdaten zuzüglich Overhead für ein komplettes, neues Paket). Das ist
sub-optimal, weil jetzt ~40 Bytes pro (vollem) Paket dazukommen, die
extra übertragen werden müssen.
- Der Router erkennt, daß man mit dem Zersägen eine nur sub-optimale
Lösung erreicht und bittet den, der die großen Pakete schickt, diese
kleiner zu halten (-> ICMP fragmentation needed, dabei kann eine neue,
gewünschte Paket-Größe als Tip mitgeschickt werden). Die sendende
Seite kann sich daraufhin darauf einstellen, daß Du lokal nicht
Ethernet, sondern "nur" PPPoE hast und sendet kleinere Pakete. So
vermeidet man den 40-Byte-Overhead pro Paket.
Der aufmerksame Leser sieht das Problem: was, wenn die große Pakete
sendende Seite das ICMP-Paket nicht sieht, weil ein inkompetenter Admin
oder ein Router-Firmware-Hersteller dieses Szenario nicht kennt und alle
ICMP-Pakete einfach herausfiltert? Der (lokale) Linux/Windows/xx-Rechner
an der DSL-Strecke möchte kleinere Pakete bekommen und schickt
ICMP-Infos, die die andere Seite nie empfangen wird. Die andere Seite
schickt weiterhin große Pakete, weil sie denkt, daß die untergegangen
sind. Die Verbindung hängt sich weg...
Hier kommt jetzt die MSS (Maximum Segment Size) ins Spiel. Grundsätzlich
möchte man ja so viel Daten wie möglich bei möglichst kleinem Overhead
übertragen. Daher einigt man sich im Normalfall dahingehend, die Pakete
so groß wie möglich zu machen. Für die MSS sind beide
Kommunikations-Partner zuständig - jeder kann sagen, wie groß das, was
er empfangen möchte, maximal sein darf. Der "Fix", der hier angeboten
wird, besteht nun darin, für alle lokalen Rechner auf dem Linux-System
(vielleicht kann WinXX das auch?) die MSS umzubiegen, sodaß die sendende
Seite nicht ausnutzt, was gehen würde (oder später durch
Leitungs-Merkmale via ICMP ausgehandelt würde), sondern man sich im
Vorfehl auf 'was kleineres festlegt. Damit "verbiegt" man meiner Meinung
nach die Funktionsweise von IP und das ist schlecht...
> Der 2. Stand schon drin, und den ersten musste ich davor packen.
Ja, die erste Zeile bittet die andere Seite, mit kleineren Paketen zu
arbeiten, weil Du erwartest, daß kaputte Router irgendwo im Internet
stehen.
> Seit dem habe ich zumindestens mit meinem Linux router diese Probleme
> nicht mehr, da Sie da anfangs auch vorhanden waren.
>
> Ich verstehe allerdings nicht, warum der tdsl router die pakete nicht
> fragmentiert zu meinem rechner schickt, das fragmentieren also selbst
> irgendwann übernimmt.
Fragmentieren funktioniert, ist aber, was den Overhead angeht, nicht
optimal, da Du dann statt einem Paket zwei davon wegschicken mußt. Du
bekommst also zusätzlich den Overhead von einem Paket dazu, und das bei
_jedem_ (großen) Paket.
Daher wird, wenn so ein großes Paket kommt, der Hinweis verschickt, daß
die bitte kleiner zu sein haben. Geht der Hinweis verloren, hängt die
Verbindung. Verloren gehen die zumeist, wenn die Firewall-Junge keine
Ahnung haben:(
MfG, JBG
--
Jan-Benedict Glaw jbglaw at lug-owl.de . +49-172-7608481
"Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg
fuer einen Freien Staat voll Freier Bürger" | im Internet! | im Irak!
ret = do_actions((curr | FREE_SPEECH) & ~(IRAQ_WAR_2 | DRM | TCPA));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20030712/aa13d8a0/attachment.sig>
More information about the Linux
mailing list