cs:preklad_ip_a_icmp

Algoritmus pro překlad IP a ICMP mezi verzemi 4 a 6 představuje základ všech mechanismů pro přechod mezi těmito dvěma světy. Původně nesl název Stateless IP/ICMP Translation (SIIT) a byl definován v RFC 2765. V roce 2011 byla tato specifikace nahrazena RFC 6145, která je součástí skupiny definic kolem DNS64 a pojem SIIT příliš nepoužívá.

Základním přínosem algoritmu je, že definuje univerzální pravidla pro překlad jednotlivých hlaviček IP datagramů a ICMP zpráv mezi verzemi 4 a 6. Postupuje při tom bezstavově - neukládá si žádné informace, každý datagram překládá zcela samostatně, bez vazeb na předchozí provoz.

Překladová pravidla mají svá omezení, například nepodporují žádná rozšíření - volby ze strany IPv4 a rozšiřující hlavičky ze strany IPv6. Tyto informace se při překladu ztratí, nelze proto například provozovat IPsec či podporu mobilních zařízení mezi dvěma stroji hovořícími odlišným protokolem.

Proti původní verzi byl z textu vypuštěn IPv6 adresa s vloženou IPv4 (IPv4-Embedded IPv6 Address), kterému je nyní věnováno samostatné RFC 6052. Mapování adres může probíhat dvěma způsoby - buď bezstavově, kdy jsou adresy vzájemně převáděny jednoduchým fixním výpočtem, nebo stavově, kdy si zařízení udržuje tabulku vztahů mezi adresami. Může se jednat i o kombinaci obou přístupů - například NAT64 převádí IPv4 adresy na IPv6 bezstavově podle RFC 6052, zatímco opačný převod je stavový.

Překlad IPv4 na IPv6

Verze = 6
Třída provozu = TOS
Značka toku = 0
Délka obsahu = Celková délka z IPv4 hlavičky - délka IPv4 hlavičky
Další hlavička = Protokol, hodnotu 1 (ICMPv4) změnit na 58 (ICMPv6)
Max. skoků = TTL - 1
Adresa odesilatele = podle mapování
Cílová adresa = podle mapování

Speciální ošetření vyžaduje Fragmentace. Pokud je zakázáno fragmentovat původní IPv4 datagram (příznak Don't Fragment), přeloží se datagram 1:1 a pokud je výsledný IPv6 datagram větší než MTU odchozí linky, pošle odesilateli standardní ICMPv4 chybu. Je-li fragmentace povolena, měl by překladač generovat IPv6 datagramy velikosti maximálně 1280 B, a tedy případně fragmentovat. Doporučuje se přidávat hlavičku Fragmentace i nefragmentovaným datagramům jako indikaci, že odesilatel ji povolil. RFC 6145 doporučuje, aby maximální velikost datagramů i vkládání nepotřebných fragmentačních hlaviček byly konfigurovatelné.

Překlad IPv6 na IPv4

Verze = 4
Délka hlavičky = 5
TOS = Třída provozu
Celková délka = Délka obsahu z IPv6 hlavičky + 20
Identifikace = 0 (nebo Identifikace z hlavičky Fragmentace)
Příznaky MF=0, DF=1 (nebo MF=M z Fragmentace a DF=0)
Posun fragmentu = 0 (nebo Posun fragmentu z Fragmentace)
TTL = Max. skoků - 1
Protokol = transportní protokol z IPv6 hlaviček, hodnotu 58 (ICMPv6) změnit na 1 (ICMPv4)
Kontrolní součet = vypočíst
Adresa odesilatele = podle mapování
Cílová adresa = podle mapování

Práce s fragmentací je v tomto případě jednodušší. Pokud IPv6 datagram neobsahuje hlavičku Fragmentace, příslušné položky se vynulují a IPv4 datagramu se zakáže fragmentace (příznak DF=1). V opačném případě se údaje do položek souvisejících s fragmentací převezmou z příslušné rozšiřující hlavičky. V tomto případě je další fragmentace povolena.

Překlad ICMPv4 a ICMPv6

Pravidla pro vzájemný překlad obou verzí ICMP jsou zatížena řadou výjimek, protože některé typy zpráv existují jen v jedné verzi. Jejich základ však tvoří podobně přímočarý převod mezi odpovídajícími položkami ICMP hlaviček jako v případě IP datagramů.

Odkazy

  • RFC 6145 - definice SIIT
  • RFC 6052 - adresace přechodových mechanismů
Poslední úprava:: 25.07.2019 13:11