Majhne zahteve delujejo, veliki prenosi se zataknejo, in nekdo predlaga MSS clamping. Ta predlog je dovolj pogosto pravilen, da ga je vredno preizkusiti v pravem vrstnem redu, in dovolj pogosto napačen, da ob slepi uporabi izgubite popoldne. Tri preverjanja spodaj ločijo resnično težavo z velikostjo TCP od težave z UDP, od pokvarjenega odkrivanja path-MTU in od clampa, ki nikoli ne vidi rokovanja, ki bi ga moral prepisati.

Začnite z obliko okvare

Okvara velikosti ima podpis: povezava se vzpostavi, preverjanje pristnosti in majhni odgovori uspejo, nato pa se prenos za nedoločen čas ustavi, ko potrebuje segment polne velikosti. Strani, ki naložijo besedilo, a nikoli ne dokončajo slike, so ista okvara v manjšem merilu. Če se sploh nič ne poveže, je težava prej na poti in clamping ne bo pomagal. Clamp ne more popraviti rokovanja, ki ni nikoli prispelo.

Podpis obstaja zato, ker se velikost segmenta dogovori prav pri rokovanju. Vsaka stran oglašuje največjo velikost segmenta kot možnost TCP, pošiljatelji pa spoštujejo oglas nasprotne strani. Če pot ne more nositi tako velikega segmenta, se okvara pojavi pozneje, ko pošiljatelj končno poskusi enega.

Imejte transport na očeh, ko berete ta simptom. Clamping je prepis možnosti TCP, zato glasovni ali video klic, ki se zatakne pod istim tunelom, ni težava MSS in se od tega ne bo izboljšal. Zapišite transport, preden se dotaknete možnosti TCP.

Ovrednotite pot in jo nato primerjajte s tunelom

Dve številki sta pomembni in se pogosto zamenjujeta. path-MTU je največji paket, ki ga pot prenese brez razdrobljenosti, oglašeni MSS za IPv4 pa je ta vrednost minus 40 bajtov glav IP in TCP, ali minus 60 za IPv6. Enkapsulacija tunela porabi del proračuna, preden se notranji paket sploh začne.

ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20

Ping z bitom do-not-fragment vam pove, ali paket te velikosti koristnega tovora preživi; spreminjajte velikost, dokler ne odpove, in empirično ste našli mejo poti. Izhod tracepath poroča o MTU, odkritem vzdolž poti, kar je hitrejše, ko deluje, in manj zanesljivo, ko vmesni skok filtrira sonde.

Zdaj odštejte režijo tunela. Zunanja glava IP, glava UDP in glava, specifična za tunel, izhajajo iz istih 1500 bajtov, zato je uporabni notranji MTU na tipični podlagi Ethernet nižji, kot nakazuje fizična povezava. Če je izračunani notranji MTU nižji od tistega, ki ga oglašujejo vaši partnerji, ste našli pravega kandidata za clamp in ne ugibanje. Če je izračunana vrednost že višja od oglasa partnerjev, se ustavite tukaj in poglejte drugje.

Namestite clamp tja, kjer poteka rokovanje

Clamp deluje tako, da prepiše možnost MSS v paketih SYN in SYN-ACK, ko prečkajo prehod. Če pravilo sedi na vmesniku, ki ga nobena smer nikoli ne prečka, se pogajanje konča nespremenjeno in simptom ostane, zato o izidu bolj kot vrednost odloči namestitev.

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

Smer je druga polovica. Clamping ene smeri popravi polovico tokov, preostale pa pusti v okvari, ki je videti občasna, zato ga uporabite v obeh smereh posredovanega prometa. Klasična oblika v Linuxu za tunelski vmesnik je pravilo mangle, ki se ujema s paketi SYN:

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

Bodite pozorni, kaj --clamp-mss-to-pmtu v resnici počne: vrednost izpelje iz MTU poti, kar ni vedno resnični proračun koristnega tovora tunela. Na tunelu, ki temelji na poti, kjer se notranja pot in zunanja smer razlikujeta, je izrecna vrednost, izračunana v prejšnjem preverjanju, bolj predvidljiva kot samodejna.

Preverite z novo povezavo in ohranite povratno informacijo živo

Vzpostavljena povezava obdrži dogovorjeni MSS, zato testiranje v isti seji ničesar ne dokaže. Po spremembi odprite novo povezavo in preberite dogovorjeno vrednost neposredno, namesto da bi jo sklepali iz prenosa, ki se slučajno konča.

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

Prvi ukaz poroča o MSS vtičnice skupaj z njenim stanjem zastoja, kar je najhitrejša potrditev, da je clamp učinkoval. Drugi potrjuje, da je pravilo, za katero mislite, da ste ga dodali, pravilo, ki obstaja, v tabeli, kamor je bilo nameščeno.

Nato zaščitite mehanizem, ki ga niste popravili. Odkrivanje path-MTU je odvisno od tega, ali sporočila ICMP fragmentation-needed dosežejo pošiljatelja, zato bo požarni zid, ki jih zavrže, še naprej kvartil velike prenose tudi s pravilnim clampom. Dovolite ta sporočila za pot tunela ali sprejmite, da clamping kompenzira politiko, ki ste si jo izbrali.

Nazadnje se uprite skušnjavi, da bi clamp obravnavali kot gumb za nastavljanje. Omejuje velikost segmenta, kar stane prepustnost na poteh, ki ga niso nikoli potrebovale. Uporabljen po treh preverjanjih je usmerjeno popravilo; uporabljen prvi je sprememba, ki skrije prvotno okvaro in vsakemu poznejšemu testu doda drugo spremenljivko. To menjavo je vredno narediti namerno, ne privzeto.

Zapišite izmerjeni path-MTU, odšteto režijo tunela, dodano pravilo in MSS, ki ste ga videli pozneje. Štiri številke naredijo naslednji incident iskanje namesto preiskave.

Sorodni članki