Puslapis įkeliamas, ping pavyksta, o failo kopijavimas kaskart užstringa toje pačioje vietoje. Šis modelis rodo į paketo dydį, o ne į pralaidumą ar prisijungimo duomenis. Inkapsuliavimas prie kiekvieno paketo prideda baitų, todėl naudingoji apkrova, kuri tilpo pradiniame maršrute, perėjus tuneliu gali viršyti ribą. Šiuose pokalbiuose trys skirtingi skaičiai vadinami MTU, o juos supainiojus gaunamas nustatymas, kuris sutaiso vieną programą ir sugadina kitą.

Trys skaičiai, kuriuos žmonės vadina MTU

Sąsajos MTU yra sukonfigūruota tos jungties paketo riba. Maršruto MTU yra mažiausia riba visame kelyje, ir ji aptinkama, o ne sukonfigūruojama. TCP MSS yra naudingosios apkrovos dydis, kurį partneris deklaruoja galįs priimti, ir jis išvedamas iš kitų dviejų, o ne yra atskira fizinė riba.

Tunelis turi vidinį ir išorinį vaizdą. Išorinis paketas neša inkapsuliuotąjį ir protokolui reikalingas antraštes, todėl naudojamas vidinis dydis yra mažesnis nei leidžia išorinis kelias. Kelias iki VPN serverio taip pat skiriasi nuo serverio kelio iki paskirties.

Maršruto MTU aptikimas leidžia siuntėjui sužinoti veikiantį dydį, tačiau priklauso nuo to, ar ateis grįžtamasis ryšys. Kai tarpinis įrenginys filtruoja atitinkamus ICMP pranešimus, siuntėjas toliau siunčia paketus, kurie niekada nebaigiami, ir tai yra klasikinė juodoji skylė. Simptomas yra ryškus, kai jį pažįsti: rankos paspaudimas pavyksta, pirmoji viso dydžio apkrova dingsta, o ryšys galiausiai atstatomas arba užstringa. Programos žurnale niekas neatrodo kaip tinklo problema.

Tirkite kelią apkrova, kurią kontroliuojate

Bandymas yra įrodymas apie vieną maršrutą ir vieną dydį, o ne rekomenduojamas nustatymas. Naudokite atsakantį mazgą ir keiskite tik apkrovos dydį.

ping -M do -s 1372 -c 2 203.0.113.20
ping -4 -f -l 1372 vpn.example

Pirmoji komanda siunčia Linux bandymą su išjungtu fragmentavimu ir 1372 baitų apkrova, o antroji daro tą patį Windows sistemoje, kur apkrova nustatoma su -l. Atsakymas reiškia, kad šis dydis išgyveno kelią. Pranešimas, kad reikia fragmentavimo, yra informatyvus, o skirtasis laikas yra dviprasmiškas, nes mazgas ar tarpinis įrenginys gali tiesiog numesti ICMP.

Mažinkite dydį keliais žingsniais, o ne dvejetaine paieška iki baito. Jūs bandote nustatyti, ar egzistuoja dydžio lubos, o ne paskelbti skaičių kiekvienam tinklui. Rastas skaičius galioja šiam keliui, šiam protokolui ir šiai adresų šeimai.

IPv4 ir IPv6 fragmentuojasi skirtingai, todėl vienos šeimos bandymo rezultatas nieko nesako apie kitą. Tikrinkite tą šeimą, kurią programa iš tikrųjų naudoja.

MSS apribojimas padeda tik TCP

TCP atveju efektyvioji apkrova derinama rankos paspaudimo metu, o maršruto maršrutizatorius gali perrašyti šią reikšmę žemyn, kad abu galai siųstų mažesnius segmentus. Tai ir daro MSS apribojimas, ir jis veikia visiškai neliesdamas kliento.

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

Pirmoji taisyklė apriboja deklaruojamą MSS iki maršruto MTU persiunčiamiems TCP rankos paspaudimams, o antroji rodo paties tunelio sąsajos MTU, kad galėtumėte palyginti su tuo, ką leidžia kelias. Apribojimas yra mažiausiai invazyvus taisymas TCP programai, kuri užstringa po rankos paspaudimo.

UDP atveju jis nieko nedaro. Balso ar žaidimo klientas, siunčiantis didelius datagramus, visiškai ignoruos MSS nustatymą, nes nėra rankos paspaudimo, kurį būtų galima perrašyti. Jei nepavykstanti programa naudoja UDP, pažiūrėkite į paties kliento paketo dydžio parinktis. Abu protokolai nepavyksta skirtingai ir taisomi skirtingais įrankiais, todėl protokolas priklauso pirmam bilieto sakiniui.

OpenVPN siūlo parinktis, tokias kaip tun-mtu, mssfix ir su fragmentavimu susijusius nustatymus, o jų elgsena priklauso nuo versijos ir nuo to, ar duomenų kanalas yra AEAD. Skaitykite naudojamos versijos vadovą ir keiskite po vieną parinktį.

Pakeiskite vieną palaikomą nustatymą ir pakartokite abi eigos

Išsaugokite pradinį profilį, pakeiskite vieną palaikomą reikšmę ir pakartokite ir mažą užklausą, kuri veikė, ir didelį perdavimą, kuris nepavyko. Jei keičiasi tik didelis, jūs vijotės dydį. Jei keičiasi abu, kartu pajudėjo kažkas kita.

Mažesnė reikšmė gali sumažinti simptomą, bet prideda sąnaudų, todėl mažiausias įmanomas skaičius nėra tikslas. Tikslas yra dydis, kurį kelias patikimai neša su mažiausiu švaistymu. Užrašykite reikšmę, kelią ir kliento versiją biliete, nes tas pats skaičius, pritaikytas kitur, yra spėjimas.

Jei tas pats profilis veikia iš kito patikimo tinklo, palikite tą skirtumą diagnozėje, o ne paskelbkite klientą sutaisytu. Pasikeitęs kintamasis yra kelias, ir kelią išmatavo bandymas.

Susiję straipsniai