Pourquoi IPv6 ? L'épuisement d'IPv4
Le 3 février 2011, l'IANA (Internet Assigned Numbers Authority) a alloué les cinq derniers blocs /8 restants aux registres régionaux (RIR). À cette date, l'épuisement du pool global IPv4 est officiellement constaté. Les régions APAC (Asie-Pacifique) et RIPE NCC (Europe) ont épuisé leurs réserves en 2011 et 2019 respectivement.
Les racines du problème
IPv4, conçu en 1981, offre 2^32 = 4,29 milliards d'adresses. En 1981, on pensait que c'était plus qu'assez. Mais trois phénomènes n'avaient pas été anticipés :
- L'explosion de l'Internet grand public : des milliards d'appareils connectés (smartphones, tablettes, IoT)
- L'allocation inefficace des premières années : MIT, Apple, et Ford possèdent chacun un bloc /8 entier (16,7M adresses), qu'ils n'utilisent qu'en partie
- L'IoT : montres connectées, capteurs industriels, caméras IP — chaque objet demande une adresse
Le NAT a prolongé la vie d'IPv4, mais au prix de complexité, de problèmes de performance et d'impossibilité de connexion directe entre deux hôtes derrière un NAT.
Format d'une adresse IPv6
Une adresse IPv6 est composée de 128 bits, représentés en 8 groupes de 16 bits (4 chiffres hexadécimaux chacun), séparés par des deux-points.
2001:0db8:0000:0000:0000:ff00:0042:8329
│ │ │ │ │ │ │ │
└────┴────┴────┴────┴────┴────┴────┘
8 groupes de 4 chiffres hexadécimaux = 32 chiffres hex = 128 bits
Capacité d'adressage
2^128 = 340 282 366 920 938 463 463 374 607 431 768 211 456
≈ 340 sextillions d'adresses
≈ 340 × 10^36 adresses
Pour mettre cela en perspective : il y a assez d'adresses IPv6 pour attribuer 670 quadrillions d'adresses à chaque millimètre carré de la surface terrestre.
Règles de simplification — La notation ::
Les adresses IPv6 complètes sont longues et difficiles à mémoriser. Deux règles permettent de les simplifier.
Règle 1 : Supprimer les zéros de tête
Dans chaque groupe, les zéros non significatifs (à gauche) peuvent être omis.
2001:0db8:0000:0000:0000:ff00:0042:8329
→ 2001:db8:0:0:0:ff00:42:8329
Règle 2 : Remplacer un groupe contigu de zéros par ::
Un seul groupe de zéros consécutifs peut être remplacé par ::. Cette substitution ne peut être appliquée qu'une seule fois dans une adresse.
2001:db8:0:0:0:ff00:42:8329
→ 2001:db8::ff00:42:8329
Exemples de simplification
| Adresse complète | Adresse simplifiée |
|---|---|
2001:0db8:0000:0000:0000:0000:0000:0001 |
2001:db8::1 |
fe80:0000:0000:0000:0202:b3ff:fe1e:8329 |
fe80::202:b3ff:fe1e:8329 |
0000:0000:0000:0000:0000:0000:0000:0001 |
::1 (loopback) |
0000:0000:0000:0000:0000:0000:0000:0000 |
:: (all zeros) |
2001:0db8:0000:0001:0000:0000:0000:0001 |
2001:db8:0:1::1 |
Ambiguïté interdite
# INVALIDE : :: utilisé deux fois
2001:db8::ff00::1 ← INTERDIT
# VALIDE : le groupe de zéros le plus long prend la notation ::
2001:db8:0:0:1:0:0:1
→ 2001:db8::1:0:0:1 (préférable)
→ 2001:db8:0:0:1::1 (aussi valide)
Types d'adresses IPv6
IPv6 définit plusieurs types d'adresses avec des rôles distincts. Il n'y a pas de broadcast en IPv6 — le multicast le remplace.
Adresses Unicast (un seul destinataire)
Global Unicast — 2000::/3
Équivalent des adresses publiques IPv4. Routables sur Internet.
Préfixe : 2000::/3
Plage : 2000:: à 3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Exemple : 2001:db8:1:2::cafe/64
Structure d'une Global Unicast :
| 48 bits | 16 bits | 64 bits |
| Global Routing Pref | Subnet ID | Interface ID |
| Attribué par l'ISP | Par l'admin| Auto-généré |
Link-Local — fe80::/10
Adresses utilisables uniquement sur le lien local (segment réseau directement connecté). Automatiquement attribuées à chaque interface IPv6 active. Jamais routées.
Préfixe : fe80::/10
Exemple : fe80::202:b3ff:fe1e:8329/64
# Voir les adresses link-local
ip -6 addr show | grep fe80
L'Interface ID des adresses link-local est souvent dérivé de l'adresse MAC via le processus EUI-64 :
MAC : 00:02:b3:1e:83:29
EUI-64 : 0202:b3ff:fe1e:8329
(bit universel/local inversé, ff:fe inséré au milieu)
Loopback — ::1
Équivalent de 127.0.0.1 en IPv4. L'hôte lui-même.
ping6 ::1
# ou
ping -6 ::1
Adresses Multicast — ff00::/8
Remplace le broadcast d'IPv4. Un paquet multicast est envoyé à tous les membres d'un groupe.
| Adresse | Portée | Usage |
|---|---|---|
ff02::1 |
Link-local | Tous les nœuds IPv6 |
ff02::2 |
Link-local | Tous les routeurs |
ff02::1:ff00:0/104 |
Link-local | Solicited-node (NDP) |
ff05::1:3 |
Site-local | Tous les serveurs DHCP |
Adresses Anycast
Une adresse attribuée à plusieurs interfaces (sur plusieurs nœuds). Le paquet est acheminé vers l'interface la plus proche (selon la métrique de routage). Utilisé par les CDN et les serveurs racines DNS.
En-tête IPv6 simplifié
L'un des grands avantages d'IPv6 est son en-tête simplifié. L'en-tête IPv4 comporte 14 champs et est variable en taille. L'en-tête IPv6 est fixe à 40 octets et n'a que 8 champs.
Comparaison des en-têtes
| Champ | IPv4 | IPv6 |
|---|---|---|
| Version | ✓ | ✓ |
| Taille de l'en-tête | ✓ | Supprimé (fixe à 40B) |
| ToS/DSCP | ✓ | Traffic Class |
| Longueur totale | ✓ | Payload Length |
| Identification | ✓ | Supprimé (dans ext. headers) |
| Flags | ✓ | Supprimé |
| Fragment Offset | ✓ | Supprimé |
| TTL | ✓ | Hop Limit |
| Protocole | ✓ | Next Header |
| Checksum | ✓ | Supprimé (redondant) |
| Adresse source | 32 bits | 128 bits |
| Adresse destination | 32 bits | 128 bits |
| Options | Variable | Extension Headers |
| Taille totale | 20-60 octets | 40 octets fixe |
La suppression du checksum IP accélère le traitement par les routeurs (le checksum TCP/UDP couvre déjà l'intégrité).
SLAAC — Stateless Address Autoconfiguration
IPv6 introduit la configuration automatique sans état (SLAAC), définie dans la RFC 4862. Un hôte IPv6 peut se configurer une adresse globale sans serveur DHCP.
Processus SLAAC étape par étape
1. L'interface génère une adresse link-local fe80::/64
(basée sur EUI-64 ou random)
2. L'hôte envoie un Router Solicitation (RS) en multicast ff02::2
"Y a-t-il des routeurs sur ce lien ?"
3. Le routeur répond avec un Router Advertisement (RA)
contenant : préfixe réseau, durée de vie, MTU
4. L'hôte combine le préfixe du RA (64 bits) + son Interface ID (64 bits)
→ Adresse globale complète
5. L'hôte vérifie l'unicité avec Duplicate Address Detection (DAD)
(envoi de Neighbor Solicitation vers l'adresse solicited-node)
# Voir les adresses auto-configurées
ip -6 addr show
# Exemple de sortie :
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
# inet6 2001:db8:cafe:1:a00:27ff:fe4e:66a1/64 scope global dynamic
# valid_lft 86393sec preferred_lft 14393sec
# inet6 fe80::a00:27ff:fe4e:66a1/64 scope link
Dual-Stack : coexistence IPv4 et IPv6
La transition vers IPv6 se fait progressivement via le dual-stack : chaque interface dispose simultanément d'une adresse IPv4 et d'une adresse IPv6. L'application choisit le protocole selon la disponibilité.
# Vérifier la configuration dual-stack
ip addr show eth0
# Exemple de sortie dual-stack :
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
# inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
# inet6 2001:db8:1::100/64 scope global
# inet6 fe80::1/64 scope link
# Ping IPv6
ping6 google.com
ping -6 2001:4860:4860::8888 # DNS Google IPv6
# Traceroute IPv6
traceroute6 google.com
Algorithme Happy Eyeballs (RFC 8305)
Les navigateurs modernes utilisent Happy Eyeballs : ils tentent IPv6 et IPv4 quasi-simultanément (délai de 250ms), et utilisent la connexion qui répond en premier. Cela évite les timeouts en cas d'IPv6 mal configuré.
Tableau comparatif IPv4 vs IPv6
| Caractéristique | IPv4 | IPv6 |
|---|---|---|
| Taille d'adresse | 32 bits | 128 bits |
| Notation | Décimale pointée | Hexadécimale avec : |
| Nombre d'adresses | ~4,3 milliards | ~340 sextillions |
| Configuration | Manuel ou DHCP | SLAAC ou DHCPv6 |
| Broadcast | Oui | Non (remplacé par multicast) |
| Fragmentation | Routeurs + hôtes | Hôtes uniquement |
| Checksum en-tête | Oui | Non |
| Taille en-tête | 20-60 octets | 40 octets (fixe) |
| IPsec | Optionnel | Obligatoire (RFC 6434) |
| NAT requis | Souvent | Non nécessaire |
| Résolution de voisin | ARP (couche 2) | NDP/ICMPv6 (couche 3) |
| Loopback | 127.0.0.1 | ::1 |
| Lien local | APIPA 169.254/16 | fe80::/10 |
NDP — Neighbor Discovery Protocol
IPv6 remplace ARP par le NDP (Neighbor Discovery Protocol), défini dans la RFC 4861. NDP fonctionne via ICMPv6 et gère plusieurs fonctions :
| Fonction NDP | Messages ICMPv6 | Équivalent IPv4 |
|---|---|---|
| Résolution d'adresse | Neighbor Solicitation / Advertisement | ARP |
| Détection de routeur | Router Solicitation / Advertisement | — |
| Détection de doublon | DAD (Duplicate Address Detection) | ARP gratuit |
| Redirection | Redirect | ICMP Redirect |
# Table des voisins IPv6 (équivalent de la table ARP)
ip -6 neigh show
# Exemple :
# 2001:db8:1::1 dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE
# fe80::1 dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE
Commandes IPv6 essentielles
# Afficher toutes les adresses IPv6
ip -6 addr show
# Afficher la table de routage IPv6
ip -6 route show
# Ajouter une adresse IPv6 statique
sudo ip -6 addr add 2001:db8:1::100/64 dev eth0
# Ajouter une route par défaut IPv6
sudo ip -6 route add default via 2001:db8:1::1
# Ping IPv6 (6 paquets)
ping6 -c 6 2001:4860:4860::8888
# DNS sur IPv6
dig AAAA google.com
dig @2001:4860:4860::8888 google.com AAAA
# Traceroute IPv6
traceroute6 ipv6.google.com
# Vérifier la connectivité IPv6 publique
curl -6 https://ifconfig.me/ip
Adoption d'IPv6 en 2026
Selon les statistiques Google, plus de 45% du trafic vers les serveurs Google se fait désormais en IPv6. Les opérateurs mobiles (Free, Orange, SFR) proposent du dual-stack natif. Les fournisseurs cloud (AWS, GCP, Azure) supportent pleinement IPv6.
Déployer IPv6 n'est plus optionnel pour une infrastructure sérieuse : c'est une exigence de résilience et de préparation à l'avenir.
Passez au chapitre suivant : Protocole ARP — comment IP et Ethernet se parlent au niveau local.