Tunelis baigia savo rankos paspaudimą, maži užklausimai grįžta, o pirmasis didelis perdavimas užstringa. Šis modelis rodo į maršruto MTU daug anksčiau nei į pralaidumą. Kiekviena grandis maršrute riboja paketo dydį, o inkapsuliavimas dalį tos kvotos išleidžia išorinėms antraštėms, todėl vidinis paketas turi būti mažesnis, nei siūlytų neapdorotas maršrutas. Gedimas tylus, ir būtent todėl jį brangu diagnozuoti.

Ką maršruto MTU iš tikrųjų matuoja

Maršruto MTU yra mažiausia grandies MTU maršrute tarp dviejų hostų, o ne MTU, atspausdintas jūsų vietiniame sąsajoje. Vietinė reikšmė yra taškas, nuo kurio prasideda vertinimas, o maršrutas sprendžia, kur jis turi baigtis. Štai kodėl tas pats tunelis gali veikti viename prieigos tinkle ir užstrigti kitame: pasikeitė maršrutas, o ne konfigūracija. Išmatuoti vieną kartą ir visur daryti prielaidą yra klaida, kuri palaiko šią problemą gyvą.

Tuneliui svarbus skaičius yra vidinis MTU, tai yra išorinio maršruto kvota atėmus tai, ką sunaudoja inkapsuliavimas. WireGuard prideda išorinę IP antraštę ir UDP antraštę; kiti transportai prideda savo. Nustatykite per didelį vidinį dydį, ir kiekvienam viso dydžio paketui reikės fragmentavimo, kuris gali niekada neįvykti.

Kodėl tunelis sumažina naudojamą paketą

Jei tunelio sąsaja išlaiko fizinės grandies MTU, kiekvienas didelis paketas priklauso nuo to, ar kas nors žemiau maršrute sutiks jį fragmentuoti. IPv4 iš esmės tai leidžia, tačiau maršrutizatorius, kuriam liepta nefragmentuoti, grąžina klaidą. IPv6 maršrutizatoriai tranzito metu niekada nefragmentuoja, todėl tas pats nustatymas elgiasi skirtingai pagal adresų šeimą. Kad ir kaip būtų, siuntėjas nieko nesužino, kol kažkas nepraneša atgal.

Praktinė pasekmė yra dydis, kuris telpa į rankos paspaudimą, bet ne į naudingąją apkrovą. TLS ClientHello arba DNS užklausa yra pakankamai maža, kad nepaliesta pereitų sumažintą maršrutą, o masinis perdavimas ne. Todėl simptomai telkiasi apie konkrečias operacijas, o ne konkrečius hostus.

Aptikimas veikia tik kai atkeliauja grįžtamasis ryšys

IPv4 aptikimas remiasi don't-fragment bitu: maršrutizatorius, kuris negali persiųsti paketo, grąžina ICMP fragmentation-needed su kito šuolio MTU, ir siuntėjas sumažina savo įvertį. IPv6 vietoj to naudoja Packet Too Big pranešimus, nes maršrutizatoriai tranzito metu nefragmentuoja. Abu mechanizmai daro prielaidą, kad pranešimas ras kelią atgal pas siuntėją, per tunelį ir pro bet kokią ugniasienę grįžimo kelyje. Kai ši prielaida žlunga, siuntėjas toliau bando dydį, kurio maršrutas negali pernešti.

Ugniasienė, leidžianti echo request ir echo reply, nebūtinai leido tas klaidų rūšis. ICMP yra šeima, o čia svarbūs nariai yra klaidos, o ne aido pora. Patikrinkite valdymo srauto politiką abiejuose tunelio galuose ir kelyje tarp jų, ir vadovaukitės platformos palaikoma instrukcija, o ne leiskite visų tipų ICMP visur.

Tas pats filtravimas gali būti tunelio viduje. Jei vidinis maršrutas numeta klaidą, bet išorinis ją perneša, siuntėjas gali prisitaikyti prie ribos, kurios inkapsuliuotas srautas iš tikrųjų niekada nemato.

Tikrinkite maršrutą, o ne spėliokite skaičių

Laikykite tikslą, prieigos tinklą ir tunelį fiksuotus, o keiskite tik paketo dydį. don't-fragment bandymas, kuris žlunga su MTU užuomina, duoda kito šuolio ribą; kartokite, kol dydis praeis, ir užrašykite ir dydį, ir adresų šeimą.

ping -M do -s 1400 10.60.20.10
ping -M do -s 1300 10.60.20.10
ping -6 -M do -s 1300 2001:db8::10

Telpantis ping neįrodo, kad telpa tikros programos viso dydžio segmentai, todėl pakartokite testą su perdavimu, kuris iš tikrųjų žlugo. Palyginkite didžiausią veikusį bandymą su sukonfigūruotu tunelio MTU ir laikykite abu skaičius atskirai savo užrašuose. Jei jie skiriasi maždaug vienos antraštės dydžiu, radote inkapsuliavimo pridėtinę vertę, o ne gedimą.

PLPMTUD, aprašytas RFC 4821, bando aukštyn ir naudoja transporto patvirtinimus, o ne pasitiki pristatytomis klaidomis. Jis padeda maršrutuose, kurie filtruoja ICMP, tačiau palaikymas skiriasi pagal steką ir pagal programą. TCP srautas gali atsigauti pats, o UDP programa su fiksuotu datagramos dydžiu toliau žlunga.

Pasirinkite reikšmę ir užrašykite motyvus

Tunelio MTU sumažinimas yra ir diagnostika, ir teisėtas pataisymas, kai jau žinote maršrutą. Tai nepakeičia žinojimo, kuris maršrutas ir kuris grįžtamojo ryšio mechanizmas dalyvavo, nes mobiliojo ryšio grandžiai suderinta reikšmė bus be reikalo maža šviesolaidinėje jungtyje. Užrašykite pasirinktą dydį, jį pateisinusį bandymą ir atsukimo žingsnį.

IPv4 mechanizmas aprašytas RFC 1191, o IPv6 paketizavimo gairės – RFC 8201; abu įvardijus, kitas inžinierius nebeturės iš naujo išvesti prielaidos. Jei perdavimas vis dar užstringa pasirinktame dydyje, nustokite mažinti skaičių ir pažiūrėkite į kitą sluoksnį. Maršrutas, kuris žlunga bet kokiu dydžiu, nėra MTU problema.

Susiję straipsniai