IPv6

Bilde av Uriel SC fra Unsplash

Bilde av Uriel SC fra Unsplash

Hva er forskjellen på på IPv4 og IPv6?
Sist oppdatert 2. oktober 2021

IPv6 er protokollen som gradvis sakte men sikkert tar over for IPv4. De fleste som har sett en IPv6 adresse blir lett skremt av et som ser ut som utrolig komplekse adresser som skrives med hexadesimale tall.

I denne artikkelen skal jeg forsøke å forklare hvorfor vi etterhver må slutte å bruke IPv4 adresser, og hva forskjellen mellom IPv4 og IPv6 er.

IPv4 adresser

192.168.10.22

For å skjønne hvorfor IPv6 i det heletatt ble funnet opp må man skjønne hvordan IPv4 fungerer. Derfor starter vi denne artikkelen med en kort repetisjon om litt IPv4.

IPv4 bruker 32 bits IP-adresse som skrives med fire oktetter fra 0 til 255, og skilles med punktum. Hver oktett er altså åtte bit eller en byte.

Binærtallet 11111111 = Desimaltallet 255

For å skille mellom IP adresser som er en del av nettverket eller utenfor nettverket bruker IPv4 noe som heter en subnet maske. Hvis nettverket har en nettmaske på 255.255.255.0 vil det si at alle adressene på nettverket har en IP-adresse som er lik de tre første oktettene og forskjellig på den siste oktetten. Subnet masken kan også skrives med CIDR prefixen /24 for et subnet som består av 256 adresser (0 - 255). For mer informasjon om IPv4 og subnet masker kan du lese denne artikkelen.

Med IPv4 er det mulig med intil 4 294 967 295 IP-adresser. Noe skaperne av IPv4 på 70-80 tallet trodde at måtte være mer enn nok. Ingen kunne på den tiden forestille seg hvor vanlig det kom til å bli med datamaskiner på internett.

Status er at vi har brukt opp alle de 4 milliarder IPv4 adressene, men har på forskjellig vis klart å løse problemet med forskjellige løsninger som NAT og private IP adresser.

IPv6 adresser

FE80::02C3:B2FF:FEA5:E4F1

Et av problemene som IPv6 ble satt til å løse var antall adresser det er mulig å bruke på internett.

IPv6 adresser er hele 128-bit lange og skrives med hexadesimale tall i åtte grupper på fire tegn, adskilt med kolon for å gjøre de mer leselige for oss mennesker. Maskiner klarer fint å lese binære tall, men det blir litt raskere å lese og skrive hexadecimale tall sammenlignet med binær tall for oss mennesker.

Decimaltall brukes til å skrive tall i området 0-9. Altså ti varianter (0,1,2,3,4,5,6,7,8,9). Hexadesimaltall brukes til å skrive desimaltall i området 0 - 15. Altså seksten varianter (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

Når man bruker hexadesimale tall for å skrive binære verdier er FF det samme som å skrive binærtallet 1111 1111.

Hexadesimal FF = Binærtallet 11111111 = desimaltallet 255

Det er viktig å huske på at når man bruker hexadeximale tall til å representere bit verdier, vil en hexadesimal verdi tilsvarer 4 bit.

Hexadesimal tallet: FF
Binærtallet: 1111 1111
Desimaltallene: 15 15

Siden IPv6 bruker 128-bit adresser er det mulig med svimlende 340 282 366 920 938 463 463 374 607 431 768 211 455 adresser. Det er altså ca 3.4 x 1038 adresser Det er ett så stort tall at jeg personlig ikke vet hvordan jeg skal uttale det engang.

For å sette det i perspektiv er antall mulig IPv6 adresser så mange at alle celler i kroppen til alle mennesker på jorda kunne fått hvert sitt nettverk med noen milliarder IP adresser. Håpet med IPv6 er at vi ikke skal gå tom for IP adresser de første årene.

For å gjøre det letter å skrive IPv6 adresser trenger man ikke å skrive ledende nuller i hver gruppe på fire tegn. 01B3 kan altså skrives som 1B3.

I tillegg kan man slå sammen grupper på fire tegn som inneholder kun nuller ved å skrive :: Det vil si at 1B3:0000:0000:1234 kan skrives som 1B3::1234.

Det er viktig å vite at denne :: forkortelsen kan kun brukes en gang i en IPv6 adresse. Dette fordi man må være sikker på hvor mange nuller det er hvor i adressen. I en IP adresse som skrives FE00::123::1 vet man ikke hvor mange nuller som skjuler seg bak hver av de to :: forkortelsene

De 64 første bittene i adressen brukes normalt som nettverks adresse, og de 64 siste som host adresse på det nettverket.

Siden IPv6 adresser er så lange skrives nettverks masken som en prefix mask på lik linje med CIDR notasjon for IPv4. Så for ett nettverk som bruker de 64 første bittene i IPv6 adressen som nettverks adresse er skrives det med prefixen /64.

Network Discovery Protocol

Arvtageren etter IPv4 ARP

På ett IPv6 lokalt nettverk bruker nettverksutstyr fortsatt MAC adresser til å kommunisere med hverandre. Derfor er det et behov for å kunne oversette IPv6 adresser til MAC adresser, akkurat som med IPv4.

IPv6 bruker ikke ARP (Address Resolution Protocol) til å finne hvilken MAC adresse en Ethernet frame skal sendes til. Den bruker i stedet NDP (Network Discovery Protocol).

Det er mye likheter mellom NDP og ARP, men på nettverk med IPv6 er NDP funksjonaliteten inkludert i ICMPv6. NDP bruker multicast kommunikasjon i stedet for broadcast som ARP bruker.

Multicast vil si at det sendes data til alle på nettverket som er en del av en multicast gruppe. Dette gjør at kun hosten som det blir spurt om MAC adressen til svarer på forespørselen. ARP bruker til motsetning broadcast, som sender til absolutt alle på nettverket. Dette gjør at NDP har mindre trafikk på nettverket sammenlignet med ARP.

NDP fungerer slik at den sender en forespørsel til multicast IPv6 adressen til enheten den ønsker MAC adressen til. Den enheten på nettverket som har den IPv6 multicast adressen vil svare med en unicast frame og fortelle hvilken MAC adresse den har.

Link-local adresser

IPv6 adresser for det lokale nettverket

Mye av det som har gjort at vi fortsatt bruker mye IPv4 på internett er at vi har kunnet bruke private IP adresser. Dette er IP adresser som kun kan routes på et lokalt nettverk, og ikke over internett.

IPv6 har noe lignende som heter Link-local adresser. Dette er adresser som er unik for et nettverkskort og som kun kan brukes lokalt på nettverket. Link-local adresser starter med FE00 og har /10 som prefix mask.

En av måtene for å automatisk generere link-local adresser på er å brukes EUI-64. Denne standarden bruker nettverkskortets MAC adresse til å generere de siste sifferene i IPv6 adressen. Hvis man har ett nettverkskort med MAC adressen 1122:3344:5566 den dele den mac adressen i to, og putte inn FFFE i midten. I tillegg vil den inversere den syvende bit'en i mac adressen. Med disse reglene vil nettverks kortet fått link local adressen FE00::1322:33FF:FE44:5566/10 ved hjelp av EUI-64.

En annen og mer vanlig måte å få link-local adresser på er å bruke SLAAC (StateLess Address Auto Configuration). Dette kan erstatte en DHCP server for for utdeling av IPv6 adresser på det lokale nettverket.

SLAAC fungerer slik at når en datamaskin kobles til et IPv6 nettverk vil den sende en multicast pakke ut på nettverket hvor den spør etter en router. Routeren vil svare datamaskinen og oppgi sin IPv6 prefix og prefix lengde. Basert på informasjonen datamaskinen fikk fra routeren vet den nå hva som er sin router, og vil den prefixen og prefix lengen sammen med EUI-64 til å automatisk generere sin egen link-local adresse.

Dynamiske IPv6 adresser

Automatisk nettverksoppsett for IPv6

Normalt vil en datamaskin som bruker IPv6 kobler seg til ett nettverk først forsåke å finne en router. Dette gjør den ved å sende ut en såkaldt "Router Solicitation" pakke. Denne sendes ut til Multicast adressen som alle routere lytter på, nemlig FF02::2.

Hvis det er en router på nettverket vil svare med en "Router Adverticement" pakke som sendes til multicast adressen som alle enheter på nettverket lytter til. Ved å lese denne "Router Adverticement" pakken kan datamaskinen se hva som er routerens IPv6 link-local address, dens prefix og prefix lenge.

I pakken fra routeren er er det også noen binære flagg som sier om enheter på nettverket skal bruke routerens prefix og prefix lengde til å generere sin egen globale unicast adresse basert på EUI-64 eller at kan dikte opp noe helt tilfeldig. Et tredje alternativ er at datamaskinen skal ta kontakt med en DHCP server for å få utdelt IPv6 adresse derifra.

Om det er en DHCPv6 server på IPv6 nettverket kan den fortsatt be datamaskinen på nettverket bruke EUI-64 til å generere sin egen IPv6 adresse basert på routerens IPv6 prefix og prefix lengde, og så dele ut informasjon om DNS server og annen nyttig informasjon. Dette kalles en stateless DHCPv6 server.

En statefull DHCPv6 server fungere akkurat som en tradisjonell DHCP server for IPv4 nettverk. Denne har ett definert pool med IPv6 adresser som den leaser ut til datamaskinene som kobler seg til.

IPv6 adresse typer

En liten oppsummering

I motsetning til IPv4 nettverk som i all hovedsak bruker unicast og broadcast, så bruker ikke IPv6 nettverk broadcast. I stedet bruker IPv6 i hovedsak unicast og multicast adresser. Under skal jeg liste mutlicast adressene som er mest brukt i IPv6 nettverk.

  • All-nodes multicast. Denne går til absolutt alle noder på nettverket.
  • All-solicited nodes multicast. Denne brukes av NDP hvor man prøver å finne MAC adressen som brukes av en enhet på nettverket.
  • All-routers multicast. Dette er adressen alle routere på nettverket lytter til.
  • Unique local. Dette tilsvarer private IPv4 adresser. Disse kan ikke routes utenfor det lokale nettverket.
  • Global unicast. Dette er en offentlig IPv6 adresse som kan routes over internett.
  • Anycast. En delt adresse som flere datamaskiner/servere på internett kan dele. Om en server bruker en slik adresse er det den nærmeste som vil svare klienten. Dette kan være en fin måte å load balance tjenester uten bruk av proxy servere.