Blue Flower

Cet article présente IPv6 et les problématiques d'intégration d'IPv6 dans IPv4.

 

IPv4

Adresse IPv4 sur 32 bits (4 octets), soit 2^32 adresses, soit 4,3 milliards

2^32 = (1,024 * 2^10) * (1,024 * 2^10) * ( 1,024 * 2^10) * (2^2) = 1,024^3 * 2^10^3 * 4 =  1,024^3 * 4  2^10^3 = 4,3 * 2^10^3 = 4,3 * 10^3^3 = 4,3 10^9

L'adressage IPv4 ne répond donc plus aux besoins :  pas assez au vue du nombre d'humain, pas assez avec l'arrivée des objets connectés.

Cette pénurie d'adresse a été résolue par l'utilisation d'adresses privées et du NAT. Le NAT a été créé pour pallier à cet insuffisance. Le bout en bout, qui était la philosophie d'IPv4 a alors disparu.

 

IPv6

Adresse IPv6 sur 128 bits (16 octets), soit 2^128 adresses, soit 3,4 10^38 adresses

2^128 = (2^10) ^12 * (2^8) =  (2^10) ^12 * (2^10)  / 4 = (1,024*10^3)^12 * (1,024*10^3)/4 =  1,024^12 * 10^36 * (1,024*10^2)*10/4 = 1,024^13 * 10^38 * 2,5

= 3,4 10^38

La pénurie d'adresse IPv6 n'est donc pas pour demain. La notion de NAT ne sera plus nécessaire avec IPv6.

 

Notation des adresses IPv6

Les 128 bits de l'adresse IPv6 sont présentées sous la forme de 8 blocs de 16 bits. Chaque bloc de 16 bits est alors noté sous forme hexadécimal et non décimal comme en IPv4.

Exemple :

En binaire, les 128 bits

00100000 00000001 00001101 10111000 00000000 00000000 00000000 00000000 00000000

00001000 00001000 00000000 00100000 00001100 01000001 01111010

En notation hexadécimal IPv6 :

2001:0db8:0000:0000:0008:0800:200c:417a

En notation compacte :

2001:db8::8:800:200c:417a

 

Notation des préfixes IPv6

Comme en IPv4, la longueur du préfixe d'une adresse IPv6 permet de connaitre le nombre de bits qui représentent la partie réseau.

Exemple, une adresse IPv6 avec 60 bits pour la partie réseau 2001:db8:24:a1a1:8:800:200C:417a/60

Le réseau correspondant est 

2001:db8:24:a1a0::/60

Attention, le dernier 0 de a1a0 ne fait pas partie du réseau, mais il faut le mettre car sinon on pourrait croire que le réseau est 2001:db8:24:0a1a::/60 .

Dans l'exemple, l'adresse IP avait pour ce bit une valeur de 1. On a mis un 0 pour exprimer le réseau d'appartenance de cet IP.

 

Les différents types d'adresse IPv6

Il existe différents types d'adresse et de portée différente.

Adresse unicast : adresse unique qui définit une interface.

Mais la portée peut être :

globale, on parle d'adresse GUA (global unicast address); cette adresse est donc unique sur tout l'internet v6.

locale, on parle d'adresse ULA (unicast local address); cette adresse est privée, donc non accessible depuis internet v6, mais routable dans le réseau interne de l'entreprise.

lien local, on parle d'adresse link local addrress : cette adresse est restreinte à un lien ou domaine de diffusion de type VLAN

Adresse multicast : permet de désigner un groupe d'interface. Ce groupe d'interface peut être par exemple le groupe des interfaces de type routeur, le groupe des interfaces de type "serveur DHCP" par exemple, ou par exemple un certain nombre de PC souhaitant recevoir un flux multicast. Ainsi, il existe des adresses multicast réservées pour les usages courant, comme par exemple les routeurs.

Adresse anicast : type d'adresse au stade expérimental. Comme multicast, désigne un groupe d'adresse, mais la datagramme à destination d'une adresse anycast ne sera pas remis à tous ces membres, mais seulement à un seul.

 

Toutes ces différents type d'adresse / portée sont identifiables par des préfixes réservés.

 Type Bit de poids forts   Notation hexadécimale  Commentaire
 Non spécifié  0...0  ::/128  
 Adresse de bouclage (loopback)  0...1  ::1/128  
 Multicast  1111 1111  ff00::/8  
 Unique local (ULA)  1111 1101  fd00::/8 Ces adresses ne peuvent sortir sur internet, les fournisseurs d'accès ne doivent pas les router. En principe, c'est fc00::/7 (1111 110). En prenant 1111 1101, on aboutit à fd00::/8 qui est bien un sous ensemble de fc00::/7.
 Globale unique (GUA)  001  2000::/3  Comprend donc les adresses commençant par 2 ou 3 : 0011 = 0x3
 Adresse 6to4   2002::/16  Adresse utilisée pour des sites IPv6 isolés interconnectés par un réseau IPv4.
 Unique lien local (link local address)  1111 1110 10  fe80::/10  

 

Les adresses unicast globales

Ces adresses sont donc publiques et routables sur internet. La plage de ces adresses a été définie dans la RFC 3587 et 3513.

Ainsi, la topologie réseau de ces adresses est la suivante :

les n premiers bits sont alloués par le fournisseur d'accès et constitue le Global Prefix; cette valeur oscille entre 48 à 64 suivant les fournisseurs d'accès à internet (FAI), 48 était la recommandation initiale

les 16 bits suivants permet de structurer la topologie du site (SID pour subnet id)

les 64 derniers bits suivants permettent de définir l'identifiant de l'interface (IID : interface id)

Le plan agrégé 2000::/3 a été découpé en plusieurs plages d'adresses qui sont allouées par l'IANA aux différents RIR (Registres Internet Régionaux). Les RIR gèrent les ressourcesd'adressage IPv4 et IPv6 dans leur région (au niveau mondial). L'IANA alloue des blocs de taille/23 à /12 dans l'espace unicast global ( 2000::/3 ) aux cinq RIR. Ces derniers les allouent à eur tour aux LIR (fournisseur d'accès à internet) sous forme de blocs de taille minimale de /48.Les RIR peuvent choisir de subdiviser leur bloc /23 en 512 blocs /32, typiquement un par LIR. Le LIR peut à son tour assigner 65536 blocs /48 à ses clients, qui disposent alors chacun de65536 réseaux /64.

L'identifiant d'interface

Cet identifiant doit être unique sur le lien ou sur le domaine de diffusion.

Pour déterminer cette valeur, il existe 4 méthodes possibles :

adresse saisie manuellement,

adresse dérivée de l'adresse MAC. C'est la méthode la plus courante, tout spécialement pour l'adresse link local

aléatoire,

cryptographique.

 

L'adresse saisie manuellement est utilisé dans le cas des serveurs afin d'assurer une stabilité.

L'adresse dérivée de l'adresse MAC est le cas courant pour l'adresse de type lien local. La critique de cette méthode concerne la confidentialité. Une personne changeant de réseau aura une nouvelle adresse, mais la partie identifiant d'interface sera la même. Il est alors possible de tracer les individus et de connaitre la marque de la carte réseau.

L'adresse aléatoire permet de rendre les utilisateurs anonymes.

 

Comment spécifier la méthode choisi pour calculer l'interface identifer?

En fait, chaque OS a sa méthode pour définir l'IID. Une interface peut même avoir par exemple deux adresses globales, une avec  un iid calculé sur l'adresse MAC et une autre calculé de façon aléatoire avec une durée de vie limitée.

 

Les adresses multicast

Il s'agit des adresses de la forme ff00::/8.

Les bits drapeaux 0RPT ont le rôle suivant :

le premier bit vaut 0 car son usage est pas encore défini

le bit R sert à la notion de rendez-vous (RFC 3956)

le bit P indique la méthode de création (RFC 3306)

le bit T (transient) permet de savoir s'il s'agit d'une adresse multicast bien connue. Vaudra alors 0.

 

Le champ scope a pour but de définir la portée du datagramme. En IPv4, la notion de saut permettait de répondre à ce besoin. En IPv6, une autre stratégie a donc été définie (on peut toujours en plus utiliser la notion de hop limit).

Ci-dessous la codification des différentes portées :

 Code Portée 
 0  reserved
 1  node-local
 2  link-local
 3  realm-local
 4  admin-local
 5  site-local
 8  organisation-local
 e  global
 f  reserved

 

Listes des adresses multicast bien connues

Adresse de multicast  Population concernée 
 ff01::101  Tous les serveurs NTP de la même interface (c.à.d. le même noeud) que l'émetteur
 ff02::101  Tous les serveurs NTP du même lien que l'émetteur
 ff05::101  Tous les serveurs NTP du même site que l'émetteur
 ff0e::101  Tous les serveurs NTP de l'Internet
 ff01::1  Toutes les interfaces du noeud
 ff02::1  Toutes les noeuds sur le même lien que l'interface
émettrice (correspond au broadcast 255.255.255.225
d'IPv4)
 ff01::2  Tous les routeurs du noeud
 ff02::2  Tous les routeurs du lien
 ff05::2  Tous les routeurs du site
 ff02::1:2  Tous les serveurs DHCPv6 et relais DHCPv6

 

Adresses IPv6 multicast sollicitées

Ce type d'adresse IPv6 sert aux mécanisme suivant :

lors de la phase de Détection de la duplication des adresses (DAD)

lors de la phase de Sollicitation des voisins (Neighbor Sollicitation)

L'adresse de "multicast sollicité" se construit automatiquement à partir d'une adresse IPv6 unicast (ou anycast) en concaténant le préfixe réservé ff02::1:ff00:0 /104 aux 24 bits de poids faible de l'adresse unicast ou anycast.

 

Adresses MAC associées aux adresses IPv6 multicast sollicitées

L'adresse MAC de multicast est déduite de l'adresse multicast IPv6 en concaténant les 32 derniers bits (4 octets) de l'adresse multicast IPv6 au préfixe MAC prédéfini 33-33
Par exemple, à l'adresse multicast IPv6 ff0e:30:2001:660:3001:4002:ae45:2C56 correspondra l'adresse MAC 33-33-AE-45-2C-56.

 

En-tête IPv6

Ci-dessous la structure de l'en-tête IPv6 :

 

L'en-tête IPv6 a une taille de 40 octets contre 20 en IPv4.

Version (sur 4 bits) : contient la version d'IP, donc 6.

Classe de trafic /  Traffic Class (sur 8 bits) :

Les 6 premiers bits représentent le champ DSCP.

Les 2 bits suivants représentent le champ ECN (Explicit Congestion Notification) qui permet au routeur de signaler des problèmes de congestion du réseau.

Identificateur de flux /  Flow Label (sur 16 bits) :  ce champ sert au routeur à identifier un même flux (au lieu de lire l'IP source et dest, les ports sources et destination); c'est donc l'application émettrice qui définit cette valeur pour un flux donné.

Actuellement, ce champ est peu utilisé.

Longueur des données /  Payload Length (sur 16 bits) :

définit le nombre d'octets qui suivent après l'en-tête IP. Si une extension IP est présente, sa taille est inclue dans le calcul de la longueur des données.

En-tête suivant / Next Header (sur 8 bits) :

permet d'indiquer le contenu du paquet IP : un flux TCP, un flux UDP, ...

Ainsi les valeurs des en-têtes les plus utilisés sont les suivants :

Valeur décimale  Valeur hexadécimale   Protocole 
 0 0x00  Proche en proche
 4 0x04  IPv4
 6 0x06  TCP
 17 0x11  UDP
 41 0x29  IPv6
 43 0x2b  Routage
 44 0x2c  Fragmentation
 50 0x32  Confidentialité
 51 0x33  Authentification
 58 0x3a  ICMPv6

Nombre maximal de saut / Hop Limit (sur 8 bits) :

définit le nombre maximal de routeur que peut traverser un datagramme. Ainsi, la valeur maximale est donc 255. Dans la pratique sur internet, on constate qu'un paquet traverse au maximum 40 routeurs, donc la taille de ce champ est suffisante.

Adresse source et adresse destination (sur 128 bits): l'adresse IPv6 sur 128 bits

Extension à l'en-tête IPv6 / IPv6 extension :

Ci-dessous la structure d'une extension d'en-tête IPv6 

 

 

Evolution de l'en-tête depuis IPv4

L'en-tête IPv6 ne contient plus de contrôle d'erreur (checksum). Avec IPv4, à chaque traversée de routeur, comme le champ TTL est décrémenté, le routeur doit calculer à nouveau le checksum. Tous les protocoles de niveau supérieur doivent mettre en œuvre un mécanisme de contrôle d'erreur de bout en bout, incluant un pseudo-entête
qui prend en compte les adresses source et destination. Le contrôle d'erreur d'UDP, facultatif pour IPv4, devient ainsi obligatoire.

La fonction de fragmentation a aussi été retirée des routeurs. Les champs de l'en-tête IPv4 qui s'y reportent ( identification, drapeau, place du fragment ) ont été supprimés.

Une autre évolution majeure depuis l'en-tête IPv4 est la spécification des extensions d'en-tête pour remplacer les options. En effet, dans le cas d'IPv4, les options sont incluses dans l'en-tête. Celui-ci est donc de taille variable (taille indiquée dans le champ Internet Header Length), ce qui peut compliquer le traitement dans les routeurs intermédiaires. Les extensions à l'entête IPv6 simplifient la mise en oeuvre de ces fonctionnalités et permettent de garder la taille de l'en-tête IPv6 fixe à 40 octets.

 

Les extensions IPv6

Le mécanisme d'extension permet de traiter les cas particuliers sans changer la taille de l'en-tête IPv6 que chaque routeur doit lire.

L'ordre des extensions est décrit dans la section 4.1 du RFC 2460. La classification des extensions est fonction de la portée de celles-ci:
• extension impliquant le destinataire: Destination, ESP, AH, Fragmentation;
• extensions impliquant tous les routeurs intermédiaires: Hop-by-Hop ;
• extensions impliquant seulement certains routeurs désignés: Routing.

L'enchaînement des extensions se fait dans un ordre bien déterminé. Par exemple, une extension concernant tous les routeurs sur le chemin ( Hop-by-Hop ) devra forcément se trouver en première position. Si elle se trouvait à la suite d'une extension Destination, elle ne pourrait être lue, l'extension Destination n'étant interprétée que par le destinataire du paquet.

 

Ci-dessous divers cas d'extensions IPv6 :

 

Encapsulation

Ci-dessous un schéma de l'encapsulation :

DOD : Department Of Defense, qui est à l'origine de TCP/IP.

 

Traitement des couches basses

La couche physique est fréquemment soumise à différentes perturbations issues d’un monde extérieur au canal de transmission: radiations électromagnétiques, micro-coupures ou altérations des signaux par différents facteurs. Les coupleurs intégrés dans les cartes réseau réalisent les fonctions nécessaires et utiles au niveau physique , et on dispose d’un indicateur de qualité de la transmission avec le calcul de CRC (Contrôle de Redondance Cyclique).

Ci-dessous la trame Ethernet :

Une fois que l’arrivée d’une trame Ethernet est détectée par le coupleur, les premiers champs immédiatement accessibles correspondent aux adresses MAC Destination et Source puis, soit au champ Longueur dans le cas d’une encapsulation au standard 802.3, ou bien au champ EtherType dans le cas d’une encapsulation avec le standard Ethernet original. Ensuite, l’enveloppe de la trame transporte les données, qui correspondent aux paquets IPv6 dès lors que le champ EtherType = 0x86dd . Vient ensuite le champ CRC codé sur 32 bits. Dans le cas d’une encapsulation au standard 802.1Q, d’autres champs permettent la reconnaissance du numéro de VLAN ( Virtual Local Access Network ) et du niveau de priorité défini dans le standard 802.1p. Un des éléments particulièrement importants est la capacité de transport de la trame. Dans l’exemple ci-dessus, nous voyons que la trame Ethernet traditionnelle dispose d’une enveloppe qui autorise le transport de 1500 octets maximum: MTU = 1500 (MTU = Maximum Transmit Unit).

En IPv6, une taille minimale de 1280 octets est imposée.

 

Contrôler le fonctionnement du réseau par ICMPv6

Terminologie

Un équipement connecté au réseau est dénommé nœud. Si ce nœud est un équipement terminal, on parle d'hôte. Le sous-réseau qui correspond à un réseau local sous-jacent se qualifie, en IPv6, de lien. Tous les nœuds attachés au même lien sont des voisins.

Les fonctions assurées par ICMPv6

ICMPv6 intègre plus de fonctionnalités qu'ICMPv4 :

  • message d'erreur au cours de l'acheminement d'un paquet
  • test d'accessibilité d'un noeud
  • configuration automatique des équipements
  • gestion des groupes multicast (MLD : multicast Listener Discovery)
  • résolution d'adresse IP en adresse MAC (équivalent du protocole ARP) à l'aide de NDP (Neighbor Discovery Protocol).

 

Format général d'un message ICMPv6

Champ Type :

De 0 à 127, il s'agit de message d'erreur

De 128 à 255, il s'agit de message d'information

Champ Code :

Ce champ précise le champ Type

Ci-dessous les principaux Type / Code de message ICMP :

Ces numéros sont gérés par l'IANA (Internet Assigned Number Authority).

Type  Code   Signification
 1    Destination inaccessible
 1  0  Aucune route vers la destination
 1  1  La communication avec la destination est administrativement interdite
 1  2  Hors portée de l'adresse source
 1  3  L'adresse est inaccessible
 1  4  Le numéro de port est inaccessible
 1  5  L'adresse source est filtré par un firewall
 1  6  L'adresse destination est rejetée
 2    Paquet trop grand
 3    Délai expiré
 3  0  Limite du nombre de sauts atteinte
 3  1  Temps de réassemblage dépassé
 4    Erreur de paramètre
 4  0  Champ d'en-tête erroné
 4  1  Champ d'en-tête suivant non reconnu
 4  2  Option non reconnue
 128    Demande d'ECHO
 129    Réponse d'ECHO

 

Détail du message d'ECHO