Kërkesat e vogla funksionojnë, shkarkimet e mëdha ngecin, dhe dikush sugjeron MSS clamping. Ky sugjerim është mjaft shpesh i saktë sa ia vlen të provohet në rendin e duhur, dhe mjaft shpesh i gabuar sa të humbisni një pasdite nëse e zbatoni verbërisht. Tre kontrollimet më poshtë ndajnë një problem të vërtetë të madhësisë TCP nga një problem UDP, nga një zbulim path-MTU i prishur dhe nga një clamp që nuk e sheh kurrë handshake-un që duhet të rishkruajë.

Filloni nga forma e dështimit

Një dështim madhësie ka një nënshkrim: lidhja vendoset, autentikimi dhe përgjigjet e vogla ia dalin, dhe më pas një transferim ndalon pafundësisht sapo i duhet një segment me madhësi të plotë. Faqet që ngarkojnë tekst por nuk përfundojnë kurrë një imazh janë i njëjti dështim në shkallë më të vogël. Nëse asgjë nuk lidhet fare, problemi është më herët në rrugë dhe clamping nuk do të ndihmojë. Një clamp nuk mund të riparojë një handshake që nuk mbërriti kurrë.

Nënshkrimi ekziston sepse handshake-u është vendi ku bihet dakord për madhësinë e segmentit. Secila palë shpall një madhësi maksimale segmenti si opsion TCP, dhe dërguesit respektojnë shpalljen e palës tjetër. Nëse rruga nuk mund të mbajë një segment kaq të madh, dështimi shfaqet më vonë, kur dërguesi më në fund provon një.

Mbajeni transportin në pamje ndërsa lexoni atë simptomë. Clamping është një rishkrim i një opsioni TCP, kështu që një telefonatë zanore ose video që ngec nën të njëjtin tunel nuk është problem MSS dhe nuk përmirësohet prej tij. Shkruani transportin përpara se të prekni një opsion TCP.

Vlerësoni rrugën, pastaj krahasojeni me tunelin

Dy numra kanë rëndësi dhe shpesh ngatërrohen. path-MTU është paketa më e madhe që rruga mbart pa fragmentim, dhe MSS i shpallur për IPv4 është ai vlerë minus 40 bajtët e header-ave IP dhe TCP, ose minus 60 për IPv6. Enkapsulimi i tunelit konsumon një pjesë të buxhetit përpara se paketa e brendshme të fillojë.

ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20

Ping-u me bitin do-not-fragment ju thotë nëse mbijeton një paketë me atë madhësi ngarkese; rregulloni madhësinë derisa të dështojë dhe e keni gjetur kufirin e rrugës në mënyrë empirike. Dalja e tracepath raporton MTU-në e zbuluar përgjatë rrugës, që është më e shpejtë kur funksionon dhe më pak e besueshme kur një hop i ndërmjetëm filtron sondat.

Tani zbritni kostot e tunelit. Një header IP i jashtëm, një header UDP dhe një header specifik i tunelit dalin të gjithë nga të njëjtat 1500 bajtë, kështu që MTU i brendshëm i përdorshëm në një bazë tipike Ethernet është më i ulët se sa sugjeron lidhja fizike. Nëse MTU i brendshëm i llogaritur është nën atë që shpallin partnerët tuaj, keni gjetur një kandidat të vërtetë për clamp dhe jo një hamendje. Nëse vlera e llogaritur është tashmë mbi shpalljen e partnerëve, ndaloni këtu dhe shikoni diku tjetër.

Vendosni clamp atje ku kalon handshake-u

Një clamp funksionon duke rishkruar opsionin MSS në paketat SYN dhe SYN-ACK ndërsa kalojnë portën. Nëse rregulli qëndron në një ndërfaqe që asnjëra drejtim nuk e kalon kurrë, negociimi përfundon i pandryshuar dhe simptoma vazhdon, prandaj vendosja vendos rezultatin më shumë se vlera.

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

Drejtimi është gjysma tjetër. Clamping i një drejtimi rregullon gjysmën e flukseve dhe lë pjesën tjetër të dështojë në një mënyrë që duket e ndërprerë, prandaj zbatojeni në të dy drejtimet e trafikut të përcjellë. Forma klasike në Linux për një ndërfaqe tuneli është një rregull mangle që përputhet me paketat SYN:

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

Vini re çfarë bën në të vërtetë --clamp-mss-to-pmtu: e nxjerr vlerën nga MTU i rrugës, që nuk është gjithmonë buxheti real i ngarkesës së tunelit. Në një tunel të bazuar në rrugë ku rruga e brendshme dhe rruga e jashtme ndryshojnë, një vlerë e qartë e llogaritur në kontrollin e mëparshëm është më e parashikueshme se një automatike.

Verifikoni me një lidhje të re dhe mbajeni reagimin gjallë

Një lidhje e vendosur mban MSS-në që negocioi, prandaj testimi në të njëjtën sesion nuk provon asgjë. Hapni një lidhje të re pas ndryshimit dhe lexoni vlerën e negociuar drejtpërdrejt, në vend që ta nxirrni nga një transferim që përfundon rastësisht.

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

Komanda e parë raporton MSS-në e socket-it së bashku me gjendjen e mbingarkesës, që është konfirmimi më i shpejtë se clamp-i ka vepruar. E dyta konfirmon se rregulli që mendoni se keni shtuar është rregulli që ekziston, në tabelën ku u vendos.

Pastaj mbroni mekanizmin që nuk e rregulluat. Zbulimi path-MTU varet nga mbërritja e mesazheve ICMP fragmentation-needed te dërguesi, prandaj një firewall që i hedh ato do të vazhdojë të prishë transferimet e mëdha edhe me një clamp të saktë. Lejoni ato mesazhe për rrugën e tunelit, ose pranoni se clamping kompenson një politikë që keni zgjedhur vetë.

Së fundi, rezistoni tundimit për ta trajtuar clamp-in si një çelës rregullimi. Ai kufizon madhësinë e segmentit, që kushton xhiro në rrugë që nuk e kanë pasur kurrë nevojë. I zbatuar pas tre kontrollimeve është riparim i synuar; i zbatuar i pari është një ndryshim që fsheh defektin origjinal dhe shton një variabël të dytë në çdo test të mëpasshëm. Ai shkëmbim ia vlen të bëhet me qëllim, jo si parazgjedhje.

Shkruani path-MTU që matët, kostot e tunelit që zbritët, rregullin që shtuat dhe MSS-në që patë më pas. Katër numra e bëjnë incidentin tjetër një kërkim në vend të një hetimi.

Artikuj të ngjashëm