Dans la séquence précédente sur la couche 2, nous avons vu tous les éléments qui permettent la communication dans un réseau donné : les adresses MAC qui permettent d'identifier les machines sur le réseau, le protocole Ethernet qui définit comment les messages doivent être construits, et le switch qui s'occupe d'aiguiller les trames Ethernet vers les bons destinataires.

Dans la couche supérieure, la couche 3, nous allons maintenant voir comment on peut communiquer avec des machines à l'extérieur de son propre réseau. Cette séquence va être intéressante si vous souhaitez mieux comprendre comment fonctionne la téléopération ou même le fonctionnement d'Internet de manière générale.

I- Le rôle de la couche 3

Comme annoncé dans la petite intro, la couche 3 a pour but de connecter différents réseaux entre eux, de faire de l'inter-réseaux.

Imaginez les réseaux comme des villes et des villages. Ils ont différentes tailles, et ils sont reliés entre eux par des routes. Et bien là c'est la même chose, les différents réseaux ne peuvent pas communiquer directement entre eux, mais par contre ils sont reliés par des routeurs qui serviront de passerelle aux données pour transiter d'un réseau vers un autre.

1

Si vous voulez vous rendre du réseau R1 au réseau R9, vous devez passer par différents réseaux intermédiaires (R2-R4-R6 ou encore R2-R3-R5-R6) en utilisant des routeurs pour sauter d'un réseau à l'autre.

C'est exactement le même principe quand vous souhaitez afficher une page internet. Vous allez passer par différents réseaux intermédiaires, depuis votre réseau local avec votre box, jusqu'au réseau qui héberge le site que vous souhaitez atteindre. Et comme pour mon analogie avec les villes et les villages, il y a toujours plein de parcours possibles pour se rendre dune ville à une autre, quitte à faire des détours. Avec internet c'est la même chose, il y a une multiplicité de chemins possibles ce qui permet de ne pas rester bloquer si un routeur tombe en panne. On fera quelques petites manips pour vérifier cela dans la suite de la séquence.

Le plan de cette séquence sera assez similaire au plan qu'on a utilisé pour expliquer la couche 2:

  • dans la couche 2 on avait défini des adresses MAC pour identifier les machines présentes sur le réseau. Et bien dans la couche 3 on aura l'équivalent avec les adresses IP, qui permettront de désigner des machines qu'elles soient dans notre réseau ou pas.
  • de la même manière qu'on avait défini le protocole Ethernet pour construire nos trames, et bien en couche 3 on aura aussi certains protocoles que l'on va étudier, notamment le protocole IP (mais pas que).
  • enfin pour passer d'un réseau à un autre, on aura besoin d'un point de passage. Ce rôle sera tenu par le routeur, qui tient le rôle de matériel de couche 3 (un peu comme le switch pour la couche 2 et le hub pour la couche 1).

II- L'adresse IP

Déjà il faut savoir qu'il existe 2 types d'adresses IP (Internet Protocol): IPv4 et IPv6. L'adresse IPv4 est constituée de 4 octets écrits en décimal et séparés par 1 point, alors que l'adresse IPv6 est constituée de 16 octets écrits en hexa et séparés par 2 points:

  • Les adresses IPv4 vont de 0.0.0.0 à 255.255.255.255.
  • Les adresses IPv6 vont de 0000:0000:0000:0000:0000:0000:0000:0000 à FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

IPv4 a été la première adresse à être mise en place (début 80), et IPv6 a été développée ensuite pour pallier à la limitation du nombre d'adresses IPv4 disponibles, au début des années 90. En théorie, on aurait déjà dû migrer complètement de IPv4 vers IPv6, mais dans la pratique c'est toujours IPv4 qui est le plus largement utilisé. Et c'est un problème car IPv4 et IPv6 ne sont pas compatibles entre eux. Du coup, beaucoup de machines utilisent à la fois une adresse IPv4 et une adresse IPv6 et s'adaptent en fonction de ce qui est utilisé.

Dans la suite de la séquence on étudiera uniquement le fonctionnement des adresses IPv4 car c'est toujours très majoritairement ce qui est utilisé en robotique (et même de manière générale, même si ça tend à s'inverser, très lentement). Mais je vous donnerai quelques liens pour étudier le fonctionnement d'IPv6 dans la partie ressources, pour le cas où vous en auriez tout de même besoin.

Une adresse IPv4 contient 2 informations en elle : l'adresse de la machine et l'adresse de son réseau. C'est un peu comme pour une adresse postale avec le numéro de bâtiment et le numéro de rue (3 rue du lac aux fées).

Sauf que dans le cas des adresses IPv4, la partie qui correspond au réseau est au début, et la partie qui correspond à la machine à la fin. Et l'endroit à partir duquel on passe de l'un à l'autre est variable.

2

Mais si elle est variable, comment fait-on pour savoir où est la séparation entre la partie qui correspond au réseau et celle qui correspond à la machine?

Et bien c'est là qu'intervient l'élément indispensable quand on manipule une adresse IP, à savoir le masque de sous-réseau.
Pour comprendre ce que représente une adresse IPv4, il faut toujours avoir l'adresse ET le masque de sous-réseau.

Le masque de sous-réseau s'écrit exactement comme une adresse IPv4, donc 4 octets écrits en décimal et séparés par un point. Par exemple 255.255.255.0, 255.255.0.0, ou encore 255.255.240.0. Par contre on va voir qu'il ne peut prendre que quelques valeurs bien particulières. Mais pour comprendre ça il faut déjà bien se remettre en tête ce à quoi correspond un octet.

Un octet c'est 8 bits (gardez toujours cette petite phrase en tête). Et qu'on l'écrive en décimal ou en hexa, dans tous les cas pour les machines ça représente une série de 0 et 1, donc du binaire.

Donc quand j'écris 255.255.255.0, la machine comprend toujours 11111111.11111111.11111111.00000000.

Et bien un masque de sous-réseau sera toujours composé d'abord d'une série de 1 , puis d'une série de 0 . Pas de mélange! Donc par exemple voici des masques de sous-réseau valides:

  • 255.255.0.0 pour 11111111.11111111.00000000 .00000000,
  • 255.0 .0.0 pour 11111111.00000000 . 00000000 .00000000,
  • 255.255.240.0 pour 11111111.11111111.1111 0000 .00000000

Le dernier exemple est un peu spécial puisque la séparation entre la série des 1 et la série des 0 se fait au milieu de l'octet, mais c'est un exemple tout à fait possible de masque. Par contre ça ce n'est pas un masque possible:

  • 255.255.241 . 0 pour 11111111.11111111 . 1111 0001 .00000000

Ce masque est impossible car on a un 1 au milieu des 0 . Du coup avec cette règle, les seules valeurs d'octet possibles pour un masque sont:

Décimal Binaire
0 00000000
128 10000000
192 11000000
224 11100000
240 11110000
248 11111000
252 11111100
254 11111110
255 11111111

3

Bon c'est bien joli tout ça, mais quel rapport avec nos adresses IP?


Et bien le masque sert tout simplement à dire dans l'adresse IPv4, quelle partie correspond au réseau (là où il y a les 1 ), et quelle partie correspond à la machine (là où il y a les 0 ). Cela revient à faire un ET logique entre l'IP et le masque pour trouver le réseau.

Prenons un exemple. Soit l'adresse IP 192.168.0.42 avec le masque 255.255.255.0 (11111111.11111111 .11111111 .00000000 en binaire). Les 3 premiers octets sont complètement à 1 , donc ça signifie que les 3 premiers octets correspondent au réseau (192.168.0) et le dernier octet à la machine 42.

Il s'agit donc la machine numéro 42 située sur le réseau 192.168.0. 0. (on complète avec des 0 pour avoir l'adresse du réseau).

Je vous donne encore quelques exemples:

  • 192.168.0.1 et masque 255.255.0.0 : machine 0.1 sur le réseau 192.168.0.0
  • 192.168.1.13 et masque 255.0.0.0 : machine 168.1.13 sur le réseau 192.0.0.0

Avec des masques en 255 et 0 c'est assez facile de savoir quelle partie correspond au réseau et quelle partie correspond à la machine. Mais avec des masques qui prennent d'autres valeurs (parmi celles qu'on a listé dans le tableau), c'est un peu plus difficile car il faut passer par le binaire sur l'octet où se fait la coupure.

Par exemple 192.168.213.1 avec le masque 255. 255.240.0 . 213 en binaire c'est 11010101 et 240 c'est 11110000. En les mettant l'un au dessus de l'autre on voit mieux ce qu'on garde:

11010101 (3e octet de l'adresse IP)

1111 0000 (3e octet du masque)

1101 0000 soit 208 (résultat du ET logique entre les deux)

Donc ici la partie qui correspond au réseau c'est 192.168.208.0 (on garde tous les bits bleus et on met les autres à 0), et la partie qui correspond à la machine c'est 5.1 (là c'est l'inverse on ne garde que la partie rouge et on remplace la partie bleue par des 0).

Vous voyez donc que c'est un peu plus compliqué avec des masques autres qu'en 255 ou 0, mais rien d'insurmontable si on prend le temps de poser le calcul!

Une autre manière de noter le masque que vous verrez peut-être et qui est un peu plus courte, c'est d'écrire / suivi du nombre de bits à 1 dans le masque:

  • /8 pour le masque 255.0.0.0
  • /16 pour le masque 255.255.0.0
  • /24 pour le masque 255.255.255.0
  • /22 pour le masque 255.255.252.0 (11111111.11111111.11111100. 00000000)

Donc par l'exemple si on écrit l'adresse IP 192.168.0.55 /24, cela signifie qu'on parle de la machine 55 dans le réseau 192.168.0.0.

Une autre chose que nous indique le masque de sous-réseau, c'est le nombre d'adresses IP qui sont disponibles dans son réseau. On appelle ça calculer la plage d'adresses du réseau. Reprenons notre exemple précédent: 192.168.0.55 /24. Dans le réseau auquel appartient cette IP, les adresses commencent toutes par 192.168.0 et peuvent aller de 192.168.0.0
à 192.168.0.255. Il y a donc 256 valeurs possibles d'adresse IP en théorie. Sauf qu'en pratique on en garde toujours 2 particulières de côté:

  • 192.168.0.0 est l'adresse du réseau en lui même,
  • 192.168.0.255 est l'adresse de broadcast du réseau, elle sert à communiquer avec toutes les adresses IP de son réseau.

 

4

La première adresse IP d'un réseau est l'adresse du réseau en lui même. (tous les bits correspondant à la machine sont à 0)

La dernière adresse IP d'un réseau est l'adresse de broadcast. (tous les bits correspondant à la machine sont à 1)

Ces 2 adresses sont toujours réservées.

Donc si on reprend quelques exemples de masques précédents, on en déduit le nombre d'adresses disponibles:

  • /24 : 256-2 = 254 adresses disponibles (petit réseau local)
  • /16 :  256*256-2 = 65534 adresses disponibles (réseau de grande entreprise)
  • /8 : 256*256*256-2 = 16777214 adresses disponibles (réseau de très grandes entreprises)
  • /22 : 256*4-2 = 1022 adresses disponibles (entreprise moyenne)

De manière générale, sur un réseau de masque /n, le nombre d'adresses disponibles est 232-n-2.

5

OK, j'ai compris comment marchent les adresses IP et les masques, et je veux maintenant créer un petit réseau pour communiquer avec mon robot. Est-ce que je peux utiliser n'importe quelle adresse IP?


Non absolument pas, car sinon comment savoir si votre adresse IP n'est pas déjà utilisée par quelqu'un d'autre sur Internet?

En fait il y a des normes bien précises qui définissent quelles adresses on peut utiliser ou pas. Ces normes sont documentées dans des RFC (Request For Comments), des documents officiels numérotés qui expliquent ce qu'on peut faire ou pas sur Internet.

Entre autre, ces RFC définissent 2 types d'adresses IP:

  • les adresses IP publiques
  • les adresses IP privées

Les adresses IP publiques sont visibles par tout le monde sur Internet. Elles sont gérées par des organismes régionaux, c'est-à-dire que pour pouvoir utiliser une plage d'adresses IP publique vous devez en faire la demande au préalable.

A l'inverse, les adresses IP privées sont utilisables par tout le monde sans demande préalable, et vous pouvez les utiliser pour vos réseaux internes. Mais vous ne serez pas directement visible depuis l'extérieur avec. Pour qu'on puisse vous contacter de l'extérieur il faudra obligatoirement que votre réseau soit connecté à un routeur possédant une adresse IP publique et capable de faire du NAT (Network Adress Translation). Mais ne vous inquiétez pas on reparlera plus en détail du routeur juste après.

Les adresses IP privées que vous pouvez utiliser sont les suivantes:

Réseau Plage d'adresses disponibles Nombre d'adresses utilisables
10.0.0.0 /8 10.0.0.1 à 10.255.255.254 256*256*256-2 = 16777214
172.16.0.0/12 172.16.0.1 à 172.31.255.254 16*256*256-2 = 1048574
192.168.0.0/16 192.168.0.1 à 192.168.255.254 256*256-2 = 65534

OK! Donc à ce stade de cette séquence, on sait à quoi correspondent une adresse IP et un masque de sous réseau, donc on est capable de s'identifier et identifier d'autres machines en inter-réseau (c'est à dire en dehors de son propre réseau local).

On va donc pouvoir commencer à communiquer avec l'extérieur, mais pour ça vous vous en doutez maintenant il va falloir commencer par définir un protocole de communication. Donc nous allons maintenant enchainer sur le protocole IP.

III- Le protocole IP

On a vu dans la section précédente qu'un message de couche 2 respectant le protocole Ethernet s'appelait une trame Ethernet.

Et bien pour la couche 3, un message respectant le protocole IP s'appelle un datagramme (ou paquet).

Et de la même manière que dans la couche 2 on avait l'adresse MAC du destinataire et celle du récepteur, et bien là c'est exactement la même chose : un datagramme contiendra l'adresse IP de l'émetteur et celle du destinataire. Jusque là rien d'extraordinaire.

Une chose qui peut paraître un peu étonnante en revanche, le datagramme ne contiendra aucun masque de sous-réseau. Lorsqu'une machine veut envoyer un message à une autre machine dont elle connait l'adresse IP, elle se servira juste de son propre masque pour savoir si ce destinataire appartient au même réseau qu'elle ou pas.

  • Si le destinataire est dans le même réseau, elle pourra la contacter directement,
  • Si le destinataire est dans un autre réseau, elle devra passer par un intermédiaire (routeur).

Exemple: la machine 192.168.0.61 /24 cherche à envoyer un message à la machine 192.168.1.62. Elle sait que la plage d'IP de son propre réseau s'étend de 192.168.0.0 à 192.168.0.255, et 192.168.1.62 n'en fait donc pas partie. En conséquence, elle sait qu'elle devra passer par un routeur intermédiaire.

Et ce sera pareil pour toutes les machines intermédiaires entre celle qui émet le message et celle qui le reçoit. Donc vu que la simple connaissance de son propre masque suffit pour savoir comment acheminer le message, pas besoin d'en préciser dans le datagramme IP.

Autre petite particularité, cette fois-ci l'adresse IP de l'émetteur sera mise avant celle du récepteur dans le datagramme. En effet quand un datagramme de couche 3 est reçu par une machine, c'est obligatoirement qu'il lui est destiné (soit pour elle directement, soit pour qu'elle serve d'intermédiaire). Sinon la couche 2 l'aurait déjà automatiquement ignoré. Donc il n'y a plus la même nécessité à mettre l'adresse IP de destination en premier.

Ensuite il y a d'autres éléments qui sont ajoutés dans l'entête de couche 3, mais ils ne sont pas nécessaires à la compréhension du fonctionnement de celle-ci. Je vous donne tout de même un lien dans la partie ressources si vous avez besoin de connaitre en détail chacun d'entre eux. Pour simplifier, notre datagramme ressemblera à ça:

6

Mettons nous du côté de l'émetteur qui construit ce message. Si vous repensez au modèle OSI, vous savez que ce datagramme sera envoyé à la couche 2 avant de partir sur le réseau.

7

Et la couche 2 viendra rajouter ses propres entêtes comme on l'a vu en section 5.2, ce qui nous donnera la trame Ethernet suivante:

8

C'est la mécanique d'encapsulation qu'on a vu en séquence 4.2, chaque couche vient rajouter ses propres entêtes à la création du message, et de la même manière chaque couche utilise et retire les entêtes qui lui sont destinées à la réception de ce message.

9

Du coup est-ce que ça signifie que la trame Ethernet qu'on a vue en section 5.2 était incomplète?


Oui et non, car la couche 2 ne sait absolument pas faire la différence entre ce qui correspond à des entêtes de couche 3 et le vrai message. Pour elle tout ce qui n'est pas en orange sur la trame c'est du SDU et elle est incapable de déchiffrer ce qu'il y a dedans, c'est du message à délivrer et c'est tout.

10

Mais attendez, n'est-ce pas redondant de mettre à la fois l'adresse IP et l'adresse MAC de l'émetteur et du récepteur?


Pas du tout! Car autant l'adresse IP de l'émetteur correspond bien à l'émetteur original du signal, et l'adresse IP du destinataire correspond bien au destinataire final du message. Autant les adresses MAC émetteur et récepteur ne correspondent pas forcément au même émetteur et au même destinataire, mais peuvent très bien être des intermédiaires entre les 2. Typiquement des routeurs sur des réseaux intermédiaires.

Mais pour bien comprendre cela, il est grand temps que je vous présente le fonctionnement des routeurs.

IV- Le routeur

Un routeur est une machine qui a deux (ou plus) interfaces réseau, chacune dans un réseau différent. On dit d'une machine qui sert de routeur entre 2 réseaux qu'elle a "une patte dans chaque réseau".

Considérons par exemple deux réseaux: 192.168.0.0 /24 et 192.168.1.0 /24. Comme on l'a vu précédemment, la plage d'adresses IP du premier s'étend de 192.168.0.0 à 192.168.0.255, et celle du second de 192.168.1.0 à 192.168.1.255. Et les deux réseaux ne peuvent pas communiquer entre eux.

Et bien une machine servant de routeur entre les deux réseaux aura obligatoirement une interface (une carte réseau avec une adresse MAC unique et une adresse IP) dans chacun de ces réseaux. Généralement on utilise l'adresse IP .254 pour les routeurs (mais pas obligatoirement), donc typiquement ce routeur aura deux adresses IP: 192.168.0.254 pour communiquer avec le premier réseau, et 192.168.1.254 pour communiquer avec le second.

11

12

OK donc pour qu'une machine puisse servir de routeur entre 2 réseaux , il suffit qu'elle possède une interface dans chacun des deux réseaux?


Pas seulement. Par défaut, une machine qui reçoit un message avec sa propre adresse MAC en destination mais pas sa propre adresse IP va rejeter le message. Pour qu'elle accepte de relayer les datagrammes qui ne lui sont pas destinés, il faut activer sa fonction de routage.

Donc en résumé un routeur c'est une machine:

  • qui possède une interface dans plusieurs réseaux,
  • qui accepte de relayer les datagrammes qui ne lui sont pas destinés.

Maintenant que nous en sommes là, il nous reste un dernier élément à prendre en compte pour que tout cela puisse fonctionner. Imaginons que je travaille sur l'ordinateur en 192.168.0.2 sur le schéma précédent, et que je souhaite envoyer des consignes au robot en 192.168.1.41 (un wifibot). Mon PC et le wifibot ne sont pas sur le même réseau, il va donc falloir passer par l'intermédiaire du routeur. Mais comment mon PC va-t'il savoir que je dois contacter le routeur en 192.168.0.254 pour pouvoir joindre le wifibot?

Et bien c'est là que va intervenir le dernier élément important quand on parle de routage, à savoir la table de routage. La table de routage de chaque machine lui sert à savoir à qui elle doit envoyer ses trames sur son réseau, en fonction de l'adresse IP qu'elle souhaite contacter. L'adresse IP à qui elle doit envoyer ses trames est appelée passerelle dans la table de routage (gateway en anglais).

La table de routage est donc constituée d'associations entre adresses de réseaux et adresses de passerelles. Généralement il y a 3 parties:

  1. la liste des réseaux auxquels la machine appartient. Dans ce cas la passerelle de la machine sera... elle même (pas besoin de routeur pour contacter les IP de son propre réseau),
  2. la route par défaut (le routeur qui permet d'accéder au plus de réseaux, généralement un routeur qui permet d'accéder à Internet),
  3. tous les autres réseaux que je ne peux pas encore atteindre avec 1. et 2.

A noter que parfois la route par défaut est notée 0.0.0.0, parfois default, ça dépend des systèmes.

Reprenons notre exemple. De manière à avoir un cas de figure complet, imaginons que la machine en 192.168.0.1 soit en fait un routeur relié à Internet. Notre schéma devient donc:

13

Dans ce cas de figure, la table de routage de mon PC en 192.168.0.2 sera:

Réseau destination Passerelle
192.168.0.0 /24 192.168.0.2
default 192.168.0.1
192.168.1.0 /24 192.168.0.254

Si on traduit en français cette table, ça dirait en gros:

  1. Si une veux joindre une machine du réseau 192.168.0.0 /24, et bien pas besoin de passerelle (passe par toi-même),
  2. Par défaut, si tu veux joindre des machines appartenant à d'autres réseaux passe par le routeur en 192.168.0.1 (normal c'est lui qui est relié à Internet donc il relié à tout plein de réseaux),
  3. Il y a un cas particulier pour les machines appartenant au réseau 192.168.1.0 /24, celles-ci ne peuvent pas être atteintes via ta passerelle par défaut. Dans ce cas précis tu devras passer par le routeur en 192.168.0.254.

Donc si mon PC souhaite contacter le Wifibot en 192.168.1.41, il saura grâce à cette table de routage qu'il devra contacter le routeur en 192.168.0.254 pour qu'il transmette ses messages. Rajoutons sur le schéma des adresses MAC fictives et regardons ce qui va se passer étape par étape:

14

Etape 1: Le niveau 3 du PC en 192.168.0.2 consulte sa table de routage et en déduit qu'il doit passer par le routeur en 192.168.0.254. Un datagramme avec ces informations est donc envoyé au niveau 2, qui lui, connaissant l'adresse MAC du routeur (22:22:22:22:22:22), envoie la trame Ethernet suivante sur le réseau:

15

Etape 2: Le switch 1 redirige cette trame vers le bon port grâce à sa table CAM.

Etape 3: Le routeur reçoit la trame. Son adresse MAC est bien la sienne (22:22:22:22:22:22), mais après avoir enlevé les entêtes en orange en couche 2, il s'aperçoit en couche 3 que l'IP de destination n'est pas la sienne (192.168.1.41 au lieu de 192.168.0.254). Vu que sa fonction de routage est activée, il en déduit qu'il doit relayer le datagramme sur le bon réseau. Pour cela il s'aide de sa propre table de routage:

Réseau destination Passerelle
192.168.0.0 /24 192.168.0.254
192.168.1.0 /24 192.168.1.254
default 192.168.0.1

Vous remarquerez que sa table possède 2 lignes avec ses propres réseaux, ce qui est normal puisqu'il appartient à 2 réseaux à la fois. L'adresse IP de destination étant 192.168.1.41, il voit qu'elle appartient au deuxième réseau. Il va donc renvoyer une nouvelle trame via sa carte sur le réseau 192.168.1.0 /24, c'est-à-dire celle dont l'adresse MAC est 33:33:33:33:33:33, et à destination du robot dont l'adresse MAC est 44:44:44:44:44:44:

16

Etape 4: Le switch 2 redirige la trame vers le bon port (ou via son antenne wifi si c'est un robot connecté en wifi, ce qui revient au même).

Etape 5: Le wifibot reçoit la trame avec son adresse MAC, elle est donc bien pour lui. Après suppression des entêtes en orange par la couche 2, la couche 3 reçoit un datagramme avec l'adresse IP du robot en destinataire, donc le message est bien pour lui! Et vu que l'adresse IP de l'émetteur est notée dans le datagramme, il pourra bien lui répondre par la suite.

Voilà, vous savez tout du fonctionnement du routeur et vous venez de voir un exemple complet où les couches 2 et 3 travaillent de concert pour acheminer un message entre 2 réseaux. N'oublions pas le travail de la couche 1 d'ailleurs qui consiste à transmettre physiquement ces messages via des séries de 0 et de 1 le long des fils des réseaux.

Il doit néanmoins peut-être vous rester une question sur le fonctionnement complet de ce système:

17

Comment les machines (routeur, PC) font-ils pour savoir que telle adresse IP correspond a telle adresse MAC?

En effet! Nous n'avons pas encore expliqué comment le routeur fait pour savoir que l'adresse IP 192.168.1.41 correspond à l'adresse MAC 44:44:44:44:44:44, comment le PC en 192.168.0.2 fait pour savoir que la passerelle en 192.168.0.254 qu'il trouve dans sa table de routage a pour adresse MAC 22:22:22:22:22:22 etc..

Et bien cette correspondance entre les adresses IP et les adresses MAC se trouve dans la table ARP, que nous allons expliquer dans la prochaine partie de cette séquence (rassurez-vous ce sera assez court, on arrive au bout de cette longue séquence!).

V- Protocole et table ARP

Les associations adresse IP / adresse MAC sont stockées dans la table ARP de chaque machine. Cette table est utilisée à chaque fois qu'une machine veut communiquer avec une autre machine de son réseau dont elle connait l'adresse IP.

Adresse Logique Adresse Physique
192.168.0.254 22:22:22:22:22:22
192.168.0.2 11:11:11:11:11:11

Lorsque l'adresse MAC correspondant à une IP est inconnue, le protocole ARP (Adress Resolution Protocol) permet de demander l'adresse MAC de cette machine.

Le principe de fonctionnement d'une requête ARP est simple:

  1. Une trame est envoyée en broadcast sur le réseau (adresse MAC FF:FF:FF:FF:FF:FF) pour que tous les appareils branchés sur le réseau la lisent,
  2. Ils vont alors tous comparer l'adresse IP demandée à la leur,
  3. Celui dont l'adresse IP correspond va alors mettre à jour sa propre table ARP avec les adresses IP et MAC de l'émetteur (si il ne les avait pas déjà),
  4. il va ensuite répondre directement à l'émetteur de la requête ARP, qui obtiendra ainsi l'adresse MAC qui lui manquait (vu qu'elle est contenue dans l'entête de la trame). Celui-ci pourra mettre à jour à son tour sa table ARP.

Le protocole ARP est un peu à mi chemin entre la couche 2 et la couche 3 du modèle OSI puisqu'il permet de faire la liaison entre les deux. On dit parfois qu'il est à l'interface entre la couche 2 et la couche 3.

L'utilisation du protocole ARP est un des piliers de fonctionnement des réseaux, mais c'est également une de leurs plus grandes faiblesses. En effet l'utilisation de ce protocole peut être détournée de manière à se faire passer pour une autre machine connectée sur le réseau (typiquement un routeur), de manière à intercepter toutes les trames qui circulent.

Il existe des contre-mesures pour se protéger contre ce type d'attaque, mais je ne vais pas entrer dans les détails ici (la séquence est déjà bien assez fournie et la sécurité des réseaux n'est pas un objectif de cette UE), mais je vous donne un lien dans les ressources si le sujet vous intéresse!

En parlant de pilier de fonctionnent des réseaux, il nous reste un dernier protocole de couche 3 à voir et qui est également très important puisqu'il permet de diagnostiquer les problèmes de réseau: le protocole ICMP.

VI- Protocole ICMP

Nous l'avons déjà mentionné dans la séquence 4.1 sur les protocoles. Celui-ci à 2 fonctions très importantes:

  • détecter automatiquement les erreurs de réseau,
  • donner des outils pour trouver d'où vient la panne.

Lorsqu'un problème survient sur le réseau, ICMP va générer automatiquement un message d'erreur avec un type et un code, en fonction du problème rencontré. Par exemple:

  • type 3, code 0: destination inaccessible, réseau inaccessible (problème de routage jusqu'au réseau à atteindre),
  • type 3, code 1: destination inaccessible, machine inaccessible (on arrive jusqu'au réseau de la machine à joindre mais il y a un problème pour trouver la machine à qui correspond l'IP, personne ne répond à la requête ARP sur le réseau),
  • type 5: la route pour atteindre l'P demandée n'est pas optimale, il y a un routeur qui permet d'atteindre plus rapidement le réseau demandé...

Vous avez compris le principe, je vous donne un lien dans la partie ressources qui liste tous les messages d'erreur possibles.

En plus de détecter automatiquement les problèmes sur le réseau, le protocole ICMP fournit des outils très pratiques vous vérifier le fonctionnement de son réseau. Le premier d'entre eux et le plus utile, c'est la commande ping. Celle-ci permet de vérifier que l'on peut bien contacter une adresse IP, et que celle-ci peut bien nous répondre.

Le fonctionnement du "ping" est le suivant: tout d'abord une demande d'écho (echo request) est effectuée vers l'adresse IP que l'on souhaite joindre. Si celle-ci parvient jusqu'à l'adresse IP de destination, alors la machine à qui correspond cette IP est censée répondre (echo reply). Je dis bien "censée", car on peut très bien configurer une machine pour qu'elle ne réponde pas aux demandes de ping.

Suivant si la réponse au ping a été reçue ou pas, on obtiendra alors différentes informations:

  • si la réponse a été obtenue, on aura des statistiques sur le temps de réponse, le taux de pertes, le TTL (on va y venir juste après),
  • si au contraire  le ping a échoué, à ce moment là on pourra avoir des informations sur le problème en provenance du dernier routeur qui a relayé le ping (machine ou réseau inaccessible, délai d'attente dépassé etc...)

Si vous ne savez pas à quoi correspond le TTL qui est fourni (Time To Live) , cela doit tout de même vous faire penser au TTL qui était présent dans la table CAM du switch (séquence 5.2).  Et c'est un peu le même principe, mais pour une utilisation différente.

Imaginez que 2 routeurs A et B soient mal configurés, et que par exemple pour atteindre un réseau donné, chacun d'eux soit configuré pour rediriger les paquets vers l'autre routeur (A renvoie vers B et B renvoie vers A). Dans ce cas, les paquets vont circuler indéfiniment entre les deux (A et B vont jouer au ping pong), et très rapidement le réseau va être saturé. Et bien pour éviter cela, on rajoute un TTL dans les entêtes des datagrammes IP (31, 63, 127...) qui est décrémenté à chaque fois que le datagramme passe par un routeur. Donc par exemple, au bout de 31 rebonds le datagramme est supprimé, et un message d'erreur ICMP est généré (type 1, code 0, durée de vie du paquet épuisée).

Une autre commande pratique pour déboguer un réseau est la commande traceroute. Celle ci sert à connaitre tous les routeurs intermédiaires pour atteindre une adresse IP. Le fonctionnement de traceroute est le suivant:

  • on génère un datagramme avec un TTL de 1: le premier routeur sur le chemin va décrémenter le TTL, arriver à 0, et donc détruire le datagramme en envoyant un message de durée de vie épuisée,
  • on génère un deuxième datagramme, mais cette fois-ci avec un TTL de 2. Le premier routeur va décrémenter le TTL qui va donc passer à 1. Le second routeur sur le chemin va décrémenter à son tour le TTL qui va donc passer à 0, et là rebelotte, message d'erreur, durée de vie épuisée.
  • on va continuer ainsi avec un TTL de 3, puis 4 etc... jusqu'à atteindre l'IP voulue.

Et ainsi au final on aura la liste de tous les routeurs intermédiaires entre soi et l'IP de destination. Et ainsi en cas de problème on peut voir à partir de quel routeur le soucis intervient.

Voilà, nous en avons terminé avec cette séquence sur le niveau 3 consacré principalement au protocole IP! Maintenant vous savez:

  • comment on s'identifie en inter réseau (adresses IP),
  • comment sont construits les datagrammes de niveau 3 (protocole IP),
  • comment ceux-ci sont relayés à travers différents réseaux grâce aux routeurs,
  • quels autres protocoles sont utilisés à ce niveau (ARP et ICMP).

Maintenant il est temps de passer à la dernière séquence de ce chapitre: le niveau 4 du modèle avec notamment TCP et UDP.

Modifié le: mercredi 16 mars 2022, 12:41