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

From Livre IPv6

(Pour aller plus loin)
(OSPFv3)
 
(60 intermediate revisions by 5 users not shown)
Line 1: Line 1:
  
 
__NOTOC__  
 
__NOTOC__  
= Activité 22: Les mécanismes d’encapsulation =
 
==Introduction==
 
La notion d'encapsulation de protocoles repose sur le principe de l’empilement des couches représentatives des traitements nécessaires à effectuer dans les différents composants d’un réseau. Ces traitements affecteront toutes les couches dans les équipements d’extrémité, et certaines seulement pour les équipements réalisant le relais des échanges sur le réseau de communication.
 
Dans cette activité, nous aborderons deux points importants en lien avec l'encapsulation, et impactés par le remplacement de IPv4 par IPv6 au sein de la couche de réseau : la longueur maximale des unités de transfert (''Maximum Transmission Unit'' (MTU)), c'est à dire la longueur maximale des datagrammes encapsulés dans les trames de la couche de liaison, et la question de la détection d'erreur binaire par calcul de ''checksum'', qui a disparu de l'en-tête IPv6.
 
  
== Représentation de l'encapsulation ==  
+
= Activité 22: L'acheminement des paquets IPv6 =
L’organisation internationale de normalisation ISO a défini le modèle OSI (''Open System Interconnection'') par une décomposition de l'architecture du réseau en 7 couches représentées du niveau Physique jusqu’au niveau Application comme représentée par la Figure 1. Le modèle TCP/IP (ou DOD ''Department of Defense'') a eu une approche plus pragmatique en décomposant l'architecture de réseau  en 4 couches. Les couches session, présentation et application sont agrégées en une seule couche applicative propre à chaque protocole.
+
<!-- = Activité 22: Acheminement d'IPv6 = -->
<center>
+
<!-- {{Decouverte}} -->
[[image:2015_10_12_Encapsulation_v01.jpg|thumb|center|500px|Figure 1 : Comparaison modèle OSI - modèle TCP/IP.]]
+
== Introduction : Qu'est ce que le routage ? ==
</center>
+
Pour simplifier l’organisation, pour un noeud d'extrémité du réseau, nous pouvons considérer, que la carte réseau réalise les fonctions de niveau Physique et Liaison, que le traitement des couches Réseau et Transport est réalisé par les couches intermédiaires installées dans le système d’exploitation, et que le reste du système, avec les programmes applicatifs, gère les couches Session, Présentation et Application.
+
  
== Traitement des couches basses==
+
Nous avons vu les aspects statiques du protocole IPv6 dans l’activité précédente. Nous allons voir les aspects opérationnels de ce protocole. L'objectif d'IPv6 est de réaliser un réseau virtuel qui assure un service de connectivité par la remise de datagrammes. Ce réseau doit être doté de moyens d'acheminement de datagrammes jusqu'au destinataire final. Les deux fonctions essentielles de n'importe quel réseau sont l'adressage et le routage. L'adresse IP sert à l'identification des nœuds dans le réseau virtuel mais également à leur localisation. Le routage est la fonction indispensable au réseau pour acheminer un paquet vers sa destination<ref>Rubino, G. et Toutain, L. (2000). Techniques de l'ingénieur.  Routage dans les réseaux Internet</ref>. Cette fonction fait référence au traitement des  routes. Elle recouvre deux activités : l'établissement des routes (''routing''), c'est-à-dire l'identification des chemins pour atteindre les différentes destinations du réseau, et la détermination d'une route (''forwarding'') pour acheminer le datagramme. L'acheminement du datagramme consiste à trouver et suivre une route pour atteindre le destinataire.
 +
Les éléments du routage IPv6 sont l'hôte, le lien et le routeur. L'hôte est un nœud d'extrémité (source et/ou destination). Les hôtes peuvent avoir plusieurs interfaces qui ont chacune une adresse IP. L'interface réseau constitue le point d'accès au réseau physique. Les hôtes émettent et reçoivent des datagrammes mais ils n'ont pas la capacité de relayage. Les datagrammes reçus qui ne lui sont pas destinés sont purement et simplement détruits. Le Lien IPv6 est un réseau physique identifié par un préfixe réseau. Ce préfixe sert de localisateur dans l'interconnexion de réseaux (ou Internet).
 +
Enfin, le  routeur relie deux liens IPv6. Il est l'élément indispensable de l'Internet. Il utilise le préfixe réseau pour le routage. Un routeur est un nœud intermédiaire connecté à deux ou plusieurs liens IPv6 simultanément, ayant  la connaissance de la topologie du réseau et donc capable d'effectuer un choix de route (action de routage) pour ensuite relayer des paquets entre les interfaces (action de commutation).
  
La méthode de transport d'un datagramme IPv6 entre deux machines directement reliées entre elles par un lien physique est le même que pour IPv4. Le datagramme est tout d'abord transmis vers l'interface d'émission qui l'encapsule dans une trame (PDU (''Protocol Data Unit'') de niveau 2 dans le modèle de référence OSI). Cette trame est transmise sur le lien avec l'adresse physique de la machine de destination (cette adresse sur un lien sera appelée adresse MAC dans la suite). La machine de destination reçoit la trame sur son interface, désencapsule le datagramme et le traite.
+
{{HorsTexte| Topologie|
 +
La topologie de réseau correspond à l'arrangement (physique ou logique) de ses nœuds et de ses liaisons.}}
  
Les différences avec IPv4 sont les suivantes :
+
Dans le modèle de l'Internet, la fonction de routage est présente dans les deux types de systèmes existants qui ont chacun leur objectif de routage. Les hôtes doivent trouver un routeur. Un hôte ignore le chemin, il envoie son trafic à un routeur local. Le routeur local signifie un routeur qui est sur le même lien que l'hôte. Cependant, un hôte doit pouvoir communiquer en l'absence de routeur, tandis que les routeurs doivent trouver un chemin. Le routeur effectue une fonction supplémentaire dans l'acheminement des paquets : le relayage, qui est l'action de commuter.
  
* Sur le support Ethernet, le RFC 2464 précise que le code protocole encapsulé de la trame est différent (champ <tt>EtherType</tt> d'une trame Ethernet). Par exemple, pour les réseaux à diffusion, le code est <tt>0x86DD</tt> alors que, pour IPv4, le code est <tt>0x0800</tt>. À l'origine, il était prévu de garder le même code et d'assurer l'aiguillage entre IPv4 et IPv6 en utilisant le champ <tt>Version</tt> du paquet. Mais certains équipements ne vérifient pas la valeur de ce champ et auraient eu un comportement incontrôlable en essayant de traiter un paquet IPv6 comme un paquet IPv4.
+
Dans un réseau en mode datagramme, le routage est une fonction commune à tous les nœuds du réseau et propre à la couche de réseau. De plus, il est utilisé par chaque paquet et il s'effectue indépendamment des systèmes de transmission sous-jacents. L'acheminement du datagramme est fait de voisin à voisin ou, encore dit, de proche en proche. Un voisin est défini comme un nœud qui partage la même connectivité physique, c'est-à-dire un nœud connecté sur le même lien IPv6 et utilisant le même préfixe réseau IPv6. Chaque hôte (ou routeur) connait uniquement le voisin suivant où le datagramme doit être envoyé. On parle de prochain saut (''next hop''). Un datagramme est acheminé vers le destinataire final par sauts successifs de voisin à voisin. Le routage de paquets consiste à déterminer le meilleur voisin pour atteindre le destinataire. Le routage IP est un routage d'interconnexion de réseaux physiques. Le routage IP choisit donc un des réseaux physiques pour véhiculer le datagramme vers le prochain saut.
* La résolution de l'adresse MAC de destination à partir de l'adresse IP de destination du paquet change. Par exemple, sur un réseau à diffusion, cette résolution est faite en IPv4 par le protocole ARP alors qu'en IPv6 on utilise le protocole de découverte de voisins comme nous le verrons dans la séquence 3.
+
* La taille minimale d'une trame est passée à 1 280 octets ; ceci peut forcer certains protocoles à utiliser plusieurs trames par datagramme IPv6.
+
* Enfin, certains protocoles ont des parties propres à IPv4. Ces parties doivent être modifiés. C'est le cas des protocoles de contrôle et de compression de PPP.
+
  
=== Couche physique ===
+
Quand un paquet IPv6 arrive à un routeur, celui-ci décide si ce paquet lui est destiné ou s'il doit le relayer. Dans ce dernier cas, le routage consiste à déterminer la route ; autrement dit vers quelle interface faire sortir le paquet afin qu'il atteigne sa destination. Cette décision s'appuie d'une part sur les informations contenues dans l'en-tête IP du paquet, principalement '''l'adresse destination''' ; d'autre part sur les informations obtenues du processus d'établissement des routes. Ces informations sont contenues dans la '''table de routage''' du nœud et  constituent sa connaissance locale de la topologie du réseau. Avec ces informations, un nœud déterminera vers quelle interface faire sortir le paquet et à quel nœud le remettre. Ainsi, de proche en proche, le paquet sera acheminé depuis la source jusqu'à sa destination.
Commençons par la couche ''physique'', qui est à la base de l’édifice de ce modèle. Les spécifications de cette couche dépendent du support lui-même. Nous devons gérer la transmission des informations binaires issues du codage des trames et des paquets sur un support cuivre, optique ou sans fil ; d’où la nécessité d’adaptation aux caractéristiques des composants (câbles, connecteurs ou antennes) et d’une méthode appropriée de codage des données (représentation physique des données binaires).  
+
  
La représentation binaire utilisée dépend du support. Sur du cuivre, on utilise des variations d’impulsions électriques ; sur une fibre optique, ce sont des variations lumineuses sur une ou plusieurs longueurs d’ondes ; en transmission sans fil, ce sont généralement des signaux radio, laser ou infrarouge. La couche ''physique'' coordonne le débit et la synchronisation de l'émetteur et du récepteur réseau, tout en tentant de garantir la transparence et l’intégrité d’un flux d’information binaire, sans notion d’interprétation du contenu.
+
Le problème de fond du routage est : comment les routeurs acquièrent-ils l'information pour qu'ils puissent effectuer le bon choix de route ?
 +
La connaissance de la topologie du réseau peut être communiquée à chaque routeur de plusieurs façons. L'administrateur peut configurer manuellement la table de routage au niveau des différents routeurs. Mais ce mode de configuration est peu adapté lorsque le réseau évolue comme, par exemple, quand une nouvelle liaison apparait. On parle alors de '''routage statique'''.
 +
Une autre méthode consiste, pour chaque routeur, à propager sa connaissance locale du réseau et à intégrer les informations fournies par d'autres routeurs. Ces échanges s'effectuent grâce à des '''protocoles de routage'''. Avec ces échanges, une prise en compte automatique des évolutions du réseau est effectuée. On parle alors de '''routage dynamique'''.
  
Hélas, cette couche est fréquemment soumise à différentes perturbations issues de l'environnement extérieur au canal de transmission : rayonnements électromagnétiques, micro-coupures ou altérations des signaux par différents facteurs. Les coupleurs intégrés dans les cartes réseau réalisent les fonctions nécessaires et utiles au niveau ''physique'', et on dispose d’un indicateur de qualité de la transmission avec le calcul du CRC (''Cyclic Redondancy Check'').
+
Cette activité présente comment s'effectue l'acheminement des paquets et en particulier le choix de la route. Elle explique les différents types de route que l'on trouve dans une table de routage. Les protocoles de routage disponibles en IPv6 sont rappelés. Toutefois, les algorithmes de routage pour le calcul des routes sont hors du champ de ce cours.
  
=== Couche liaison ===
+
== Acheminement des paquets ==
Le rôle de la couche ''liaison'' est, entre autres, de contrôler l'accès à la couche physique, en réalisant le multiplexage temporel sur le support de transmission, et de transformer la couche ''physique'' en une liaison à priori exempte d'erreurs de transmission pour la couche ''réseau''. La couche ''liaison'' doit être capable d’écarter le trafic nécessaire à la synchronisation sur le lien physique, et de reconnaître les débuts et fins de trames. Cette couche écarte les trames en cas de réception erronée, comme en cas de non respect du format, ou bien en cas de problème sur la ligne de transmission. La vérification du champ CRC aide à faire ce tri. Cette couche intègre également une fonction de contrôle de flux pour éviter l'engorgement d’un récepteur incapable de suivre un rythme imposé.
+
  
L'unité de données de protocole de la couche ''liaison de données'' est la trame (''Link Protocol Data Unit'' (LPDU)), qui est composée de plusieurs champs permettant d’identifier l’origine des échanges, le rôle de la trame, le contenu de l’enveloppe et, en fin de trame, le champ CRC, le tout étant encadré par une séquence particulière de codage de début et de fin de trame.
+
Le routage  d'un paquet par un routeur nécessite  de prendre une décision  afin de l'acheminer vers sa destination. Un paquet est à relayer lorsqu'il arrive sur un routeur et que l'adresse destination de ce paquet ne concerne aucune interface de ce routeur. Plusieurs cas sont alors possibles :
 +
* la destination est sur un des réseaux sur lequel le routeur est directement connecté. Le paquet doit alors être remis directement à la destination ;
 +
* la destination n'est sur aucun des réseaux directement connectés au routeur. ce dernier doit déterminer quel est le meilleur routeur voisin qui rapproche le paquet de sa destination finale. Le paquet doit alors être relayé vers cet autre routeur qui prendra en charge l'acheminement du paquet ;
 +
* la destination est inconnue. Le routeur ne peut décider vers où le paquet doit être relayé. Le paquet doit donc être éliminé et un message d'erreur ICMP (ICMPv4 ou ICMPv6 selon la version du protocole IP utilisé) est émis vers la source du paquet pour lui indiquer le problème de routage.
  
Si nous prenons l’exemple de la trame Ethernet (cf. Figure 2), un délai inter-trame minimum de 96 intervalles de temps est spécifié comme silence sur un support cuivre alors que, sur un support optique, tout silence est comblé par la transmission d’un ou plusieurs symboles particuliers « idle » ; une parfaite synchronisation est alors maintenue entre les extrémités du lien optique.
+
La détermination du cas approprié se fait à partir des informations connues par le routeur contenues dans sa '''table de routage'''.
<center>
+
[[image:2015 10 12 Ethernet v01.jpg|thumb|center|600px|Figure 2 : Format de la trame Ethernet.]]
+
</center>
+
Une fois que l’arrivée d’une trame Ethernet est détectée par le coupleur, les premiers champs immédiatement accessibles correspondent aux adresses MAC <tt>Destination</tt> et <tt>Source</tt> puis, soit au champ <tt>Longueur</tt> dans le cas d’une encapsulation au standard 802.3, ou bien au champ <tt>EtherType</tt> dans le cas d’une encapsulation avec le standard Ethernet original. Ensuite, l’enveloppe de la trame transporte les données, qui correspondent aux paquets IPv6 dès lors que le champ <tt>EtherType</tt> vaut <tt>0x86dd</tt>. Vient ensuite le champ CRC codé sur 32 bits.
+
Dans le cas d’une encapsulation au standard 802.1Q, d’autres champs permettent la reconnaissance du numéro de VLAN (''Virtual Local Access Network'') et du niveau de priorité défini dans le standard 802.1p.
+
  
Un des éléments particulièrement importants est la capacité de transport de la trame. Dans l’exemple ci-dessus, nous voyons que la trame Ethernet traditionnelle dispose d’une enveloppe qui autorise le transport de 1500 octets maximum : MTU = 1500.
+
=== La table de routage ===
  
D’autres formats de trames permettent des échanges plus ou moins importants. Citons quelques MTU :
+
La table de routage d'un nœud contient la liste des réseaux accessibles depuis le nœud. La liste des réseaux se présente sous la forme d'une liste de préfixes réseau. À chacun de ces réseaux est associé le prochain saut (''Next Hop'') pour atteindre ce réseau depuis le nœud. Cette information va servir à la remise du paquet sous la forme de la transmission du paquet au prochain saut. Le prochain saut de la table de routage est un routeur qui est local au nœud. Ils partagent tous les deux le même préfixe réseau.
* PPPoE = 1492
+
* PPPoA = 1468
+
* MPLS = 1500 à 65535
+
* 802.15.4 (LowPAN) = 81
+
* Ethernet Jumboframe = 9000
+
  
Rappelons que la spécification du protocole IPv6 impose une taille minimale du paquet de 1280 octets. Pour les couches liaison imposant des tailles inférieures, il est donc obligatoire de mettre en place une ''couche d'adaptation'' comme 6LowPAN (RFC 4944) pour les réseaux 802.15.4. Cette couche située entre la couche ''liaison'' et la couche ''réseau'' IPv6 prend en charge le découpage des paquets IPv6 en fragments pouvant être transportés dans les trames et leur ré-assemblage au niveau du premier routeur de sortie.
+
Parmi les réseaux connus dans la table de routage, on trouve les réseaux directement connectés au nœud ; c'est-à-dire que le nœud possède une interface connectée sur l'un de ces réseaux. Lorsque l'interface du nœud est configurée sur un réseau, elle obtient une adresse IPv6 à laquelle s'ajoute la longueur du préfixe ; c'est-à-dire le nombre de bits communs aux adresses de toutes les interfaces connectées au même réseau. À la table de routage IPv6 s'ajoute alors automatiquement le préfixe du réseau connecté, défini par les bits communs de l'adresse. Le prochain saut pour ce réseau est alors défini par l'identifiant de l'interface connectée à ce réseau. Cela signifie au nœud que les paquets destinés à ce réseau doivent être envoyés sur cette interface.
  
== Couches intermédiaires ==
+
Voici un exemple de configuration d'une interface réseau et l'entrée correspondante dans la table de routage sur un système Linux. Notez bien la correspondance entre le préfixe de l'adresse de l'interface <tt>eth0</tt> et l'entrée correspondante dans la table de routage.
 +
La commande <tt>ifconfig</tt> montre l'adresse configurée à l'interface réseau <tt>eth0</tt> et le préfixe associé à ce réseau. La commande <tt>netstat</tt> affiche la table de routage.  L'absence d'information dans la colonne 'Next Hop' indique que ce préfixe est associé au réseau de l'interface <tt>eth0</tt>. Enfin, la commande <tt>ip</tt> fait la même chose mais présentée sous une autre forme.
  
=== Couche réseau ===
+
$ '''ifconfig eth0'''
 +
eth0      Link encap:Ethernet  HWaddr 00:18:73:68:21:20
 +
          inet6 addr: '''2001:db8:1:1:218:73ff:fe68:2120/64''' Scope:Global
 +
          inet6 addr: fe80::218:73ff:fe68:2120/64 Scope:Link
 +
(...)
 +
 +
$ '''netstat -rn -A inet6'''
 +
Kernel IPv6 routing table
 +
Destination                    Next Hop                  Flag Met Ref Use If
 +
'''2001:db8:1:1::/64'''              ::                        UAe  256 0345733 '''eth0'''
 +
(...)
 +
 +
$ '''ip -6 route'''
 +
'''2001:db8:1:1::/64''' dev '''eth0'''  proto kernel  metric 256  expires 2592155sec mtu 1500 advmss 1440 hoplimit 0
 +
(...)
  
Étant donné que la taille minimum de l’en-tête IPv6 est de 40 octets, le MTU résiduel d’une trame Ethernet classique est de 1500 - 40 = 1460 octets ; sachant que ces 1460 octets de données seront probablement encore amputées d’en-têtes de niveau transport, par exemple 20 octets minimum pour TCP et 8 octets pour UDP.
+
La table de routage peut aussi comporter des préfixes de réseaux auxquels le nœud n'est pas directement connecté. Ces préfixes peuvent être ajoutés par l'administrateur réseau ou appris automatiquement à l'aide de protocoles de routage. Ces préfixes peuvent être spécifiques à un réseau local (généralement de longueur 64 bits) mais peuvent être plus larges pour désigner un ensemble de réseaux. Plus la longueur du préfixe est faible et plus l'ensemble des réseaux considéré est large. Le prochain saut est alors configuré avec l'adresse d'un routeur qui va prendre en charge la suite de l'acheminement du paquet.
  
Parmi les différences existant entre les datagrammes IPv4 et IPv6, il y a la disparition de la somme de contrôle d'erreur (''checksum'') dans les en-têtes IPv6. Cette somme de contrôle était utilisée pour vérifier l'absence d'erreur binaire de l'en-tête du paquet traité. Une erreur binaire est le changement de valeur d'un bit effectué lors de la transmission. En IPv4, il est nécessaire de la vérifier et de l'ajuster lors de chaque retransmission par un routeur, ce qui entraîne une augmentation du temps de traitement du paquet.
+
L'exemple suivant montre une table de routage d'un routeur VyOS comportant un préfixe plus large que celui connecté sur son interface. Notez que l'adresse du prochain saut est une adresse '''lien-local''', ce qui signifie que le nœud vers lequel transmettre le paquet est sur le réseau connecté à l'interface <tt>eth0</tt>.
Cette somme ne vérifie que l'en-tête IPv4, pas le reste du paquet. Aujourd'hui, les supports physiques sont de meilleure qualité et savent détecter les erreurs (par exemple, Ethernet a toujours calculé sa propre somme de contrôle ; PPP, qui a presque partout remplacé SLIP, possède un CRC). L'intérêt de la somme de contrôle au niveau réseau a diminué et ce champ a été supprimé de l'en-tête IPv6.  
+
  
Le checksum sur l'en-tête IPv6 n'existant plus, il faut néanmoins se prémunir des erreurs de transmission. En particulier, une erreur sur l'adresse de destination va faire router un paquet dans une mauvaise direction. Le destinataire doit donc vérifier que les informations d'en-tête IP sont correctes avant d'accepter ces paquets. Dans les mises en oeuvre des piles de protocoles Internet, les entités de niveau transport remplissent certains champs du niveau réseau. Il a donc été décidé que tous les protocoles au-dessus d'IPv6 devaient utiliser une somme de contrôle intégrant à la fois les données et les informations de l'en-tête IPv6. La notion de ''pseudo-en-tête'' dérive de cette conception. Pour un protocole comme TCP, qui possède une somme de contrôle, cela signifie qu'il faut modifier le calcul de cette somme. Pour un protocole comme UDP, qui possède une somme de contrôle facultative, cela signifie qu'il faut modifier le calcul de cette somme et le rendre obligatoire.  
+
vyos(config)# '''do show ipv6 route'''
 +
C>* '''2001:db8:1:1::/64''' is directly connected, '''eth0'''
 +
S>* '''2001:db8:1::/48''' [110/1] via '''fe80::290:bff:fe1e:c4fe''', '''eth0''', 1d09h16m
 +
 
 +
Un dernier type d'entrée de la table de routage permet à un nœud de relayer les paquets pour tous les réseaux qu'il ne connait pas, évitant ainsi de les éliminer parce qu'il n'a pas une connaissance suffisante du réseau. Cette entrée s'appelle la '''route par défaut'''. Le préfixe utilisé pour désigner ainsi tous les réseaux ne doit comporter aucun bit spécifié. En IPv6, ce préfixe se note <tt>::/0</tt> ; la longueur du préfixe à 0 signifiant qu'aucun bit n'est spécifié comme commun. La route par défaut possède comme prochain saut l'adresse du routeur qui prendra en charge le routage des paquets vers les réseaux non connus localement. Ce routeur est communément appelé '''routeur par défaut''', ou '''passerelle par défaut'''. Dans un réseau local domestique par exemple, le routeur par défaut des hôtes, comme un ordinateur portable, est généralement le boitier de l'opérateur, car c'est lui qui sait comment joindre les différents réseaux de l'Internet.
 +
 
 +
L'exemple suivant montre l'entrée correspondant à la route par défaut d'un nœud sous Windows 7 avec l'outil en ligne de commande <tt>netsh</tt>.
 +
 
 +
netsh> '''interface ipv6'''
 +
netsh interface ipv6> '''show routes'''
 +
Recherche du statut actif...
 +
 +
Type      Mét  Préfixe                    Idx  Nom passerelle/interface
 +
--------  ---  ------------------------  ---  ------------------------
 +
Auto        8  '''2001:db8:1:1::/64'''          4  Connexion au réseau local 4
 +
Auto      256  '''::/0'''                        4  fe80::290:bff:fe1e:c4fe
 +
 
 +
=== Remise directe et remise indirecte ===
 +
 
 +
L'acheminement du paquet  IPv6 est constitué par deux modes de remise. La '''remise directe''', quand le nœud en charge du paquet  et la destination sont tous les deux reliées directement au même réseau physique. La communication se fait sans routeur.
 +
Dans le cas présenté par la figure 1, les deux hôtes A et B peuvent communiquer directement car ils sont connectés sur le même réseau local Ethernet à l’aide d'un lien mis en œuvre sous la forme d’un commutateur qui relaie les trames de manière transparente. Le préfixe IPv6 <tt>2001:db8:0001::/64</tt> est commun à chaque nœud. Ainsi, les échanges sont possibles directement, sans l'intervention d'un routeur. Dans la table de routage, le Next Hop est vide comme le montre la figure 1 (l'adresse IPv6 notée '::' est l'adresse nulle).
  
IPv6 a unifié la méthode de calcul des différentes sommes de contrôle. Le RFC 8200 définit, dans sa section 8.1, un ''pseudo-en-tête'' (cf. Figure 3), résultat de la concaténation d'une partie de l'en-tête IPv6 et du PDU du protocole concerné. L'algorithme de calcul du checksum est celui utilisé en IPv4. Il est très simple à mettre en œuvre et ne demande pas d'opérations complexes. Il s'agit de faire la somme en complément à 1 des mots de 16 bits du ''pseudo-en-tête'', de l'en-tête du protocole de transport, et des données, puis de prendre le complément à 1 du résultat.
 
 
<center>
 
<center>
[[image:Fig4-10.png|thumb|center|500px|Figure 3 : Champs du <tt>pseudo-en-tête</tt>.]]
+
[[image:2015_10_13_ipv6-routage_001.jpg|thumb|center|600px|Figure 1 : Route directe.]]
 
</center>
 
</center>
Il faut noter que les informations contenues dans le ''pseudo-en-tête'' ne seront pas émises telles quelles sur le réseau. Le champ <tt>en-tête suivant</tt> du ''pseudo-en-tête'' ne reflète pas celui qui sera émis dans les paquets puisque les extensions ne sont pas prises en compte dans le calcul du checksum. Ainsi, si l'extension de routage est mise en œuvre, l'adresse de la destination est celle du dernier équipement. De même, le champ <tt>longueur</tt> est codé sur 32 bits pour contenir la valeur de l'option ''jumbogramme'' si celle-ci est présente.
 
  
=== Couches Transport ===
 
  
==== UDP et TCP ====
+
Quand la destination n'est pas directement reliée au même réseau physique que le nœud en charge du paquet, autrement dit lorsqu'il n'y a pas de lien direct entre deux nœuds, le paquet transite par au moins un routeur. Le paquet est remis à un routeur et on parle de '''remise indirecte'''. Le ou les routeurs traversés s’occuperont du transfert du paquet jusqu'au nœud de destination. Le champ Hop Limit dans l'en-tête du paquet IPv6 est décrémenté d'une unité à chaque relayage effectué par un routeur.
  
Les modifications apportées aux protocoles de niveau transport sont minimes. L'un des pré-requis à la mise en œuvre d'IPv6 était de laisser en l'état aussi bien TCP (''Transmission Control Protocol'') qu'UDP (''User Datagram Protocol''). Ces protocoles de transport sont utilisés par la très grande majorité des applications réseau et l'absence de modification facilitera grandement le passage de IPv4 à IPv6.  
+
Dans l'exemple présenté par la figure 2, le nœud A peut atteindre les deux hôtes B et C. Par contre, B et C ne peuvent pas directement communiquer car ils sont connectés sur des réseaux avec des préfixes IPv6 différents. La table de routage de l'hôte B doit être complétée avec une entrée avec le préfixe distant <tt>2001:db8:0002::/64</tt> en précisant l’adresse de A, <tt>2001:db8:0001::1/64</tt>, comme nœud intermédiaire. Les paquets émis depuis B vers C seront dès lors relayés par le routeur A. L'adresse du routeur A à retenir dans la table de routage de B est l'adresse partageant le même préfixe que l'adresse de B.
 +
De manière symétrique, il convient d'avoir la même configuration de la table de routage de C à savoir une entrée avec comme destination le préfixe réseau de B <tt>2001:db8:0001::/64</tt> en précisant l’adresse de A, <tt>2001:db8:0002::1/64</tt>, comme prochain saut. Sans quoi, l'hôte C ne sera pas en mesure de communiquer avec B.
 +
<center>
 +
[[image:2015_10_13_ipv6-routage_003.jpg|thumb|center|600px|Figure 2 : Route indirecte.]]
 +
</center>
  
La principale modification de ces protocoles concerne le calcul de la somme de contrôle (''checksum'') pour vérifier l'intégrité des données. Comme la couche ''réseau'' ne possède pas de champ de contrôle, c'est à la couche de transport que revient cette tâche. Le calcul de la somme de contrôle au niveau du transport a donc été adapté pour inclure des données de l'en-tête. De plus, la présence d'une somme de contrôle devient obligatoire pour tout protocole de niveau supérieur transporté au-dessus d'IPv6.
 
  
'''''Nota : ''''' ''Les RFC 6935 et RFC 6936 ont introduit une dispense à cette obligation, dans les cas des techniques de tunnel au dessus d'UDP. La nouvelle philosophie est résumée ainsi par S. Bortzmeyer : "par défaut, la somme de contrôle doit être calculée et mise dans le paquet. Mais on peut s'en dispenser dans le cas de tunnels (et uniquement celui-ci), sur le paquet extérieur. Le protocole à l'intérieur du paquet (qui n'est pas forcément de l'UDP et même pas forcément de l'IPv6) doit rester protégé par sa propre somme de contrôle. Cela ne doit s'appliquer que pour une liste explicite de ports (ceux utilisés par le tunnel) et pas pour tout le trafic UDP de la machine. Et le tout doit se faire en lisant le RFC 6936 qui précise les conditions d'application de cette nouvelle règle."''
+
Une route directe entre deux hôtes revient à effectuer une remise directe. Une route indirecte entre deux hôtes est constituée par une ou plusieurs remises indirectes et se termine par une remise directe. Le dernier routeur de la route fait une remise directe à la destination finale. À noter aussi qu'une fois que le nœud du prochain saut est connu, que ce soit en remise directe ou en remise indirecte, il faut transmettre physiquement le paquet à ce nœud. La ''découverte des voisins'' opérée par ICMPv6 va alors servir à déterminer l'adresse physique associée à l'adresse IPv6 du nœud voisin. Cette opération est essentielle pour effectuer ensuite la transmission du paquet. Cette fonction  de résolution d'adresse IPv6 sera développée dans la prochaine séquence.
  
Un autre changement au niveau des protocoles de niveau 4 concerne la prise en compte de l'option ''jumbogramme'' de l'extension ''proche-en-proche''. Le RFC 2675 définit le comportement d’UDP et de TCP quand les jumbogrammes sont utilisés. En effet, les en-têtes de ces messages contiennent eux aussi un champ <tt>longueur</tt> codé sur 16 bits et, par conséquent, insuffisant pour coder la longueur du jumbogramme :
+
=== Route par défaut ===
* Pour le protocole UDP, si la longueur des données excède 65 535 octets, le champ <tt>longueur</tt> est mis à 0. Le récepteur détermine la longueur des données par la connaissance de la taille dans l'option ''jumbogramme''.
+
Lorsqu'un réseau est raccordé à Internet, il n'est pas nécessaire de détailler toutes les destinations de l'Internet dans la table de routage. Cependant, il faut pouvoir acheminer des paquets vers des réseaux qui ne sont pas connus des nœuds. La table de routage doit contenir dans ce cas une entrée pour indiquer vers quel routeur un nœud doit émettre les paquets.
* Le protocole TCP pose plus de problèmes. En effet, bien que les messages TCP ne contiennent pas de champ <tt>longueur</tt>, plusieurs compteurs sont codés sur 16 bits.
+
* Le champ <tt>longueur</tt> de la fenêtre de réception ne pose pas de problème depuis que le RFC 1323 a défini l'option ''TCP window scale'' qui donne le facteur multiplicatif qui doit être appliqué à ce champ.
+
* À l'ouverture de connexion, la taille maximale des segments (MSS) est négociée. Le RFC 2675 précise que, si cette taille doit être supérieure à 65 535, la valeur 65 535 est envoyée et le récepteur prend en compte la longueur déterminée par l'algorithme de découverte du MTU.  
+
  
Pour l'envoi de données urgentes avec TCP, on utilise un bit spécifique de l'en-tête TCP (bit <tt>URG</tt>) ainsi que le champ <tt>pointeur urgent</tt>. Ce dernier sert à référencer la fin des données à traiter de manière particulière. Trois cas peuvent se présenter :
+
Dans le cas simple, un routeur par défaut est spécifié et tous les paquets qui visent des destinations inconnues lui seront remis. En quelque sorte, on fait confiance aux capacités et à la connectivité de ce routeur. Une route par défaut est présente dans la table de routage du routeur par défaut. Cette route par défaut joue le rôle du panneau ''toutes directions'' dans le réseau routier.
* Le premier, qui est identique à IPv4, est celui où le pointeur indique une position de moins de 65 535.  
+
L'exemple de la figure 3 montre la configuration avec une route par défaut sur le routeur IPv6 :
* Le second se produit lorsque le déplacement est supérieur à 65 535 et supérieur ou égal à la taille des données TCP envoyées. Cette fois-ci, on place la valeur 65 535 dans le champ <tt>pointeur urgent</tt> et on continue le traitement normal des paquets TCP.
+
<center>
* Le dernier cas intervient quand le pointeur indique un déplacement de plus de 65 535 qui est inférieur à la taille des données TCP. Un premier paquet est alors envoyé, dans lequel on met la valeur 65 535 dans le champ <tt>pointeur urgent</tt>. L'important est de choisir une taille de paquet de manière à ce que le déplacement dans le second paquet, pour indiquer la fin des données urgentes, soit inférieur à 65 535.  
+
[[image:2015_10_13_ipv6-routage_004.jpg|thumb|center|600px|Figure 3 : Routeur par défaut.]]
 +
</center>
 +
Les hôtes n'ont pas à avoir la connaissance du routage. Aussi, pour ces nœuds, ils confient tous les paquets pour des remises indirectes au routeur local représenté dans la figure 4 par le routeur connecté à un fournisseur d’accès à Internet. Ceci se déclare dans la table de routage des hôtes par une simple route par défaut. La figure 4 montre la table de routage des hôtes avec la route par défaut. Dans notre exemple, le routeur par défaut est le routeur local de l'hôte A. Il n'y a pas de routeur intermédiaire entre l'hôte A et le routeur par défaut.
 +
<center>
 +
[[image:2015_10_13_ipv6-routage_005.jpg|thumb|center|600px|Figure 4 : Route par défaut dans les hôtes.]]
 +
</center>
  
Il existe d'autres propositions pour faire évoluer TCP. Il faut remarquer que le travail n'est pas de même ampleur que pour IP. En effet, TCP est un protocole de bout en bout. La transition vers une nouvelle génération du protocole peut se faire par négociation entre les deux extrémités. Pour IP, tous les routeurs intermédiaires doivent prendre en compte les modifications.
+
=== Choix de la route ===
  
==== UDP-lite ====
+
La fonction de routage d'un nœud distingue une remise directe d'une remise indirecte à partir du test d’adjacence.
 +
Le test d’adjacence consiste à  vérifier si le destinataire est directement accessible. Pour cela, le nœud va comparer le préfixe de la destination avec les préfixes des réseaux directement connectés. En cas de correspondance, le nœud peut réaliser une remise directe.
 +
Dans le cas contraire, c'est une remise indirecte. Il convient maintenant de choisir à quel routeur voisin il faut remettre le datagramme.  L'adresse de destination du paquet est mise en correspondance avec les préfixes réseau contenus dans la table de routage.  Le choix de la route se fait par la correspondance la plus longue (''best match'' ou ''longest match'') entre l'adresse de destination du datagramme et une destination de la table de routage. S'il n'y a aucune correspondance, il faut retenir la route par défaut.
  
UDP-lite permet de remonter aux couches supérieures des données erronées pendant leur transport. Si, dans un environnement informatique, une erreur peut avoir des conséquences relativement graves quant à l'intégrité des données, il est normal de rejeter ces paquets. Dans le domaine du multimédia, cette exigence peut être relâchée. En effet, la plupart des décodeurs de flux audio ou vidéo sont capables de supporter un certain nombre d'erreurs binaires dans un flux de données. Pour améliorer la qualité perçue par l'utilisateur, il est donc préférable d'accepter des paquets erronés plutôt que de rejeter un bloc complet d'informations qui se traduirait par une coupure perceptible du flux.
+
== Protocoles de routage ==
  
En IPv4, l'utilisation du ''checksum UDP'' étant optionnelle (la valeur 0 indique que le checksum n'est pas calculé), UDP peut être utilisé pour transporter des flux multimédias. Avec IPv6, l'utilisation du checksum a été rendue obligatoire puisque le niveau 3 n'en possède pas. Pour éviter qu'un paquet comportant des erreurs ne puisse pas être remonté aux couches supérieures, le protocole UDP-lite a été défini par le RFC 3828. Les modifications sont minimes par rapport à UDP. Le format de la trame reste le même ; seule la sémantique du champ <tt>longueur</tt> est changée. Avec UDP, ce champ est inutile puisqu'il est facilement déduit du champ <tt>longueur</tt> de l'en-tête IP. UDP-lite le transforme en champ <tt>couverture du checksum</tt>. Si la longueur est 0, UDP-lite considère que le checksum couvre tout le paquet. La valeur 8 indique que seul l'en-tête UDP est protégé par le checksum (ainsi qu'une partie de l'en-tête IP grâce au pseudo-header). Les valeurs comprises entre 1 et 7 sont interdites car le checksum UDP-lite doit toujours couvrir l'en-tête. Une valeur supérieure à 8 indique qu'une partie des données sont protégées. Si la couverture est égale à la longueur du message, on se retrouve dans un cas compatible avec UDP.
+
Comme pour IPv4, il faut faire la distinction entre deux grandes familles de protocoles de routage : les protocoles de routage interne (''Interior Gateway Protocols'', IGP) et les protocoles de routage externe (''Exterior Gateway Protocols'', EGP). La différence provient de la notion de '''système autonome''' (''Autonomous System'', AS), par la définition de la portée des échanges d'informations de routage des protocoles de routage. Ainsi, la propagation des préfixes réseaux internes à un AS se fait par un IGP, alors que les annonces de préfixes entre AS se fait par un EGP.  
  
==== SCTP ====
+
Pour connecter un site à l'Internet, il faut donc mettre œuvre des protocoles de routage interne et des protocoles de routage externe. Cette section traite des trois protocoles IGP suivants : RIPng (équivalent de RIPv2 pour IPv4), ISIS et OSPFv3 (équivalent d’OSPFv2 pour IPv4), ainsi que du protocole de routage externe BGP.  
Le protocole SCTP (''Stream Control Transmission Protocol'') RFC 4960 est fortement lié au protocole IPv6. SCTP est un protocole de niveau 4 initialement conçu pour transporter des informations de signalisation<ref>Fu, S. et Atiquzzaman, M. (2004). IEEE Communications Magazine, Vol. 42, No. 4, April.
+
SCTP: State of the Art in Research, Products, and Technical Challenges.</ref>. La fiabilité est donc un prérequis important et la gestion de la multi-domiciliation est prise en compte. L'idée est de permettre aux deux équipements terminaux d'échanger, à l'initialisation de la connexion (appelée, dans le standard, ''association''), l'ensemble de leurs adresses IPv4 et IPv6. Chaque équipement choisit une adresse privilégiée pour émettre les données vers l'autre extrémité et surveille périodiquement l'accessibilité des autres adresses. Si l'équipement n'est plus accessible par l'adresse principale, une adresse secondaire est choisie.  
+
  
SCTP permet une transition douce d'IPv4 vers IPv6 puisque l'application n'a plus à se préoccuper de la gestion des adresses. Si les deux entités possèdent une adresse IPv6, celle-ci sera privilégiée. De plus, SCTP peut servir de brique de base à la gestion de la multi-domiciliation IPv6. En effet, avec TCP, une connexion est identifiée par ses adresses. Si une adresse n'est plus accessible, le fait d'en changer peut conduire à la coupure de la connexion. Il faut avoir recours à des subterfuges, comme la mobilité IP, pour maintenir la connexion. SCTP brise ce lien entre la localisation de l'équipement et l'identification des associations.
+
Les protocoles de routage interne visent à rendre automatique la configuration des tables de routage des routeurs à l'intérieur d'un même système autonome. Les routeurs déterminent le plus court chemin pour atteindre un réseau distant. Les protocoles de routage internes nécessitent une configuration minimale du routeur, notamment en ce qui concerne les annonces de routes initiées par ce routeur (exemple : réseaux directement accessibles par une interface du routeur, routes statiques...).
 +
 
 +
Deux types de protocoles de routage interne existent : les protocoles à vecteur de distance (''distance vector''), et les protocoles à état de lien (''link state''). Les premiers génèrent des annonces de routeur transmises aux routeurs voisins, qui contiennent des informations de direction (les réseaux accessibles par le routeur) et de distance associées aux destinations annoncées (la métrique, qui peut être le nombre de routeurs à traverser, pour RIP, mais qui peut être un coût lié au débit, comme pour EIGRP). Pour les protocoles à état de lien, les annonces de routeur ne contiennent plus d'informations issues de la table de routage, mais des informations sur les liens auxquels sont connectés les routeurs (adresses IP, nature du lien, coût calculé souvent à partir du débit, etc.). Chaque routeur construit une base de données d'états de liens (''link state database''), qui permet de redessiner la topologie du réseau. Dans un second temps, un algorithme de recherche du plus court chemin permet à chaque routeur de construire sa table de routage, à partir de cette base de données.
 +
 
 +
=== RIPng ou RIP IPv6 ===
 +
 
 +
RIPv2 (RFC 2453) est un algorithme à vecteur de distance, basé sur l'algorithme de Bellman-Ford et figure parmi les premiers algorithmes de routage interne utilisés dans l'Internet.
 +
 
 +
Les routeurs diffusent leurs tables de routage sur les liens auxquels ils sont connectés. Les autres routeurs modifient une route dans leur table si la '''métrique''' (le nombre de routeurs à traverser pour atteindre une destination) reçue est plus petite que celle déjà stockée dans la table. Si une annonce de route n'est pas présente dans la table, le routeur l'ajoute. Ces modifications sont à leur tour diffusées sur les autres réseaux auxquels sont connectés les routeurs. Elles se propagent donc sur l'ensemble du réseau à l'intérieur du système autonome. On montre que cet algorithme converge et, qu'en condition stable, aucune boucle n'est créée sur le réseau, c'est-à-dire qu'un paquet ne sera pas transmis indéfiniment de routeur en routeur sans jamais pouvoir atteindre sa destination.
 +
 
 +
Les tables sont émises périodiquement. Si un routeur tombe en panne, ou si le lien est coupé, les autres routeurs ne recevant plus l'information suppriment l'entrée correspondante de leur table de routage.
 +
RIPng est le premier protocole de routage dynamique proposé pour IPv6 (RFC 2080). RIPng est une simple extension à IPv6 du protocole RIPv2 d'IPv4. Il en hérite les mêmes limitations d'utilisation (maximum de 15 sauts par exemple).
 +
 
 +
=== ISIS ===
 +
 
 +
IS-IS (''Intermediate System to Intermediate System'') est un protocole de routage interne à état de lien. Il a été standardisé par l'ISO (ISO 10589). C'est un protocole qui opère au niveau de la couche de réseau et qui s'appuie sur une couche de liaison, contrairement à OSPF et RIP qui agissent au-dessus de la couche de transport. Cet élément mérite d'être signalé car cela rend ce protocole indépendant d'IP, que ce soit IPv4 ou IPv6. Ce protocole travaille sur deux niveaux de hiérarchie : les aires (niveau 1) et le ''backbone'' (niveau 2).
 +
 
 +
Un routeur IS-IS peut être :
 +
* ''level-1'' (routage intra-aire),
 +
* ''level-2'' (routage inter-aire),
 +
* ou ''level-1-2'' (routage intra-aire et inter-aire).
 +
 
 +
Un routeur de niveau 1 n'a de voisins que dans son aire alors qu'un routeur de niveau 2 peut avoir des voisins dans une autre aire. Il n'y a pas d'aire de ''backbone'' (contrairement à OSPF). Le ''backbone'' est constitué de la réunion de tous les routeurs de ''level-2''. Sur un réseau de type LAN, il y a élection d'un routeur désigné (DIS) qui a la charge de produire les annonces.
 +
 
 +
Afin de construire sa topologie, IS-IS utilise 3 types de messages :
 +
* les messages HELLO permettant de construire les adjacences ;
 +
* les messages LSP (''Link State Protocol'') permettant d'échanger les informations sur l'état des liens ;
 +
* les messages SNP (''Sequence Number Packet'') permettant de confirmer la topologie.  
 +
 
 +
Pour élaborer ces messages, IS-IS se base sur l'utilisation d'éléments d'informations indépendants appelés TLV (Type, Longueur, Valeur). Le message est ainsi constitué d'un en-tête suivi d'une liste de TLV. Chaque TLV véhicule une information propre, et est donc standardisée. L'exemple ci-dessous montre une TLV '''Protocoles supportés''' faisant partie d'un message HELLO, informant les voisins des protocoles supportés par l'émetteur du paquet :
 +
* 0x81 0x02 0xcc 0x8e
 +
** Le premier octet donne le type de la TLV. Il s'agit ici du type 0x81, c'est-à-dire '''Protocoles supportés'''.
 +
** Le second octet donne la longueur en octets de la TLV : ici, les deux octets qui suivent.  
 +
** Les autres octets composent la valeur de la TLV. Ici, nous avons deux octets indiquant des numéros de protocoles supportés (NLPID : ''Network Layer Protocol IDentifier''): 0xCC pour IPv4 et 0x8E pour IPv6.
 +
 
 +
=== OSPFv3 ===
 +
 
 +
Le troisième protocole de routage interne, basé sur l'algorithme du plus court chemin (SPF, ''Shortest Path First'', ou algorithme de Dijkstra), s'appelle OSPF (''Open Shortest Path First''). Relativement plus complexe à mettre en œuvre que RIPng, il est beaucoup plus efficace dans les détections et la suppression des boucles dans les phases transitoires. Ce protocole est basé sur plusieurs sous-protocoles, dont un qui permet une inondation fiable du réseau. L'objectif d'OSPF est que chaque routeur possède une même copie de la carte de la topologie du réseau. À partir de là, chacun peut calculer simultanément le plus court chemin pour aller vers l'ensemble des destinations.
 +
 
 +
Pour réduire la durée des calculs, et surtout pour éviter un recalcul complet des routes à chaque changement de configuration, OSPF offre la possibilité de découper le réseau en aires. Une aire principale appelée ''backbone'' relie toutes les autres aires. Les réseaux trouvés dans une aire donnée sont envoyés aux autres aires par les routeurs qui sont en frontière d'aire.
 +
 
 +
OSPF a été adapté à IPv6 (RFC 5340) ; la version est passée de 2 à 3. La plupart des algorithmes implémentés dans OSPFv2 ont été réutilisés en OSPFv3. Bien évidemment, certains changements ont été nécessaires en vue de l'adaptation aux fonctionnalités d'IPv6.
 +
 
 +
=== BGP ===
 +
 
 +
BGP-4 est le protocole de routage externe actuellement utilisé pour le routage global de l'Internet IPv4 (le numéro de version 4, identique pour BGP et IP, est une pure coïncidence)<ref>Balakrishnan, H. et Feamster, N. (2005), Lecture notes. Interdomain Internet Routing.</ref>. Compte tenu de sa criticité, ce protocole est l'objet d'évolutions constantes. L'une d'entre elles est le RFC 4760 qui rend BGP-4 "multi-protocole" en introduisant la notion de famille d'adresses (ex. IPv4, IPv6, IPX...) et de sous-famille d'adresses (ex. ''unicast'', ''multicast''). Le RFC 2545 précise l'usage des extensions multi-protocoles pour le cas d'IPv6.
 +
 
 +
L'adaptation multi-protocole de BGP-4 est assez simple car elle ne concerne que les trois attributs dont le format dépend de l'adresse, soit :
 +
* NLRI : ''Network Layer Reachability Information'' (suite de préfixes) ;
 +
* NEXT_HOP : Adresse IP où il faut router les NLRI ;
 +
* AGGREGATOR : Adresse IP du routeur qui a fait une agrégation de préfixes.
 +
 
 +
Pour réaliser pratiquement cette adaptation, BGP4+ introduit deux nouveaux attributs :
 +
* MP_REACH_NLRI : ''Multiprotocol Reachable NLRI'',
 +
* MP_UNREACH_NLRI : ''Multiprotocol Unreachable NLRI'',
 +
qui indiquent que l'on annonce des informations de routage autres que les routes ''unicast'' IPv4. Ces attributs codent en premier le type de famille et de sous-famille d'adresses, puis les attributs dont le format est spécifique. Les autres attributs (comme le chemin d'AS ''Autonomous System'') sont codés et annoncés sans changement.
 +
 
 +
Les mises en œuvre du RFC 4760 sont souvent appelées MP-BGP (pour faire référence à leur capacité de traitement des routes ''multicast'') ou BGP4+ (pour faire référence à leur capacité de traitement de routes IPv6). Pour l'anecdote, le numéro de version du protocole n'a pas été modifié (en BGP-5 par exemple) car le passage de BGP-3 à BGP-4 rappelle trop de souvenirs douloureux à ceux qui l'ont mis en œuvre. Les numéros d'AS utilisés pour IPv4 servent aussi pour IPv6.
  
 
== Conclusion ==
 
== Conclusion ==
  
Cette activité a fait un rappel des différentes couches de la pile réseau d'un système. La couche réseau, ou niveau 3, est le langage commun de tous les équipements connectés à l'Internet. L'introduction d'IPv6 a donc un impact sur les différentes couches, notamment la couche sous-jacente, couche liaison, et les couches supérieures, notamment la couche transport. Même si ces couches sont censées être indépendantes dans le modèle théorique OSI, force est de remarquer que dans la pratique, elles sont interdépendantes.
+
Cette activité vous a présenté le principe du routage IP et la table de routage. Cet élément essentiel de la couche réseau, présent dans chaque nœud de l'Internet, indique à un routeur qui a un paquet à acheminer à qui doit être remis ce paquet : à un routeur local, indiqué dans la table de routage comme prochain nœud associé à l'adresse de destination contenue dans la paquet, ou directement à la destination. La configuration correcte de la table de routage est donc importante aussi bien sur les routeurs que sur les hôtes.  
Pour preuve le champ de contrôle d'erreur n'a pas été retenu au niveau de la couche IP  car il y a déjà un contrôle fait au niveau ''liaison''. Et un autre contrôle d'erreur a été  placé dans les couches supérieures afin de vérifier l'intégrité des données transportées. Cette vérification se fait uniquement par le destinataire. Le contrôle d'erreur est un exemple qui illustre  l'interdépendance des couches.
+
 
 +
Cette configuration peut se faire manuellement par l'administrateur du réseau : on parle alors de routage statique. Afin de pouvoir s'adapter à l'évolution du réseau, les tables de routage peuvent être mise à jour par des protocoles de routage permettant de propager les modifications de la topologie du réseau. Les tables de routage sont mises à jour automatiquement au fur et à mesure des changements dans le réseau. On parle alors de routage dynamique.
  
 
== Références bibliographiques ==
 
== Références bibliographiques ==
 
<references />
 
<references />
 
 
== Pour aller plus loin==
 
== Pour aller plus loin==
RFC et leur analyse par S. Bortzmeyer :  
+
RFC et leur analyse par S. Bortzmeyer :
* RFC 1323 : TCP Extensions for High Performance [http://www.bortzmeyer.org/1323.html Analyse]
+
Vous pouvez approfondir vos connaissances sur les protocoles de routage en consultant les liens suivants :
* RFC 8200 : Internet Protocol, Version 6 (IPv6) Specification [http://www.bortzmeyer.org/8200.html Analyse]
+
 
* RFC 2464 : Transmission of IPv6 Packets over Ethernet Networks
+
RIPng :  
* RFC 2675 : IPv6 Jumbograms
+
* [http://livre.g6.asso.fr/index.php?title=RIPng Article dans le livre "IPv6, Théorie et Pratique"]
* RFC 3828 : The Lightweight User Datagram Protocol (UDP-Lite) [http://www.bortzmeyer.org/3828.html Analyse]
+
* RFC 2453 : RIP Version 2
* RFC 4944 : Transmission of IPv6 Packets over IEEE 802.15.4 Networks
+
* RFC 4822 : RIPv2 Cryptographic Authentication
* RFC 4960 Stream Control Transmission Protocol [http://www.bortzmeyer.org/4960.html Analyse]
+
 
* RFC 5692 : Transmission of IP over Ethernet over IEEE 802.16 networks [http://www.bortzmeyer.org/5692.html Analyse]
+
ISIS :   
* RFC 6691 : TCP Options and MSS [http://www.bortzmeyer.org/6691.html Analyse]
+
* [http://livre.g6.asso.fr/index.php?title=ISIS  Article dans le livre "IPv6, Théorie et Pratique"]
* RFC 6935: IPv6 and UDP Checksums for Tunneled Packets [http://www.bortzmeyer.org/6935.html Analyse]
+
* [https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0CDwQFjADahUKEwioitOlvcHHAhWKtBoKHXpVCLw&url=https%3A%2F%2Fwebstore.iec.ch%2Fpreview%2Finfo_isoiec8473-1%257Bed2.0%257Den.pdf&ei=pe3aVeijJ4rpavqqoeAL&usg=AFQjCNH8YY6m9NhNem9ukiGW18pD53ZrmQ ISO-IEC 8473] Information technology — Protocol for providing the connectionless-mode network service: Protocol specification
* RFC 6936: Applicability Statement for the Use of IPv6 UDP Datagrams with Zero Checksums[http://www.bortzmeyer.org/6936.html Analyse]
+
 
* RFC 6951 : UDP Encapsulation of SCTP Packets for End-Host to End-Host Communication [http://www.bortzmeyer.org/6951.html Analyse]
+
OSPF :   
 +
* [http://livre.g6.asso.fr/index.php?title=OSPFv3 Article dans le livre "IPv6, Théorie et Pratique"]
 +
* RFC 5340 : OSPF for IPv6 ([http://www.bortzmeyer.org/5340.html Analyse par S.Bortzmeyer])
 +
* RFC 7503 : OSPFv3 Autoconfiguration  ([http://www.bortzmeyer.org/7503.html Analyse par S.Bortzmeyer])
 +
 +
 
 +
BGP :    
 +
* [http://livre.g6.asso.fr/index.php?title=BGP Article dans le livre "IPv6, Théorie et Pratique"]
 +
* RFC 2545 : Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
 +
* RFC 3849 : IPv6 Address Prefix Reserved for Documentation
 +
* RFC 4760 : Multiprotocol Extensions for BGP-4 ([http://www.bortzmeyer.org/4760.html Analyse par S.Bortzmeyer])
 +
* RFC 5963: IPv6 Deployment in Internet Exchange Points (IXPs) ([http://www.bortzmeyer.org/5963.html Analyse par S.Bortzmeyer])
 +
 
 +
<!--
 +
== Mise en oeuvre ==
 +
 
 +
Reprendre la topologie de l'activité 16 et proposer le routage
 +
 
 +
* config statique
 +
** attribution d'adresse sur les interfaces
 +
** prefixe masque
 +
** afficher la table de routage
 +
-->

Latest revision as of 00:38, 9 January 2023


Activité 22: L'acheminement des paquets IPv6

Introduction : Qu'est ce que le routage ?

Nous avons vu les aspects statiques du protocole IPv6 dans l’activité précédente. Nous allons voir les aspects opérationnels de ce protocole. L'objectif d'IPv6 est de réaliser un réseau virtuel qui assure un service de connectivité par la remise de datagrammes. Ce réseau doit être doté de moyens d'acheminement de datagrammes jusqu'au destinataire final. Les deux fonctions essentielles de n'importe quel réseau sont l'adressage et le routage. L'adresse IP sert à l'identification des nœuds dans le réseau virtuel mais également à leur localisation. Le routage est la fonction indispensable au réseau pour acheminer un paquet vers sa destination[1]. Cette fonction fait référence au traitement des routes. Elle recouvre deux activités : l'établissement des routes (routing), c'est-à-dire l'identification des chemins pour atteindre les différentes destinations du réseau, et la détermination d'une route (forwarding) pour acheminer le datagramme. L'acheminement du datagramme consiste à trouver et suivre une route pour atteindre le destinataire. Les éléments du routage IPv6 sont l'hôte, le lien et le routeur. L'hôte est un nœud d'extrémité (source et/ou destination). Les hôtes peuvent avoir plusieurs interfaces qui ont chacune une adresse IP. L'interface réseau constitue le point d'accès au réseau physique. Les hôtes émettent et reçoivent des datagrammes mais ils n'ont pas la capacité de relayage. Les datagrammes reçus qui ne lui sont pas destinés sont purement et simplement détruits. Le Lien IPv6 est un réseau physique identifié par un préfixe réseau. Ce préfixe sert de localisateur dans l'interconnexion de réseaux (ou Internet). Enfin, le routeur relie deux liens IPv6. Il est l'élément indispensable de l'Internet. Il utilise le préfixe réseau pour le routage. Un routeur est un nœud intermédiaire connecté à deux ou plusieurs liens IPv6 simultanément, ayant la connaissance de la topologie du réseau et donc capable d'effectuer un choix de route (action de routage) pour ensuite relayer des paquets entre les interfaces (action de commutation).

Topologie

La topologie de réseau correspond à l'arrangement (physique ou logique) de ses nœuds et de ses liaisons.

Dans le modèle de l'Internet, la fonction de routage est présente dans les deux types de systèmes existants qui ont chacun leur objectif de routage. Les hôtes doivent trouver un routeur. Un hôte ignore le chemin, il envoie son trafic à un routeur local. Le routeur local signifie un routeur qui est sur le même lien que l'hôte. Cependant, un hôte doit pouvoir communiquer en l'absence de routeur, tandis que les routeurs doivent trouver un chemin. Le routeur effectue une fonction supplémentaire dans l'acheminement des paquets : le relayage, qui est l'action de commuter.

Dans un réseau en mode datagramme, le routage est une fonction commune à tous les nœuds du réseau et propre à la couche de réseau. De plus, il est utilisé par chaque paquet et il s'effectue indépendamment des systèmes de transmission sous-jacents. L'acheminement du datagramme est fait de voisin à voisin ou, encore dit, de proche en proche. Un voisin est défini comme un nœud qui partage la même connectivité physique, c'est-à-dire un nœud connecté sur le même lien IPv6 et utilisant le même préfixe réseau IPv6. Chaque hôte (ou routeur) connait uniquement le voisin suivant où le datagramme doit être envoyé. On parle de prochain saut (next hop). Un datagramme est acheminé vers le destinataire final par sauts successifs de voisin à voisin. Le routage de paquets consiste à déterminer le meilleur voisin pour atteindre le destinataire. Le routage IP est un routage d'interconnexion de réseaux physiques. Le routage IP choisit donc un des réseaux physiques pour véhiculer le datagramme vers le prochain saut.

Quand un paquet IPv6 arrive à un routeur, celui-ci décide si ce paquet lui est destiné ou s'il doit le relayer. Dans ce dernier cas, le routage consiste à déterminer la route ; autrement dit vers quelle interface faire sortir le paquet afin qu'il atteigne sa destination. Cette décision s'appuie d'une part sur les informations contenues dans l'en-tête IP du paquet, principalement l'adresse destination ; d'autre part sur les informations obtenues du processus d'établissement des routes. Ces informations sont contenues dans la table de routage du nœud et constituent sa connaissance locale de la topologie du réseau. Avec ces informations, un nœud déterminera vers quelle interface faire sortir le paquet et à quel nœud le remettre. Ainsi, de proche en proche, le paquet sera acheminé depuis la source jusqu'à sa destination.

Le problème de fond du routage est : comment les routeurs acquièrent-ils l'information pour qu'ils puissent effectuer le bon choix de route ? La connaissance de la topologie du réseau peut être communiquée à chaque routeur de plusieurs façons. L'administrateur peut configurer manuellement la table de routage au niveau des différents routeurs. Mais ce mode de configuration est peu adapté lorsque le réseau évolue comme, par exemple, quand une nouvelle liaison apparait. On parle alors de routage statique. Une autre méthode consiste, pour chaque routeur, à propager sa connaissance locale du réseau et à intégrer les informations fournies par d'autres routeurs. Ces échanges s'effectuent grâce à des protocoles de routage. Avec ces échanges, une prise en compte automatique des évolutions du réseau est effectuée. On parle alors de routage dynamique.

Cette activité présente comment s'effectue l'acheminement des paquets et en particulier le choix de la route. Elle explique les différents types de route que l'on trouve dans une table de routage. Les protocoles de routage disponibles en IPv6 sont rappelés. Toutefois, les algorithmes de routage pour le calcul des routes sont hors du champ de ce cours.

Acheminement des paquets

Le routage d'un paquet par un routeur nécessite de prendre une décision afin de l'acheminer vers sa destination. Un paquet est à relayer lorsqu'il arrive sur un routeur et que l'adresse destination de ce paquet ne concerne aucune interface de ce routeur. Plusieurs cas sont alors possibles :

  • la destination est sur un des réseaux sur lequel le routeur est directement connecté. Le paquet doit alors être remis directement à la destination ;
  • la destination n'est sur aucun des réseaux directement connectés au routeur. ce dernier doit déterminer quel est le meilleur routeur voisin qui rapproche le paquet de sa destination finale. Le paquet doit alors être relayé vers cet autre routeur qui prendra en charge l'acheminement du paquet ;
  • la destination est inconnue. Le routeur ne peut décider vers où le paquet doit être relayé. Le paquet doit donc être éliminé et un message d'erreur ICMP (ICMPv4 ou ICMPv6 selon la version du protocole IP utilisé) est émis vers la source du paquet pour lui indiquer le problème de routage.

La détermination du cas approprié se fait à partir des informations connues par le routeur contenues dans sa table de routage.

La table de routage

La table de routage d'un nœud contient la liste des réseaux accessibles depuis le nœud. La liste des réseaux se présente sous la forme d'une liste de préfixes réseau. À chacun de ces réseaux est associé le prochain saut (Next Hop) pour atteindre ce réseau depuis le nœud. Cette information va servir à la remise du paquet sous la forme de la transmission du paquet au prochain saut. Le prochain saut de la table de routage est un routeur qui est local au nœud. Ils partagent tous les deux le même préfixe réseau.

Parmi les réseaux connus dans la table de routage, on trouve les réseaux directement connectés au nœud ; c'est-à-dire que le nœud possède une interface connectée sur l'un de ces réseaux. Lorsque l'interface du nœud est configurée sur un réseau, elle obtient une adresse IPv6 à laquelle s'ajoute la longueur du préfixe ; c'est-à-dire le nombre de bits communs aux adresses de toutes les interfaces connectées au même réseau. À la table de routage IPv6 s'ajoute alors automatiquement le préfixe du réseau connecté, défini par les bits communs de l'adresse. Le prochain saut pour ce réseau est alors défini par l'identifiant de l'interface connectée à ce réseau. Cela signifie au nœud que les paquets destinés à ce réseau doivent être envoyés sur cette interface.

Voici un exemple de configuration d'une interface réseau et l'entrée correspondante dans la table de routage sur un système Linux. Notez bien la correspondance entre le préfixe de l'adresse de l'interface eth0 et l'entrée correspondante dans la table de routage. La commande ifconfig montre l'adresse configurée à l'interface réseau eth0 et le préfixe associé à ce réseau. La commande netstat affiche la table de routage. L'absence d'information dans la colonne 'Next Hop' indique que ce préfixe est associé au réseau de l'interface eth0. Enfin, la commande ip fait la même chose mais présentée sous une autre forme.

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:18:73:68:21:20
          inet6 addr: 2001:db8:1:1:218:73ff:fe68:2120/64 Scope:Global
          inet6 addr: fe80::218:73ff:fe68:2120/64 Scope:Link
(...)

$ netstat -rn -A inet6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2001:db8:1:1::/64              ::                         UAe  256 0345733 eth0
(...)

$ ip -6 route
2001:db8:1:1::/64 dev eth0  proto kernel  metric 256  expires 2592155sec mtu 1500 advmss 1440 hoplimit 0
(...)

La table de routage peut aussi comporter des préfixes de réseaux auxquels le nœud n'est pas directement connecté. Ces préfixes peuvent être ajoutés par l'administrateur réseau ou appris automatiquement à l'aide de protocoles de routage. Ces préfixes peuvent être spécifiques à un réseau local (généralement de longueur 64 bits) mais peuvent être plus larges pour désigner un ensemble de réseaux. Plus la longueur du préfixe est faible et plus l'ensemble des réseaux considéré est large. Le prochain saut est alors configuré avec l'adresse d'un routeur qui va prendre en charge la suite de l'acheminement du paquet.

L'exemple suivant montre une table de routage d'un routeur VyOS comportant un préfixe plus large que celui connecté sur son interface. Notez que l'adresse du prochain saut est une adresse lien-local, ce qui signifie que le nœud vers lequel transmettre le paquet est sur le réseau connecté à l'interface eth0.

vyos(config)# do show ipv6 route
C>* 2001:db8:1:1::/64 is directly connected, eth0
S>* 2001:db8:1::/48 [110/1] via fe80::290:bff:fe1e:c4fe, eth0, 1d09h16m

Un dernier type d'entrée de la table de routage permet à un nœud de relayer les paquets pour tous les réseaux qu'il ne connait pas, évitant ainsi de les éliminer parce qu'il n'a pas une connaissance suffisante du réseau. Cette entrée s'appelle la route par défaut. Le préfixe utilisé pour désigner ainsi tous les réseaux ne doit comporter aucun bit spécifié. En IPv6, ce préfixe se note ::/0 ; la longueur du préfixe à 0 signifiant qu'aucun bit n'est spécifié comme commun. La route par défaut possède comme prochain saut l'adresse du routeur qui prendra en charge le routage des paquets vers les réseaux non connus localement. Ce routeur est communément appelé routeur par défaut, ou passerelle par défaut. Dans un réseau local domestique par exemple, le routeur par défaut des hôtes, comme un ordinateur portable, est généralement le boitier de l'opérateur, car c'est lui qui sait comment joindre les différents réseaux de l'Internet.

L'exemple suivant montre l'entrée correspondant à la route par défaut d'un nœud sous Windows 7 avec l'outil en ligne de commande netsh.

netsh> interface ipv6
netsh interface ipv6> show routes
Recherche du statut actif...

Type      Mét  Préfixe                    Idx  Nom passerelle/interface
--------  ---  ------------------------   ---  ------------------------
Auto        8  2001:db8:1:1::/64           4  Connexion au réseau local 4
Auto      256  ::/0                        4  fe80::290:bff:fe1e:c4fe

Remise directe et remise indirecte

L'acheminement du paquet IPv6 est constitué par deux modes de remise. La remise directe, quand le nœud en charge du paquet et la destination sont tous les deux reliées directement au même réseau physique. La communication se fait sans routeur. Dans le cas présenté par la figure 1, les deux hôtes A et B peuvent communiquer directement car ils sont connectés sur le même réseau local Ethernet à l’aide d'un lien mis en œuvre sous la forme d’un commutateur qui relaie les trames de manière transparente. Le préfixe IPv6 2001:db8:0001::/64 est commun à chaque nœud. Ainsi, les échanges sont possibles directement, sans l'intervention d'un routeur. Dans la table de routage, le Next Hop est vide comme le montre la figure 1 (l'adresse IPv6 notée '::' est l'adresse nulle).

Figure 1 : Route directe.


Quand la destination n'est pas directement reliée au même réseau physique que le nœud en charge du paquet, autrement dit lorsqu'il n'y a pas de lien direct entre deux nœuds, le paquet transite par au moins un routeur. Le paquet est remis à un routeur et on parle de remise indirecte. Le ou les routeurs traversés s’occuperont du transfert du paquet jusqu'au nœud de destination. Le champ Hop Limit dans l'en-tête du paquet IPv6 est décrémenté d'une unité à chaque relayage effectué par un routeur.

Dans l'exemple présenté par la figure 2, le nœud A peut atteindre les deux hôtes B et C. Par contre, B et C ne peuvent pas directement communiquer car ils sont connectés sur des réseaux avec des préfixes IPv6 différents. La table de routage de l'hôte B doit être complétée avec une entrée avec le préfixe distant 2001:db8:0002::/64 en précisant l’adresse de A, 2001:db8:0001::1/64, comme nœud intermédiaire. Les paquets émis depuis B vers C seront dès lors relayés par le routeur A. L'adresse du routeur A à retenir dans la table de routage de B est l'adresse partageant le même préfixe que l'adresse de B. De manière symétrique, il convient d'avoir la même configuration de la table de routage de C à savoir une entrée avec comme destination le préfixe réseau de B 2001:db8:0001::/64 en précisant l’adresse de A, 2001:db8:0002::1/64, comme prochain saut. Sans quoi, l'hôte C ne sera pas en mesure de communiquer avec B.

Figure 2 : Route indirecte.


Une route directe entre deux hôtes revient à effectuer une remise directe. Une route indirecte entre deux hôtes est constituée par une ou plusieurs remises indirectes et se termine par une remise directe. Le dernier routeur de la route fait une remise directe à la destination finale. À noter aussi qu'une fois que le nœud du prochain saut est connu, que ce soit en remise directe ou en remise indirecte, il faut transmettre physiquement le paquet à ce nœud. La découverte des voisins opérée par ICMPv6 va alors servir à déterminer l'adresse physique associée à l'adresse IPv6 du nœud voisin. Cette opération est essentielle pour effectuer ensuite la transmission du paquet. Cette fonction de résolution d'adresse IPv6 sera développée dans la prochaine séquence.

Route par défaut

Lorsqu'un réseau est raccordé à Internet, il n'est pas nécessaire de détailler toutes les destinations de l'Internet dans la table de routage. Cependant, il faut pouvoir acheminer des paquets vers des réseaux qui ne sont pas connus des nœuds. La table de routage doit contenir dans ce cas une entrée pour indiquer vers quel routeur un nœud doit émettre les paquets.

Dans le cas simple, un routeur par défaut est spécifié et tous les paquets qui visent des destinations inconnues lui seront remis. En quelque sorte, on fait confiance aux capacités et à la connectivité de ce routeur. Une route par défaut est présente dans la table de routage du routeur par défaut. Cette route par défaut joue le rôle du panneau toutes directions dans le réseau routier. L'exemple de la figure 3 montre la configuration avec une route par défaut sur le routeur IPv6 :

Figure 3 : Routeur par défaut.

Les hôtes n'ont pas à avoir la connaissance du routage. Aussi, pour ces nœuds, ils confient tous les paquets pour des remises indirectes au routeur local représenté dans la figure 4 par le routeur connecté à un fournisseur d’accès à Internet. Ceci se déclare dans la table de routage des hôtes par une simple route par défaut. La figure 4 montre la table de routage des hôtes avec la route par défaut. Dans notre exemple, le routeur par défaut est le routeur local de l'hôte A. Il n'y a pas de routeur intermédiaire entre l'hôte A et le routeur par défaut.

Figure 4 : Route par défaut dans les hôtes.

Choix de la route

La fonction de routage d'un nœud distingue une remise directe d'une remise indirecte à partir du test d’adjacence. Le test d’adjacence consiste à vérifier si le destinataire est directement accessible. Pour cela, le nœud va comparer le préfixe de la destination avec les préfixes des réseaux directement connectés. En cas de correspondance, le nœud peut réaliser une remise directe. Dans le cas contraire, c'est une remise indirecte. Il convient maintenant de choisir à quel routeur voisin il faut remettre le datagramme. L'adresse de destination du paquet est mise en correspondance avec les préfixes réseau contenus dans la table de routage. Le choix de la route se fait par la correspondance la plus longue (best match ou longest match) entre l'adresse de destination du datagramme et une destination de la table de routage. S'il n'y a aucune correspondance, il faut retenir la route par défaut.

Protocoles de routage

Comme pour IPv4, il faut faire la distinction entre deux grandes familles de protocoles de routage : les protocoles de routage interne (Interior Gateway Protocols, IGP) et les protocoles de routage externe (Exterior Gateway Protocols, EGP). La différence provient de la notion de système autonome (Autonomous System, AS), par la définition de la portée des échanges d'informations de routage des protocoles de routage. Ainsi, la propagation des préfixes réseaux internes à un AS se fait par un IGP, alors que les annonces de préfixes entre AS se fait par un EGP.

Pour connecter un site à l'Internet, il faut donc mettre œuvre des protocoles de routage interne et des protocoles de routage externe. Cette section traite des trois protocoles IGP suivants : RIPng (équivalent de RIPv2 pour IPv4), ISIS et OSPFv3 (équivalent d’OSPFv2 pour IPv4), ainsi que du protocole de routage externe BGP.

Les protocoles de routage interne visent à rendre automatique la configuration des tables de routage des routeurs à l'intérieur d'un même système autonome. Les routeurs déterminent le plus court chemin pour atteindre un réseau distant. Les protocoles de routage internes nécessitent une configuration minimale du routeur, notamment en ce qui concerne les annonces de routes initiées par ce routeur (exemple : réseaux directement accessibles par une interface du routeur, routes statiques...).

Deux types de protocoles de routage interne existent : les protocoles à vecteur de distance (distance vector), et les protocoles à état de lien (link state). Les premiers génèrent des annonces de routeur transmises aux routeurs voisins, qui contiennent des informations de direction (les réseaux accessibles par le routeur) et de distance associées aux destinations annoncées (la métrique, qui peut être le nombre de routeurs à traverser, pour RIP, mais qui peut être un coût lié au débit, comme pour EIGRP). Pour les protocoles à état de lien, les annonces de routeur ne contiennent plus d'informations issues de la table de routage, mais des informations sur les liens auxquels sont connectés les routeurs (adresses IP, nature du lien, coût calculé souvent à partir du débit, etc.). Chaque routeur construit une base de données d'états de liens (link state database), qui permet de redessiner la topologie du réseau. Dans un second temps, un algorithme de recherche du plus court chemin permet à chaque routeur de construire sa table de routage, à partir de cette base de données.

RIPng ou RIP IPv6

RIPv2 (RFC 2453) est un algorithme à vecteur de distance, basé sur l'algorithme de Bellman-Ford et figure parmi les premiers algorithmes de routage interne utilisés dans l'Internet.

Les routeurs diffusent leurs tables de routage sur les liens auxquels ils sont connectés. Les autres routeurs modifient une route dans leur table si la métrique (le nombre de routeurs à traverser pour atteindre une destination) reçue est plus petite que celle déjà stockée dans la table. Si une annonce de route n'est pas présente dans la table, le routeur l'ajoute. Ces modifications sont à leur tour diffusées sur les autres réseaux auxquels sont connectés les routeurs. Elles se propagent donc sur l'ensemble du réseau à l'intérieur du système autonome. On montre que cet algorithme converge et, qu'en condition stable, aucune boucle n'est créée sur le réseau, c'est-à-dire qu'un paquet ne sera pas transmis indéfiniment de routeur en routeur sans jamais pouvoir atteindre sa destination.

Les tables sont émises périodiquement. Si un routeur tombe en panne, ou si le lien est coupé, les autres routeurs ne recevant plus l'information suppriment l'entrée correspondante de leur table de routage. RIPng est le premier protocole de routage dynamique proposé pour IPv6 (RFC 2080). RIPng est une simple extension à IPv6 du protocole RIPv2 d'IPv4. Il en hérite les mêmes limitations d'utilisation (maximum de 15 sauts par exemple).

ISIS

IS-IS (Intermediate System to Intermediate System) est un protocole de routage interne à état de lien. Il a été standardisé par l'ISO (ISO 10589). C'est un protocole qui opère au niveau de la couche de réseau et qui s'appuie sur une couche de liaison, contrairement à OSPF et RIP qui agissent au-dessus de la couche de transport. Cet élément mérite d'être signalé car cela rend ce protocole indépendant d'IP, que ce soit IPv4 ou IPv6. Ce protocole travaille sur deux niveaux de hiérarchie : les aires (niveau 1) et le backbone (niveau 2).

Un routeur IS-IS peut être :

  • level-1 (routage intra-aire),
  • level-2 (routage inter-aire),
  • ou level-1-2 (routage intra-aire et inter-aire).

Un routeur de niveau 1 n'a de voisins que dans son aire alors qu'un routeur de niveau 2 peut avoir des voisins dans une autre aire. Il n'y a pas d'aire de backbone (contrairement à OSPF). Le backbone est constitué de la réunion de tous les routeurs de level-2. Sur un réseau de type LAN, il y a élection d'un routeur désigné (DIS) qui a la charge de produire les annonces.

Afin de construire sa topologie, IS-IS utilise 3 types de messages :

  • les messages HELLO permettant de construire les adjacences ;
  • les messages LSP (Link State Protocol) permettant d'échanger les informations sur l'état des liens ;
  • les messages SNP (Sequence Number Packet) permettant de confirmer la topologie.

Pour élaborer ces messages, IS-IS se base sur l'utilisation d'éléments d'informations indépendants appelés TLV (Type, Longueur, Valeur). Le message est ainsi constitué d'un en-tête suivi d'une liste de TLV. Chaque TLV véhicule une information propre, et est donc standardisée. L'exemple ci-dessous montre une TLV Protocoles supportés faisant partie d'un message HELLO, informant les voisins des protocoles supportés par l'émetteur du paquet :

  • 0x81 0x02 0xcc 0x8e
    • Le premier octet donne le type de la TLV. Il s'agit ici du type 0x81, c'est-à-dire Protocoles supportés.
    • Le second octet donne la longueur en octets de la TLV : ici, les deux octets qui suivent.
    • Les autres octets composent la valeur de la TLV. Ici, nous avons deux octets indiquant des numéros de protocoles supportés (NLPID : Network Layer Protocol IDentifier): 0xCC pour IPv4 et 0x8E pour IPv6.

OSPFv3

Le troisième protocole de routage interne, basé sur l'algorithme du plus court chemin (SPF, Shortest Path First, ou algorithme de Dijkstra), s'appelle OSPF (Open Shortest Path First). Relativement plus complexe à mettre en œuvre que RIPng, il est beaucoup plus efficace dans les détections et la suppression des boucles dans les phases transitoires. Ce protocole est basé sur plusieurs sous-protocoles, dont un qui permet une inondation fiable du réseau. L'objectif d'OSPF est que chaque routeur possède une même copie de la carte de la topologie du réseau. À partir de là, chacun peut calculer simultanément le plus court chemin pour aller vers l'ensemble des destinations.

Pour réduire la durée des calculs, et surtout pour éviter un recalcul complet des routes à chaque changement de configuration, OSPF offre la possibilité de découper le réseau en aires. Une aire principale appelée backbone relie toutes les autres aires. Les réseaux trouvés dans une aire donnée sont envoyés aux autres aires par les routeurs qui sont en frontière d'aire.

OSPF a été adapté à IPv6 (RFC 5340) ; la version est passée de 2 à 3. La plupart des algorithmes implémentés dans OSPFv2 ont été réutilisés en OSPFv3. Bien évidemment, certains changements ont été nécessaires en vue de l'adaptation aux fonctionnalités d'IPv6.

BGP

BGP-4 est le protocole de routage externe actuellement utilisé pour le routage global de l'Internet IPv4 (le numéro de version 4, identique pour BGP et IP, est une pure coïncidence)[2]. Compte tenu de sa criticité, ce protocole est l'objet d'évolutions constantes. L'une d'entre elles est le RFC 4760 qui rend BGP-4 "multi-protocole" en introduisant la notion de famille d'adresses (ex. IPv4, IPv6, IPX...) et de sous-famille d'adresses (ex. unicast, multicast). Le RFC 2545 précise l'usage des extensions multi-protocoles pour le cas d'IPv6.

L'adaptation multi-protocole de BGP-4 est assez simple car elle ne concerne que les trois attributs dont le format dépend de l'adresse, soit :

  • NLRI : Network Layer Reachability Information (suite de préfixes) ;
  • NEXT_HOP : Adresse IP où il faut router les NLRI ;
  • AGGREGATOR : Adresse IP du routeur qui a fait une agrégation de préfixes.

Pour réaliser pratiquement cette adaptation, BGP4+ introduit deux nouveaux attributs :

  • MP_REACH_NLRI : Multiprotocol Reachable NLRI,
  • MP_UNREACH_NLRI : Multiprotocol Unreachable NLRI,

qui indiquent que l'on annonce des informations de routage autres que les routes unicast IPv4. Ces attributs codent en premier le type de famille et de sous-famille d'adresses, puis les attributs dont le format est spécifique. Les autres attributs (comme le chemin d'AS Autonomous System) sont codés et annoncés sans changement.

Les mises en œuvre du RFC 4760 sont souvent appelées MP-BGP (pour faire référence à leur capacité de traitement des routes multicast) ou BGP4+ (pour faire référence à leur capacité de traitement de routes IPv6). Pour l'anecdote, le numéro de version du protocole n'a pas été modifié (en BGP-5 par exemple) car le passage de BGP-3 à BGP-4 rappelle trop de souvenirs douloureux à ceux qui l'ont mis en œuvre. Les numéros d'AS utilisés pour IPv4 servent aussi pour IPv6.

Conclusion

Cette activité vous a présenté le principe du routage IP et la table de routage. Cet élément essentiel de la couche réseau, présent dans chaque nœud de l'Internet, indique à un routeur qui a un paquet à acheminer à qui doit être remis ce paquet : à un routeur local, indiqué dans la table de routage comme prochain nœud associé à l'adresse de destination contenue dans la paquet, ou directement à la destination. La configuration correcte de la table de routage est donc importante aussi bien sur les routeurs que sur les hôtes.

Cette configuration peut se faire manuellement par l'administrateur du réseau : on parle alors de routage statique. Afin de pouvoir s'adapter à l'évolution du réseau, les tables de routage peuvent être mise à jour par des protocoles de routage permettant de propager les modifications de la topologie du réseau. Les tables de routage sont mises à jour automatiquement au fur et à mesure des changements dans le réseau. On parle alors de routage dynamique.

Références bibliographiques

  1. Rubino, G. et Toutain, L. (2000). Techniques de l'ingénieur. Routage dans les réseaux Internet
  2. Balakrishnan, H. et Feamster, N. (2005), Lecture notes. Interdomain Internet Routing.

Pour aller plus loin

RFC et leur analyse par S. Bortzmeyer : Vous pouvez approfondir vos connaissances sur les protocoles de routage en consultant les liens suivants :

RIPng :

ISIS :

OSPF :


BGP :


Personal tools