Difference between revisions of "MOOC:Compagnon Act12-s7"

From Livre IPv6

(Activité 12 : La notation des adresses IPv6)
Line 1: Line 1:
  
 +
 +
__NOTOC__
  
 
= Activité 12  : La notation des adresses IPv6 =
 
= Activité 12  : La notation des adresses IPv6 =
 
   
 
   
== Notation ==
+
= Introduction =
 +
 
 +
La notation des adresses IPv6 traite du problème de leur représentation textuelle. il s'agit de définir des règles pour leur affichage, leur manipulation comme pour leur saisie par un utilisateur humain.  Le RFC 4291 a posé les principes  de la notation d'une adresse IPv6. Le RFC 5952 est venu le compléter pour poser des règles. La notation est importante, mal maitrisée, elle peut entraînée à des problèmes interoperabilité comme le montre cet article<ref>Huston, G. (2013) The ISP Column. March. [http://www.potaroo.net/ispcol/2013-03/literals.html Literally IPv6]</ref>.
 
   
 
   
 +
== Principes ==
 +
 
IPv6 a abandonné la notation décimale pointée, en usage pour
 
IPv6 a abandonné la notation décimale pointée, en usage pour
les adresses IPv4 (sur 32 bits, soit 4 octets, on indique la valeur décimale de chaque octet séparée par un point décimal. Exemple : l'adresse IPv4 192.168.0.1). Cette notation est en effet inadaptée pour des chaînes binaires de 16 octets. IPv6 a adopté la notation hexadécimale (*) couramment utilisée dans le monde informatique pour représenter des octets par des couples de nombres hexadécimaux.
+
les adresses IPv4 (sur 32 bits, soit 4 octets, on indique la valeur décimale de chaque octet séparée par un point décimal. Exemple : l'adresse IPv4 192.168.0.1). Cette notation est en effet inadaptée pour des chaînes binaires de 16 octets. IPv6 a adopté la notation hexadécimale couramment utilisée dans le monde informatique pour représenter des octets par des couples de nombres  
 +
{{HorsTexte|Notation héxadécimale|Le lecteur peu familier avec le système de numération hexadécimal pourra consulter avec intérêt cette ressources<ref>Wikipedia [https://fr.wikipedia.org/wiki/Syst%C3%A8me_hexad%C3%A9cimal Le système hexadécimal]</ref>.}}
  
(*) Le lecteur peu familier avec le système de numération hexadécimal pourra consulter avec intérêt les ressources complémentaires indiquées à la fin de
 
cette séquence<ref>Le système hexadécimal [https://fr.wikipedia.org/wiki/Syst%C3%A8me_hexad%C3%A9cimal https://fr.wikipedia.org/wiki/Syst%C3%A8me_hexad%C3%A9cimal]</ref>.
 
 
=== Notation des adresses par l'exemple ===
 
 
 
Les 16 octets (128 bits) de l'adresse IPv6 suivante se notent en
 
Les 16 octets (128 bits) de l'adresse IPv6 suivante se notent en
 
binaire :
 
binaire :
Line 66: Line 68:
 
</center>
 
</center>
  
=== Notation canonique pour l'affichage ===
+
== Notation canonique pour l'affichage ==
 
   
 
   
 
Les adresses IPv6 peuvent donc avoir plusieurs représentations
 
Les adresses IPv6 peuvent donc avoir plusieurs représentations
Line 84: Line 86:
 
* Si le numéro de port (TCP ou UDP) doit être indiqué, l'usage de crochets encadrant l'adresse devient obligatoire. Auparavant, cet usage ne l'était que pour les URL. Plus de détails en fin de chapitre.
 
* Si le numéro de port (TCP ou UDP) doit être indiqué, l'usage de crochets encadrant l'adresse devient obligatoire. Auparavant, cet usage ne l'était que pour les URL. Plus de détails en fin de chapitre.
  
=== Notation des préfixes ===
+
== Notation des préfixes ==
 
La notation des préfixes définie par CIDR [RFC 1519] pour IPv4
 
La notation des préfixes définie par CIDR [RFC 1519] pour IPv4
 
est conservée pour IPv6. Le préfixe indique le nombre de bits de
 
est conservée pour IPv6. Le préfixe indique le nombre de bits de
Line 153: Line 155:
 
</center>
 
</center>
  
=== Notation des URL : cas de la spécification du numéro de port ===
+
== Notation des URL ==
 
Une autre difficulté provient du fait que le caractère &quot;''':'''&quot;
 
Une autre difficulté provient du fait que le caractère &quot;''':'''&quot;
 
est significatif dans certains contextes, ce qui peut créer des
 
est significatif dans certains contextes, ce qui peut créer des
ambiguïtés. C'est le cas des URL où il est utilisé comme séparateur entre l'adresse et le numéro de port (les adresses de niveau transport sont des numéros de port TCP ou UDP, cf. MOOC "Principes des Réseaux de Données").
+
ambiguïtés. C'est le cas des URL où il est utilisé comme séparateur entre l'adresse et le numéro de port. Les adresses de niveau transport sont des numéros de port TCP ou UDP, cf. MOOC "Principes des Réseaux de Données".
  
 
Exemple : l'URL suivante est ambiguë : <tt>http://2001:db8:12::1:8000/</tt> ;
 
Exemple : l'URL suivante est ambiguë : <tt>http://2001:db8:12::1:8000/</tt> ;
Line 163: Line 165:
 
* le service ''web'' à l'écoute sur le port http par défaut (le port TCP 80 est le port implicite d'écoute du protocole HTTP) sur la machine d'adresse <tt>2001:db8:12::1:8000</tt>
 
* le service ''web'' à l'écoute sur le port http par défaut (le port TCP 80 est le port implicite d'écoute du protocole HTTP) sur la machine d'adresse <tt>2001:db8:12::1:8000</tt>
 
* les services ''web'' (protocole HTTP) à l'écoute sur le port TCP 8000 de la machine d'adresse <tt>2001:db8:12::1</tt>
 
* les services ''web'' (protocole HTTP) à l'écoute sur le port TCP 8000 de la machine d'adresse <tt>2001:db8:12::1</tt>
Pour lever cette ambiguïté, le RFC 3986 propose d'inclure l'adresse IPv6 entre &quot;'''[''' ''']'''&quot; (crochets ouvrant et fermant). Ainsi,
+
Pour lever cette ambiguïté, le RFC 3986 propose d'inclure l'adresse IPv6 entre &quot;'''[''' ''']'''&quot; (crochets ouvrant et fermant). Ainsi, dans le premier cas, l'URL sera notée <tt>http://[2001:db8:12::1:8000]/</tt> et dans le second, <tt>http://[2001:db8:12::1]:8000/ </tt>
+
* dans le premier cas, l'URL serait <tt>http://[2001:db8:12::1:8000]/</tt>
+
* et dans le second, <tt>http://[2001:db8:12::1]:8000/ </tt>
+
  
 
== Références bibliographiques ==
 
== Références bibliographiques ==

Revision as of 02:42, 9 April 2016



Activité 12  : La notation des adresses IPv6

Introduction

La notation des adresses IPv6 traite du problème de leur représentation textuelle. il s'agit de définir des règles pour leur affichage, leur manipulation comme pour leur saisie par un utilisateur humain. Le RFC 4291 a posé les principes de la notation d'une adresse IPv6. Le RFC 5952 est venu le compléter pour poser des règles. La notation est importante, mal maitrisée, elle peut entraînée à des problèmes interoperabilité comme le montre cet article[1].

Principes

IPv6 a abandonné la notation décimale pointée, en usage pour les adresses IPv4 (sur 32 bits, soit 4 octets, on indique la valeur décimale de chaque octet séparée par un point décimal. Exemple : l'adresse IPv4 192.168.0.1). Cette notation est en effet inadaptée pour des chaînes binaires de 16 octets. IPv6 a adopté la notation hexadécimale couramment utilisée dans le monde informatique pour représenter des octets par des couples de nombres

Notation héxadécimale

Le lecteur peu familier avec le système de numération hexadécimal pourra consulter avec intérêt cette ressources[2].

Les 16 octets (128 bits) de l'adresse IPv6 suivante se notent en binaire :

00100000 00000001 00001101 10111000 00000000 00000000 00000000 00000000 00000000 00001000 00001000 00000000 00100000 00001100 01000001 01111010

et s'écrivent en hexadécimal sous la forme suivante :

20 01 0d b8 00 00 00 00 00 08 08 00 20 0C 41 7A

couramment notés (le préfixe 0x indiquant que la chaine qui suit est en notation hexadécimale) :

0x20010db80000000000080800200C417A

La représentation "textuelle" des adresses IPv6 se fait en segmentant le mot de 128 bits en 8 champs de 16 bits (2 octets) séparés par le caractère ":". Chacun de ces champs est transcrit en 4 chiffres hexadécimaux. L'adresse précédente se note donc :

2001:0db8:0000:0000:0008:0800:200C:417A

Par convention, il n'est pas nécessaire d'écrire les zéros de poids fort placés en tête de champ (dans chaque mot de 16 bits, les zéros de poids fort sont non significatifs). L'adresse peut donc prendre une notation plus compacte :

2001:db8:0:0:8:800:200C:417A

Plusieurs champs nuls consécutifs peuvent être "abrégés" par l'abréviation " :: " (2 caractères ':' successifs, sans espace). Attention : pour éviter toute ambiguïté, cette abréviation ne peut être utilisée qu'une seule fois par adresse !

Exemple l'adresse peut également s'écrire
Une adresse unicast 2001:0db8:0:0:0:800:200c:417a 2001:db8::800:200c:417a
Une adresse multicast ff01:0:0:0:0:0:0:101 ff01::101
Adresse de bouclage (loopback address) 0:0:0:0:0:0:0:1 ::1
Adresse non spécifiée (unspecified address) 0:0:0:0:0:0:0:0 ::

Notation canonique pour l'affichage

Les adresses IPv6 peuvent donc avoir plusieurs représentations valides possibles. Le RFC 5952 fournit les recommandations pour une forme de représentation canonique des adresses. Cette forme est destinée aux procédures d'affichage (par les programmes, les appels systèmes inscrivant des événements dans les fichiers journaux (logs)...). Cette recommandation ne porte donc que sur les sorties d'adresses (affichage). En entrée (configuration d'équipement, passage de paramètres...), un logiciel devrait toujours accepter les différentes formes valides. La saisie reste donc libre.

Concrètement, selon ce RFC 5952, une adresse devrait être affichée selon la forme suivante :

  • Les zéros initiaux (non significatifs) doivent être supprimés.
  • L'indication d'une suite de champs nuls consécutifs « :: » doit être utilisée au maximum (sur la série nulle la plus longue). En cas d'égalité, on l'applique sur la première. Exemples :
    • 2001:db8:0:42:0:0:0:1 → 2001:db8:0:42::1
    • 2001:db8:0:0:42:0:0:1 → 2001:db8::42:0:0:1
  • Les chiffres hexadécimaux doivent être en minuscules.
  • Si le numéro de port (TCP ou UDP) doit être indiqué, l'usage de crochets encadrant l'adresse devient obligatoire. Auparavant, cet usage ne l'était que pour les URL. Plus de détails en fin de chapitre.

Notation des préfixes

La notation des préfixes définie par CIDR [RFC 1519] pour IPv4 est conservée pour IPv6. Le préfixe indique le nombre de bits de poids fort de l'adresse (la partie haute de l'adresse ; c'est-à-dire, dans le sens de lecture occidentale, les chiffres à gauche de l'adresse) utilisés par la fonction de routage d'un équipement pour prendre sa décision de routage (vers quelle interface de sortie il doit réémettre le datagramme, cf. notion de routage du MOOC "Principes des Réseaux de Données").

La notation du préfixe d'adresse se fait en séparant l'adresse du nombre de bits du préfixe par un caractère « / » (le caractère « diviseur » du pavé numérique de votre clavier).

Adresse-ipv6/longueur-en-bits-du-préfixe

Exemple : les trois notations suivantes de préfixe sont équivalentes car le préfixe ne concerne que les 60 bits de poids fort de l'adresse.

2001:db8:24:a1a1:8:800:200C:417a/60
2001:db8:0024:a1a1:0000:0000:0000:0000/60
2001:db8:24:a1a1:0008:0800:200c:417a/60
2001:db8:24:a1a1::/60

Dans l'affichage ci-dessous, les chiffres hexadécimaux portant les bits de préfixe ont été mis en caractères gras pour une meilleure lisibilité :

2001:db8:24:a1a1:8:800:200C:417A/60
2001:db8:0024:a1a1:0000:0000:0000:0000/60
2001:db8:24:a1a1:0008:0800:200c:417a/60
2001:db8:24:a1a1::/60

On peut combiner l'adresse d'une interface et la longueur du préfixe réseau associé (1er exemple ci-dessus) ou ne représenter que le préfixe (dernier exemple ci-dessus) lorsque l'on donne explicitement sa valeur.

Concrètement :

Le noeud d'adresse 2001:db8:24:a1a1:8:800:200C:417a
avec un préfixe de sous-réseau 2001:db8:24:a1a0::/60
peut se noter 2001:db8:24:a1a1:8:800:200C:417a/60

On notera une petite difficulté dans cette convention de notation pour les préfixes qui ne sont pas alignés sur une frontière de mots de 16 bits, d'octet ou de demi-octet,

L'adresse IPv6 2001:db8:7654:2003::cafe/51
appartient au réseau 2001:db8:7654:2000::/51
La plage d'adresses démarre en 2001:db8:7654:2000:0000:0000:0000:0000:0000
et se termine avec 2001:db8:7654:3FFF:FFFF:FFFF:FFFF:FFFF

Notation des URL

Une autre difficulté provient du fait que le caractère ":" est significatif dans certains contextes, ce qui peut créer des ambiguïtés. C'est le cas des URL où il est utilisé comme séparateur entre l'adresse et le numéro de port. Les adresses de niveau transport sont des numéros de port TCP ou UDP, cf. MOOC "Principes des Réseaux de Données".

Exemple : l'URL suivante est ambiguë : http://2001:db8:12::1:8000/ ; en effet, elle peut être interprétée de deux manières :

  • le service web à l'écoute sur le port http par défaut (le port TCP 80 est le port implicite d'écoute du protocole HTTP) sur la machine d'adresse 2001:db8:12::1:8000
  • les services web (protocole HTTP) à l'écoute sur le port TCP 8000 de la machine d'adresse 2001:db8:12::1

Pour lever cette ambiguïté, le RFC 3986 propose d'inclure l'adresse IPv6 entre "[ ]" (crochets ouvrant et fermant). Ainsi, dans le premier cas, l'URL sera notée http://[2001:db8:12::1:8000]/ et dans le second, http://[2001:db8:12::1]:8000/

Références bibliographiques

  1. Huston, G. (2013) The ISP Column. March. Literally IPv6
  2. Wikipedia Le système hexadécimal


Pour aller plus loin

RFC et leur analyse par S. Bortzmeyer :

  • RFC 1519 Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy (Analyse)
  • RFC 3986 Uniform Resource Identifier (URI): Generic Syntax
  • RFC 5952 A Recommendation for IPv6 Address Text Representation (Analyse)
Personal tools