I. Les raisons du lancement d’IPv6
Au début du lancement d’IPv4, l’épuisement de ce dernier n’était pas envisagé.
Mais du fait de l’avancement considérable des nouvelles technologies et de l’augmentation progressive de la taille de l’Internet, on tend vers une pénurie d’adresses IPv4.
Les équipements qui ont besoin d’adresse deviennent de plus en plus nombreux, ce qui augmente de manière considérable la demande d’adresse IPv4.
Cette pénurie d’adresse est la raison principale qui a poussé l’IETF à lancer une nouvelle version du protocole IP.
Des solutions ont été mises en place pour palier à ce problème, à savoir : le découpage d’un réseau en plusieurs sous-réseaux (c’est le principe du CIDR : Classless Inter Domain Routing) et la translation d’adresse (NAT : Network Address Translation).
Mes ces solutions sont à courts termes.
Mais il y a aussi d’autres raisons qui appuient bien le lancement d’IPv6: l’explosion des tables de routage et l’émergence de nouvelles classes d’applications (audio, vidéo, etc.)
II. Format général du paquet IPv6
format général d’un paquet IPv6 comporte deux parties : l’entête de base du paquet, qui a une taille fixe de 40 octets et la charge utile (Payload) qui contient les extensions optionnelles et les données des couches supérieures.

Structure de l’entête :

L’entête d’un paquet IPv6 est constitué de :
- Version (4 bits) : cela représente le numéro de version (ici 6) du protocole IP. Même champs dans IPv4 (de valeur 4).
- Traffic Class (8 bits) : ce champ est utilisé dans la qualité de service pour identifier les classes de trafic ; remplace le champ ToS d’IPv4 (à vérifier).
- Flow Label (20 bits) : il permet e marquage des flux spéciaux pour un traitement différencié.
- Payload Length (16 bits) : cela représente la taille en octet de la charge utile du paquet après l’entête. Il autorise des paquets supérieurs à 64 Koctets. Il remplace Total Length d’IPv4.
- Next Header (8 bits) : il indique le type d’entête qui suit immédiatement celui d’IPv6. Pareil que le champ Protocol d’IPv4 et les même valeurs sont utilisées (TCP=6, UDP=17, ICMP=1). D’autres valeurs spécifiques à IPv6 sont ajoutées (Option Hop-by-Hop=0, Source routing=43, Fragmentation=44, etc.). C’est ce champ qui permet de coder les entêtes d’extensions optionnelles.
- Hop Limit (8 bits) : pareil que le TTL dans IPv4, il est décrémenté à chaque saut. Si ça valeur atteint 0, le paquet est détruit. Il permet de détruire les boucles de routage.
- Adresse source (128 bits)et Adresse destionation (128 bits) : représente respectivement l’adresse de l’émetteur du paquet et celle d’une destination qui peut être différent de l’adresse de destination finale si l’option Routing Header est présente.
N.B : il est important de noter que les ID, Flag, Fragment Offset, Checksum, Header Length présents sur IPv4 sont supprimés dans IPv6.

III. Les extensions optionnelles d’un paquet IPv6
Elles sont identifiées par le champ Next Header.
Les valeurs possibles sont :
- 0 : Hop-by-Hop option (extension) ;
- 2 : ICMP (payload) ;
- 6 : TCP (payload) ;
- 17 : UDP (payload) ;
- 43 : Source Routing (extension) ;
- 44 : Fragmentation (extension) ;
- 50 : Encrypted Security Payload (extension, IPSec) ;
- 51 : Authentication (extension, IPSec) ;
- 59 : Null (No next header) ;
- 60 : Destination option (extension).

III.1 Hop-by-Hop et Destination options Header
L’option hop-by-hop permet de transporter les données qui doivent être examinées sur chaque nœud du chemin suivi par le datagramme IP. Elle a une taille variable.
L’option Destination permet de transporter des données optionnelles qui ont besoin d’être examinées uniquement par les nœuds de destination du paquet.
Toutes les deux ont la même structure d’entête :

- Next header (8 bits) : permet d’identifier le type de données ou de l’option qui se trouve derrière.
- Header extension length (8 bits) : permet d’identifier le nombre de mots de 8 octets, sans compter les 8 premiers octets.
- Options (N bits) : contenu à spécifier.
- Structure de « Options » de l’entête hop-by-hop :

Action : représente l’action à faire si l’option n’est pas reconnue – sur 2 bits.
Ces valeurs sont :
00 : sauter cette option.
01 : supprimer le paquet seulement, pas d’autre option.
10 : supprimer le paquet et envoyer un ICMP.
11 : supprimer le paquet et envoyer un ICMP si ce n’est pas un paquet multicast.
C : modification de la valeur de l’option. Ces valeurs :
0 : ne change pas durant le transit.
1 : peut être changé durant le transit.
Type : c’est le type de payload :
00000 : Pad1
00001 : PadN
00010 : Jumbo Payload
Length : permet de spécifier la taille du champ Data en dessous. La taille du type et de la longueur ne sont pas incluses.
Data : représente les données de l’option à envoyer, spécifique au type d’option.
III.2 Routing Header
Cette extension permet à une source de lister les nœuds intermédiaires à visiter au cours de l’acheminement du paquet vers la destination.
Son entête de base :

- Next header (8 bits) et Header length (8 bits) sont identiques aux précédents.
- Type (8 bits) : permet de spécifier la variante particulière de l’entête.
- Adresses left (8 bits) : spécifie le nombre de nœuds intermédiaires listés qu’il reste à visiter avant la destination finale.
- Exemple :

III.3 Fragmentation Header
C’est utilisé par une source pour envoyer un paquet plus large que celui qui tiendrait dans le MTU vers la destination.
L’entête de base :

- Next header (8 bits) : identique que ceux précédemment.
- Reserved (8 bits) : réservé pour une utilisation future.
- Fragment offset (13 bits) : indique l’offset de données suivant cet entête, en nombre de mots de 8 octets, par rapport au début de la partie fragmentable du paquet initial.
- Res (2 bits) : réservé.
- M (1 bit) : cela vaut 1 (pour more fragments) ou 0 (pour last fragment).
- Identification (32 bits) : numéro unique du paquet fragmenté selon la source et la destination.
III.4 Authentication Header
Cette option est utilisée pour fournir un mécanisme permettant au destinataire de s’assurer de l’identité de la source et de l’intégrité des données.
Son entête de base :

- Next header (8 bits) : identique au précédent.
- Payload Len (8 bits) : cela indique la taille de l’option, mots de 4 octets.
- Reserved (16 bits) : réservé pour une utilisation future.
- Security Parameters Index (32 bits) : permet d’identifier l’association de sécurité (SA) avec le datagramme entrant.
- Sequence Number Field (32 bits) : c’est le numéro de séquence du SA, incrémenté à chaque datagramme.
- Authentication Data (taille variable) : résultat de la valeur d’un procédé cryptographique sur les données, permettant de protéger et de vérifier leur intégrité.
III.5 ESP Header
Elle se place après l’entête et avant les données. Elle permet de compléter l’option AH afin de garantir la confidentialité des données. Elle permet en plus de chiffrer l’ensemble des paquets incluant ou pas l’entête IPv6.
Son entête de base :

- SPI (32 bits) : permet au destinataire d’identifier l’association de sécurité (SA) avec le datagramme entrant.
- Sequence Number Field (32 bits) : identique au précédent.
- Payload Data (taille variable) : contient les données chiffrées.
- Padding (taille variable) : permet de combler l’entête de données non intéressantes afin d’obtenir une taille de multiple. La longueur maximale possible est 255 octets.
- Pad Length (8 bits) : taille du champ « Remplissage ».
- Next header (8 bits) : identique aux autres entêtes.
IV. Notation et types d’adresse
IV.1 Notation
La taille des adresses IP est passée de 32 bits pour l’IPv4 à 128 bits pour l’IPv6 ; soit 4 fois plus qu’IPv4.
Avec cette taille, il est possible d’attribuer jusqu’à 5 x 1028 d’adresse IP par personne, ce qui est pour le moment impossible à épuiser.
Comme les adresses IPv4, les adresses IPv6 ont besoin d’une notation efficace pour une bonne présentation et utilisation par l’Homme.
IV.1.1 Notation décimal pointée
L’idée ici est de reprendre la même notation qu’en IPv4.
Cela va consister à représenter l’adresse par 16 octets (car 16 x 8 bits = 128 bits) dont les valeurs sont exprimées en décimal et séparées par des points (.).
Exemple :
214.14.65.11.105.45.170.34.13.234.18.0.14.0.115.224
Il est visiblement évident que cette représentation est fastidieuse. Raison pour laquelle elle est rarement utilisée.
Elle a été améliorée en diminuant le nombre de bloc et remplaçant les « . »par « : » : la notation hexadécimale.
IV.1.2 Notation hexadécimale doublement pointée (Colon Hex)
Cela consiste à diviser les 128 bits en 8 blocs de 2 octets chacun. Chaque bloc est représenté par 4 chiffres hexadécimaux. Les blocs sont séparés par des deux points « : ».
Format général (X représente une portion de 4 bits) :
XXXX1:XXXX2:XXXX3:XXXX4:XXXX5:XXXX6:XXXX7:XXXX8
Exemple :
5F06:B500:89C2:A100:0000:0800:200A:3FF7
Ce genre de représentation peut être abrégé pour une meilleure simplicité et lisibilité.
IV.1.3 Notation Colon Hex abrégée
L’idée est d’essayer de réduire la taille de l’écriture des adresses.
Pour cela, il faut se baser sur quelques règles.
Règle 1 : omission des zéros (0) à gauche d’un bloc.
Les zéros qui commencent un bloc peuvent être omis.
Exemples :

05F0:00B5:89C2:00A1:0000:0800:200A:0000 devient 5F0:B5:89C2:A1:0:800:200A:0
Règle 2 : compression de zeros successifs
Une suite de blocs contigus ne contenant que des zéros peuvent être remplacé par le symbole « :: ».
Mais cela ne peut être fait qu’une seule fois dans une adresse et il est préférable de le faire avec la plus longue séquence de blocs avec des zéros.
Exemples :
- Pour 2031:0000:130F:0000:0000:09C0:876A:130B
- 2031:0:130F::9C0:876A:130B est bon ;
- 2031::130F::9C0:876A:130B n’est pas bon ;
- Pour 05F0:00B5:89C2:00A1:0000:0800:200A:0000
- 5F0:B5:89C2:A1:: 800:200A:0 est bon ;
- 5F0:B5:89C2:A1:0:800:200A:: est bon
- 5F0:B5:89C2:A1:: 800:200A:: n’est pas bon
IV.1 4 Notation mixte
Cela consiste à utiliser la notation décimale pointée sur les deux derniers blocs de l’adresse IPv6 : XXXX1:XXXX2:XXXX3:XXXX4:XXXX5:XXXX6:A.B.C.D
Exemple :
FEDC:14AB:2311:BBFE:AAAA:BBBB:130.24.24.18
Cette notation est souvent utilisée dans :
- Adresse IPv6 compatible IPv4 :
C’est le cas des tunnels 6to4 (relier des réseaux IPv4 à des réseaux IPv6) :

Ce type de notation n’est plus utilisé.
- Adresse IPv4 mappée :
C’est le cas d’un hôte IPv6 qui est capable de communiquer aussi bien avec un hôte IPv4 qu’avec un hôte IPv6 : 0::FFFF:147.210.0.18/96
IV.1.5 La notation du préfixe
La représentation du préfixe se fait comme la notation CIDR en IPv4. Dans cette notation, on représente la longueur du préfixe en /nombre.
Exemples :
- En IPv4 : 172.16.0.0/16.
- En IPv6 : 2001:DB8::12/40.
IV.2 Les types d’adresse
Il n’existe que trois (3) types d’adresses IPv6 :
- Unicast (Globale, Unique Local, Lien Local) : une à une ;
- Multicast : une vers un groupe ;
- Anycast : une vers la plus proche (alloué à partir d’une adresse Unicast).
Avec IPv6, il n’y a pas de Broadcast (le multicast est utilisé à la place).

IV.2.1 Adresse Unicast
Elle désigne une et une seule interface réseau.
C’est le mode de communication le plus répandu.
Elle est composée de :
- Une partie réseau (préfixe) codée sur 64 bits : 48 bits publics « Global Routing Prefix » et 16 bits de site définissant le sous-réseau.
- Une partie hôte (suffixe) codée aussi sur 64 bits : elle est souvent fabriquée à partir de l’adresse MAC de l’interface et permet d’identifier une machine dans un réseau donné.

On distingue trois types d’adresse Unicast : Lien Local, Unique Local et Global.
IV.2.1.1 Adresse Unicast lien local (Link Local)
Une adresse Link Local a une portée de niveau lien (ne fonctionne que sur un lien donné). Elle n’identifie que les machines qui sont dans le même domaine de niveau 2 (même LAN).
Elle est identifiée par le préfixe FE80::/10 (les 10 premiers bits sont fixes et valent en binaire 1111111010).

IV.2.1.2 Adresse Unicast Unique Local (ULA)
Les adresses ULA permettent d’identifier l’ensemble des machines accessibles dans un site d’une même organisation contenant plusieurs réseaux locaux. Elles sont destinées à un usage privé et peuvent être réutilisées par d’autres organisations sans qu’il y ait conflit. Leur usage est semblable à celui des réseaux privés sous IPv4, mais sans le NAT. Elles ne sont donc pas routables sur Internet.
Ces adresses utilisent le préfixe FC00::/7 (valeur binaire 11111100 ou 11111101).

IV.2.1.3 Adresse Unicast Globale
Une adresse Global Unicast permet d’identifier tous les équipements accessibles depuis Internet. Elle a une portée globale.
Ces types d’adresses sont les seules unicast routables sur Internet.
Elles utilisent le préfixe 2000::/3 (valeur binaire 0010).
IV.2.2 Adresse Multicast
Une adresse multicast désigne un groupe d’interface donné. Une interface est libre de s’abonner à un groupe ou de le quitter à tout moment.
En IPv6, le multicast est utilisé à la place du braodcast (ce dernier étant un cas particulier du multicast).
Les adresses multicast utilisent le préfixe FF00::/8.
Elles disposent d’un champ :
- Lifetime, codésur 4 bits, à la suite du préfixe : l’un de ses bits permet de distinguer les groupes permanents des groupes temporaires.
- Scope, sur 4 bits : ce champ permet une diffusion limitée sur une zone (nœud, site, lien, organisation, global).
- Identificateur de groupe, sur 112 bits.

Exemples de quelques adresses Multicast :
- FF01 : désigne un nœud local, les paquets ne quittent pas l’interface.
- FF02 : désigne un lien local, les paquets ne quittent pas le lien.
- FF05 : désigne un site local, les paquets ne quittent pas le site.
- FF02::9 : désigne tous les routeurs RIPng.
- FF02::5 : désigne tous les routeurs OSPF.
- FF02::6 : désigne tous les routeurs désignés.
- FF02::A : désigne tous les routeurs EIGRP.
IV.2.3 Adresse Anycast
Son technique est similaire au multicast dans le sens ou l’adresse de destination est un groupe d’adresse. Mais le paquet est remis à un seul membre du groupe (le plus proche au sens de la métrique des protocoles de routage) au lieu de le livrer à tous les membres.

Les adresses Anycast sont définies pour fournir la redondance et la distribution de charge (Loadbalancing).
IV.2.4 Autres types d’adresses
Il existe d’autres types d’adresse, à savoir :
- Les adresses réservées :
- L’adresse non spécifiée (::/128) : elle peut être utilisée comme adresse source dans une phase d’acquisition d’adresse réseau ;
- L’adresse localhost (::1/128), équivalente à 127.0.0.1 en IPv4.
- Les adresse de 2000::/3 distinguées :
- Les adresses permanentes (2001::/16) ouvertes à la réservation depuis 1999 :
- 2001::/32 est utilisée par Teredo ;
- 2001:DB8::/32 est réservée pour la documentation par le RFC 3849 ;
- Les adresses 6to4 (2002::/16) utilisées pour acheminer le trafic IPv6 via un ou plusieurs réseaux IPv4 ;
- Toutes les autres adresses routables (plus des ¾) sont actuellement réservées pour un usage ultérieur.
- Les adresses permanentes (2001::/16) ouvertes à la réservation depuis 1999 :
IV.3 Allocation des plages d’adresse
Une adresse IP permet d’identifier d’une partie un réseau et d’une autre partie un hôte dans le réseau.
IV.3.1 Prefix format
Sur les 128 bits de l’adresse IPv6, les 10 bits sont réservés pour définir le type d’adresse. Ces bits sont appelés Prefix format.

IV.3.2 Espaces assignés
Sur l’adresse IPv6, il y a des blocs dont l’usage est défini (les 3/8 ème) et d’autres qui ne sont pas assignés (les 5/8 ème).

IV.3.2.1 Allocation du premier huitième
Le premier huitième est assigné en partie :

Sur cet espace :
- Le premier bloc (les 1/256) est alloué pour les adresses compatibles IPv4 et les adresses spéciales commele Loopback.
- Le troisième bloc (les 1/128) est réservé pour l’allocation d’adresses NSAP.
Tableau de valeurs des blocs :

Focalisons-nous sur l’usage du premier bloc : 0000::/8.
Ce bloc a été alloué pour les adresses indéterminées, de loupback, compatibles IPv4 et mappées.
- Adresse indéterminée :
C’est une adresse dont les 128 bits sont à 0 :

Elle est très utilisée par un équipement ne connaissant pas son adresse IP et le demande.
Elle ne peut pas être utilisée comme adresse de destination.
Notation : ::/128 ou 0:0:0:0/128
- Adresse loopback :
Cette adresse permet d’avoir des fonctionnalités réseaux sur un seul équipement.
IPv6 n’alloue qu’une seule adresse IP, contrairement à IPv4 qui alloue tout le réseau 127.0.0.0.
Tous les 127 premiers bits sont à 0 et le dernier est à 1 :

Ce type d’adresse est utilisé pour tester des logiciels de niveau application ou transport.
Notation : ::1/128 ou 0:0:0:1/128
- Adresse compatible IPv4 :
Avec ce type d’adresse, sur les 120 derniers bits, les 96 sont à 0 et les 32 restants sont occupés par l’adresse IPv4 :

Cette adresse est utilisée pour faire communiquer deux machines IPv6 en traversant un réseau IPv4.
Notation : ::147.210.0.18/96
- Adresse IPv4 mappée IPv6 :
C’est une adresse dont les 88 premiers bits sont à 0, les 16 bits qui suivent à 1 et les 32 bit restants occupés par l’adresse IPv4 :

Ce type d’adresse est utilisé par un équipement IPv6 qui veur communiquer avec un équipement IPv4.
Notation : 0::FFFF:147.210.0.18/96
IV.3.2.2 Allocation du dernier huitième
Cet espace est assigné en partie et contient les adresses Unique Locale Unicast, Lien Local et Multicast.

Tableau de valeurs des blocs :

IV.3.2.3 Allocation de l’espace Global Unicast

Avec ce type d’adresse, on distingue 3 niveaux d’agrégations :

- Processus d’allocation :
Les 48 premiers bits de l’espace Global Unicast, qui représentent le Globzl Routing Prefix, suivent un processus d’allocation très particuliers.
Dans le bloc 2000::/3, l’IANA (Internet Assigned Numbers Authority) à chaque registre (AfriNIC, APNIC, LACNIC, ARIN et RIPE NCC) un préfixe /12.
Le registre alloue un préfixe /32 ou plus à chaque fournisseur de service Intrenet (ISP) IPv6.
Maintenant, la stratégie recommande aux ISP d’attribuer un préfixe /48 à chaque utilisateur final.
Pour les 16 bits de la partie Subnet ID, cela permet aux clients finaux d’avoir jusqu’à 216 = 65536 sous-réseaux.
La partie Interface ID, sur 64 bits, permet d’avoir 264 hôtes sur chaque sous-réseau. Cette partie permet de créer une relation entre l’adresse IPv6 et l’adresse MAC.
En effet, il est possible d’intégrer l’adresse MAC, qui est de 48 bits, dans la partie Interface ID de l’adresse IPv6 en utilisant un mappage.