S pomaly internetom sa často stretávame, avšak reštart routera nie je vždy univerzálnym riešením. Niekedy to nemusí byť ani chyba poskytovateľa služieb, ale môže sa jednať o špecifický problém s nastavením, napriek tomu, že v testoch rýchlosti sa výsledky môžu zdať v poriadku.
Presne tento problém nastal u mňa a opravou, ktorú som neočakával, bolo nastavenie maximálnej prenesenej jednotky (MTU) v súlade s mojimi skutočnými kapacitami pripojenia. Po správnom nastavení MTU problémy so spomalením zmizli.
MTU určuje maximálnu IP záťaž, ktorá môže prejsť spojom bezo zmeny
Prekročenie hlavičky a pravidlá segmentácie určujú skutočnú veľkosť balíčka
MTU predstavuje najväčšiu dátovú jednotku v bajtoch, ktorú môže zariadenie pripojené k sieti povoliť bez ďalšej fragmentácie. V ethernetových sieťach je obvykle táto hodnota nastavená na 1500 bajtov. Tento údaj nie je náhodný, vychádza z dizajnových obmedzení Ethernetu, ktoré sa použili pred niekoľkými desiatkami rokov a stále platia.
Avšak tých 1500 bajtov nepredstavuje výlučne iba dáta, pretože pakety nesú dodatočné údaje zohľadňujúce protokolový overhead. Pri normálnej TCP prevádzke tento overhead zahŕňa 20 bajtov pre IPv4 hlavičku a ďalších 20 bajtov pre TCP hlavičku. Po prirátaní tohto počtu máte v 1500 MTU prostredí maximálny prenosný blok s o veľkosti 1460 bajtov. Toto vysvetľuje štandardnú veľkosť segmentu TCP (MSS) na zvykových sieťach.
Problémy začínajú, ak je paket väčší než MTU, cez ktoré sa musí dostať. Zariadenie musí paket rozdeliť na menšie časti, čo je náročné na zdroje a vyžaduje viac práce pre CPU a buffer, pretože každá časť dostane svoju vlastnú IP hlavičku. Musia byť opäť zložené pri cieli. Tento proces síce neredukuje šírku pásma, ale zvyšuje zložitosť a citlivosť dodania pakiet.
Skutočné internetové cesty často znižujú použiteľný MTU pod 1500
Encapsulation a technológie prístupu zmenšujú dostupný priestor pre náklad
Možno si myslíte, že všade funguje 1500, ale je to mylné. 1500 bajtov je väčšie, než ponúka MTU na mnohých domácich pripojeniach. Protokoly ako Point-to-Point Protocol over Ethernet (PPPoE) pridávajú 8 bajtov navyše, čo znižuje efektívne MTU na 1492, a tým pádom vyžadujú fragmentáciu. Ak váš router tlačí 1500-bajtové pakety cez 1492 tunel, fragmentovanie je potrebné.
Na mobilných sieťach je situácia zložitejšia, keďže základná hodnota LTE a 5G je menšia než 1500, ktorá je bežná pri Ethernet. Hodnoty MTU sa podľa poskytovateľa pohybujú medzi 1420 a 1480. Zariadenie, ktorému sa nedarí dodržať tento limit, môže čeliť fragmentácii alebo tichému zahadzovaniu paketov, čo značne ovplyvňuje rýchlosť pripojenia.
Automatická úprava MTU nie vždy zabraňuje zlyhaniu
Objavovanie cesty cez MTU, ICMP filtrovanie a čierne diery
Riešením, aby sa zabránilo fragmentácii, je Path MTU Discovery (PMTUD), ktoré na papieri funguje výborne. Zariadenia môžu nastaviť bit „Neprelamovať“, ktorý spúšťa rérouter, aby odpovedal s ICMP Type 3 Code 4 správou „Fragmentácia potrebná“, ak veľkosť paketu prekročí downstreamové MTU.
Bohužiaľ veľa firewalov blokuje ICMP, takže veľké pakety sú zahadzované, avšak odosielateľ nevie, že sú príliš veľké. Tento stav spôsobuje, že TCP retransmituje a vytvorí sa exponenciálne časovače. Tomu sa hovorí MTU čierna diera, kde veľké pakety neustále zlyhávajú, hoci na prvý pohľad prenos prebieha.
Moderné operačné systémy sa snažia zmenšiť zlyhania implementovaním RFC 4821 ako spôsob šetrenia veľkostí balíčka bez spoliehania sa na ICMP. Niektoré routery alebo koncové body VPN tento proces mohli zle spracovať, čo nerobí problémy rýchlostiam podľa výsledkov testovania, avšak zvýši sa variabilita latencií.
Ak váš router aplikuje MSS clamping, môže to zamaskovať neshodu MTU namiesto toho, aby ju opravil, preto symptómy môžu byť nedôsledky.
Meranie a korekcia MTU obnovuje čisté end-to-end prenosy
Spoznaním matematiky si správne MTU ľahko osvojíte. Ak potrebujete urobiť test s príkazom ping, pamätajte, že IPv4 hlavička má 20 bajtov a ICMP pridáva ďalších 8 bajtov, čím tvoria celkový overhead 28 bajtov. Začnite s nákupčou veľkosťou 1472 bajty, aby spolu s 28 bajtami hlavičky rovno súčinili 1500. Znižujte veľkosť, kým nedosiahnete hodnotu, ktorá nevedie k fragmentácii. Vaše použiteľné MTU bude 28 plus najvyššia úspešná nákladná veľkosť.
Tu je Windows príkaz:
ping 8.8.8.8 -f -l 1472
Používam -f na nastavenie bitu Neprelamovať a -l na označenie veľkosti nákladu. Cieľom je znížiť nákladnú veľkosť, kým nepríde úspešná konzistentná odpoveď. Nižšie je ekvivalentný príkaz pre Linux:
ping -M do -s 1472 8.8.8.8
Na macOS je situácia odlišná, lebo fragmentačné príznaky sa líšia medzi verziami. Viac spoľahlivé meranie MTU dosiahnete nástrojmi ako mtr cez Homebrew.
Vždy testujte MTU proti viacnásobným cieľovým IP adresám, nielen 8.8.8.8, nakoľko čierne diery môžu existovať na špeciálnych trasách.
Po nastavení správnej hodnoty odporúčam nastaviť MTU v rozhraní WAN vašého routeru, aby ste nemuseli nastavovať jednotlivé zariadenia separátne. Nižšie je prehľad tabulky s bežnými odhadmi na rôznych typoch pripojení:
| Typ pripojenia | Typické MTU, ktoré môžete očakávať |
|---|---|
| Štandardný Ethernet (káblový / priamy fiber, bez PPPoE) | 1500 |
| PPPoE (DSL alebo niektorí poskytovatelia fiber ISP) | 1492 |
| VLAN-označené pripojenie od ISP | 1496–1500 (záleží na implementácii ISP) |
| LTE / 4G / 5G mobilné siete | ~1420–1480 (varíruje podľa operátora) |
| IPSec VPN (tunelový mód) | 1380–1460 (záleží na šifre a zapúzdrení) |
| WireGuard (rodičovské MTU 1500) | ~1420 |
| WireGuard cez PPPoE (1492 rodičovské) | ~1412 |
| OpenVPN (UDP mód) | 1300–1450 (silno závislé od konfigurácie) |


