<?xml version="1.0" encoding="utf-8"?>
<rfcdesc num="2460" title="Internet Protocol, Version 6 (IPv6) Specification" status="standards">
<authors><author>Stephen E. Deering (Cisco Systems, Inc.)</author><author>Robert M. Hinden (Nokia)</author></authors>
<rfcdate><month>December</month><year>1998</year></rfcdate>
<date>2008-07-01</date>
<content>
<p>Si <wikipedia>IPv4</wikipedia> est normalisé dans un seul document,
le <rfc num="791" local="true"/>, le candidat à sa succession
<wikipedia>IPv6</wikipedia> est décrit de manière plus modulaire, dans
plusieurs RFC dont notre <rfc num="2460"/>, essentiellement consacré
au format des <wikipedia name="Paquet
(réseau)">paquets</wikipedia>. Il a depuis été remplacé par le <rfc
num="8200" local="true"/>.</p>
<p>Remplaçant le premier RFC sur le format des paquets IPv6, le <rfc
num="1883"/>, notre <rfc num="2460"/> est resté stable
pendant dix-huit ans, alors que la plupart des RFC sur <wikipedia>IPv6</wikipedia> ont
connu des révisions ; les autres RFC importants pour IPv6 sont le <rfc
num="4291" local="true"/> sur l'adressage - certainement le moins stable -, le <rfc
num="4861" local="true"/> sur le protocole de découverte des voisins,
le <rfc num="4862" local="true"/> sur l'autoconfiguration des adresses
et le <rfc num="4443" local="true"/> sur <wikipedia name="Internet Control Message Protocol">ICMP</wikipedia>.</p>
<p>À l'heure actuelle, le déploiement de ce RFC est très limité : peu
de paquets IPv6 circulent sur Internet et il est loin d'avoir succédé
à <wikipedia>IPv4</wikipedia>. Le fait d'avoir un numéro de version plus élevé ne suffit
pas ! Notre <rfc num="2460"/> présente sans hésiter IPv6 comme le
successeur d'IPv4, ce qui reste pour l'instant un v&#x153;u
pieux.</p> 
<p>IPv6 reprend largement le modèle qui a fait le succès d'IPv4 : un protocole de
<wikipedia name="Datagramme">datagrammes</wikipedia>, un routage jusqu'au prochain saut
(peu ou pas de routage de bout en bout), des datagrammes acheminés « au
mieux possible », un en-tête de paquet simple et où les champs sont de
taille fixe. La section 1 du RFC résume les différences entre les
formats de paquets IPv4 et IPv6.</p>
<p>La plus spectaculaire des différences est bien sûr
l'augmentation de la taille des adresses. Toujours fixe (contrairement
à des concurrents où les adresses étaient de tailles variables), cette
taille passe de 32 à 128 <wikipedia name="Bit">bits</wikipedia>. Le
maximum théorique d'adresses (en supposant une allocation parfaite)
passe donc de quatre milliards (ce qui ne permet même pas d'allouer
une adresse à chaque personne sur Terre) à plus de 10^40, un nombre
qui défie l'imagination.</p>
<p>Compte-tenu de l'<link url="http://www.potaroo.net/tools/ipv4/">épuisement rapide des adresses
IPv4</link>, cette augmentation est à elle seule une bonne raison de
migrer vers IPv6. Elle reflète les changements de paradigme successifs
en informatique, de « un ordinateur par entreprise » au début des années
70, lorsque IPv4 a été conçu, à « un ordinateur par département » au
cours des années 80 puis à « un ordinateur par personne » avec
l'explosion de la <wikipedia>micro-informatique</wikipedia> et à « plusieurs ordinateurs par personne » de nos jours lorsque le cadre
dynamique et branché se promène avec davantage d'appareils
électroniques sur lui que n'en portait <wikipedia>James Bond</wikipedia> dans ses premiers films. Les quatre milliards
d'adresses d'IPv4 sont donc aujourd'hui bien insuffisantes.</p>
<p>Mais ce changement de format des adresses est également la
faiblesse d'IPv6 : il ne permet en effet pas à des machines v4 et v6
de communiquer directement et les premiers adopteurs du nouveau
protocole ne peuvent donc pas parler aux anciens, ce qui a puissamment
freiné le déploiement d'IPv6.</p>
<p>Les autres changements apportés par IPv6 sont moins connus mais
semblaient à l'époque justifier le nouveau protocole : 
<enum>
<item>Le format de
l'en-tête est simplifié, facilitant la tâche des routeurs (en
pratique, IPv4 garde son avantage, la complexité de son format étant
compensée par l'expérience des développeurs et la quantité de main
d'&#x153;uvre qui a travaillé à optimiser les routeurs IPv4).</item>
<item>Les options sont à la fois plus libres, notamment en taille, et
moins contraignantes à gérer pour les routeurs,</item>
<item>Les services d'<wikipedia>authentification</wikipedia> et de
<wikipedia>confidentialité</wikipedia> ont été inclus (cet argument
est souvent cité en faveur d'IPv6 mais il est largement bidon, IPv4
ayant désormais les mêmes capacités, et elles n'ont pas souvent été
intégrées dans les implémentations IPv6).</item>
</enum></p>
<p>La section 3 détaille le format du nouvel en-tête de paquet.
<code>
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version| Traffic Class |           Flow Label                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Payload Length        |  Next Header  |   Hop Limit   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         Source Address                        +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                      Destination Address                      +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</code>
Contrairement aux paquets IPv4, il n'y a pas de champ « Options » de
taille variable. Le champ « Version » contient évidemment le numéro 6
(il y a eu des <link url="https://www.iana.org/assignments/version-numbers">protocoles ayant reçu le numéro 5 ou 7</link> mais ils n'ont
jamais été déployés). Le champ <wikipedia xml:lang="en" name="DiffServ Code Point">DSCP</wikipedia>,
ex-<wikipedia xml:lang="en" name="Type of Service">TOS</wikipedia>, d'IPv4 est remplacé par les champs
<foreign>Traffic class</foreign> et <foreign>Flow label</foreign> qui
semblent très peu utilisés en pratique (sections 6 et 7 du RFC, ainsi
que l'annexe A ; le <foreign>flow label</foreign> a été ensuite mieux normalisé dans le <rfc num="6437" local="false"/>).</p>
<p>Le champ <foreign>Next header</foreign> indique le type de
l'en-tête suivant. La plupart du temps, c'est l'en-tête d'un
<wikipedia name="Couche de transport">protocole de
transport</wikipedia> comme <wikipedia name="Transmission Control Protocol">TCP</wikipedia> (numéro 6) ou
<wikipedia name="Datagram Congestion Control Protocol">DCCP</wikipedia> (numéro 33), dont les numéros sont <link
url="https://www.iana.org/assignments/protocol-numbers">stockés dans un registre
IANA</link>. Mais cela peut être aussi un en-tête d'extension de la <wikipedia
name="Couche de réseau">couche réseau</wikipedia> par exemple 44 pour
les fragments (ces numéros sont stockés dans le même registre
IANA). Notez que, depuis, le <rfc num="6564" local="true"/> a modifié
les règles pour les futurs en-têtes, imposant un format commun. (Pour analyser les paquets IPv6, voir mon article « <link local="analyse-pcap-ipv6">Analyser les en-têtes IPv6 avec pcap</link> ».)</p>
<p>Vu avec <computer>tshark</computer>, la version texte de
l'analyseur <wikipedia>Wireshark</wikipedia>, et son option
<computer>-V</computer>, voici un paquet IPv6 contenant lui-même du TCP :
<code>
Internet Protocol Version 6
    0110 .... = Version: 6
        [0110 .... = This field makes the filter "ip.version == 6" possible: 6]
    .... 0000 0000 .... .... .... .... .... = Traffic class: 0x00000000
    .... .... .... 0000 0000 0000 0000 0000 = Flowlabel: 0x00000000
    Payload length: 40
    Next header: TCP (0x06)
    Hop limit: 64
    Source: 2a01:e35:8bd9:8bb0:21e:8cff:fe76:29b6 (2a01:e35:8bd9:8bb0:21e:8cff:fe76:29b6)
    Destination: 2a01:e35:8bd9:8bb0:21c:23ff:fe00:6b7f (2a01:e35:8bd9:8bb0:21c:23ff:fe00:6b7f)
</code></p>
<p>La section 4 présente les en-têtes d'extension. Grande
nouveauté d'IPv6, ils sont situés entre l'en-tête IP normal et
l'en-tête de la couche transport. La plupart d'entre eux sont ignorés
par les <wikipedia name="Routeur">routeurs</wikipedia> situés sur le
trajet et traités seulement à l'arrivée (alors qu'un routeur IPv4
devait, en théorie, toujours examiner les options). Notre RFC
normalise certaines de ces extensions, mais d'autres peuvent être
ajoutées par des RFC ultérieurs comme par exemple le <rfc num="3775"/> qui normalise le <foreign>Mobility Header</foreign> (numéro 135, section 6.1 du RFC).</p>
<p>C'est ainsi que la section 4.3 décrit l'en-tête d'extension
« <foreign>Hop-by-hop</foreign> », une de celles qui doivent être
examinées par tous les routeurs sur le trajet. Elle contient des
options (décrites en section 4.2), qui sont stockées sous forme de
tuples <wikipedia xml:lang="en" name="Type-length-value">TLV</wikipedia>. Le type de chaque option indique,
dans ses deux premiers bits, si l'option peut être ignorée ou non.</p>
<p>Le symétrique de cet en-tête est le
« <foreign>Destination</foreign> », section 4.6, qui stocke, de la
même façon, les options qui ne doivent être traitées que par le
destinataire. (Pour mettre un tel en-tête dans vos paquets, voir <link
local="destination-options-ipv6">mon article</link>.)</p>
<p>La section 4.4 décrit l'en-tête « <foreign>Routing</foreign> » qui
permet d'indiquer la route qu'on souhaite voir le paquet
prendre, ou bien d'enregistrer la route effectivement suivie. Notons qu'un champ, le « <foreign>Routing Type</foreign> »,
indique le type de routage souhaité et que sa valeur 0 ne doit plus
être utilisée : en raison de problèmes de sécurité serieux, le
<foreign>Type 0 Routing Header</foreign> a été abandonné dans le <rfc
num="5095" local="true"/>.</p>
<p>La section 4.5 décrit l'en-tête « <foreign>Fragment</foreign> » qui
permet de représenter des paquets IP qui, trop longs, ont été
fragmentés par l'émetteur (contrairement à IPv4, les routeurs IPv6
n'ont pas le droit de fragmenter).</p>
<p>La section 5 décrit les questions liées à la taille des
paquets. IPv6 impose une <wikipedia name="Maximum Transmission Unit">MTU</wikipedia> minimale de 1280
<wikipedia name="Octet">octets</wikipedia> et, en théorie, une machine qu n'enverrait que des paquets de
cette taille (ou plus petits) n'aurait jamais de problème. Au delà, on
doit utiliser la découverte de la MTU du chemin, spécifiée dans le
<rfc num="1981" local="true"/> mais dont le moins qu'on puisse dire
est qu'elle n'est pas très fiable (cf. <rfc num="4821" local="true"/>).</p>
<p>Les différences avec le <rfc num="1883"/> sont décrites après la
bibliographie. Elles sont en général de peu d'importance. Par exemple,
la MTU minimale passe à 1280 octets (après des <link url="http://playground.sun.com/ipv6/minutes/IPng-Meeting.Feb95.txt">débats enfiévrés</link>, à une
époque où <wikipedia>LocalTalk</wikipedia> était une technologie
assez courante, le <rfc num="1883"/> utilisait 576 octets). Outre
changement, 
la possibilité d'envoyer des très grands paquets, les
<foreign>jumbograms</foreign>, a disparu du RFC de base et figure
désormais dans un RFC dédié, le <rfc num="2675"/>. Le <rfc num="8200"
local="true"/>, qui a remplacé notre RFC, n'a pas apporté de
changements cruciaux.</p>
</content>
</rfcdesc>
