UE PRIP
Principe des Réseaux Informatiques par la Pratique
La couche réseau

Automne 2023

1 Le datagramme IP

1.1 Le datagramme IPv4

Longueur d’entête: en nombre de mots de 32 bits ; si supérieur à 5, indique la présence d’options (40 octets max d’options: 10 mots max de 4 octets)

Type de service: peu utilisé par le passé, permet aujourd’hui, entre autres, de coder le DSCP (DiffServ Code Point). Voir pages suivantes.

Champs pour la segmentation: on recommande d’éviter la segmentation avec TCP. Elle n’existe plus que pour UDP si les unités de données fournies ont une taille supérieure au MTU de l’interface

bit D: Don’t fragment: interdit la fragmentation du segment s’il est à 1

bit M: More: indique la présence de fragments complémentaires, si le segment d’origine a été fragmenté.

Si le champ Offset est à 0 ainsi que le bit M, le segment est celui d’origine

TTL: durée de vie; décrémenté de 1 par chaque routeur. Si le résulat passe à 0, le datagramme est jeté et un message ICMP est envoyé à la machine émettrice

Protocole: indique le protocole supérieur véhiculé (TCP, UDP, ICMP voire même IP en cas d’encapsulation IP dans IP piour tunnelling)

Somme de contrôle d’entête: contient la somme des mots de 16 bits constituant l’entête. Permet à l’arrivée de vérifier l’intégrité de celle-ci. Si une erreur est détectée le datagramme est jeté sans autre forme d’action. On ne peut même pas envoyer un message d’erreur à l’émetteur car l’adresse source qui indique ce dernier peut être corrompue. Comme l’indique le nom de ce champ le contrôle d’intégrité n’est fait que sur l’entête.

Adresses: source et destination, sur 32 bits ; information fondamentale, au moins en ce qui concerne la destination car elle sert au routage.

111
- Network Control (protocole de type HELLO)
110
- Internetwork Control (protocoles de routage)
101
- CRITIC/ECP
100
- Flash Override
011
- Flash
010
- Immediate
001
- Priority
000
– Routine (priorité la plus faible)

RFC 791 et 795

DiffServ signifie Différentiation de Service (en anglais aussi). C’est un mécanisme relativement récent permettant de marquer les paquets afin qu’ils soient traités de manière différentiée dans les routeurs. C’est un mécanisme de qualité de service.

L’option LSR permet d’indiquer la route à suivre mais si un routeur intermédiaire ne sait pas comment utiliser une des indications contenue dans l’option, il peut alors utiliser sa table de routage normale.

L’option SSR est plus stricte car le paquet est rejeté si un routeur ne sait pas l’orienter vers une direction indiquée.

Il y a encore l’option Traceroute, obsolète car dangereuse, EEOL et NOP pour indiquer la fin de la liste et du bourrage d’alignement sur 32 bits.

L’option RTALT est utilisée par IGMP et par RSVP, ces protocoles nécessitent des traitements particuliers dans les routeurs. Ces traitements sont effectués par des entités applicatives des routeurs. Ces derniers ne doivent donc pas effectuer le routage rapide des paquets munis de cette options mais ils doivent les diriger vers les entités applicatives.

http://www.iana.org/assignments/ip-parameters

1.2 Le datagramme IPv6

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class |           Flow Label                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload Length        |  Next Header  |   Hop Limit   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                         Source Address                        +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                      Destination Address                      +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Payload...                           |

Première standardisation de IPv6: rfc1883 en 1995, mis à jour par le rfc2460 en 1998, lui-même remplacé par le rfc8200 de 2017, à priori bien stabilisé maintenant et qui intègre toutes les réajustement qui ont été discutés toutes ces années.

   +---------------+------------------------
   |  IPv6 header  | TCP header + data
   |               |
   | Next Header = |
   |      TCP      |
   +---------------+------------------------

   +---------------+----------------+------------------------
   |  IPv6 header  | Routing header | TCP header + data
   |               |                |
   | Next Header = |  Next Header = |
   |    Routing    |      TCP       |
   +---------------+----------------+------------------------

   +---------------+----------------+-----------------+-----------------
   |  IPv6 header  | Routing header | Fragment header | fragment of TCP
   |               |                |                 |  header + data
   | Next Header = |  Next Header = |  Next Header =  |
   |    Routing    |    Fragment    |       TCP       |
   +---------------+----------------+-----------------+-----------------

2 Adressage

2.1 Structuration machines / réseau

2.2 Les adresses IPv4

Une interface IP doit être munie d’une adresse pour pouvoir fonctionner. En général, pour des machines de bureau standard en réseau local, l’interface IP correspond à une carte réseau de type Ethernet.

L’interface IP peut aussi être correspondre à une couche complètement logicielle, c’est le cas des interfaces de niveau 2 réalisées avec le protocole PPP qui s’interpose entre IP et une interface physique comme un port série ou un port USB relié à un modem ADSL (l’empilement des couches protocolaires est alors très complexe).

Une interface matérielle peut être munie de plusieurs adresses IP, sous Unix et Linux en particulier. On a alors, par exemple, les interfaces eth0:0, eth0:1, eth0:2, etc.

A noter que les adresses de classe A de la gamme 0.0.0.0 à 0.255.255.255 ne peuvent pas être utilisées, bien qu’elles ne correspondent pas à une fonction particulière.

Le multicast...

Permet d’envoyer des paquets IP à un certain nombre de machines mais pas à toutes. Des machines sur le réseau peuvent être sources de trafic multicast, elles peuvent émette par exemple à l’adresse 224.5.6.7. Il suffit que d’autres machines soient «au courant» de ce fait pour se mettre en écoute en lançant une application spécifique. Cette application demande explicitement à écouter le flux en envoyant un message du protocole IGMP (RFC-3376 pour la version 3) vers l’Internet. Ce message est relayé par les routeurs vers les sources, chaque routeur rencontré s’insère alors dans un arbre de diffusion multicast (préalablement configuré). Les paquets du flux applicatif peuvent arriver ainsi aux récepteurs ayant fait la requête.

Il faut que les routeurs soient configurés, ce n’est pas automatique.

Il existe un réseau mondial multicast, appelé le MBONE. Les sources potentielles diffusent des annonces de session à l’adresse SAP.MCAST.NET (224.2.127.254) (en UDP, port 9875).

L’outil sdr (pour unix/linux ou windows) permet d’écouter ce flux et afficher les informations de sessions.

(mot clé MBONE; un lien: http://www-itg.lbl.gov/mbone/)

La fonction de NAT est mise en œuvre dans un routeur muni d’une interface configurée avec une adresse officielle (pouvant donc être routée dans l’Internet). Les paquets sortant sont modifiés, le champ «adresse source» est remplacé par l’adresse officielle de l’interface de sortie du routeur. Ce dernier mémorise l’opération pour effectuer la modification inverse pour les paquets en retour.

Des extensions du concept peuvent affecter aussi les ports TCP ou UDP.

Le mécanisme pose un problème pour les protocoles tels que ftp. En effet, ftp demande la création d’une connexion «entrante» pour réaliser les transferts de fichiers, les paquets de demande de connexion doivent être corrélés avec la connexion sortante existante. Les traitements sont alors plus complexes que pour les connexions simples comme celle pour le Web par exemple). Ces concepts demandent de comprendre ce qu’est une connexion au niveau supérieur (il n’y a pas de connexion IP). Ce point sera abordé plus loin dans le chapitre sur TCP.

Sous linux, les mécanismes de translation d’adresse sont directement intégrés au noyau. Une commande permet d’en paramétrer les caractéristiques, il s’agit de iptables qui peut bien plus encore en ce qui concerne les opérations de filtrage pour la sécurité.

Avec le masque 255.255.255.224 on prend 3 bits de la partie machine. On pourra créer 8 sous réseaux à partir du numéro 192.168.100.0:

Question: à quel sous réseau appartient la machine de numéro 192.168.100.72?

Dans le dernier exemple, l’adresse donnée est une adresse de réseau et non une adresse de machine. Avec une telle adresse (et son masque) on pourra adresser deux fois 128-2 machines: de 192.168.100.1 à 192.168.100.126 (broadcast 192.168.100.127) et de 192.168.100.129 à 192.168.100.254 (broadcast 192.168.100.255).

La notation classique (255.255...) reste très répandue. La notation CIDR peut se rencontrer sous quelques Unix (BSD, Linux, ???), elles est plus commode d’utilisation.

Le protocole PPP est utilisé par exemple dans les connexions aux fournisseurs de service IP via des modems et le réseaux téléphonique général.

Dans les connexions via ADSL, c’est aussi PPP qui est utilisé pour affecter l’adresse à la machine qui se connecte mais le mécanisme est beaucoup plus complexe.

Le protocole DHCP permet de fournir une adresse IP, le netmask associé, le routeur par défaut pour l’interface en cours de configuration, le nom de domaine DNS ainsi que le ou les serveurs DNS. Tout ceci pour une période de temps configurée par le gestionnaire du serveur DNS. Les clients doivent renouveler leur demande d’adresse à la fin du temps alloué.

2.3 Les adresses IPv6

3 Protocole ARP / NDP

Comment la machine M peut elle retrouver l’adresse Ethernet de la machine N en ne connaissant que l’adresse IP de N?

Soyez curieux: la commande arp

Sur un réseau local, sous Windows ou Unix/Linux, ouvrez une fenêtre de commande et tapez: arp -a pour voir la table de résolution arp instantanée. Si vous ne voyez pas la machine de votre voisin et que vous connaissez son adresse IP (ou son nom), faites un «ping» dessus: ping 192.168.100.5 par exemple.

Si la réponse du ping est positive, refaites alors immédiatement arp -a, vous verrez apparaître la résolution concernant la machine voisine.

Soyez curieux: la commande ip neigh

4 Principe du routage

Vous avez le choix entre trois types d’organes:

Aide technique: le netmask est standard pour la classe d’adresses IP utilisée...

Et cette classe est la classe?????....

???

???

...C!

Ce sont des adresses de classe C...

Or les parties «Réseau» ne sont pas identiques entre la partie droite du schéma et la partie gauche...

Donc... Il ne s’agit pas de mêmes «Réseaux». Donc, forcément B est un... et A et C sont des ... ou des ...

Réponse à la question... A et B sont des hubs ou des commutateurs (ou switches ou ponts multiports). Même si fondamentalement les fonctionnalités des hubs et des commutateurs sont différentes (hubs: répéteurs, organes physiques, niveau 1 ISO – switches: niveau 2 ISO) on ne peut pas faire la différence sur le schéma.

B est un routeur. Il raccorde des réseaux dont les machines sont identifiées par des numéros IP de classe C dont la partie réseau est différente. Il raccorde dont des réseaux. Il fonctionne au niveau 3 ISO.

B est un routeur, donc chacun de ses ports est identifié par une adresse IP dont la partie réseau identifie le réseau auquel ce port est raccordé.

Le premier port de B est raccordé sur le réseau 192.168.100.0, on lui donnera donc une adresse libre de ce réseau (ici .1). Un autre port est sur le réseau 192.168.250.0, on lui donnera par exemple l’adresse .1 sur ce réseau.

Ce n’est pas pour faire joli, c’est vraiment fonctionnel. Si on ne le fait pas le réseau ne peut pas fonctionner.

Rien n’est magique... L’application sur M qui désire envoyer un message à une application sur N doit savoir que N existe. Sur M on doit connaître l’adresse IP de N.

On doit aussi savoir par où on passe. En M on doit savoir que pour atteindre N il faut passer par le routeur B.

Mais B est identifié par deux adresses IP!!!

En M, nous sommes sur un réseau local, nous ne pouvons atteindre que des machines se trouvant sur le même réseau local que nous. Nous ne pouvons donc atteindre le routeur que par son port qui est situé sur le même réseau physique, celui identifié par le préfixe IP 192.168.100.

...Comment faire?...

À suivre...

Il faut une table de routage en M. Donc dans la machine terminale!!!

Chaque machine, quelle soit terminale ou intermédiaire, travaillant en IP incorpore des fonctions de routage.

Cela ne signifie pas que chaque machine terminale soit un routeur... Pour qu’une machine puisse joue le rôle de routeur il faut qu’elle possède au moins deux interfaces munies d’adresses IP (autres que 127.0.0.1, correspondant à l’interface boucle locale) et que son module IP soit autorisé à effectuer la fonction de relayage (forwarding).

Quand on disait qu’affecter une adresse à chaque interface de routeur n’était pas un effet de cosmétique...

Si en M on ne connaît pas l’adresse IP de l’interface du routeur qui est du même coté que M (sur le même réseau) alors la résolution ARP ne peut se faire.

Il ne suffit pas que l’interface du routeur et M soient «du même coté», il faut aussi qu’ils soient sur le même réseau local pour que ARP fonctionne (on rappelle que la requête ARP est transmise par broadcast Ethernet et que ce type de message ne passe pas les routeurs).

Ici la notion de réseau local est celle qui a été vue dans la partie précédente du cours, à savoir un réseau où la diffusion est possible vers toutes les machines. Ce pourrait être un VLAN car ce type de topologie définit des domaines de broadcast.

Lorsque des machines sont reliées entre-elles via des liaison point-à-point, il n’y a pas de résolution ARP.

Les directions sont spécifiées par des numéros de réseaux indiqués sur 4 octets et accompagnés de leur netmask, par exemple 192.168.10.0 255.255.255.0, ou en notation CIDR 192.168.10.0/24.

Une direction peut être une machine, dans ce cas l’adresse IP de la machine est indiqué directement et le netmask vaut 255.255.255.255.

Les indications de route peuvent être données en indiquant l’adresse IP du routeur par lequel il faut envoyer les paquets pour la direction correspondante. Plus précisément il s’agit de l’adresse IP de l’interface du routeur immédiatement accessible. C’est absolument obligatoire dans le cas ou l’interface du routeur en question est sur un réseau local classique.

Dans le cas ou l’interface du routeur est sur une liaison point-à-point, on peut ne donner que le nom de l’interface locale. Voir transparent suivant.

Le coût correspond à la notion de «plus court chemin». Moins le coût est grand meilleur semble le chemin (ce n’est pas toujours vrai, un chemin peut être plus court en vraie distance (moins de sauts par exemple) et cependant moins efficace en débit).

Table de routage en A

direction netmask gateway interface
192.168.100.0 255.255.255.0 192.168.100.10eth0
192.168.200.0 255.255.255.0192.168.100.2eth0
default 0.0.0.0 192.168.100.1eth0

Rq: ici la mention de l’interface n’est pas très importante, elle est redondante car il n’y a qu’une seule interface physique (il y a quand même l’interface boucle locale qu’on n’a pas fait figurer dans la table de routage, mais qui exite et provoque des entrées spécifiques dans la table)

Table de routage en Routeur1

direction netmask gateway interface
192.168.50.0 255.255.255.0192.168.50.1if2
192.168.100.0 255.255.255.0192.168.100.1if1
192.168.200.0255.255.255.0192.168.100.2if1
default 0.0.0.0 192.168.50.2if2

Rq: dans la ligne par défaut, la seule mention de l’interface suffirait car le lien entre les routeurs 1 et 2 est de type point-à-point.

Compléter pour le routeur 2 et la machine B...

On suppose la table de routage en A partiellement remplie. L’interface if1 du routeur2 est accessible, une commande ping, depuis A, vers l’adresse de cette interface fonctionne. Donc on peut supposer (et on a raison) que cette interface est «visible» depuis A. Cependant si on tente de créer en A une route via cette interface la commande doit échouer. Pourquoi?

Quelle est le numéro de l’interface de boucle locale (interface interne non raccordée à un réseau physique)?

Quelle sont les adresses de broadcast possibles?

Par quelle interface sont acheminés les paquets de broadcast?

Que pouvez vous déduire de tout ceci concernant l’adresse de la machine en question?

Que se passe-t’il si une application de cette machine envoie un paquet IP vers une autre application de la même machine? Quel chemin est emprunté par le paquet?

Quelle adresse code la destination par défaut?

Et n’oubliez pas la commande ping... C’est la première commande à utiliser quand le réseau ne va pas très bien... «Mon voisin est-il joignable? Alors:

ping mon_voisin (plutôt adresse_IP_de_mon_voisin)

Note: Vous remarquerez peut être que Windows affiche plus de routes que Linux. En fait Linux gère plusieurs tables de routage et a pour habitude de n’afficher que la table main, sauf si on lui demande gentiment. (Pour avoir la liste des tables de routage: cat /etc/iproute2/rt_tables; pour afficher la table principale: ip route show table main; pour afficher la table avec les règles pour le multicast et le broadcast: ip route show table local; etc.)

5 Les routeurs

Ce que l’on va appeler le «réseau local» de l’entreprise est en réalité un réseau de niveau 3 composé de routeurs interconnectant des réseaux locaux séparés physiquement ou logiquement (VLANs).

L’adressage pourra être de type «privé», avec une seule adresse officielle en sortie et une fonction de type NAT dans le routeur de sortie.

6 Gestion des erreurs avec ICMP

La commande ping n’utilise que ICMP (porté par IP).

La commande traceroute (tracert sous Windows) joue sur le dépassement de la durée de vie. Un premier paquet est créé «à la main» et son champ ttl est mis à 1. Il contient un paquet UDP à destination d’un port inconnu. Le paquet est routé, il atteint le premier routeur qui décrémente alors le ttl. Le résultat valant 0 le paquet est jeté et un message ICMP est émis vers la source du paquet jeté. Le message est véhiculé par un paquet IP comportant l’adresse du routeur, ce qu’on attend dans traceroute. On peut alors afficher l’identité de ce routeur ainsi que le temps mesuré entre l’envoi du paquet initial et le l’arrivée du message ICMP. On fait cela trois fois pour avoir une estimation du temps moyen d’aller et retour puis on recommence en mettant cette fois le ttl à 2.


Ce document a été traduit de LATEX par HEVEA