A kis kérések működnek, a nagy letöltések megakadnak, és valaki MSS-clampingot javasol. Ez a javaslat elég gyakran helyes ahhoz, hogy érdemes legyen a helyes sorrendben kipróbálni, és elég gyakran téves ahhoz, hogy egy délutánt elpazaroljon, ha vakon alkalmazza. Az alábbi három ellenőrzés elválasztja a valódi TCP-méretproblémát az UDP-problémától, a hibás path-MTU-felderítéstől és az olyan clamplel, amely soha nem látja azt a kézfogást, amelyet át kellene írnia.

A hiba alakjával kezdje

A mérethibának van egy aláírása: a kapcsolat létrejön, a hitelesítés és a kis válaszok sikeresek, majd az átvitel határozatlan időre megáll, amint teljes méretű szegmensre van szükség. Azok az oldalak, amelyek betöltik a szöveget, de soha nem fejezik be a képet, ugyanez a hiba kisebb léptékben. Ha semmi sem kapcsolódik egyáltalán, a probléma korábban van az útvonalon, és a clamping nem segít. Egy clamp nem tudja megjavítani azt a kézfogást, amely soha nem érkezett meg.

Az aláírás azért létezik, mert a kézfogás az a hely, ahol a szegmensméretben megállapodnak. Mindkét fél meghirdeti a maximális szegmensméretet TCP-opcióként, és a küldők tiszteletben tartják a partner hirdetését. Ha az útvonal nem tud ilyen nagy szegmenst szállítani, a hiba később jelentkezik, amikor a küldő végül megpróbál egyet.

Tartsa szem előtt a szállítási módot, miközben ezt a tünetet olvassa. A clamping egy TCP-opció átírása, ezért az ugyanazon alagút alatt megakadó hang- vagy videóhívás nem MSS-probléma, és nem fog javulni tőle. Jegyezze fel a szállítási módot, mielőtt egy TCP-opcióhoz nyúl.

Árazza be az útvonalat, majd hasonlítsa össze az alagúttal

Két szám számít, és gyakran összekeverik őket. A path-MTU a legnagyobb csomag, amelyet az útvonal felaprózás nélkül szállít, az IPv4-hez hirdetett MSS pedig ez az érték mínusz az IP- és TCP-fejlécek 40 bájtja, vagy IPv6 esetén mínusz 60. Az alagút-tokosítás megeszi a költségvetés egy részét, mielőtt a belső csomag egyáltalán elkezdődne.

ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20

A do-not-fragment bittel indított ping megmondja, túléli-e az ilyen hasznos teher méretű csomag; állítsa a méretet, amíg meg nem bukik, és empirikusan megtalálta az útvonal határát. A tracepath kimenete az útvonal mentén felderített MTU-t jelenti, ami gyorsabb, ha működik, és kevésbé megbízható, ha egy köztes ugrás szűri a próbákat.

Most vonja le az alagút többletét. A külső IP-fejléc, az UDP-fejléc és az alagút-specifikus fejléc mind ugyanabból az 1500 bájtból jön, így a használható belső MTU egy tipikus Ethernet-alapzaton alacsonyabb, mint amit a fizikai kapcsolat sugall. Ha a számított belső MTU alacsonyabb, mint amit partnerei hirdetnek, valódi clamp-jelöltet talált, nem találgatást. Ha a számított érték már meghaladja a partnerek hirdetését, álljon meg itt, és keressen máshol.

Helyezze a clampet oda, ahol a kézfogás elhalad

A clamp úgy működik, hogy átírja az MSS-opciót a SYN- és SYN-ACK-csomagokban, miközben azok átlépik az átjárót. Ha a szabály olyan interfészen van, amelyet egyik irány sem lép át soha, a tárgyalás változatlanul befejeződik, és a tünet megmarad, ezért a helyezés jobban eldönti az eredményt, mint az érték.

SymptomWhat it points toNext check
Handshake completes, large transfer stallsSegment size larger than the path can carryPath MTU against the tunnel's effective MTU
Nothing connects, small or largeRouting, firewall or keying failureNot MSS; look at the tunnel state
Only UDP applications stallDatagram size or a dropped ICMP errorPlatform-specific UDP handling, not clamping
Fixed after reconnect, returns laterClamp applied to one direction or one interfaceRule placement and the handshake path

Az irány a másik fele. Egy irány clampelése a folyamok felét javítja, a többit pedig úgy hagyja meghibásodni, hogy időszakosnak tűnik, ezért alkalmazza a továbbított forgalom mindkét irányára. Az alagút-interfész klasszikus Linux-formája egy mangle-szabály, amely a SYN-csomagokra illeszkedik:

iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Figyelje meg, mit tesz valójában a --clamp-mss-to-pmtu: az értéket az útvonal MTU-jából származtatja, ami nem mindig az alagút valódi hasznos teher költségvetése. Olyan útvonalalapú alagútnál, ahol a belső útvonal és a külső pálya eltér, az előző ellenőrzésben számított kifejezett érték kiszámíthatóbb, mint az automatikus.

Új kapcsolattal igazolja, és tartsa életben a visszajelzést

Egy létrejött kapcsolat megtartja a kialkudott MSS-t, ezért az ugyanazon munkamenetben végzett teszt semmit sem bizonyít. A módosítás után nyisson új kapcsolatot, és olvassa le közvetlenül a kialkudott értéket ahelyett, hogy egy véletlenül befejeződő átvitelből következtetne rá.

ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS

Az első parancs a socket MSS-ét jelenti a torlódási állapotával együtt, ami a leggyorsabb megerősítés arra, hogy a clamp hatott. A második megerősíti, hogy az a szabály, amelyet hozzáadottnak hisz, az a szabály, amely létezik, abban a táblában, ahová került.

Aztán védje meg a mechanizmust, amelyet nem javított meg. A path-MTU-felderítés attól függ, hogy az ICMP fragmentation-needed üzenetek elérjék a küldőt, ezért a tűzfal, amely eldobja őket, továbbra is elrontja a nagy átviteleket még helyes clamp mellett is. Engedélyezze ezeket az üzeneteket az alagút útvonala számára, vagy fogadja el, hogy a clamping egy általa választott szabályzatot kompenzál.

Végül ellenálljon a kísértésnek, hogy a clampet hangolócsapként kezelje. Korlátozza a szegmensméretet, ami olyan útvonalakon kerül átbocsátóképességbe, amelyeknek soha nem volt rá szükségük. A három ellenőrzés után alkalmazva célzott javítás; elsőként alkalmazva olyan változtatás, amely elrejti az eredeti hibát, és második változót ad minden későbbi teszthez. Ezt a cserét szándékosan érdemes megtenni, nem alapértelmezésként.

Jegyezze fel a mért path-MTU-t, a levont alagút-többletet, a hozzáadott szabályt és a később látott MSS-t. Négy szám kereséssé teszi a következő incidenst vizsgálat helyett.

Kapcsolódó cikkek