ICMPv6

Internet Protocol (IP) ansvarar för att leverera datapaket från en källa till en destination, men det gör detta på så kallad best effort basis. Det innebär att IP inte själv kan garantera leverans, och inte heller rapporterar fel när något går snett. För att hantera detta används Internet Control Message Protocol (ICMP), som ger återkoppling om problem i nätverket och möjliggör viktiga kontrollfunktioner.

Det finns två varianter av ICMP:

  • ICMPv4, som används tillsammans med IPv4
  • ICMPv6, som används tillsammans med IPv6

I IPv6 spelar ICMPv6 en ännu större roll än ICMPv4 gör i IPv4, eftersom flera grundläggande funktioner – som adresskonfiguration, grannupptäckt och multicast-hantering – bygger direkt på ICMPv6.

I det här avsnittet går vi igenom de vanligaste ICMP-meddelandena, hur de fungerar i både IPv4 och IPv6, samt de nya funktioner som är unika för ICMPv6.

ICMP inkapsling

På lager 2, datalänk-lagret, finns Ethernetramen (frame). En Ethernetram innehåller bland annat source och destinationens MAC-adresser samt ett Type-fält som anger vilken protokolltyp som är inkapslad i ramen. Om värdet i Type är 0x0800 betyder det att ramen bär på ett IPv4-paket, och om värdet är 0x86DD betyder det att ramen bär på ett IPv6-paket.
I detta exempel är Type 0x0800 vilket innebär att i ramen är ett IP-paket inkapslat, och detta IP-paket har i sin tur ett ICMP-meddelande som sin payload.

ICMP header

ICMPv4-headern består av fälten Type, Code och Checksum, följt av ett specifikt meddelande fält som varierar beroende på vilken typ av ICMP-meddelande som skickas.

  • Type (8 bitar) – Anger meddelandetyp (t.ex. Echo Request = 128, Echo Reply = 129, Destination Unreachable = 1).
  • Code (8 bitar) – Ger ytterligare information om typen.
  • Checksum (16 bitar) – Beräknas med hjälp av en pseudoheader från IPv6-huvudet (källa, destination, längd, Next Header) + ICMPv6-data.
  • Extended Header (32 bitar) – Ytterligare information som varierar beroende på meddelandetyp, exempelvis identifierare och sekvensnummer för Echo-meddelanden.
  • Data/Payload – Själva nyttolasten, som kan innehålla testdata, diagnostisk information eller annan protokollspecifik information.

ICMP typer

Det finns många olika typer av ICMP-meddelanden och många olika anledningar till att de används. I detta avsnitt fokuserar vi på två särskilt relevanta typer av ICMPv4-meddelanden, nämligen felmeddelanden (error messages) och förfrågningar (query messages).

  • Felmeddelanden (Error Messages)
    • Type 3Destination Unreachable (t.ex. nät, host eller port otillgänglig)
    • Type 5Redirect (routern informerar om en bättre väg)
    • Type 11Time Exceeded (TTL har löpt ut, används i traceroute)
  • Förfrågningar (Query Messages) – Den viktigaste formen av förfrågan är Echo, som används i ping:
    • Type 8 – Echo Request (förfrågan skickas)
    • Type 0 – Echo Reply (svar returneras)

Destination Unreachable – Type 3

Ett Destination Unreachable-meddelande skickas när ett IP-paket inte kan levereras till sin destination. Det är en viktig del av ICMPv4:s felhantering och används för att informera avsändaren om varför leveransen misslyckades.

  • En router kan skicka ett sådant meddelande om den inte har någon giltig rutt vidare mot destinationen.
  • En värddator kan skicka det om paketet inte kan levereras till den avsedda tjänsten, till exempel när portnumret inte är öppet.

Syftet med meddelandet är att ge avsändaren tydlig information om att paketet inte kunde nå fram – antingen till själva mottagaren eller till en specifik applikations tjänst på mottagaren.

Destination Unreachable är ICMP Type 3 och innehåller flera olika koder som anger den exakta orsaken. Nedan listas de vanligaste koderna.

Code Description Förklaring
0 Destination network unreachable Routern saknar rutt till destinationsnätet (nätet kan inte nås).
1 Destination host unreachable Nätet nås men värddatorn kan inte nås (t.ex. ARP misslyckas eller värden är offline).
2 Destination Protocol unreacheable Mottagaren stödjer inte transportprotokollet som IP-paketet anger (t.ex. okänt/otillåtet protokollnummer).
3 Destination port unreachable Ingen process lyssnar på den angivna porten (vanligt vid UDP; svarar med ICMP Port Unreachable).
4 Fragmentaion needed and DF bit set Paketet måste fragmenteras p.g.a. MTU, men DF-flaggan är satt; används i Path MTU Discovery.
13 Communication administratively Kommunikation blockeras av policy (t.ex. brandvägg/ACL) på en mellanliggande enhet.

Time Exceeded – Type 11

Ett ICMPv4 Time Exceeded-meddelande används av en router eller värd för att indikera att ett paket inte kunde levereras inom tillåten tid. Det finns två huvudsakliga scenarier där detta meddelande genereras:

  1. TTL Exceeded in transit (Code 0) – Varje IP-paket innehåller ett fält som kallas Time to Live (TTL). Detta minskas med 1 för varje router som vidarebefordrar paketet. Om TTL når 0 kasseras paketet för att undvika oändliga loopar i nätverket. Routern skickar då ett Time Exceeded-meddelande tillbaka till avsändaren.
    • Detta används bland annat av traceroute, där TTL medvetet sätts till låga värden för att kartlägga vägen genom nätverket.
  2. Fragment reassembly time exceeded (Code 1) – När ett IP-paket är fragmenterat måste mottagaren samla ihop alla fragment för att återskapa hela paketet. Om inte alla fragment anländer inom en viss tidsgräns kasseras de mottagna fragmenten. Mottagaren skickar då ett Time Exceeded-meddelande tillbaka till avsändaren med Code 1.
    • Detta förhindrar att mottagaren sparar påbörjade men ofullständiga paket i all oändlighet.
Code Description Förklaring
0 TTL Exceeded in Transit Paketets TTL-fält nådde 0 under transport; paketet kasseras och ett ICMP-meddelande skickas tillbaka. Används av traceroute.
1 Fragment Reassembly Time Exceeded Mottagaren kunde inte återskapa hela paketet eftersom alla fragment inte anlände i tid; de kasseras och avsändaren informeras.

Echo Request (Type 8) och Echo Reply (Type 0)

Ett ICMP Echo-meddelande används för att kontrollera om en nod (host) är nåbar i ett IP-nätverk och för att mäta svarstid. Funktionen ligger till grund för det välkända kommandot ping.

  • Den lokala noden skickar ett Echo Request (Type 8, Code 0) till en destination.
  • Om destinationen är tillgänglig och fungerar korrekt returnerar den ett Echo Reply (Type 0, Code 0) tillbaka till avsändaren.

På detta sätt kan administratörer enkelt verifiera att IP-kommunikationen fungerar mellan två enheter samt få en indikation på fördröjningen (round-trip time) i nätverket.

Detta illustreras med bilder här nedan:

ICMPv6 – översikt

I ICMPv6 finns två huvudkategorier av meddelanden:

  • Felmeddelanden (Error messages, typer 1–4) har alltid ett Code-fält som anger den exakta orsaken.
  • Informations- och förfrågnings meddelanden (Informational/Query messages, t.ex. Echo eller NDP). Dessa meddelandetyp har i regel bara Code = 0 (inga undertyper).

Specifikt gäller att typerna 1–3 (felmeddelanden) har flera olika koder, medan de flesta query- och kontrollmeddelanden (typer 128, 129, 133–137) endast använder Code = 0.

Typ Beskrivning Förklaring
1 Destination Unreachable Paketet kan inte levereras; koderna anger orsaken (ingen rutt, administrativt blockerat, utanför scope, adress otillgänglig, port otillgänglig).
2 Packet Too Big Paketet är för stort för länken; MTU-värdet returneras till avsändaren (Path MTU Discovery).
3 Time Exceeded Paketet kasseras för att hop limit (TTL) nådde 0 i transit eller för att fragment inte hann återskapas i tid.
128 Echo Request Skickas av ping för att testa nåbarhet; använder normalt Code = 0.
129 Echo Reply Svar på Echo Request; används i ping och har normalt Code = 0.
133 Router Solicitation Värd frågar efter routerinformation (t.ex. standardgateway, prefix, konfigurationsflaggor); Code = 0.
134 Router Advertisement Router annonserar prefix, default-gateway och SLAAC-relaterad information; Code = 0.
135 Neighbor Solicitation Adressupplösning och Duplicate Address Detection (DAD); ersätter ARP i IPv6; Code = 0.
136 Neighbor Advertisement Svarar på NS med länkadress (MAC) och används även i DAD; Code = 0.
137 Redirect Router informerar en värd om en bättre nästa-hopp-router till en destination; Code = 0.

Meddelanden mellan en IPv6-router och en IPv6-enhet, inklusive dynamisk adressallokering, är:

  • Router Solicitation (RS)-meddelande
  • Router Advertisement (RA)-meddelande

Meddelanden mellan IPv6-enheter, inklusive kontroll av dubbla adresser och adressupplösning, är:

  • Neighbor Solicitation (NS)-meddelande
  • Neighbor Advertisement (NA)-meddelande

Observera: ICMPv6 ND innehåller även Redirect-meddelandet, som har en liknande funktion som det redirect-meddelande som används i ICMPv4.

Här förklaras alla fyra ICMPv6 meddelande:

RA-meddelanden (Router Advertisement) skickas av IPv6-aktiverade routrar var 200:e sekund för att förse IPv6-aktiverade noder med adresserings information. Ett RA-meddelande kan innehålla information för noden såsom prefix, prefixlängd, DNS-adress och domännamn.
En nod som använder Stateless Address Autoconfiguration (SLAAC) kommer att sätta sin default gateway till routerns link-local-adress, alltså adressen hos den router som skickade RA-meddelandet.

R1 skickar ett RA-meddelande (Router Advertisement):
Hej alla IPv6-aktiverade enheter. Jag är R1 och ni kan använda SLAAC för att skapa en global unicast-adress i IPv6. Prefixet är 2001:db8:acad:1::/64. Förresten – använd min link-local-adress fe80::1 som er default gateway.”

En IPv6-aktiverad router skickar också ut ett RA-meddelande som svar på ett RS-meddelande (Router Solicitation).
I figuren skickar PC1 ett RS-meddelande för att ta reda på hur den kan få sin IPv6-adressinformation dynamiskt.

R1 svarar på RS-meddelandet med ett RA-meddelande.

  1. PC1 skickar ett RS-meddelande (Router Solicitation):
    Hej, jag har precis startat upp. Finns det någon IPv6-router i nätverket? Jag behöver veta hur jag kan få min IPv6-adressinformation dynamiskt.”
  2. R1 svarar med ett RA-meddelande (Router Advertisement): ”Hej alla IPv6-aktiverade enheter. Jag är R1 och ni kan använda SLAAC för att skapa en global unicast-adress i IPv6. Prefixet är 2001:db8:acad:1::/64. Förresten – använd min link-local-adress fe80::1 som er default gateway.

 

När en enhet tilldelas en global IPv6 unicast-adress eller en link-local unicast-adress, kan den utföra Duplicate Address Detection (DAD) för att säkerställa att IPv6-adressen är unik.

För att kontrollera om en adress redan används skickar enheten ett NS-meddelande (Neighbor Solicitation) där dess egen IPv6-adress anges som den adresserade IPv6-adressen.

Om en annan enhet i nätverket redan har den adressen, svarar den med ett NA-meddelande (Neighbor Advertisement). Detta NA-meddelande informerar den ursprungliga enheten om att adressen är upptagen.

Om inget NA-meddelande returneras inom en viss tid, anses adressen vara unik och godkänd för användning.

Observera: DAD är inte ett krav, men RFC 4861 rekommenderar att DAD utförs på unicast-adresser.

PC1 skickar ett NS-meddelande (Neighbor Solicitation) för att kontrollera om en adress är unik:
Den som har IPv6-adressen 2001:db8:acad:1::10, skicka mig din MAC-adress?

 

Adressupplösning (Address Resolution) används när en enhet i LAN:et känner till en destinations IPv6 unicast-adress men inte känner till dess Ethernet MAC-adress.

För att ta reda på MAC-adressen skickar enheten ett NS-meddelande till den så kallade solicited-node-adressen. Detta meddelande innehåller den kända (destinations adressen) IPv6-adressen. Den enhet som har denna IPv6-adress svarar med ett NA-meddelande, där dess Ethernet MAC-adress anges.

I figuren skickar R1 ett NS-meddelande till adressen 2001:db8:acad:1::10 för att fråga efter dess MAC-adress.

  1. R1 skickar ett adressupplösningsmeddelande (NS – Neighbor Solicitation):
    Den som har IPv6-adressen 2001:db8:acad:1::10, skicka mig din MAC-adress?
  2. PC1 svarar med ett NA-meddelande (Neighbor Advertisement):
    Jag är 2001:db8:acad:1::10 och min MAC-adress är 00:aa:bb:cc:dd:ee.