IPv4 fragmenteer in transito; IPv6 stuur eerder 'n te-groot-pakket-boodskap
Slegs IPv4-roeteerders mag 'n te groot pakket fragmenteer. IPv6 verwag dat die sender op die Packet Too Big-boodskap reageer, wat 'n tonnel of 'n gefiltreerde ICMP-reël kan verydel.
IPv6-foute word baie meer dikwels aan die protokol verwyt as aan die pakketgrootte wat dit veroorsaak het. Die twee families hanteer 'n oormaat pakket werklik anders, en dit is 'n tonnel wat die verskil laat saak maak. IPv4-roeteerders mag 'n pakket fragmenteer wanneer die reëls dit toelaat, terwyl IPv6-roeteerders glad nie in transito mag fragmenteer nie. IPv6 sê dit eerder vir die sender, en daar word van die sender verwag om te reageer. Alles wat daarna verkeerd loop, volg uit of daardie boodskap aankom.
Wat elke familie doen
Die tabel is die meganisme in vier reëls, en een ry verduidelik die meeste van die verwarring.
| Behaviour | IPv4 | IPv6 |
|---|---|---|
| Router fragments an oversized packet | Allowed while DF is clear | Never |
| Signal returned to the sender | ICMP Fragmentation Needed | ICMPv6 Packet Too Big |
| Size that must always work | 68 bytes | 1280 bytes |
| Fragmentation possible | Routers or source | Source only |
IPv6 het geen intransito-fragmentering nie en geen DF-vlag om skoon te maak nie, so daar is niks om op terug te val wanneer 'n pakket te groot is. Die sender moet ingelig word, en die sender moet dit glo.
Die tonnel vernou die pad stilweg
'n VPN voeg buitenste koptekste by, en in die geënkripteerde geval ook integriteitsdata, voordat die pakket die gasheer verlaat. Die binneste pakket kan inpas by die koppelvlak-MTU wat dit sien, terwyl die buitenste pakket die volgende skakel se limiet oorskry, en dit is waarom 'n tonnel die eerste plek is waar dit opduik. Verlaag die tonnelkoppelvlak se MTU doelbewus, of knyp TCP-MSS op die pad vas, en skryf neer watter nommer jy gekies het en waarom.
ESP-oorhoof is afhanklik van modus en algoritmes, so die regte tonnel-MTU is 'n berekening eerder as 'n konvensie. Wat jy ook al kies, moet ruimte laat vir 'n volle 1280-greep-binneste-IPv6-pakket, want elke IPv6-skakel moet daardie veel kan dra. 'n Tonnel wat nie 1280 grepe IPv6 kan dra nie, is nie 'n instellingsprobleem nie; dit is 'n gebreekte pad vir daardie familie. Daardie beperking is wat verdwyn wanneer 'n MTU-waarde uit 'n slegs-IPv4-ontplooiing gekopieer word.
Waarom die simptoom 'n hang is
Die fout is nie 'n skoon fout nie, en daarom word dit verkeerd gediagnoseer. 'n TCP-handdruk voltooi, klein antwoorde arriveer, en die verbinding staan vas sodra 'n groot antwoord of 'n groot oplaai begin, want dit is die eerste pakkette wat groot genoeg is om laat val te word. SSH verbind en hang dan op die eerste groot uitset, en 'n bladsy se kop laai terwyl die liggaam nooit klaarkry nie.
As die ICMPv6-boodskappe Packet Too Big gefiltreer word, leer die sender nooit nie en probeer dit dieselfde grootte oor en oor. Dit is 'n swartgat eerder as 'n stadige pad, en sy kenmerk is 'n herhaalbare groottegrens eerder as toevallige verlies. Om die betrokke kontroleverkeer toegelaat te hou, is deel van 'n werkende IPv6-ontplooiing, nie 'n guns nie.
Moenie die boodskappe afskakel waarvan jou eie pad afhanklik is nie en dan die resultaat as 'n IPv6-fout beskryf nie. Dieselfde argument geld vir IPv4 se Fragmentation Needed-boodskappe, wat ewe ongewild by brandmuur-skrywers en ewe noodsaaklik is.
Meet die grens en maak dan die laag reg
Ondersoek eerder as om te raai: gebruik die don't-fragment-vlag op IPv4 en vaste loonvrag-groottes op IPv6, en teken op waar antwoorde stop. ping -M do -s 1472 en ping -6 -s 1400 is genoeg om die vorm van die probleem te bepaal, en tracepath rapporteer die ontdekte pad-MTU langs die pad.
Maak dan die laag reg wat die nommer besit: die tonnelkoppelvlak-MTU, die MSS-knyp vir TCP, of die pad self. RFC 8200 is die verwysing vir die IPv6-reël, en dit is 'n korter lees as die voorval wat dit voorkom.
Toets die familie wat die toepassing werklik gebruik, want 'n dubbelstapel-naam kan op een familie antwoord en nie op die ander nie, en 'n toepassing kan na 'n netwerkverandering oorskakel. Teken die adres op wat jy getoets het, want 'n resultaat teen die A-rekord sê niks oor die AAAA-rekord nie.
Behandel die groottegrens as bewyse
'n Herhaalbare groottegrens is een van die min netwerkfoute wat presies reproduseer, teen dieselfde grepetelling, van dieselfde bron, elke keer. Dit maak dit 'n geskenk eerder as 'n raaisel, en dit beteken ook dat 'n regstelling geverifieer kan word in plaas van gehoop.
Skryf die ontdekte MTU, die tonnel-MTU wat jy gekonfigureer het en die toets wat die verskil bewys het in die kaartjie. Die volgende persoon sal dieselfde rekenkunde op 'n ander skakel teëkom.