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

From Livre IPv6

(Activité 21: Le format de l’en-tête IPv6)
(Références bibliographiques)
Line 88: Line 88:
 
*RFC 6040 : Tunnelling of Explicit Congestion Notification
 
*RFC 6040 : Tunnelling of Explicit Congestion Notification
 
*RFC 6437:  IPv6 Flow Label Specification
 
*RFC 6437:  IPv6 Flow Label Specification
<!--
 
 
*RFC 6438 : Flow Label for Tunnel ECMP/LAG  (cf page-4)
 
*RFC 6438 : Flow Label for Tunnel ECMP/LAG  (cf page-4)
-->
 
 
*RFC 4944 : Transmission of IPv6 Packets over IEEE 802.15.4 Networks
 
*RFC 4944 : Transmission of IPv6 Packets over IEEE 802.15.4 Networks
 
*RFC 6282 : Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks
 
*RFC 6282 : Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks

Revision as of 16:14, 30 March 2016


Activité 21: Le format de l’en-tête IPv6

Introduction

Hormis la modification de la taille des adresses, ce qui conduit à une taille d'en-tête de 40 octets (le double de l'en-tête IPv4 sans les options), le protocole IP a subi un toilettage reprenant l'expérience acquise au fil d’une quarantaine d’années avec IPv4. Le format des en-têtes IPv6 est simplifié et permet aux routeurs de meilleures performances dans leurs traitements :

  • L'en-tête ne contient plus le champ checksum, qui devait être ajusté par chaque routeur en raison entre autres de la décrémentation du champ durée de vie. Par contre, pour éviter qu'un paquet dont le contenu est erroné -- en particulier sur l'adresse de destination -- ne se glisse dans une autre communication, tous les protocoles de niveau supérieur doivent mettre en œuvre un mécanisme de checksum de bout en bout incluant un pseudo-en-tête qui prend en compte les adresses source et destination. Le checksum d'UDP, facultatif pour IPv4, devient ainsi obligatoire. Pour ICMPv6, le checksum intègre le pseudo-en-tête, alors que pour ICMPv4, il ne portait que sur le message ICMP.
  • La taille des en-têtes étant fixe, le routeur peut facilement déterminer où commence la zone de données utiles.
  • Les options ont été retirées de l'en-tête et remplacées par de nouveaux en-têtes appelés extensions qui peuvent être facilement ignorées par les routeurs intermédiaires.
  • Les champs sont alignés sur des mots de 64 bits, ce qui optimise leur traitement, surtout avec les nouvelles architectures à 64 bits.
  • La taille minimale des MTU : Maximum Transmission Unit est de 1 280 octets. Le choix de 1 280 comme MTU minimal en IPv6 permet la mise en tunnel de paquets IPv6. En effet, la taille de 1 500 octets est généralement admise car elle correspond à la valeur imposée par Ethernet. La majorité des autres réseaux offrent une taille supérieure. Pour les réseaux ne le permettant pas, une couche d'adaptation (comme avec les couches d'adaptation AAL5 d'ATM [RFC 2492] ou 6LoWPAN avec les réseaux de capteurs (comme IEEE 802.15.4 [RFC 4944]) devra être mise en œuvre pour pouvoir transporter les paquets IPv6.
  • La fonction de fragmentation a été retirée des routeurs. Les champs qui s'y reportent (identification, drapeau, place du fragment) ont été supprimés. Normalement les algorithmes de découverte du PMTU (Path MTU) évitent d'avoir recours à la fragmentation. Si celle-ci s'avère nécessaire, une extension est prévue.

L'idée est de retirer du cœur de réseau les traitements compliqués. Les routeurs ne font que retransmettre les paquets vers la destination, les autres traitements (fragmentation, ...) seront faits par l'émetteur du paquet.

Format de l'en-tête du paquet IPv6

Le format d'en-tête du paquet IPv6 est spécifié par le RFC 2460 page 4. Cette en-tête avec les champs le composant est représenté par la figure 1. Comme indiqué précédemment, l'en-tête IPv6 est de taille fixe et se compose de mots de 64 bits. De manière similaire à IPv4, l'en-tête se compose de 5 mots. La taille des mots est doublée dans le cas d'IPv6. La taille de l'en-tête IPv6 est ainsi de 40 octets.


Figure 1: Format d'un paquet IPv6

Valeurs des champs de l'en-tête

Version

Le champ version est le seul champ qui occupe la même place dans le paquet IPv6 et dans le paquet IPv4. Sa valeur est 6. Le numéro de version 5 avait déjà été attribué au protocole Stream qui finalement n'a pas eu le succès attendu (RFC 1190, RFC 1819).

Classe de trafic

Dans la version standardisée par le RFC 2460 un champ classe de trafic sur 8 bits permet la différenciation de services conformément aux spécifications du RFC 2474.

Le champ classe de trafic est aussi appelé dans les paquets IPv4 octet DiffServ (DS), il prend la place du champ ToS, initialement défini dans la spécification d'IPv4 (cf. figure 2). Le champ DS est découpé en deux parties. Le sous-champ DSCP (DiffServ Code Point) contient les valeurs des différents comportements. Les deux derniers bits du champ notés ECN (Explicit congestion Notification) servent aux routeurs à reporter un risque de congestion en combinaison avec l'algorithme RED (Random Early Detection). Le codage des 2 bits ECN est décrit à la page 6 du RFC 6040

Figure 2: Format de l'octet classe de trafic.

Identificateur de flux

Ce champ introduit dans le RFC 2460 puis spécifié en détail dans le RFC 6437 contient un numéro unique choisi par la source, qui a pour but de faciliter le travail des routeurs et la mise en oeuvre des fonctions de qualité de service comme RSVP. Cet indicateur peut être considéré comme une marque à 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.

Avec IPv4, certains routeurs, pour optimiser le traitement, se basent sur les valeurs de cinq champs pour construire un contexte : adresses de la source et de destination, numéros de port de la source et de destination et protocole. Ce contexte sert à router plus rapidement les paquets puisqu'il évite de consulter les tables de routage pour chaque paquet. Ce contexte est détruit après une période d'inactivité.

Avec IPv6, cette technique est officialisée. 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 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.

A la date de rédaction de ce document, l'utilisation de l'étiquette de flux reste encore floue. Les micro-flux, c'est-à-dire de flux applicatifs, ne sont pas analysé dans le coeur du réseau pour des raisons de facteur d'échelle, de plus MPLS a repris la notion de routage spécifique en fonction d'une étiquette. Pour l'instant ce champ peut être vu comme réservé et son utilisation pourra être mieux spécifiée dans le futur.

Longueur des données utiles (Payload Length)

Ce champ indique la taille en octet des données utiles, c'est à dire les données à la suite de l'en-tête. Les éventuelles extensions à l'en-tête IPv6 sont incluses dans ces données. Ce champ sur 16 bits peut donc indiquer une taille des données utiles allant jusqu'à 64 kilo-octets. Pour des paquets dont la taille serait supérieure, ce champ vaut 0 et l'émetteur ajoute une extension d'en-tête de "proche-en-proche" avec l'option jumbogramme définie par le RFC 2675. Cette extension est essentiellement prévue pour la transmission à grand débit entre deux équipements.

En-tête suivant ( Next Header)

Ce champ identifie le prochain en-tête se trouvant à la suite de l'en-tête IPv6. Il peut s'agir d'un protocole (de niveau supérieur ICMP, UDP, TCP...) ou de la désignation d'une extension (cf. tableau Valeurs du champ en-tête suivant pour IPv6).

Valeurs du champ en-tête suivant pour IPv6
valeur Hexa Protocole ou Extension
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
59 0x3b Fin des en-têtes
60 0x3c Destination
132 0x84 SCTP
135 0x87 Mobilité
136 0x88 UDP-lite
140 0x8c Shim6

Nombre maximal de sauts (Hop Limit)

Ce champ représente le nombre maximal de routeurs que le paquet peut traverser. Il est initialisé par la source du paquet et ensuite décrémenté à chaque nœud traversé. Un datagramme retransmis par un routeur est rejeté avec l'émission d'un message d'erreur ICMPv6 vers la source si la valeur après décrémentation atteint 0. Ce mécanisme permet d'éliminer des paquets persistant trop longtemps dans le réseau pour cause de problèmes de configuration comme les boucles de routage. Il est aussi utilisé par des outils de d'ingénérie des réseaux comme traceroute pour signaler à la source l'ensemble des routeurs traversés jusqu'à une destination.

La valeur initiale de ce champ à l'émission du paquet devrait être donnée dans un document annexe de l'IANA (http://www.iana.org/) ce qui permettrait de la modifier en fonction de l'évolution de la topologie du réseau. La valeur n'est pas encore officiellement attribuée, mais certaines implantations prennent actuellement la valeur conseillée pour IPv4 : 64.

La valeur par défaut peut être dynamiquement attribuée aux équipements du réseau par les annonce des routeurs en configuration automatique, une modification de ce paramètre sera donc relativement simple quand la limite actuelle sera atteinte. On peut noter une limitation, puisque ce champ codé sur 8 bits n'autorise la traversée que de 255 routeurs. En réalité, dans l'Internet actuel, le nombre maximal de routeurs traversés est d'une quarantaine, ce qui laisse une bonne marge pour l'évolution du réseau.

Adresses source et destination

Ces adresses sont renseignées par l'émetteur du paquet pour spécifier l'émetteur et le destinataire du paquet. Pour renseigner l'adresse source, l'émetteur choisit de préférence une adresse IPv6 parmi celles configurées sur l'interface utilisée pour transmettre le paquet sur le réseau. Cette adresse est de plus choisie pour avoir une portée compatible avec l'adresse de destination, et ainsi permettre au destinataire de répondre. Par exemple, il serait problématique d'essayer de joindre une machine de l'Internet en donnant comme adresse source une adresse lien-local. Le mécanisme de choix de l'adresse source est spécifié dans le RFC 6724.

L'adresse destination elle aussi peut être choisie parmi la liste des adresses valables pour le destinataire, liste pouvant provenir de la résolution d'un nom en adresse par le DNS. L'adresse choisie doit être compatible avec la portée des adresses disponibles au niveau de l'émetteur. Par exemple si l'émetteur ne possède que des adresses de type ULA et que le destinataire est connu avec des adresses globales et ULA, ces dernières adresses seront à préférer. Le mécanisme du RFC 6724 précise le processus de choix de l'adresse destination.

Extensions à l'en-tête IPv6

Les extensions à l'en-tête IPv6 permettent d'enrichir le protocole avec de nouvelles fonctionnalités. Elles sont ajoutées par l'émetteur du paquet pour signaler un traitement spécifique à réaliser soit par les équipements intermédiaires, soit par la destination du paquet. Ils existent plusieurs types d'extension selon le traitement demandé. La présence d'une extension est signalée par le champ En-tête suivant (Next Header) de l'en-tête IPv6 qui possède alors la valeur correspondant à cette extension. Ainsi elle est traitée par les routeurs intermédiaires comme un protocole de niveau supérieur à IP. L'utilisation des différents types d'extension d'en-tête IPv6 sera abordé dans l'activité 24.

Références bibliographiques


Pour aller plus loin : La gestion de la qualité de service

L'Internet différencié permet aux fournisseurs d'accès de gérer différemment les congestions qui surviennent dans le réseau. Sans différenciation, les paquets ont la même probabilité de rejet. Avec la différenciation, plusieurs classes de trafic seront définies. Les paquets appartenant aux classes les plus élevées ont une probabilité de rejet plus faible. Bien entendu pour que l'introduction de telles classes de service soit efficace, il faut introduire une gestion des ressources différente pour chacune des classes et des mécanismes de contrôle pour vérifier que les flux des utilisateurs n'utilisent pas que les classes les plus élevées ou qu'ils ne dépassent leur contrat. Par exemple un client peut établir un contrat de niveau de services appelé SLA (Service Level Agreement) avec son fournisseur d’accès .

L'intérêt principal de la différenciation de services est qu'elle ne casse pas le modèle initial de l'Internet (version 4 ou version 6). Les flux sont toujours traités en Best Effort même si certains sont plus Best que d'autres. Il n'y a aucune garantie qu'un trafic d'une classe de service haute arrive à destination, mais la probabilité est plus importante. L'autre intérêt des classes de service vient de la possibilité d'agrégation des flux. La classe d'appartenance est indiquée dans l'en-tête du paquet. Les applications peuvent marquer les paquets en fonction de paramètres locaux (flux multimédia, flux interactif, trafic priorisé, ...). Le fournisseur d'accès qui récupère le trafic n'a plus à se préoccuper des applicatifs, il vérifie que le trafic d'une classe ne dépasse pas le contrat préalablement établi.

Dans le cœur du réseau, les routeurs prennent en compte les différentes classes. Le fournisseur d'accès devra également passer des accords avec les autres opérateurs pour pouvoir faire transiter les flux avec un traitement approprié. Cet aspect de dimensionnement de réseau et de négociation d'accords d'échange est au coeur du métier d'opérateur.

Le tableau 1 présente les différentes valeurs définies pour le champ DSCP (Differential Service Code Point). Les valeurs sont présentées en format binaire avec les 6 bits les plus significatifs de l’octet Traffic Class, puis leur conversion en décimal, leur nommage, la probabilité d’écartement, et l’équivalence avec les anciennes valeurs du champ TOS de l’IPv4 :

Tableau 1: Format du champ DSCP.

Pour l'instant deux types de comportement sont standardisés :

  • Assured Forwarding [RFC 2597] : Ce comportement définit quatre classes de services et trois priorités suivant que l'utilisateur respecte son contrat, le dépasse légèrement ou est largement en dehors. Les classes sont donc choisies par l'utilisateur et restent les mêmes tout au long du trajet dans le réseau. La priorité, par contre, peut être modifiée dans le réseau par les opérateurs en fonction du respect ou non des contrats.Par exemple pour la classe AF n°2 on dispose des 3 priorités suivantes : AF21, AF22, AF23, plus le chiffre est élevé, plus la priorité est faible, c'est à dire qu'en cas de saturation de cette classe de service, les paquets AF23 seront écartés avant AF22, puis AF21.
  • Expedited Forwarding [RFC 2598] : Ce comportement est comparable à un circuit à débit constant réservé dans le réseau. Le trafic est mis en forme à l'entrée du réseau, en retardant l'émission des paquets qui sont hors contrat. En plus de ces comportements, l'octet DS a gardé, pour des raisons de compatibilité avec les équipements existants, les valeurs du bit ToS qui étaient le plus fréquemment utilisées. La valeur est 0xEF (1011 1000 en binaire, et en tenant compte des 6 bits de poids forts : 46 en décimal).
  • Voice Admit: cette autre valeur a été par la suite proposée dans le RFC 5865 pour affiner le traitement de flux temps réels de différentes natures (Voix, Video, Signalisation Temps réel…). Et une autre particularité, la valeur 0xE0 (1110 0000 en binaire, et en tenant compte des 6 bits de poids forts : 56 en décimal) correspond à la classe de contrôle du réseau (Network Control). Elle est utilisée dans des mises en oeuvre d'IPv6 pour l'émission de certains paquets ICMPv6.
Personal tools