MTU og MSS
De fleste brugere vil gå et helt liv uden at tænke på MTU. De fleste netværksingeniører tænker over det ugentligt. Det er den maksimale pakkestørrelse, et link kan bære, og at få det forkert producerer nogle af de mest frustrerende fejl i netværk - forbindelser, der ser ud til at fungere for små anmodninger, hænger på mystisk vis, når større data flyder, især gennem VPN'er.
Hele artiklens krop findes på engelsk nedenfor.
MTU (Maximum Transmission Unit) er den største IP-pakke et link kan bære. Standard Ethernet har en MTU på 1500 bytes. PPPoE (bruges af mange DSL-forbindelser) er 1492. Wi-Fi er 1500. WireGuard-tunneler er 1420 som standard. MSS (Maximum Segment Size) er TCP-lagets ækvivalent — den maksimale nyttelaststørrelse i et enkelt TCP-segment, som er MTU minus IP- og TCP-header-overhead (40 bytes for IPv4, 60 for IPv6). MTU, en af to ting sker:
- Fragmentation: routeren opdeler pakken i mindre IP-fragmenter. Destinationen samles igen. Dette virker, men tilføjer overhead og går i stykker, hvis et fragment går tabt.
- Drop med ICMP "Fragmentation Needed":, hvis IP-pakken har Don't Fragment bit indstillet (TCP gør det normalt), når routeren dropper en ICMP's link og replikerer den. Afsenderen forventes at reducere pakkestørrelsen og prøve igen. Dette er Path MTU Discovery.
Problemet: mange firewalls blokerer ICMP Fragmentation Needed-meddelelser. Afsenderen lærer aldrig, at den skal formindske pakker. Forbindelser hænger, fordi overdimensionerede pakker falder lydløst og bliver aldrig gentransmitteret i en anden størrelse. Dette er det klassiske PMTUD sorte hul.
Hvorfor VPN'er gør denne værre
A VPN indkapsler dine pakker i yderligere overskrifter. WireGuard tilføjer 60 bytes (IPv4) eller 80 (IPv6). IPsec tilføjer 50-60 bytes afhængig af tilstand. OpenVPN tilføjer 41+ bytes plus TCP/UDP-transportørens overhead. Så en 1500-byte-pakke over Ethernet, når den føres gennem en WireGuard-tunnel, bliver 1560 bytes - for stor til Ethernet-underlaget.
Det rigtige svar: Indstil tunnel-MTU lavere end underlay-MTU minus indkapslingsoverhead. WireGuard er standard til 1420, hvilket giver 80 bytes frihøjde. OpenVPN bruger typisk 1500 minus dets overhead, ofte omkring 1450.
MSS fastspænding: den praktiske løsning
Den reneste løsning til PMTUD sorte hul er MSS fastspænding. En router eller firewall i stien omskriver MSS-indstillingen i TCP SYN-pakker til en mindre værdi før videresendelse. Begge endepunkter forhandler derefter en mindre MSS, der passer inden for stiens mindste MTU. Ingen ICMP-meddelelser påkrævet — størrelsesgrænsen kommunikeres in-band.
VPN-servere typisk MSS-clamp som standard. WireGuard-grænseflader på Linux kan konfigureres med:
iptables -t mangle -A FORWARD -p tcp --tcp-flag SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtuDette klemmer dynamisk hver TCP-forbindelses MSS til, hvad end stien kan bære.
Symptomer på MTU-problemer
Classic tegn på, at MTU er synderen:
- Latning af forsiden af et websted fungerer; indsendelse af en formular hænger.
- SSH session forbinder fint;
ls /large/directoryfryser midt i output. - Nogle websteder fungerer, andre timeout.
- VPN føles ødelagt for HTTPS, men DNS virker.
- Symptomer vises kun, når trafikken bliver stor (downloads) uploads).
Diagnosticeringen: ping -M do -s 1472 example.com sender en 1500-byte IPv4-pakke (1472 + 20 IP-header + 8 ICMP-header) med sæt ikke-fragmenter. Reducer indtil det lykkes; arbejdsstørrelsen + 28 = stien MTU.
Jumbo frames
Nogle links kan bære pakker større end 1500 bytes — jumbo frames, typisk 9000 bytes. De er almindelige i datacenterstrukturer, hvor hvert link er ensartet Ethernet, og de reducerer CPU-overhead pr. pakke til arbejdsbelastninger med høj kapacitet som storage og HPC. De er sjældne på det offentlige internet; de fleste stier falder til det mindste links MTU.
QUIC og Path MTU
QUIC (transporten til HTTP/3) udfører sin egen path-MTU-probing inde i protokollen. Den starter konservativt (omkring 1200 bytes) og vokser ved at sende sporadisk probepakker for at opdage stiens faktiske kapacitet. Dette undgår det sorte hul PMTUD helt - QUIC afhænger ikke af ICMP-feedback. Efterhånden som HTTP/3-implementering spredes, bliver MTU-relaterede hængninger sjældnere på applikationslaget.
Ofte stillede spørgsmål
- Hvordan finder jeg min forbindelses MTU?
- Linux: <code>ip-link show</code> viser den konfigurerede MTU pr. interface. macOS: <code>ifconfig en0 | grep mtu</code>. Windows: <code>netsh-grænseflade ipv4 viser grænseflader</code>. For at finde stien MTU til en bestemt destination skal du bruge den ping-inkrementale test beskrevet ovenfor.
- Skal jeg ændre min MTU manuelt?
- Næsten aldrig på en typisk forbindelse. Moderne OS'er og routere håndterer MTU korrekt. Hvis du oplever MTU-symptomer over en VPN, er løsningen normalt MSS-klemning på VPN'en, ikke at ændre enhedens MTU.
- Hvorfor er WireGuards MTU 1420 som standard?
- 1500 (Ethernet) minus 60 bytes WireGuard + IPv4 overhead = 1440, men 1420 giver plads til IPv6 i de indre pakker (hvilket tilføjer 20 flere bytes header). Det er en konservativ standard, der fungerer for de fleste underliggende netværk.
- Påvirker MTU hastigheden?
- Marginalt. Større MTU betyder færre pakker til de samme data, færre headere, mindre CPU-overhead - måske 1-5 % forbedring af gennemløbet på en højbåndsforbindelse. På en normal internetforbindelse er forskellen usynlig.
- Hvad er forholdet mellem MTU og MSS?
- MSS = MTU − IP-header − TCP-header. For IPv4 Ethernet: 1500 − 20 − 20 = 1460 MSS. Hvert endepunkt annoncerer sin MSS i TCP SYN; forbindelsen bruger minimum af de to. MSS clamping er, når noget i stien omskriver denne annoncerede værdi til et mindre tal.