Instructeur: In
deze les gaan we de concepten rond IPv6, of Internet
Protocol versie 6, introduceren.
Tot nu toe hebben we
het eigenlijk alleen over IPv4 gehad, maar
een van de problemen die we hebben met IPv4 is dat
het beperkt is in zijn adresruimte.
Dit komt omdat een IPv4-adres
uit slechts 32 bits bestaat, waardoor
we er maar 4 hebben. 2 miljard mogelijke adrescombinaties.
Nu ken ik er 4. 2 miljard klinkt als een heleboel
IP's, maar toen we er hele delen uithaalden, zoals
APIPA adressen, lokale host adressen, privé IP's, en toen was
er een enorme hoeveelheid afval voordat we zelfs
subnetten begonnen te gebruiken, leidde
dit tot een groot probleem en begonnen
we een tekort aan netwerkadressen binnen IPv4
te krijgen.
Dit staat bekend als adresuitputting en het bestaat echt.
In november 2019 hebben RIPE NCC, het
regionale internetregister voor Europa,
West-Azië en de voormalige USSR, en NASA hun volledige voorraad
IPv4-adressen al opgebruikt.
Gelukkig was de Internet Engineering
Task Force, of IETF, al begonnen met het kijken
naar de toekomst en zij ontwikkelden
IPv6 als standaard helemaal terug in 1995 met
een RFC die hun visie voor IPv6 documenteerde, die ze
IP Next Generation of IPNG noemden.
Nu zie je dat IPv6 eigenlijk een enorme verbetering is ten opzichte van IPv4 wat betreft
het aantal beschikbare adressen.
In plaats van een 32-bits adres zoals in IPv4,
gaat IPv6 een 128-bits adres gebruiken.
Dit geeft je een veel grotere adresruimte.
In feite geeft het je een mogelijkheid
van 340 miljard IP-adressen.
Dat zijn genoeg IP-adressen
voor elke man, vrouw en kind op deze planeet.
Dit is twee tot de 128e macht.
In feite zijn er heel veel IP-adressen voor elke
man, vrouw en kind op deze planeet omdat er
zoveel IP-adressen beschikbaar zijn.
Nu vraag je je misschien
af: hé, we zijn van IPv4 naar IPv6 gegaan.
Wat is er gebeurd met versie 5?
Waarom zijn we meteen naar versie 6 gesprongen?
Welnu, versie 5 werd gemaakt, maar het werd nooit volledig aangenomen als
een officieel protocol of standaard.
En daarom is het nooit in productie gegaan.
In plaats daarvan werden veel van
die concepten die ontwikkeld werden
onder versie 5, omdat het een experimenteel
protocol was, in IPv6 gebracht toen het een
officiële standaard werd.
Laten we het eens hebben over de voordelen van IPv6.
Een van de grootste voordelen
is die veel grotere adresruimte vanwege
die 128-bits adressen.
Daarnaast heeft IPv6
ook de efficiëntie van onze netwerken verhoogd door
het type broadcast-gegevensstroom van IPv4 te verwijderen.
Nu is IPv6 ook veiliger omdat er geen
pakket- of datagramfragmentatie is binnen
de IPv6-standaard.
Er zijn ook geen maximale transmissie-eenheden
voor ontdekking binnen elke sessie, in tegenstelling tot IPv4
dat een MTU met een bepaalde grootte voor elk pakket bevat.
In IPv4, als ik je een pakket stuur dat groter is
dan de maximale grootte van je transmissie-eenheid, dan wordt
dat gefragmenteerd en over
het netwerk verstuurd.
En als het dan op zijn bestemming aankwam,
werd het weer in elkaar gezet en gelezen.
Dit was eigenlijk een veiligheidsrisico.
Het vereiste ook extra verwerking en het kon
je netwerken feitelijk vertragen omdat het
een zeer inefficiënte manier werd om dingen te doen in onze
moderne netwerken met hogere
internetverbindingssnelheden.
Dus met IPv6 besloten ze om fragmentatie
helemaal af te schaffen.
Naast het bieden van al deze nieuwe voordelen,
waren de makers van IPv6 ook erg slim en realiseerden
ze zich dat IPv6, om volledig omarmd en geaccepteerd te worden, achterwaarts
compatibel moest zijn met IPv4 en zowel IPv6 als IPv4
naast elkaar moest laten bestaan op hetzelfde netwerk.
Het was immers al laat in de jaren 90 toen IPv6 werd
ontwikkeld en uitgebracht en er al veel computernetwerken over
de hele wereld waren opgezet.
Het zou voor ons dus niet
haalbaar zijn om alles in één dag te veranderen.
Zie het als de huidige migratie van voertuigen
die op gas rijden naar voertuigen die op
elektriciteit rijden.
Dit gebeurt de hele jaren
2020 en 2030.
Het zou nu onmogelijk zijn om te zeggen:
"Hé, iedereen, op 1 januari 2025 mag niemand
meer op gas rijden.
Vanaf die datum worden ze
allemaal vervangen door elektrische voertuigen.
Als een regering dat zou proberen,
zouden ze waarschijnlijk een revolutie op hun
hand hebben omdat zoveel mensen al auto's op gas bezitten en een hoop geld
en investeringen hebben uitgegeven aan die auto's en de infrastructuur
om ze te ondersteunen.
Daarom gaan we niet van de ene op de andere dag
alle auto's op gas vervangen.
In plaats daarvan zal er een langzame overgang zijn van
gas naar elektriciteit, die doorgaat tot 2030 of misschien 2040 als steeds
meer van de nieuwere auto's die in de wereld worden verkocht,
elektrisch zullen zijn en ze zullen stoppen met
het verkopen van auto's die op gas rijden.
Nou, precies hetzelfde is aan de hand met IPv6.
IPv6 zorgt er dus voor dat IPv4 en IPv6 naast elkaar kunnen bestaan op
dezelfde netwerken en de apparatuur
waarop deze netwerken draaien wordt
dual stack genoemd, wat simpelweg
betekent dat ze zowel IPv4-protocollen
als IPv6-protocollen tegelijk kunnen draaien op dezelfde
netwerkapparaten.
Met dual stack apparaten, als een client IPv6 ondersteunt, zal
de switch van de router bij voorkeur IPv6 gebruiken
en volgens die methode praten.
Als een apparaat IPv6 niet ondersteunt, draait
het zichzelf om en zegt: "Oké,
ik praat met je via het oudere IPv4-protocol.
Op deze manier kan ik je nog steeds steunen.
Een andere methode die we gebruiken staat bekend als tunneling.
Hier wordt IPv6 getunneld over een IPv4-apparaat.
Hierdoor kunnen uw oudere IPv4-routers
nog steeds IPv6-verkeer verwerken.
IPv6 wordt in wezen getunneld als een
mechanisme om IPv6-pakketten in te kapselen in IPv4-headers
en deze IPv6-gegevens over IPv4-routers en andere reeds
bestaande infrastructuur te transporteren.
Het doet dit door een punt-tot-punt tunnel aan te
maken tussen de bron en de bestemming en
die informatie vervolgens in te kapselen.
Hierdoor kunnen geïsoleerde IPv6-clients en -servers met elkaar
communiceren zonder dat alle routers
en switchinfrastructuur die nog IPv4 gebruikt
en tussen hen in staat, geüpgraded hoeven te worden.
Op een dag zullen we misschien zien dat IPv4 volledig wordt afgeschaft.
Maar tot nu toe is dat niet gebeurd.
En persoonlijk houd ik mijn adem niet in.
Uit sommige artikelen
die ik heb gelezen, blijkt dat IPv4 nog minstens
tot 2040 zal blijven bestaan, dus je zult als netwerktechnicus
moeten weten hoe je in de nabije toekomst met zowel
IPv4 als IPv6 moet werken.
Een ander voordeel van IPv6 is dat het een vereenvoudigde header heeft.
Dus in plaats van de 12 velden die we in IPv4 hadden, hebben
we er maar vijf in IPv6, waardoor het een afgeslankte
header is die veel efficiënter
over onze netwerken kan worden verzonden.
Je vraagt je dus misschien
af hoe een IPv6-header eruit ziet?
Nou, ik ga het je laten zien, maar besef wel dat je dit niet
uit je hoofd hoeft te leren voor het examen.
In plaats daarvan laat dit alleen de verschillende
velden zien die in IPv4 zaten, wat bovenaan staat,
tegenover IPv6, wat onderaan staat.
En nu kun je zien hoeveel eenvoudiger
IPv6 eigenlijk is dan IPv4.
Oké, laten we teruggaan naar de dingen
die je moet begrijpen voor het examen.
Hoe ziet een IPv6-adres er eigenlijk uit?
Nou, ik heb al gezegd dat het 128 bits lang is, dus dat
betekent dat het 128 enen of nullen zou hebben als we het binair
zouden uitschrijven, en
dat lijkt me een heel slecht idee, dus dat
gaan we niet doen.
Nu zouden we de gestippelde decimale
notatie kunnen gebruiken zoals
we deden in IPv4, maar dat zijn nog steeds veel octetten
om uit te schrijven omdat we 16 octetten nodig hebben om alle 128 bits weer te geven.
Om dit probleem op te lossen, besloot
de IETF dat we in plaats daarvan hexadecimale
cijfers moesten gebruiken.
Zie je, hexadecimaal is basis-16, wat je je al dan niet
herinnert van je algebra-lessen
op de middelbare school.
In hexadecimaal is elk
hexadecimaal cijfer eigenlijk vier bits.
Hiermee kunnen we een IPv6-adres weergeven
door vier hexadecimale cijfers te combineren
tot wat we een segment noemen.
Een segment bevat 16 bits.
Dit wordt weergegeven door die vier hexadecimale cijfers.
En dan voegen we een dubbele
punt toe en dan blijven we segmenten
toevoegen tot we bij 128 bits zijn, waarvoor
acht segmenten nodig zijn, elk
met vier hexadecimale cijfers.
Dit geeft me een totaal van 32 hexadecimale cijfers, wat
nog steeds behoorlijk lang is.
Met 128 bits in een IPv6-adres betekent dit dat we
niet meer dan 32 hexadecimale cijfers in al deze
segmenten hebben.
Waarom zei ik niet meer dan 32 cijfers voor het totaal
van deze acht segmenten?
Waarom zouden het niet gewoon 32 hexadecimale
cijfers zijn, omdat 32 cijfers maal vier bits per
cijfer ons 128 bits zou geven?
Dit komt omdat IPv6 ons eigenlijk toestaat om een
steno te gebruiken om onze erg lange
IPv6-adressen te vereenvoudigen.
De regels voor steno zijn erg belangrijk
omdat je hier examenvragen over kunt krijgen.
Dus als je vier nullen hebt voor een segment,
kun je daar één nul neerzetten en die voorloopnullen
weglaten.
Laten we bijvoorbeeld doen alsof ik een heel lang
IPv6-adres heb van 2018:0000:0000:0000:0000:0000:4815:54ae.
Met behulp van de eenvoudige
regel kan ik alle segmenten met meerdere nullen vervangen
door een enkele nul.
Dit zou me 2018:0:0:0:4815:54ae geven.
Oké, dit bracht mijn aantal hexadecimale cijfers
terug van 32 naar slechts 17, dus het is ongeveer de helft langer.
Het gaat steeds beter, maar daar wil ik het niet bij laten.
Er is nog een regel die ik
kan gebruiken in de wereld van IPv6 steno.
Deze regel zegt dat als er meerdere segmenten zijn
met allemaal nullen erin en er geen
andere hexadecimale cijfers worden weergegeven, ik dat
kan samenvatten door een dubbele dubbele punt te gebruiken
en al die nullen eruit te halen.
Deze regel is speciaal
omdat je de dubbele dubbele punt maar één keer in een
IPv6-adres kunt gebruiken.
Dus met behulp van mijn dubbele dubbele
punt regel, kan ik 2018:0:0:0:4815:54ae samenvatten in het verwijderen van al
die vijf sets nullen en ze vervangen door
een dubbele dubbele punt en
krijg ik 2018::4815::54ae.
Dus ik ging van 32 hexadecimale cijfers naar
17 hexadecimale cijfers en nu
ben ik van 17 cijfers helemaal terug
naar 12 cijfers, veel kleiner,
veel gemakkelijker om mee te werken.
Je kunt zien hoe dit steno echt nuttig is.
Dus hoe ga je een IPv6-adres herkennen ten opzichte
van een IPv4-adres?
De eerste manier is door te kijken naar wat IPv4 is.
IPv4 gebruikt altijd de gestippelde decimale notatie
met vier octetten.
IPv6 daarentegen gebruikt
dubbele punten tussen de getallen en
wordt hexadecimaal geschreven.
Goed, een van de vragen die je op de
testdag zou kunnen tegenkomen
is om een IPv6-adres te herkennen als je er een ziet.
Je kunt bijvoorbeeld een vraag krijgen
als, welk van de volgende is een IPv6-adres?
Dit is een eerlijke vraag.
Je krijgt een aantal opties zoals 192. 168. 1. 1, waarvan we weten
dat dit het niet is omdat het een IPv4 adres is.
Je krijgt 12:34:56:78:90:AB
of 1234::5678::90AB.
Dus wacht eens even, die laatste twee die ik net zei, die
lijken echt op elkaar, toch?
Ja, maar slechts één daarvan is een geldig IPv6-adres.
Weet je welke het is?
Omdat de meeste studenten hier in de war raken.
De tweede optie hier is eigenlijk geen IPv6-adres.
In plaats daarvan is het een MAC-adres.
Onthoud dat MAC-adressen, die
een Layer 2 fysiek adres zijn, altijd
12 hexadecimale cijfers bevatten en worden gescheiden
door dubbele punten.
Meestal worden ze geschreven
als zes groepen van elk twee cijfers en elk daarvan
wordt gescheiden door een enkele dubbele punt.
Een IPv6-adres daarentegen moet altijd worden geschreven
in segmenten van vier cijfers elk, en ze
moeten altijd 16 segmenten hebben, tenzij je een
dubbele dubbele punt ziet.
In dit voorbeeld hebben we een dubbele dubbele punt
tussen het eerste en tweede segment in onze derde optie.
Dit is dus een goede stenografie die we kunnen gebruiken
en we kunnen identificeren dat het een IPv6 adres
is omdat we alle nullen tussen het
eerste en tweede segment in dit adres hebben verwijderd.
Dus als je iets telt dat eruit
ziet als een IPv6-adres en het heeft
12, precies 12 hexadecimale cijfers gescheiden door enkele dubbele
punten, en je ziet nergens
een dubbele dubbele punt, dan is
dat een MAC-adres, geen IPv6-adres.
Anders, als het er ongeveer zo uitziet
en hexadecimale cijfers bevat,
wordt het een IPv6-adres op de examendag.
Voor het examen hoef je alleen maar te herkennen
hoe een IPv6-adres eruit ziet en je moet er
een kunnen samenvatten door nullen weg te halen
en ze samen te voegen met behulp van die dubbele
dubbele punt-truc.
Als je deze twee dingen kunt
doen, zit je goed voor IPv6 adressering op de examendag.
Wanneer het aankomt op IPv6-adressering,
zijn er drie verschillende adrestypes die je kunt gebruiken:
unicast-adressen, multicast-adressen
en anycast-adressen.
Een van de interessante dingen van IPv6 die
het echt onderscheidt van IPv4 is dat we meerdere
IPv6 adressen kunnen toewijzen aan een enkele interface
op een client.
En deze opdrachten kunnen een mengeling
zijn van deze drie verschillende types:
unicast, multicast en anycast.
Dus zelfs als je maar één netwerkinterfacekaart
op je werkstation of laptop hebt,
kun je meerdere IPv6-adressen en verschillende
soorten IPv6-adressen hebben die aan die
ene kaart zijn toegewezen.
Unicast adressen gaan gebruikt worden
om een enkele interface te identificeren.
Deze worden onderverdeeld in globally-routed unicast
adressen en link-local adressen.
Een globaal gerouteerd unicast-adres
is vergelijkbaar met wat we hebben als een openbaar adres met
IPv4 met unicast-adressen van de A-, B- en C-klasse.
In IPv6 begint een globally-routed
unicast adres altijd
met het eerste segment dat 2000-3999 bevat.
Als je nu 2000-3999 ziet als je eerste segment, betekent dit
dat het een globaal gerouteerd unicast adres is.
Bijvoorbeeld, het IPv6 adres
2584:0db8:8583:1234:5678:882e:0370:7334 zou globaal
gerouteerd worden als een unicast adres
omdat het eerste segment 2584 bevat,
wat tussen 2000 en 3999 ligt.
Een link-local adres daarentegen,
ook wel een lokaal gebruiksadres genoemd,
wordt gebruikt zoals een privé IP-adres in IPv4.
Een link-local adres in IPv6
kan alleen worden gebruikt op
een lokaal netwerk en begint altijd met FE80 als eerste segment
binnen een IPv6-adres.
Wanneer nu een IPv6 systeem opstart, wordt er een
link-local adres aangemaakt voor elke IPv6
interface op dat systeem, zelfs als er al een globally-routable
adres handmatig was geconfigureerd of verkregen via
een configuratieprotocol zoals DHCP.
Om dit te doen gebruikt het iets dat bekend staat
als SLAAC, de stateless address auto-configuration of S-L-A-A-C.
Met stateless auto-configuration
hoeft de host geen adressen of andere configuratie-informatie
te verkrijgen van een gecentraliseerde
server zoals DHCP.
In plaats daarvan kan het zichzelf onafhankelijk een link-local
adres toewijzen, de uniekheid
van dat link-local adres testen, het link-local adres
aan zichzelf toewijzen, contact opnemen met
de router en het knooppunt aanwijzingen geven over hoe verder
te gaan met de autoconfiguratie.
En het kan zelfs het globale unicast adres configureren
dat het wil gebruiken.
We zullen over een paar minuten terugkomen op dit
concept als we er wat dieper op ingaan
en beginnen te praten over EUI-64 en het neighbor discovery
protocol, aangezien beide processen
worden gebruikt met het stateless address
auto-configuration protocol dat bekend staat als
SLAAC.
Vervolgens hebben we multicast-adressen.
Nu worden multicastadressen gebruikt om
een groep interfaces te identificeren zodat
een pakket naar een multicastadres kan worden gestuurd en vervolgens
bij alle interfaces binnen een groep kan worden afgeleverd.
In IPv6 zal een multicast-adres altijd FF bevatten als de eerste
twee cijfers binnen het eerste segment.
Als je FF aan het begin van een IPv6-adres ziet
staan, denk dan aan de multicast.
Het laatste type adres dat we
hebben staat bekend als een anycast adres.
Anycast adressen worden gebruikt om een set interfaces te identificeren
zodat een pakket naar elk lid van een set kan worden gestuurd.
Anycast-adressen worden eigenlijk toegewezen
uit de unicast-adresruimte.
Er is dus echt geen manier om
te bepalen of een IPv6-adres unicast of anycast is door
alleen maar naar het IPv6-adres te kijken.
Als je nu kijkt naar multicast of link-local, dan heb je
een erg makkelijke manier om dit te doen,
maar je hebt geen makkelijke manier
om unicast versus anycast uit te zoeken.
Goed, laten we teruggaan
en wat meer praten over SLAAC, het stateless
address auto-configuration proces.
Nu, zoals ik al zei, is er in IPv6 een auto-configuratieproces
dat bekend staat als SLAAC, en we gebruiken dit om het huidige
netwerk te ontdekken waarop de interface zich bevindt en staan
het dan toe om zijn eigen host-ID te kiezen op basis van
zijn MAC-adres met behulp van een proces dat EUI-64 heet.
Met dit EUI-64 of Extended Unique Identifier proces kan een host
zichzelf een unieke 64-bit
IPv6 interface identifier toewijzen, EUI-64 genaamd.
Nu wordt dit EUI-64 formaatadres verkregen door
het 48-bit MAC-adres van de interface te gebruiken.
Het MAC-adres wordt eerst gescheiden in twee delen van 24 bits.
De eerste helft van het MAC-adres bevat de OUI, of de Organizational
Unique Identifier.
En de tweede helft bevat de specifieke
netwerkinterfacekaart.
Daartussen stoppen
we een 16-bits hexadecimale waarde van FFFE.
Op deze manier kan ik 24 bits, 16 bits en 24
bits samenvoegen tot een 64-bits EUI-adres.
Dit geeft je de 64 bits die je nodig hebt om je interface
op dat netwerk te identificeren.
Dan zal de interface autodiscovery gebruiken
om het netwerk te bepalen waarop
het zich bevindt en het netwerkgedeelte van het IPv6 adres
toevoegen, dat de eerste 64 bits in onze adressen zullen zijn.
Nu zetten we de eerste 64 bits die
het netwerk voorstellen voor de 64 bits van
het EUI-64 adres dat we hebben gemaakt van ons MAC-adres om een
unicast globaal routeerbaar IPv6-adres te maken dat we nu
kunnen gebruiken.
Je kunt dus zien hoe dit alles samenwerkt door
dat MAC-adres te gebruiken
om dit globaal routeerbare adres te maken.
Nu kan DHCP ook gebruikt worden binnen IPv6 als je dat
liever gebruikt.
Als je dat doet, moet je het DHCPv6-protocol gebruiken.
Hierdoor zou je DHCP automatisch
dingen kunnen laten toewijzen vanaf een DHCPv6 server.
Maar omdat het autoconfiguratieproces met EUI-64 al standaard is
ingebouwd in het IPv6-protocol, hoef je eigenlijk
geen DHCPv6 te gebruiken.
Maar als je DHCPv6 wil gebruiken, dan kan dat en het zal je toelaten
om toe te wijzen welke adressen
elke interface zal krijgen in plaats van ze toe te
laten om het autoconfiguratieprotocol
van SLAAC te gebruiken.
Zoals ik al zei kiest IPv6 standaard zijn eigen adres op
basis van het MAC-adres, daarna gebruikt
het NDP of het neighbor discovery protocol
om meer te weten te komen over
de andere Layer 2 adressen op het netwerk op basis
van hun MAC-adressen en kiest
dan zijn eigen host-ID.
Voor het examen hoef je NDP niet grondig te kennen, maar je moet
wel begrijpen dat NDP, dit neighbor discovery
protocol, gebruikt wordt in IPv6 en het neemt veel van de functies
van routeradvertentie en neighbor
discovery over en handelt ze voor je af.