Väikesed päringud töötavad, suured allalaadimised jäävad hanguma ja keegi pakub MSS-i piiramist. See ettepanek on piisavalt sageli õige, et tasuks proovida õiges järjekorras, ja piisavalt sageli vale, et pimesi rakendades terve pärastlõuna raisata. Kolm allolevat kontrolli eristavad tõelise TCP suuruse probleemi UDP probleemist, katkisest path-MTU avastamisest ja piirangust, mis ei näe kunagi kätlemist, mille ta peaks ümber kirjutama.

Alustage tõrke kujust

Suuruse tõrkel on allkiri: ühendus luuakse, autentimine ja väikesed vastused õnnestuvad, ja siis jääb ülekanne määramata ajaks seisma, kui vaja on täissuuruses segmenti. Lehed, mis laadivad teksti, aga ei lõpeta kunagi pilti, on sama tõrge väiksemas mastaabis. Kui midagi üldse ei ühendu, on probleem teel varem ja piiramine ei aita. Piirang ei saa parandada kätlemist, mis kunagi kohale ei jõudnud.

Allkiri on olemas seetõttu, et kätlemine on koht, kus segmendi suurus kokku lepitakse. Kumbki pool teatab maksimaalse segmendi suuruse TCP-valikuna ja saatjad austavad partneri teadet. Kui tee ei suuda nii suurt segmenti kanda, ilmub tõrge hiljem, kui saatja seda lõpuks proovib.

Hoidke transport silme ees, kui seda sümptomit loete. Piiramine on TCP-valiku ümberkirjutus, seega samas tunnelis takerduv kõne- või videokõne ei ole MSS-i probleem ja piiramine ei paranda seda. Kirjutage transport üles enne, kui TCP-valikut puudutate.

Hinnake teed ja võrrelge seda seejärel tunneliga

Kaks arvu loevad ja neid aetakse sageli segi. path-MTU on suurim pakett, mille tee ilma fragmenteerimiseta kannab, ja IPv4 jaoks teatatud MSS on see väärtus miinus 40 IP- ja TCP-päise baiti, või miinus 60 IPv6 puhul. Tunneli kapseldamine kulutab osa eelarvest juba enne, kui sisemine pakett üldse algab.

ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20

Ping do-not-fragment-bitiga ütleb teile, kas selle kandevõimega pakett jääb ellu; muutke suurust, kuni see ebaõnnestub, ja olete tee piiri empiiriliselt leidnud. tracepathi väljund teatab marsruudil avastatud MTU, mis on kiirem, kui see töötab, ja vähem usaldusväärne, kui vahepealne hüpe uurijaid filtreerib.

Nüüd lahutage tunneli üldkulu. Välimine IP-päis, UDP-päis ja tunnelispetsiifiline päis tulevad kõik samast 1500 baidist, seega kasutatav sisemine MTU tüüpilisel Etherneti aluskihil on madalam, kui füüsiline lüli vihjab. Kui arvutatud sisemine MTU on väiksem kui teie partnerite teatatud väärtus, olete leidnud tõelise piiramiskandidaadi, mitte oletuse. Kui arvutatud väärtus on juba partnerite teatest suurem, peatuge siin ja otsige mujalt.

Paigutage piirang sinna, kus kätlemine läbib

Piirang töötab nii, et kirjutab MSS-valiku SYN- ja SYN-ACK-pakettides ümber, kui need lüüsi läbivad. Kui reegel asub liidesel, mida kumbki suund kunagi ei läbi, lõpeb läbirääkimine muutumatult ja sümptom püsib, mistõttu paigutus otsustab tulemuse rohkem kui väärtus.

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

Suund on teine pool. Ühe suuna piiramine parandab pooled vood ja jätab ülejäänud ebaõnnestuma viisil, mis tundub katkendlik, seega rakendage seda edastatava liikluse mõlemas suunas. Klassikaline Linuxi vorm tunneliliidese jaoks on mangle-reegel, mis sobib SYN-pakettidega:

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

Pange tähele, mida --clamp-mss-to-pmtu tegelikult teeb: see tuletab väärtuse marsruudi MTU-st, mis ei ole alati tunneli tegelik kandevõime eelarve. Marsruudipõhises tunnelis, kus sisemine marsruut ja välimine tee erinevad, on eelmises kontrollis arvutatud selgesõnaline väärtus ettearvatavam kui automaatne.

Kontrollige uue ühendusega ja hoidke tagasiside elus

Loodud ühendus hoiab läbiräägitud MSS-i, seega sama sessiooni testimine ei tõesta midagi. Pärast muudatust avage uus ühendus ja lugege läbiräägitud väärtust otse, selle asemel et tuletada seda ülekandest, mis juhtumisi lõpeb.

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

Esimene käsk teatab sokli MSS-i koos ummistuse olekuga, mis on kiireim kinnitus, et piirang mõjus. Teine kinnitab, et reegel, mille te arvate lisanud olevat, on reegel, mis on olemas, tabelis, kuhu see paigutati.

Seejärel kaitske mehhanismi, mida te ei parandanud. path-MTU avastamine sõltub sellest, et ICMP fragmentation-needed teated jõuaksid saatjani, seega tulemüür, mis need maha viskab, jätkab suurte ülekannete rikkumist ka korrektse piirangu korral. Lubage need teated tunneli tee jaoks või nõustuge, et piiramine kompenseerib poliitikat, mille te ise valisite.

Lõpuks vastustage kiusatust kohelda piirangut häälestusnupuna. See piirab segmendi suurust, mis maksab läbilaskevõimet teedel, mis seda kunagi ei vajanud. Pärast kolme kontrolli rakendatuna on see sihitud parandus; esimesena rakendatuna on see muudatus, mis peidab algse tõrke ja lisab igale hilisemale testile teise muutuja. See vahetus tasub teha teadlikult, mitte vaikimisi.

Kirjutage üles mõõdetud path-MTU, lahutatud tunneli üldkulu, lisatud reegel ja pärast nähtud MSS. Neli arvu muudavad järgmise juhtumi otsinguks, mitte uurimiseks.

Seotud artiklid