Document écrit par Nico VanHaute de l'IUT de Béziers
Les jours du protocole IP dans sa forme actuelle (IPv4) sont comptés. Le réseau Internet
était utilisé largement par les universités, les industries de pointe, et le gouvernement
dès le milieu des années 1990, mais Internet intéresse de plus en plus les entreprises et
les sociétés commerciales - il sera utilisé par un grand nombre d'individus et de systèmes exprimant les uns et les autres des besoins différents. Par exemple : avec la convergence imminente de l'ordinateur, des réseaux, de l'audiovisuel et de l'industrie des loisirs, chaque poste de télévision deviendra avant longtemps un équipement d'accès à Internet permettant à des milliards d'individus de pratiquer, par exemple, la vidéo à la demande, le télé-achat ou le commerce électronique.
Dans ces circonstances, le protocole IPv6 (appelé également IPng pour IP new generation) doit offrir plus de flexibilité et d'efficacité, résoudre toute une variété de problèmes nouveaux et ne devrait jamais être en rupture d'adresses.
Les objectifs principaux de ce nouveau protocole furent de :
- Supporter des milliards d'ordinateurs, en se libérant de l'inefficacité de l'espace des adresses IP actuelles,
- Réduire la taille des tables de routage,
- Simplifier le protocole, pour permettre aux routeurs de router les datagrammes plus rapidement,
- Fournir une meilleure sécurité (authentification et confidentialité) que l'actuel protocole IP,
- Accorder plus d'attention au type de service, et notamment aux services associés au trafic temps réel,
- Faciliter la diffusion multidestinataire en permettant de spécifier l'envergure,
- Donner la possibilité à un ordinateur de se déplacer sans changer son adresse,
- Permettre au protocole une évolution future,
- Accorder à l'ancien et au nouveau protocole une coexistence pacifique.
Le protocole IPv6 répond raisonnablement aux objectifs édictés. Il maintient les meilleures fonctions
d'IPv4, en écarte ou minimise les mauvaises, et en ajoute de nouvelles quand elles sont
nécessaires.
En général, IPv6 n'est pas compatible avec IPv4, mais est compatible avec tous les autres
protocoles Internet, dont TCP, UDP, ICMP, IGMP, OSPF, BGP et DNS ; quelque fois, de légères modifications sont requises (notamment pour fonctionner avec de longues adresses).
La nouveauté majeure d'IPv6 est l'utilisation d'adresses plus longues qu'IPv4.
Elles sont codées sur 16 octets et permettent de résoudre le problème qui mit IPv6 à l'ordre du jour : procurer un ensemble d'adresses Internet quasi illimité.
IPv4 permet d'adresser 2^32=4,29.10^9 adresses tandis que IPv6 permet d'en adresser
2^128=3,4.10^38 adresses.
L'amélioration majeure d'IPv6 est la simplification de l'en-tête des datagrammes.
L'en-tête du datagramme de base IPv6 ne comprend que 7 champs (contre 13 pour IPv4).
Ce changement permet aux routeurs de traiter les datagrammes plus rapidement et améliore
globalement leur débit.
La troisième amélioration consiste à offrir plus de souplesse aux options.
Ce changement est essentiel avec le nouvel en-tête, car les champs obligatoires de l'ancienne version sont maintenant devenus optionnels.
De plus, la façon dont les options sont représentées est différente ;
elle permet aux routeurs d'ignorer plus simplement les options qui ne leur sont pas destinées. Cette fonction accélère le temps de traitement des datagrammes.
D'autre part IPv6 apporte une plus grande sécurité:
L'authentification et la confidentialité constituent les fonctions de sécurité majeures
du protocole IPv6.
Finalement, une plus grande attention que par le passé a été accordée aux types de services.
Bien que champ Type de services du datagramme IPv4 ne soit que très rarement utilisé, la croissance attendue du trafic multimédia dans le futur nécessite de s'y intéresser.
Voici ce à quoi ressemble un datagramme IPv6:
<--------------------------- 32 bits --------------------------->
Version |
Classe de traffic |
Identificateur de flux |
|
Longueur des données |
En-tête suivant |
Nombre de sauts |
|
|
|
|
Voici la signification des différents champs:
- Le champ Version est toujours égal à 4 bits pour IPv6.
Pendant la période de transition de IPv4 vers IPv6, les routeurs devront examiner ce champ pour savoir quel type
de datagramme ils routent.
- Le champ Classe de trafic (codé sur 8 bits) est utilisé pour distinguer les sources qui doivent bénéficier
du contrôle de flux des autres. Des priorités de 0 à 7 sont affectées aux sources capables de ralentir leur débit
en cas de congestion. Les valeurs 8 à 15 sont assignées au trafic temps réel (les données audio et vidéo en font partie) dont le débit est constant.
Cette distinction des flux permet aux routeurs de mieux réagir en cas de congestion.
Dans chaque groupe prioritaire, le niveau de priorité le plus faible correspond aux datagrammes les moins importants.
- Le champ Identificateur de flux contient un numéro unique choisi par la source qui a pour but de faciliter le travail des routeurs et de permettre la mise en oeuvre les fonctions de qualité de services comme RSVP (Resource reSerVation setup Protocol). Cet indicateur peut être considéré comme une marque pour un contexte dans
le routeur. Le routeur peut alors faire un traitement particulier : choix d'une route, traitement en "temps-réel"
de l'information, ...
Le champ identificateur de flux peut être rempli avec une valeur aléatoire qui servira à référencer le contexte.
La source gardera cette valeur pour tous les paquets qu'elle émettra pour cette application et cette destination.
Le traitement est optimisé puisque le routeur n'a plus à consulter que cinq champs pour déterminer l'appartenance
d'un paquet. De plus, si une extension de confidentialité est utilisée, les informations concernant les numéros
de port sont masquées aux routeurs intermédiaires.
- Le champ Longueur des données utiles (en anglais payload) sur deux octets, ne contient que la taille des données utiles,
sans prendre en compte la longueur de l'en-tête. Pour des paquets dont la taille des données serait supérieure à 65535 ce champ vaut 0 et l'option jumbogramme de l'extension de "proche en proche" est utilisée.
- Le champ En-tête suivant a une fonction similaire au champ protocole du paquet IPv4:
Il identifie tout simplement le prochain en-tête (dans le même datagramme IPv6). Il peut s'agir d'un protocole
(de niveau supérieur ICMP, UDP, TCP, ...) ou d'une extension.
- Le champ Nombre de sauts remplace le champ "TTL" (Time-to-Live) en IPv4. Sa valeur (sur 8 bits) est décrémentée à chaque noeud traversé. Si cette valeur atteint 0 alors que le paquet
IPv6 traverse un routeur, il sera rejeté avec l'émission d'un message ICMPv6 d'erreur. Il est utilisé pour empêcher les datagrammes de circuler indéfiniment. Il joue le même rôle que le champ
Durée de vie d'IPv4, à savoir qu'il contient une valeur représentant le nombre de sauts ou de pas (hops) qui est décrémenté à chaque passage dans un routeur. En théorie, dans IPv4, il y a une notion de temps en
seconde mais aucun routeur ne l'utilisant comme tel, le nom a changé pour refléter l'usage actuel.
- Viennent ensuite les champs Adresse source et Adresse de destination.
Après de nombreuses discussions, il fut décidé que les adresses de longueur fixe égales à 16 octets
constituaient le meilleur compromis.
Les premiers bits de l'adresse - le préfixe - définissent le type de l'adresse. Les adresses commençant par 8 zéros sont réservées, notamment pour les adresses IPv4.
C'est ainsi que toutes les adresses commençant par 8 zéros sont réservées aux adresses IPv4. Deux variantes sont supportées ; elles se distinguent suivant les 16 bits suivant (soit 16 bits à 0 ou à 1).
L'utilisation de préfixes séparés pour les adresses affectées à un fournisseur et les adresses affectées à une zone géographique constitue un compromis entre deux différentes visions du futur réseau Internet. Chacun de ces fournisseurs dispose d'une fraction réservée de l'espace d'adressage (1/8 de cet espace). Les 5 premiers bits qui suivent le préfixe 010 sont utilisés pour indiquer dans quel " registre " se trouve le fournisseur d'accès. Actuellement, trois registres sont opérationnels, pour l'Amérique du nord, l'Europe et l'Asie. Jusqu'à 29 nouveaux registres pourront être ajoutés ultérieurement.
Chaque registre est libre de diviser les 15 octets restants comme il l'entend.
Une autre possibilité est d'utiliser un octet pour indiquer la nationalité du fournisseur et de laisser toute liberté aux octets suivant pour définir une structure d'adresses spécifique.
Le modèle géographique est le même que celui du réseau Internet actuel, dans lequel les fournisseurs d'accès
ne jouent pas un grand rôle. Dans ce cadre, IPv6 peut gérer 2 types d'adresses.
Les adresses de liens et de sites locaux n'ont qu'une spécification locale. Elles peuvent être réutilisées par d'autres organisations sans qu'il y ait de conflit. Elles ne peuvent pas être propagées hors des limites des
organisations, ce qui les rend bien adaptées à celles qui utilisent des gardes-barrières pour protéger leur réseau privé du réseau Internet.
Les adresses de diffusion multidestinataire disposent d'un champ Drapeau (4 bits) et d'un champ Envergure
(4 bits) à la suite du préfixe, puis d'un champ Identificateur de groupe (112 bits). L'un des bits du drapeau distingue les groupes permanents des groupes transitoires.
Le champ Envergure permet une diffusion limitée sur une zone
En plus de supporter l'adressage point à point classique (unicast) et l'adressage de diffusion multidestinataire (multicast) IPv6 supporte un nouveau type d'adressage de diffusion au premier vu (anycast).
Cette technique est similaire à la diffusion multidestinataire dans le sens ou l'adresse de destination est un groupe d'adresses, mais plutôt que d'essayer de livrer le datagramme à tous les membres du groupe, il essai de le livrer à un seul membre du groupe, celui le plus proche ou le plus à même de le recevoir.
Une nouvelle notation a été définie pour décrire les adresses IPv6 de 16 octets. Elle comprend 8 groupes de 4 chiffres hexadécimaux séparés avec le symbole deux-points. Par exemple :
8000:0000:0000:0000:0123:4567:89AB:CDEF
Puisque plusieurs adresses ont de nombreux zéros dans leur libellé, 3 optimisations ont été définies. Tout d'abord, les 1° zéro d'un groupe peuvent être omis, comme par exemple 0123 qui peut s'écrire 123.
Ensuite, un ou plusieurs groupes de 16 zéros consécutifs peuvent être remplacés par un double deux-points. C'est ainsi que l'adresse ci-dessus devient :
8000::::123:4567:89AB:CDEF
Enfin, les adresses IPv4 peuvent être écrites en utilisant la représentation de l'adresse en notation décimale pointée précédée d'un double deux-points, comme par exemple :
::192.31.320.46
Il est nécessaire d'être plus explicite sur cette notation d'adresses, mais il faut savoir qu'il y a un nombre important d'adresses sur 16 octets. Précisément, il en a 2^128, soit approximativement 3 x 10^38.
Si la Terre entière (terre et eau confondues) était couverte d'ordinateurs, IPv6 pourrait allouer
7 x 10^23 adresses IP par m².
Le champ Protocole est exclu parce que le champ En-tête suivant du dernier en-tête IP d'un datagramme
précise le type de protocole (par exemple, UDP ou TCP).
Tous les champs relatifs à la fragmentation ont été retirés, parce qu'IPv6 a une
approche différente de la fragmentation.
Pour commencer, tous les ordinateurs et routeurs conformes à IPv6 doivent supporter
les datagrammes de 576 octets.
Cette règle place la fragmentation dans un rôle secondaire.
De plus, quand un ordinateur envoie un trop grand datagramme IPv6, contrairement à ce qu'il
se passe avec la fragmentation, le routeur qui ne peut le transmettre retourne un
message d'erreur à la source. Ce message précise à l'ordinateur source d'interrompre
l'envoi de nouveaux datagrammes vers cette destination.
Avoir un ordinateur qui transmette immédiatement des datagrammes à la bonne dimension
est bien plus efficace que de voir les routeurs les fragmenter à la volée.
Enfin, le champ Total de contrôle n'existe plus car son calcul est trop réducteur de performance.
En effet, la fiabilité des réseaux actuels, combinée avec le fait que les couches liaisons de données
et transport effectuent leur propre contrôle, le gain en qualité d'un total d'un contrôle supplémentaire
ne vaut pas le prix à payer pour le calculer.
Cet en-tête fournit une information complémentaire de façon efficace. Chacun d'eux est optionnel.
Si plus d'un en-tête est présent, ils doivent apparaître immédiatement après l'en-tête fixe, de préférence
dans l'ordre de la liste.
Certains en-têtes ont un format fixe ; d'autres contiennent un nombre variable de champs variables.
Pour cela, chaque item est codé sous forme d'un triplet (Type, Longueur, Valeur). Le Type est un champ
d'un octet qui précise la nature de l'option. Les différents types ont été choisis de façon à ce que les
2 premiers bits disent quoi faire aux routeurs qui ne savent pas exécuter l'option.
Les choix sont :
- sauter l'option
- détruire le datagramme
- détruire le datagramme
- retourner un message ICMP à la source
- détruire le datagramme sans retourner de message ICMP s'il s'agit d'un datagramme multidestinataire (afin d'éviter un nombre trop important de rapport ICMP en retour).
La Longueur est un champ d'un octet. Elle indique la taille du champ Valeur (de 0 255 octets)
qui contient une information quelconque adressée au destinataire.
L'en-tête Pas-après-pas contient des informations destinées à tous les routeurs sur le chemin.
L'en-tête Routage donne la liste d'un ou de plusieurs routeurs qui doivent être visités sur le trajet
vers la destination. Deux formes de routage sont mises en oeuvre de façon combinée :
le routage strict (la route intégrale est définie) et le routage lâche (seuls les routeurs obligatoires sont définis).
Les 4 premiers champs de l'en-tête d'extension Routage contiennent 4 entiers d'un octet :
- le type d'en-tête suivant
- le type de routage (couramment 0)
- le nombre d'adresses présentes dans l'en-tête (1 à 24)
- une adresse donnant la prochaine adresse à visiter.
Ce dernier champ commence à la valeur 0, il est incrémenté à chaque adresse visitée.
L'en-tête Fragmentation traite de la fragmentation de manière similaire à IPv4.
L'en-tête contient l'identifiant de datagramme, le numéro de fragment et un bit précisant si d'autres
fragments suivent. Dans IPv6, contrairement à IPv4, seul l'ordinateur source peut fragmenter le datagramme.
Les routeurs sur le trajet ne le peuvent pas. Cela permet à l'ordinateur source de fragmenter le datagramme
en morceaux et d'utiliser l'en-tête Fragmentation pour transmettre les morceaux.
L'en-tête Authentification fournit un mécanisme permettant au destinataire d'un datagramme de s'assurer
de l'identité de la source. Dans IPv4, aucune garantie semblable n'est offerte.
L'utilisation du chiffrement des données du datagramme (sa charge utile) renforce sa sécurité ;
seul le vrai destinataire peut les lire.
Quand un émetteur et un récepteur veulent communiquer en toute sécurité, ils doivent tout d'abord
se mettre d'accord sur une ou plusieurs clés secrètes connues d'eux seuls. Il est assigné un nombre
clé de 32 bits à chacune des 2 clés.
Les nombres clés sont globaux de façon que, par exemple, si A utilise la clé 4 pour communiquer avec B, A
ne peut pas utiliser cette clé pour communiquer avec C. D'autres paramètres sont associés à chaque nombre clé,
tel que sa durée de vie, etc...
Pour envoyer un message authentifié, l'ordinateur source construit premièrement un datagramme contenant
tous les en-têtes IP et la charge utile, puis il remplace les champs qui changent peut par des 0 (par exemple :
le champ Nombre max. de sauts). Le datagramme est complété avec des 0 pour devenir un multiple de 16 octets.
De façon similaire, la clé secrète utilisée est aussi complétée avec des 0 pour être un multiple de 16 octets.
Puis, un total de contrôle chiffré est calculé après concaténation de la clé secrète complétée, du datagramme complété
et, à nouveau, de la clé secrète complétée.
L'en-tête Authentification contient 3 parties. La première compte 4 octets précisant le numéro d'en-tête
suivant, la longueur de l'en-tête d'authentification, et 16 bits à zéro. La seconde définit le nombre clé sur 32 bits.
La troisième contient le total de contrôle chiffré (avec l'algorithme MD5 ou un autre).
Le destinataire utilise le nombre clé pour trouver la clé secrète. La valeur complétée de la clé secrète est
ajoutée avant et après la charge utile elle-même complétée, les champs variables de l'en-tête sont vidés de
leurs zéros, puis le total de contrôle chiffré est calculé. Si le résultat du calcul est égal au total de contrôle
chiffré contenu dans l'en-tête Authentification, le destinataire est sûr que le datagramme vient bien de la source
avec laquelle il partage la clé secrète. Il est également sûr que le datagramme n'a pas été falsifié à son insu
en arrière plan.
Pour les datagrammes qui doivent être envoyés secrètement, il faut utiliser l'en-tête d'extension Charge utile chiffrée.
Cet en-tête commence par un nombre clé de 32 bits, suivi par la charge utile chiffrée.
L'en-tête Option de destination est utilisé pour des champs qui n'ont besoin d'être interprétés et
compris que par l'ordinateur destinataire. Dans la version originale d'IPv6, la seule option de destination
qui a été définie est l'option nulle. Elle permet de compléter cet en-tête par des 0 pour obtenir un multiple
de 8 octets. Cet en-tête ne sera pas utilisé dans un premier temps. Il a été défini pour s'assurer que les
nouveaux logiciels de routage pourront le prendre en compte, au cas où quelqu'un envisagerait un jour une
option de destination.
Pour plus d'informations sur le protocole IPv6, le mieux est de se reporter à la RFC 2460
expliquant de manière détaillée le protocole :
Article écrit par Nico VanHaute
|