ICMPv6
ICMPv6 protokol (anglicky Internet Control Message Protocol Version 6) nebo také ICMP pro IPv6 je nová verze ICMP protokolu a je nedílnou součástí architektury IPv6, která musí být plně podporována všemi implementacemi na všech uzlech. ICMPv6 kombinuje funkce, které byly dříve rozděleny mezi více protokolů, jako třeba ICMP, IGMP (anglicky Internet Group Membership Protocol) a ARP (anglicky Address Resolution Protocol) a zároveň poskytuje mnohá zjednodušení zejména odstraněním zastaralých typů zpráv, které se již nepoužívají.
IPv6 je novou verzí IPv4 a používá ICMP definovaný pro IPv4 v RFC 792 (někdy také označovaný jako ICMPv4) ovšem s velkým počtem změn. Například v sobě obsahuje také IGMP.
Tento článek popisuje formát sady kontrolních zpráv, které jsou využívány v ICMPv6, ale nepopisuje procedury pro jejich používání a zpracování k vytváření dalších funkcí, jako například zjištění MTU na cestě datagramu (popsané v RFC 1981). Stejně jako tato funkce jsou i další funkce ICMPv6 popsané v RFC.
ICMPv6 je víceúčelový protokol a je určen pro ohlašování chyb při přenosu paketů, vytváří diagnosu přenosu, umožňuje vyhledávání dalších uzlů a přenáší informace pro rozeslání multicastových zpráv. Pro tyto účely se dělí do dvou kategorií: chybové zprávy (error messages) a informační zprávy (information messages). ICMPv6 zprávy jsou přenášeny uvnitř IPv6 datagramů v jejich rozšířené hlavičce. ICMPv6 také podporuje funkce vyšších vrstev internetových protokolů.
Formát ICMPv6 zprávy je Typ, Kód a Kontrolní součet. 8bitový blok Typ určuje typ zprávy. Pokud má nejvyšší bit tohoto bloku hodnotu 0, pak se jedná o chybovou zprávu (rozsah těchto zpráv je tedy 0 – 127). Pokud je tato hodnota 1, jedná se o zprávu informační (rozsah 128 – 255). Další 8bitový blok Kód závisí na typu zprávy a používá se jako další úroveň rozlišení zpráv. Třetí část Kontrolní součet slouží k odhalení chyb při přenosu samotné ICMP zprávy.
Type | Význam |
---|---|
0 | Rezervováno |
1 | Cíl nedostupný |
2 | Paket příliš velký |
3 | Čas překročen |
4 | Chybný parametr |
100 | Soukromé experimenty |
101 | Soukromé experimenty |
102-126 | Nepřiřazeno |
127 | Rezervováno pro rozšíření chybových zpráv |
128 | Požadavek na odezvu |
129 | Odezva |
130 | Dotaz na členství ve skupině |
131 | Zpráva o členství ve skupině |
132 | Změna členství ve skupině |
133 | Žádost routeru |
134 | Oznámení routeru |
135 | Žádost souseda |
136 | Oznámení souseda |
137 | Přesměrování |
138 | Přečíslování routerů |
139 | Dotaz na informace o uzlu |
140 | Odpověď s informacemi o uzlu |
141 | Výzva inverzního objevování sousedů |
142 | Ohlášení inverzního objevování sousedů |
143 | Ohlášení členství ve skupině (MLDv2) |
144 | Žádost o adresy domácích agentů |
145 | Odpověď s adresami domácích agentů |
146 | Žádost o mobilní prefix |
147 | Ohlášení mobilního prefixu |
148 | Žádost o certifikační cestu |
149 | Ohlášení certifikační cesty |
150 | Pro experimentální mobilní protokoly typu Seamoby |
151 | Ohlášení skupinového směrovače |
152 | Výzva skupinovému směrovači |
153 | Ukončení skupinového směrovače |
154 | Rychlé předávání |
155 | Řídicí zpráva RPL |
156 | Aktualizace lokátoru ro ILNPv6 |
157 | Požadavek na duplicitní adresu |
158 | Potvrzení duplicitní adresy |
159 | Řídicí zpráva MPL |
160–199 | Nepřiřazeno |
200 | Soukromé experimenty |
201 | Soukromé experimenty |
255 | Rezervováno pro rozšíření informačních zpráv |
Síťový uzel, který posílá ICMPv6 zprávu, je zodpovědný za určení IPv6 adresy odesílatele a příjemce a to ještě dříve, než je vypočten kontrolní součet. Pokud má uzel více než jednu unicastovou adresu a je tedy potřeba zvolit jednu z nich, musí být adresa odesílatele určena podle následujících pravidel:
Pokud je zpráva odpovědí na zprávu zaslanou na jednu z unicastových adres uzlu, jako adresa odesílatele odpovědi musí být použita právě tato adresa, pro kterou byla původní zpráva určena.
Pokud je zpráva odpovědí na zprávu zaslanou na jinou adresu, jako je
multicastová adresa,
anycastová adresa, kterou zahrnuje uzel, nebo
unicastová adresa, která nenáleží uzlu.
Jako adresa odesílatele musí být použita některá z unicastových adres uzlu. Adresa by měla být vybrána na základě pravidel, která se používají při určování odesílatele jakéhokoli jiného paketu odesílaného uzlem podle adresy příjemce paketu. Může být však vybrána i jiným způsobem, který povede k vyšší srozumitelnosti doručované zprávy na straně příjemce.
Kontrolní součet je 16bitový jednotkový doplněk součtu jednotkového doplňku úplné ICMPv6 zprávy začínající blokem Type, před který se předřazuje "pseudo-hlavička", jak je specifikováno v IPv6. Hodnota NextHeader použitá v "pseudo-hlavičce" je 58. (Poznámka: zahrnutí pseudo-hlavičky v ICMPv6 kontrolním součtu je změna oproti IPv4; použijte článek o IPv6 pro odůvodnění této změny.) Pro výpočet kontrolního součtu, blok Checksum je nastaven na nulu.
Uzel odesílající ICMP zprávu určuje IPv6 adresu odesílatele a příjemce pro ICMPv6 zprávu. Zvláštní pozornost je nutné věnovat hlavně výběru adresy odesílatele. Pokud má uzel více než jednu unicastovou adresu, musí být adresa odesílatele zprávy určena následovně:
Pokud zpráva je odpovědí na zprávu zaslanou na některou z unicastových adres uzlu, adresa odesilatele odpovědi musí být stejná jako adresa, pro kterou byla zpráva určena.
Pokud zpráva je odpovědí na zprávu zaslanou na některou z multicastových nebo anycastových adres uzlu, adresa odesilatele odpovědi musí být unicastová adresa náležící rozhraní, na kterém byl multicastový nebo anycastový paket přijat.
Pokud zpráva je odpovědí na zprávu zaslanou na adresu, která nenáleží uzlu, adresa odesílatele by měla jednoznačně určovat chybu (například unicastová adresa náležící rozhraní, na kterém odesíláni selhalo).
V ostatních případech musí routovací tabulky uzlu určit, které rozhraní má být použito k přenosu zprávy ke svému cíli a unicastová adresa tohoto rozhraní musí být použita jako adresa odesílatele.
Když ICMPv6 uzel přijme paket, musí provést akci, která záleží na typu přijaté zprávy. ICMPv6 protokol musí omezovat počet chybových zpráv zaslaných na stejné místo určení, aby zamezil přetížení sítě. Například, když uzel pokračuje v odesílání chybových paketů, ICMP signalizuje chybu v prvním paketu a pak to dělá opakovaně v přednastavených minimálních intervalech a nebo podle přednastaveného maximálního vytížení sítě. ICMP chybová zpráva nesmí být nikdy odeslána jako odpověď na jinou ICMP chybovou zprávu.