Difference between revisions of "Les extensions"

From Livre IPv6

(<div id="routage">Routage)
 
(34 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 +
{{suivi |Justification des extensions|Justification des extensions|Exemples d'extensions|Exemples d'extensions}}
 +
 
__NOTOC__
 
__NOTOC__
  
Line 5: Line 7:
 
Une extension a une longueur multiple de 8 octets. Elle commence par un champ en-tête suivant d'un octet qui définit le type de données qui suit l'extension : une autre extension ou un protocole de niveau 4 (voir tableau Valeurs du champ en-tête suivant). Pour les extensions à longueur variable, l'octet suivant contient la longueur de l'extension en mots de 8 octets, le premier n'étant pas compté (une extension de 16 octets a un champ longueur de 1).
 
Une extension a une longueur multiple de 8 octets. Elle commence par un champ en-tête suivant d'un octet qui définit le type de données qui suit l'extension : une autre extension ou un protocole de niveau 4 (voir tableau Valeurs du champ en-tête suivant). Pour les extensions à longueur variable, l'octet suivant contient la longueur de l'extension en mots de 8 octets, le premier n'étant pas compté (une extension de 16 octets a un champ longueur de 1).
  
{|
+
{{Valeurs du champ en-tête suivant}}
|+  Valeurs du champ en-tête suivant  
+
! valeur !! Extension !! !! valeur !! Protocole!!
+
|-style="background:silver"
+
| 0 || [[#PeP|proche-en-proche]]|| || 4 || IPv4
+
|-
+
| 43 || [[#Routage|Routage]] || || 6 || TCP
+
|-style="background:silver"
+
| 44 || [[#frag|Fragmentation]] || ||  17 || UDP
+
|-
+
| 50 || [[#conf||Confidentialité]] || || 41 || IPv6
+
|-style="background:silver"
+
| 51 || [[#auth||Authentification]] || || 58 || [[ICMPv6]]
+
|-
+
| 59 || Fin des en-têtes || || 132 || SCTP
+
|-style="background:silver"
+
| 60 || [[#dest|Destination]] || || 135 || Binding Update (mobilité)
+
|-
+
|      || || || 136 || UDP-lite
+
|}
+
  
 
Le RFC 2460 recommande l'ordre suivant :
 
Le RFC 2460 recommande l'ordre suivant :
Line 36: Line 19:
  
 
== <div id=PeP> Proche-en-proche </div> ==
 
== <div id=PeP> Proche-en-proche </div> ==
*Cette extension (en anglais : hop-by-hop) se situe toujours en première position et est traitée par tous les routeurs que le paquet traverse. Le type associé (contenu dans le champ d'en-tête en-tête suivant de l'en-tête précédent) est 0 et le champ longueur de l'extension contient le nombre de mots de 64 bits moins 1.
 
  
 +
[[image:Fig4-6.png|thumb|right|350px|Figure 4-6 ''Format générique des options "proche-en-proche" et "destination"'']]
 +
 +
Cette extension (en anglais : ''hop-by-hop'') se situe toujours en première position et est traitée par tous les routeurs que le paquet traverse. Le type associé (contenu dans le champ d'en-tête en-tête suivant de l'en-tête précédent) est 0 et le champ longueur de l'extension contient le nombre de mots de 64 bits moins 1.
 
   
 
   
L'extension est composée d'options. Pour l'instant, seules quatre options, dont deux de bourrage, sont définies (cf. format Format des options IPv6). Chaque option est une suite d'octets. Le premier octet est un type, le deuxième (sauf pour l'option 0) contient la longueur de l'option moins 2. Les deux premiers bits de poids fort du type définissent le comportement du routeur quand il rencontre une option inconnue :
+
L'extension est composée d'options. Pour l'instant, seules quatre options, dont deux de bourrage, sont définies (cf. Format des options IPv6). Chaque option est une suite d'octets. Le premier octet est un type, le deuxième (sauf pour l'option 0) contient la longueur de l'option moins 2. Les deux premiers bits de poids fort du type définissent le comportement du routeur quand il rencontre une option inconnue :
  
 
*00 : le routeur ignore l'option ;
 
*00 : le routeur ignore l'option ;
Line 48: Line 33:
 
Le bit suivant du type indique que le routeur peut modifier le contenu du champ option (valeur à 1) ou non (valeur à 0).
 
Le bit suivant du type indique que le routeur peut modifier le contenu du champ option (valeur à 1) ou non (valeur à 0).
  
 +
[[image:Fig4-7.png|thumb|right|350px|Figure 4-7 ''Format des options IPv6'']]
 
   
 
   
 
Les quatre options de proche-en-proche sont :
 
Les quatre options de proche-en-proche sont :
  
*Pad1 (type 0). Cette option est utilisée pour introduire un octet de bourrage.
+
*<div id="Pad1">Pad1 (type 0). Cette option est utilisée pour introduire un octet de bourrage.</div>
*Padn (type 1). Cette option est utilisée pour introduire plus de 2 octets de bourrage. Le champ longueur indique le nombre d'octets qui suivent.
+
*<div id="Padn">Padn (type 1). Cette option est utilisée pour introduire plus de 2 octets de bourrage. Le champ longueur indique le nombre d'octets qui suivent.</div>
  
 
Les options de bourrage peuvent sembler inutiles avec IPv6 puisqu'un champ longueur pourrait en donner la longueur exacte. En fait les options de bourrage servent à optimiser le traitement des paquets en alignant les champs sur des mots de 32, voire 64 bits ; le RFC 2460 discute en annexe de la manière d'optimiser le traitement tout en minimisant la place prise par les options.
 
Les options de bourrage peuvent sembler inutiles avec IPv6 puisqu'un champ longueur pourrait en donner la longueur exacte. En fait les options de bourrage servent à optimiser le traitement des paquets en alignant les champs sur des mots de 32, voire 64 bits ; le RFC 2460 discute en annexe de la manière d'optimiser le traitement tout en minimisant la place prise par les options.
Jumbogramme (type 194 ou 0xc2, RFC 2675). Cette option est utilisée quand le champ longueur des données du paquet IPv6 n'est pas suffisant pour coder la taille du paquet. Cette option est essentiellement prévue pour la transmission à grand débit entre deux équipements. Si l'option jumbogramme est utilisée, le champ longueur des données utiles dans l'en-tête IPv6 vaut 0.
 
  
Noter que le type commence par la séquence binaire 11, ce qui permet au routeur ne traitant pas les jumbogrammes d'en informer la source. Celle-ci pourra réémettre l'information sans utiliser cette option.
+
*Jumbogramme (type 194 ou 0xc2, RFC 2675). Cette option est utilisée quand le champ longueur des données du paquet IPv6 n'est pas suffisant pour coder la taille du paquet. Cette option est essentiellement prévue pour la transmission à grand débit entre deux équipements. Si l'option jumbogramme est utilisée, le champ longueur des données utiles dans l'en-tête IPv6 vaut 0. <br> Noter que le type commence par la séquence binaire 11, ce qui permet au routeur ne traitant pas les jumbogrammes d'en informer la source. Celle-ci pourra réémettre l'information sans utiliser cette option.
L'option Router Alert (RFC 2675) demande à un routeur d'examiner le contenu des données qu'il relaie (Router Alert existe également en IPv4, RFC 2113). En principe, le processus de relayage (recopier le paquet sur une interface de sortie en fonction de l'adresse destination et des tables de routage) doit être le plus rapide possible. Mais pour des protocoles comme la gestion des groupes de multicast avec MLD (Multicast Listener Discovery) ou la signalisation des flux avec RSVP, tous les routeurs intermédiaires doivent tenir compte des données.
+
  
L'émetteur envoie les données à la destination, mais s'il précise l'option Router Alert, les routeurs intermédiaires vont analyser les données, voire modifier leur contenu avant de relayer le paquet. Ce mécanisme est efficace puisque les routeurs n'ont pas à analyser le contenu de tous les paquets d'un flux.
+
*L'option Router Alert (RFC 2711) demande à un routeur d'examiner le contenu des données qu'il relaie (Router Alert existe également en IPv4, RFC 2113). En principe, le processus de relayage (recopier le paquet sur une interface de sortie en fonction de l'adresse destination et des tables de routage) doit être le plus rapide possible. Mais pour des protocoles comme la gestion des groupes de multicast avec MLD (''Multicast Listener Discovery'') ou la signalisation des flux avec RSVP, tous les routeurs intermédiaires doivent tenir compte des données. <br>L'émetteur envoie les données à la destination, mais s'il précise l'option Router Alert, les routeurs intermédiaires vont analyser les données, voire modifier leur contenu avant de relayer le paquet. Ce mécanisme est efficace puisque les routeurs n'ont pas à analyser le contenu de tous les paquets d'un flux. <br> Le type de l'option vaut 5. Il commence par la séquence binaire 00, puisqu'un routeur qui ne connaît pas cette option doit relayer le paquet sans le modifier. Le champ valeur de l'option contient :
 
+
**0 : pour les messages du protocole MLD de gestion des groupes multicast ;
Le type de l'option vaut 5. Il commence par la séquence binaire 00, puisqu'un routeur qui ne connaît pas cette option doit relayer le paquet sans le modifier. Le champ valeur de l'option contient :
+
**1 : pour les messages RSVP ;
*0 : pour les messages du protocole MLD de gestion des groupes multicast ;
+
**2 : pour les réseaux actifs ;
*1 : pour les messages RSVP ;
+
:les autres valeurs sont réservées.
*2 : pour les réseaux actifs ;
+
les autres valeurs sont réservées.
+
  
 
== <div id=dest>Destination </div>==
 
== <div id=dest>Destination </div>==
Cette extension, dont le format est identique à l'extension de proche-en-proche (cf. See Format des extensions "proche-en-proche" et "destination"), contient des options qui sont traitées par l'équipement destinataire. Pour l'instant, à part les options de bourrage (voir Pad1 et Padn, See Pad1 (type 0). Cette option est utilisée pour introduire un octet de bourrage.) et de mobilité (cf. See Mobilité dans IPv6), la seule autre option concerne le tunnelage dans des paquets IPv6 (See [RFC2473]). Cette option permet de limiter le niveau d'encapsulation dans des tunnels des paquets IPv6.
+
Cette extension, dont le format est identique à l'extension de proche-en-proche (cf. figure Format des extensions "proche-en-proche" et "destination"), contient des options qui sont traitées par l'équipement destinataire. Pour l'instant, à part les options de bourrage (voir [[#Pad1|Pad1]] et [[#Padn|Padn]]) et de mobilité (cf. [[Mobilité dans IPv6]]), la seule autre option concerne le tunnelage dans des paquets IPv6 (RFC 2473). Cette option permet de limiter le niveau d'encapsulation dans des tunnels des paquets IPv6.
  
 
== <div id="routage">Routage ==
 
== <div id="routage">Routage ==
Cette extension permet d'imposer à un paquet une route différente de celle offerte par les politiques de routage présentes sur le réseau. Pour l'instant seul le routage par la source (type = 0), similaire à l'option Loose Source Routing d'IPv4, est défini.
+
Cette extension permet d'imposer à un paquet une route différente de celle offerte par les politiques de routage présentes sur le réseau. Pour l'instant seul le routage par la source (type = 0), similaire à l'option ''Loose Source Routing'' d'IPv4, est défini pour IPv6. La [[Mobilité dans IPv6|mobilité IPv6]] a également introduit une extension de routage (type = 2) (cf. [[La gestion de la mobilité IPv6#Optimisation dans le cas du mobile dans un réseau étranger|Optimisation dans le cas du mobile dans un réseau étranger]]).
  
Dans IPv4, le routage peut être strict (le routeur suivant présent dans la liste doit être un voisin directement accessible) ou libéral (loose) (un routeur peut utiliser les tables de routage pour joindre le routeur suivant servant de relais). Dans IPv6, seul le routage libéral est autorisé. En effet, le routage strict était initialement mis en place surtout pour des raisons de sécurité. La source devait être absolument sûre du chemin pris par les paquets. Cette utilisation a maintenant disparu du réseau.
+
Dans IPv4, le routage peut être strict (le routeur suivant présent dans la liste doit être un voisin directement accessible) ou libéral (''loose'') (un routeur peut utiliser les tables de routage pour joindre le routeur suivant servant de relais). Dans IPv6, seul le routage libéral est autorisé. En effet, le routage strict était initialement mis en place surtout pour des raisons de sécurité. La source devait être absolument sûre du chemin pris par les paquets. Cette utilisation a maintenant disparu du réseau.
  
 
Le principe du routage par la source ou Source Routing dans IPv4 est rappelé en introduction de ce chapitre sur les extensions. Le principe est le même pour IPv6. L'émetteur met dans le champ destination du paquet IPv6, l'adresse du premier routeur servant de relais, l'extension contient la suite de la liste des autres routeurs relais et le destinataire. Quand un routeur reçoit un paquet qui lui est adressé comportant une extension de routage par la source, il permute son adresse avec l'adresse du prochain routeur et réémet le paquet vers cette adresse suivante.
 
Le principe du routage par la source ou Source Routing dans IPv4 est rappelé en introduction de ce chapitre sur les extensions. Le principe est le même pour IPv6. L'émetteur met dans le champ destination du paquet IPv6, l'adresse du premier routeur servant de relais, l'extension contient la suite de la liste des autres routeurs relais et le destinataire. Quand un routeur reçoit un paquet qui lui est adressé comportant une extension de routage par la source, il permute son adresse avec l'adresse du prochain routeur et réémet le paquet vers cette adresse suivante.
 +
 +
[[image:Fig4-8.png|thumb|right|350px|Figure 4-8 ''Format de l'extension routage par la source'']]
 +
  
 
La figure Format de l'extension routage par la source donne le format de l'extension de routage par la source :
 
La figure Format de l'extension routage par la source donne le format de l'extension de routage par la source :
 +
 +
*Le champ longueur de l'en-tête indique le nombre de mots de 64 bits qui composent l'extension. Pour l'extension de type 0, cela correspond au nombre d'adresses présentes dans la liste, multiplié par 2.
 +
*Le champ type indique la nature du routage. Pour l'instant, seul le routage par la source, de type 0 est spécifié. La suite de l'en-tête correspond à ce type.
 +
*Le nombre de segments restant est décrémenté après la traversée d'un routeur. Il indique le nombre d'équipements qui doivent encore être traversés. Il permet de trouver l'adresse qui devra être substituée.
 +
*Les 32 bits suivants sont inutilisés pour préserver l'alignement.
  
 
Le champ longueur de l'en-tête indique le nombre de mots de 64 bits qui composent l'extension. Pour l'extension de type 0, cela correspond au nombre d'adresses présentes dans la liste, multiplié par 2.
 
Le champ type indique la nature du routage. Pour l'instant, seul le routage par la source, de type 0 est spécifié. La suite de l'en-tête correspond à ce type.
 
Le nombre de segments restant est décrémenté après la traversée d'un routeur. Il indique le nombre d'équipements qui doivent encore être traversés. Il permet de trouver l'adresse qui devra être substituée.
 
Les 32 bits suivants sont inutilisés pour préserver l'alignement.
 
 
La liste comprenant les routeurs à traverser et le destinataire est fournie. Ces adresses ne peuvent pas être multicast.
 
La liste comprenant les routeurs à traverser et le destinataire est fournie. Ces adresses ne peuvent pas être multicast.
  
 
== <div id="frag">Fragmentation </div>==
 
== <div id="frag">Fragmentation </div>==
  
La fragmentation telle qu'elle est pratiquée dans IPv4 n'est pas très performante. Initialement, elle servait à rendre transparente les limitations physiques des supports de transmission. Dans IPv4 quand un routeur ne peut pas transmettre un paquet à cause de sa trop grande taille et si le bit DF (don't fragment) est à 0, il découpe l'information à transmettre en fragments. Or le réseau IP étant un réseau à datagramme, il n'y a pas de possibilité de contrôler les fragments. Deux fragments successifs peuvent prendre deux chemins différents et par conséquent seul le destinataire peut effectuer le réassemblage. En conséquence, après la traversée d'un lien impliquant une fragmentation, le reste du réseau ne voit passer que des paquets de taille réduite.
+
La fragmentation telle qu'elle est pratiquée dans IPv4 n'est pas très performante. Initialement, elle servait à rendre transparente les limitations physiques des supports de transmission. Dans IPv4 quand un routeur ne peut pas transmettre un paquet à cause de sa trop grande taille et si le bit <tt>DF</tt> (''don't fragment'') est à 0, il découpe l'information à transmettre en fragments. Or le réseau IP étant un réseau à datagramme, il n'y a pas de possibilité de contrôler les fragments. Deux fragments successifs peuvent prendre deux chemins différents et par conséquent seul le destinataire peut effectuer le réassemblage. En conséquence, après la traversée d'un lien impliquant une fragmentation, le reste du réseau ne voit passer que des paquets de taille réduite.
  
Il est plus intéressant d'adapter la taille des paquets à l'émission. Ceci est fait en utilisant les techniques de découverte du MTU (voir [[Configuration automatique et contrôle]] (RFC 1981)). En pratique une taille de paquets de 1 500 octets est presque universelle.
+
Il est plus intéressant d'adapter la taille des paquets à l'émission. Ceci est fait en utilisant les techniques de découverte du MTU (voir [[Mécanisme de découverte du PMTU]] (RFC 1981)). En pratique une taille de paquets de 1 500 octets est presque universelle.
  
 
Il existe pourtant des cas où la fragmentation est nécessaire. Ainsi une application telle que NFS sur UDP suppose que la fragmentation existe et produit des messages de grande taille. Comme on ne veut pas modifier ces applications, la couche réseau d'IPv6 doit aussi être capable de gérer la fragmentation. Pour réduire le travail des routeurs intermédiaires, la fragmentation se fera chez l'émetteur et le réassemblage chez le récepteur.
 
Il existe pourtant des cas où la fragmentation est nécessaire. Ainsi une application telle que NFS sur UDP suppose que la fragmentation existe et produit des messages de grande taille. Comme on ne veut pas modifier ces applications, la couche réseau d'IPv6 doit aussi être capable de gérer la fragmentation. Pour réduire le travail des routeurs intermédiaires, la fragmentation se fera chez l'émetteur et le réassemblage chez le récepteur.
  
Le format de l'extension de fragmentation est donné See Format de l'extension de fragmentation.La signification des champs est identique à celle d'IPv4 :
+
[[image:Fig4-9.png|thumb|right|350px|Figure 4-9 ''Format de l'extension de fragmentation'']]
  
 +
Le format de l'extension de fragmentation est donné figure Format de l'extension de fragmentation. La signification des champs est identique à celle d'IPv4 :
 
   
 
   
Le champ place du fragment indique lors du réassemblage où les données doivent être insérées. Ceci permet de parer les problèmes dus au déséquencement dans les réseaux orientés datagrammes. Comme ce champ est sur 13 bits, la taille de tous les segments, sauf du dernier, doit être multiple de 8 octets.
+
*Le champ <tt>place du fragment</tt> indique lors du réassemblage où les données doivent être insérées. Ceci permet de parer les problèmes dus au déséquencement dans les réseaux orientés datagrammes. Comme ce champ est sur 13 bits, la taille de tous les segments, sauf du dernier, doit être multiple de 8 octets.
Le bit M s'il vaut 1 indique qu'il y aura d'autres fragments émis.
+
*Le bit <tt>M</tt> s'il vaut 1 indique qu'il y aura d'autres fragments émis.
Le champ identification permet de repérer les fragments appartenant à un même paquet initial. Il est différent pour chaque paquet et recopié dans ses fragments.
+
*Le champ <tt>identification</tt> permet de repérer les fragments appartenant à un même paquet initial. Il est différent pour chaque paquet et recopié dans ses fragments.
Le bit DF (don't fragment) n'est plus nécessaire puisque, si un paquet est trop grand, il y aura rejet du paquet par le routeur.
+
*Le bit <tt>DF</tt> (''don't fragment'') n'est plus nécessaire puisque, si un paquet est trop grand, il y aura rejet du paquet par le routeur.
  
 
Dans IPv4, la valeur d'une option était codée de manière à indiquer au routeur effectuant la fragmentation si elle devait être copiée dans les fragments. Dans IPv6, l'en-tête et les extensions qui concernent les routeurs intermédiaires (pour l'instant proche-en-proche, routage par la source) sont recopiées dans chaque fragment.
 
Dans IPv4, la valeur d'une option était codée de manière à indiquer au routeur effectuant la fragmentation si elle devait être copiée dans les fragments. Dans IPv6, l'en-tête et les extensions qui concernent les routeurs intermédiaires (pour l'instant proche-en-proche, routage par la source) sont recopiées dans chaque fragment.
  
 
== Sécurité ==
 
== Sécurité ==
Deux extensions de sécurité -- les extensions d'authentification AH (Authentication Header) et de confidentialité ESP (Encapsulating Security Payload) -- sont définies par l'IETF. Elles permettent de protéger les communications passées sur les réseaux IPv6 mais aussi IPv4 en assurant les services de confidentialité, authentification, intégrité et détection de rejeux. Le See Sécurité, See Extension d'authentification AH (RFC 2402) donne une description détaillée de ces extensions, et présente les modes de protection existants.
+
Deux extensions de sécurité -- les extensions d'authentification AH (''Authentication Header'') et de confidentialité ESP (''Encapsulating Security Payload'') -- sont définies par l'IETF. Elles permettent de protéger les communications passées sur les réseaux IPv6 mais aussi IPv4 en assurant les services de confidentialité, authentification, intégrité et détection de rejeux. Le chapite [[Sécurité]], RFC 2402 donne une description détaillée de ces extensions, et présente les modes de protection existants.
 
+
= Exemples d'extensions =
+
== Exemple de routage par la source ==
+
Le paquet suivant a été capturé lors de l'ouverture d'une connexion telnet. La commande telnet permet de spécifier des paramètres de routage par la source. Ainsi <tt>telnet @routeur1@destination</tt> permet un routage libéral vers la destination en passant par le routeur intermédiaire routeur1.
+
 
+
IPv6
+
Version : 6 Classe : 00 Label : 00000
+
Longueur : 64 octets (0x0040) Protocole : 43 (0x2b) En-tête de routage
+
Nombre de sauts : 64 (0x40)
+
Source : 3ffe:302:12:2::13
+
Desti. : 3ffe:302:12:5:2a0:c9ff:feaa:2201 (routeur1)
+
Routage
+
En-tête Suivant : 06 (0x06) TCP
+
Longueur Extension : 0x02 => 128 bits
+
Type de routage = 0x00 (Routage par la source)
+
Segments restant : 0x01. Réservé 0x00
+
Réservé : 0x00000000
+
Adresse suivante : 3ffe:305:1002:1:200:c0ff:fe11:cba0 (destination)
+
TCP
+
Port Source, 0xffb1 Port Destination :0x0017 (Telnet)
+
Sequence : 0x17107e57 Acquittement : 0x00000000
+
Offset : 0xa Drapeau : 0x02 (SYN) Fenêtre : 0x4000
+
Checksum : 0x356e Ptr Msg Urgent : 0x0000
+
Options TCP
+
+
0000: 60 00 00 00 00 40 2b 40 3f fe 03 02 00 12 00 02
+
0010: 00 00 00 00 00 00 00 13 3f fe 03 02 00 12 00 05
+
0020: 02 a0 c9 ff fe aa 22 01|06 02 00 01 00 00 00 00
+
0030: 3f fe 03 05 10 02 00 01 02 00 c0 ff fe 11 cb a0|
+
0040: ff b1 00 17 17 10 7e 57 00 00 00 00 a0 02 40 00
+
0050: 35 6e 00 00 02 04 05 a0 01 03 03 00 01 01 08 0a
+
0060: 00 9a 1d 04 00 00 00 0b
+
+
Dans l'en-tête IPv6, le numéro de protocole 0x2b indique qu'une extension de routage est insérée. Noter que le champ longueur des données utiles prend en compte la longueur de l'extension. Le champ adresse de destination de l'en-tête IPv6 contient l'adresse du routeur intermédiaire.
+
 
+
La partie extension commence par l'encapsulation suivante, ici 0x06 pour TCP. Le champ suivant (0x02) donne la longueur de l'extension en mots de 64 bits. La partie données contient donc une seule adresse IPv6. Il s'agit de la destination. Le type de routage vaut 0 et le champ segment restant vaut 1 et pointe vers l'adresse de destination.
+
 
+
== Exemple de fragmentation ==
+
 
+
Les paquets suivants correspondent à l'envoi d'un datagramme de longueur 3 500 octets en UDP alors que le MTU de l'interface est 1 500.
+
 
+
IPv6
+
Version : 6 Classe : 00 Label : 00000
+
Longueur : 1456 octets (0x05b0) Proto. : 44 (0x2c) En-tête de frag.
+
Nombre de sauts : 64 (0x40)
+
Source : 3f fe 03 02 00 12 00 02 00 00 00 00 00 00 00 13
+
Desti. : 3f fe 03 02 00 12 00 05 02 a0 c9 ff fe aa 22 01
+
Fragmentation
+
En-tête Suivant : 17 (0x11) UDP
+
Longueur Extension : 0x02 => 128 bits
+
Place du Fragment : 0x0000 bit M =1
+
Identificateur : 0x0000008e
+
UDP
+
Port Source : 0xf38e Port Destination : 0x000d
+
Longueur : 3508 (0x0db4) Checksum : 0xc227
+
0000: 60 00 00 00 05 b0 2c 40 3f fe 03 02 00 12 00 02
+
0010: 00 00 00 00 00 00 00 13 3f fe 03 02 00 12 00 05
+
0020: 02 a0 c9 ff fe aa 22 01|11 00 00 01 00 00 00 8e|
+
0030: f3 8e 00 0d 0d b4 c2 27 30 31 32 33 34 35 36 37
+
0040: 38 39 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e
+
0050: 4f 50 51 52 53 54 55 56 57 58 59 5a 61 62 63 64
+
0060: 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74
+
0070: ...
+
 
+
Le bit M de l'option de fragmentation est à 1, un autre fragment va suivre.
+
 
+
IPv6
+
Version : 6 Classe : 00 Label : 00000
+
Longueur : 1456 octets (0x05b0) Proto. : 44 (0x2c) En-tête de frag.
+
Nombre de sauts : 64 (0x40)
+
Source : 3f fe 03 02 00 12 00 02 00 00 00 00 00 00 00 13
+
Desti. : 3f fe 03 02 00 12 00 05 02 a0 c9 ff fe aa 22 01
+
Fragmentation
+
En-tête Suivant : 17 (0x11) UDP
+
Longueur Extension : 0x02 => 128 bits
+
Place du Fragment : 0x005a8 bit M =1
+
Identificateur : 0x0000008e
+
+
0000: 60 00 00 00 05 b0 2c 40 3f fe 03 02 00 12 00 02
+
0010: 00 00 00 00 00 00 00 13 3f fe 03 02 00 12 00 05
+
0020: 02 a0 c9 ff fe aa 22 01|11 00 05 a9 00 00 00 8e|
+
0030: 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54
+
0040: 55 56 57 58 59 5a 61 62 63 64 65 66 67 68 69 6a
+
0050: 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a
+
0060: 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46
+
0070: 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56
+
080: ...
+
  
Ce fragment est la suite du précédent puisque la valeur de l'identificateur est la même (0x0000008e), le bit M étant à 1, d'autres fragments vont suivre. Le champ Place du fragment contient 1 448. Si l'on prend en compte la taille des extensions (8 octets), on retrouve bien la taille des informations utiles (1 456) transportées dans le paquet précédent.
+
{{suivi |Justification des extensions|Justification des extensions|Exemples d'extensions|Exemples d'extensions}}

Latest revision as of 23:00, 20 February 2007

Justification des extensions Table des matières Exemples d'extensions


Les extensions d'IPv6 peuvent être vues comme un prolongement de l'encapsulation d'IP dans IP. À part l'extension de proche-en-proche traitée par tous les routeurs intermédiaires, les autres extensions ne sont prises en compte que par les équipements destinataires du paquet.

Une extension a une longueur multiple de 8 octets. Elle commence par un champ en-tête suivant d'un octet qui définit le type de données qui suit l'extension : une autre extension ou un protocole de niveau 4 (voir tableau Valeurs du champ en-tête suivant). Pour les extensions à longueur variable, l'octet suivant contient la longueur de l'extension en mots de 8 octets, le premier n'étant pas compté (une extension de 16 octets a un champ longueur de 1).

Valeurs du champ en-tête suivant
valeur Extension valeur Protocole
0 Proche-en-proche 4 IPv4
43 Routage 6 TCP
44 Fragmentation 17 UDP
50 Confidentialité 41 IPv6
51 Authentification 58 ICMPv6
59 Fin des en-têtes 132 SCTP
60 Destination 136 UDP-lite
135 Mobilité
140 Shim6

Le RFC 2460 recommande l'ordre suivant :

  • Proche-en-proche (doit toujours être en première position)
  • Destination (sera aussi traité par les routeurs listés dans l'extension de routage par la source)
  • Routage par la source
  • Fragmentation
  • Authentification
  • Destination (traité uniquement par l'équipement terminal)

Proche-en-proche

Figure 4-6 Format générique des options "proche-en-proche" et "destination"

Cette extension (en anglais : hop-by-hop) se situe toujours en première position et est traitée par tous les routeurs que le paquet traverse. Le type associé (contenu dans le champ d'en-tête en-tête suivant de l'en-tête précédent) est 0 et le champ longueur de l'extension contient le nombre de mots de 64 bits moins 1.

L'extension est composée d'options. Pour l'instant, seules quatre options, dont deux de bourrage, sont définies (cf. Format des options IPv6). Chaque option est une suite d'octets. Le premier octet est un type, le deuxième (sauf pour l'option 0) contient la longueur de l'option moins 2. Les deux premiers bits de poids fort du type définissent le comportement du routeur quand il rencontre une option inconnue :

  • 00 : le routeur ignore l'option ;
  • 01 : le routeur rejette le paquet ;
  • 10 : le routeur rejette le paquet et retourne un message ICMPv6 d'inaccessibilité ;
  • 11 : le routeur rejette le paquet et retourne un message ICMPv6 d'inaccessibilité si l'adresse de destination n'est pas multicast.

Le bit suivant du type indique que le routeur peut modifier le contenu du champ option (valeur à 1) ou non (valeur à 0).

Figure 4-7 Format des options IPv6

Les quatre options de proche-en-proche sont :

  • Pad1 (type 0). Cette option est utilisée pour introduire un octet de bourrage.
  • Padn (type 1). Cette option est utilisée pour introduire plus de 2 octets de bourrage. Le champ longueur indique le nombre d'octets qui suivent.

Les options de bourrage peuvent sembler inutiles avec IPv6 puisqu'un champ longueur pourrait en donner la longueur exacte. En fait les options de bourrage servent à optimiser le traitement des paquets en alignant les champs sur des mots de 32, voire 64 bits ; le RFC 2460 discute en annexe de la manière d'optimiser le traitement tout en minimisant la place prise par les options.

  • Jumbogramme (type 194 ou 0xc2, RFC 2675). Cette option est utilisée quand le champ longueur des données du paquet IPv6 n'est pas suffisant pour coder la taille du paquet. Cette option est essentiellement prévue pour la transmission à grand débit entre deux équipements. Si l'option jumbogramme est utilisée, le champ longueur des données utiles dans l'en-tête IPv6 vaut 0.
    Noter que le type commence par la séquence binaire 11, ce qui permet au routeur ne traitant pas les jumbogrammes d'en informer la source. Celle-ci pourra réémettre l'information sans utiliser cette option.
  • L'option Router Alert (RFC 2711) demande à un routeur d'examiner le contenu des données qu'il relaie (Router Alert existe également en IPv4, RFC 2113). En principe, le processus de relayage (recopier le paquet sur une interface de sortie en fonction de l'adresse destination et des tables de routage) doit être le plus rapide possible. Mais pour des protocoles comme la gestion des groupes de multicast avec MLD (Multicast Listener Discovery) ou la signalisation des flux avec RSVP, tous les routeurs intermédiaires doivent tenir compte des données.
    L'émetteur envoie les données à la destination, mais s'il précise l'option Router Alert, les routeurs intermédiaires vont analyser les données, voire modifier leur contenu avant de relayer le paquet. Ce mécanisme est efficace puisque les routeurs n'ont pas à analyser le contenu de tous les paquets d'un flux.
    Le type de l'option vaut 5. Il commence par la séquence binaire 00, puisqu'un routeur qui ne connaît pas cette option doit relayer le paquet sans le modifier. Le champ valeur de l'option contient :
    • 0 : pour les messages du protocole MLD de gestion des groupes multicast ;
    • 1 : pour les messages RSVP ;
    • 2 : pour les réseaux actifs ;
les autres valeurs sont réservées.

Destination

Cette extension, dont le format est identique à l'extension de proche-en-proche (cf. figure Format des extensions "proche-en-proche" et "destination"), contient des options qui sont traitées par l'équipement destinataire. Pour l'instant, à part les options de bourrage (voir Pad1 et Padn) et de mobilité (cf. Mobilité dans IPv6), la seule autre option concerne le tunnelage dans des paquets IPv6 (RFC 2473). Cette option permet de limiter le niveau d'encapsulation dans des tunnels des paquets IPv6.

Routage

Cette extension permet d'imposer à un paquet une route différente de celle offerte par les politiques de routage présentes sur le réseau. Pour l'instant seul le routage par la source (type = 0), similaire à l'option Loose Source Routing d'IPv4, est défini pour IPv6. La mobilité IPv6 a également introduit une extension de routage (type = 2) (cf. Optimisation dans le cas du mobile dans un réseau étranger).

Dans IPv4, le routage peut être strict (le routeur suivant présent dans la liste doit être un voisin directement accessible) ou libéral (loose) (un routeur peut utiliser les tables de routage pour joindre le routeur suivant servant de relais). Dans IPv6, seul le routage libéral est autorisé. En effet, le routage strict était initialement mis en place surtout pour des raisons de sécurité. La source devait être absolument sûre du chemin pris par les paquets. Cette utilisation a maintenant disparu du réseau.

Le principe du routage par la source ou Source Routing dans IPv4 est rappelé en introduction de ce chapitre sur les extensions. Le principe est le même pour IPv6. L'émetteur met dans le champ destination du paquet IPv6, l'adresse du premier routeur servant de relais, l'extension contient la suite de la liste des autres routeurs relais et le destinataire. Quand un routeur reçoit un paquet qui lui est adressé comportant une extension de routage par la source, il permute son adresse avec l'adresse du prochain routeur et réémet le paquet vers cette adresse suivante.

Figure 4-8 Format de l'extension routage par la source


La figure Format de l'extension routage par la source donne le format de l'extension de routage par la source :

  • Le champ longueur de l'en-tête indique le nombre de mots de 64 bits qui composent l'extension. Pour l'extension de type 0, cela correspond au nombre d'adresses présentes dans la liste, multiplié par 2.
  • Le champ type indique la nature du routage. Pour l'instant, seul le routage par la source, de type 0 est spécifié. La suite de l'en-tête correspond à ce type.
  • Le nombre de segments restant est décrémenté après la traversée d'un routeur. Il indique le nombre d'équipements qui doivent encore être traversés. Il permet de trouver l'adresse qui devra être substituée.
  • Les 32 bits suivants sont inutilisés pour préserver l'alignement.

La liste comprenant les routeurs à traverser et le destinataire est fournie. Ces adresses ne peuvent pas être multicast.

Fragmentation

La fragmentation telle qu'elle est pratiquée dans IPv4 n'est pas très performante. Initialement, elle servait à rendre transparente les limitations physiques des supports de transmission. Dans IPv4 quand un routeur ne peut pas transmettre un paquet à cause de sa trop grande taille et si le bit DF (don't fragment) est à 0, il découpe l'information à transmettre en fragments. Or le réseau IP étant un réseau à datagramme, il n'y a pas de possibilité de contrôler les fragments. Deux fragments successifs peuvent prendre deux chemins différents et par conséquent seul le destinataire peut effectuer le réassemblage. En conséquence, après la traversée d'un lien impliquant une fragmentation, le reste du réseau ne voit passer que des paquets de taille réduite.

Il est plus intéressant d'adapter la taille des paquets à l'émission. Ceci est fait en utilisant les techniques de découverte du MTU (voir Mécanisme de découverte du PMTU (RFC 1981)). En pratique une taille de paquets de 1 500 octets est presque universelle.

Il existe pourtant des cas où la fragmentation est nécessaire. Ainsi une application telle que NFS sur UDP suppose que la fragmentation existe et produit des messages de grande taille. Comme on ne veut pas modifier ces applications, la couche réseau d'IPv6 doit aussi être capable de gérer la fragmentation. Pour réduire le travail des routeurs intermédiaires, la fragmentation se fera chez l'émetteur et le réassemblage chez le récepteur.

Figure 4-9 Format de l'extension de fragmentation

Le format de l'extension de fragmentation est donné figure Format de l'extension de fragmentation. La signification des champs est identique à celle d'IPv4 :

  • Le champ place du fragment indique lors du réassemblage où les données doivent être insérées. Ceci permet de parer les problèmes dus au déséquencement dans les réseaux orientés datagrammes. Comme ce champ est sur 13 bits, la taille de tous les segments, sauf du dernier, doit être multiple de 8 octets.
  • Le bit M s'il vaut 1 indique qu'il y aura d'autres fragments émis.
  • Le champ identification permet de repérer les fragments appartenant à un même paquet initial. Il est différent pour chaque paquet et recopié dans ses fragments.
  • Le bit DF (don't fragment) n'est plus nécessaire puisque, si un paquet est trop grand, il y aura rejet du paquet par le routeur.

Dans IPv4, la valeur d'une option était codée de manière à indiquer au routeur effectuant la fragmentation si elle devait être copiée dans les fragments. Dans IPv6, l'en-tête et les extensions qui concernent les routeurs intermédiaires (pour l'instant proche-en-proche, routage par la source) sont recopiées dans chaque fragment.

Sécurité

Deux extensions de sécurité -- les extensions d'authentification AH (Authentication Header) et de confidentialité ESP (Encapsulating Security Payload) -- sont définies par l'IETF. Elles permettent de protéger les communications passées sur les réseaux IPv6 mais aussi IPv4 en assurant les services de confidentialité, authentification, intégrité et détection de rejeux. Le chapite Sécurité, RFC 2402 donne une description détaillée de ces extensions, et présente les modes de protection existants.

Justification des extensions Table des matières Exemples d'extensions
Views
Personal tools
Navigation
Tools