Tunelis meta didelius perdavimus, bet praleidžia ping, todėl patarimas ateina greitai: sumažinkite MTU. Pataisa kartais veikia, o paskui ji taikoma kiekvienam profiliui kiekviename tinkle. Būtent tada tikslinga pataisa tampa nuolatiniu našumo mokesčiu. Palyginimas, kurį reikia atlikti, yra tarp tikrosios kelio ribos ir kiekvieno paketo sumažinimo žemiau jos kainos.

Kas iš tikrųjų mažėja, kai sumažinate MTU

Kiekvienas paketas neša antraštes prieš nešdamas jūsų duomenis. 1500 baitų Ethernet kelyje IPv4 ir TCP sunaudoja 40 baitų ir palieka 1460 naudingajai apkrovai; inkapsuliavimas prideda viršuje išorines IP, UDP ir tunelio antraštes, todėl vidinis apkrovos biudžetas vėl krenta. Sąsajos MTU sumažinimas sąmoningai sumažina tą biudžetą.

Sąnaudos proporcingos paketų skaičiui, o ne baitų skaičiui. Tas pats failas, padalytas į daugiau paketų, reikalauja daugiau pertraukimų, daugiau maršrutizavimo sprendimų ir daugiau apdorojimo vienam paketui kiekviename kelyje esančiame įrenginyje. Maršrutizatoriuje, kuris jau arti savo paketų per sekundę ribos, tai tikras sulėtėjimas, o ne apvalinimo klaida. Sąnaudos matomos net tada, kai pats perdavimas pavyksta.

Todėl mažesnis MTU yra apribojimo apėjimas, o ne bendras optimizavimas. Jis perka patikimumą prieš kelią, kuris negali pernešti didesnio kadro, ir ima antkainį už kiekvieną paketą, kuriam sumažinimo nereikėjo.

Kada mažesnis MTU yra teisinga pataisa

Klasikinis simptomas yra konkretus: TCP rankos paspaudimas baigiasi, ateina maži atsakymai, o didelis atsisiuntimas sustoja arba atsinaujina. Ping su nedalinti bitu 1472 baitais nepavyksta, o 1400 baitų ping pavyksta, o tai rodo kelią, kuris negali pernešti viso dydžio paketo ir nepristato ICMP pranešimo, kuris pasakytų siuntėjui mažinti.

Kelio MTU aptikimas priklauso nuo tų ICMP pranešimų apie būtiną skaidymą. Kai ugniasienė juos išmeta, siuntėjas vis kartoja didelį paketą ir ryšys atrodo pakibęs. MTU sumažinimas tunelio pusėje išvengia kartojimo, ir tai yra teisėta to tinklo pataisa.

Prieigos technologijos taip pat nustato savo ribas: PPPoE paprastai apsiriboja 1492, kai kurie mobilieji ir DSL keliai yra žemesni, o įdėtieji tuneliai antkainį atima du kartus. Matuokite tikrąjį kelią, o ne kopijuokite skaičių iš vadovo, ir atminkite, kad IPv6 reikalauja bent 1280 baitų MTU kiekvienoje jungtyje, kuri jį perneša, kaip nustato RFC 8200.

Palyginkite tris valdiklius prieš keisdami vieną

MTU, MSS ir skaidymas yra skirtingi valdikliai skirtinguose sluoksniuose, o pakeitus netinkamą simptomas lieka vietoje.

ControlLayerWhat it changesWhere it misleads
Interface MTUIP linkLargest frame the interface will sendPenalizes every protocol, not just the one that failed
TCP MSS clampTCPSegment size advertised in the handshakeLeaves UDP and QUIC untouched
DF and fragmentationIPWhether a router may split a packetCan break path MTU discovery and security assumptions
Tunnel overheadEncapsulationInner MTU after outer headersMismatch shows up only for large inner packets

MSS ribojimas dažnai yra mažiausiai invazinė pataisa, nes ji veikia tik TCP ir palieka sąsają laisvą kitam srautui. Mažesnis sąsajos MTU yra platesnis ir lengviau apmąstomas, todėl jis paplitęs namų maršrutizatoriuose, bet jis ima kiekvienam protokolui vieno protokolo problemos mokestį.

Nedalinti veiksenos išjungimas paslepia simptomą leisdamas skaidymą, ir paprastai pablogina delsą, kartu sulaužydamas grįžtamąjį ryšį, kuris būtų radęs tinkamą dydį. Venkite to kaip nuolatinės pataisos.

Matuokite kompromisą, o ne vieną skaičių

Raskite kelio ribą bandymu su nedalinti bitu, pradėkite nuo aukštos vertės ir leiskitės, kol ateis atsakymas:

ping -M do -s 1472 203.0.113.10
ping -M do -s 1400 203.0.113.10
tracepath 203.0.113.10

Tada palyginkite tikrąją užduotį abiem nuostatomis: tą patį failų perdavimą, tą patį galinį tašką ir tą patį tinklą. Užrašykite užbaigimo laiką ir pakartotinius perdavimus, pavyzdžiui, su nstat -az TcpRetransSegs, ir stebėkite įrenginio procesorių, jei tunelis baigiasi mažame maršrutizatoriuje. Trumpas sintetinis pralaidumo testas gali praleisti sustojimą, kuris pasirodo tik po kelių megabaitų.

Paketų skaitikliai padidės po sumažinimo, nes tas pats perdavimas dabar naudoja daugiau paketų. Tai tikėtina ir nėra didesnio pralaidumo įrodymas. Palyginkite užbaigtus programos duomenis, pakartotinių perdavimų skaičių ir reaktyvumą, o ne vien paketų dažnį.

Įveskite pakeitimą etapais ir laikykite jį apribotą

Užrašykite pradinę vertę, pakeiskite vieną valdiklį ir pakartokite matavimą prieš padarydami jį nuolatiniu. Jei įrodymai nerodo naudos, atkurkite ankstesnę vertę ta pačia sąsajos komanda, kuria ją nustatėte:

ip link set dev wg0 mtu 1420
ip link set dev wg0 mtu 1500

Apribokite rezultatą tam tinklui, kuriam jo reikėjo. Profilis, kuris turi veikti viešbučio Wi-Fi, mobiliojo ryšio hotspot ir biuro LAN tinkle, neturėtų paveldėti mažiausios vertės, kurios reikalauja bet kuris iš jų, nebent klientas negali aptikti kelio.

Teisinga vertė yra didžiausias MTU, kuris išgyvena kelyje, o ne mažiausias, kuris panaikina simptomą. Dokumentuokite kelią, bandymo rezultatą ir grąžinimą, ir peržiūrėkite nuostatą, kai pasikeičia prieigos tinklas.

Susiję straipsniai