Aller au contenu

Protocole IP

La couche Internet est centrée autour du protocole IP, pour Internet Protocol.

Ce protocole s'appuie sur la couche liaison tout en masquant la complexité liée aux différentes liaisons physiques et aux pannes. En particulier, la structure d'Internet n'est pas fixe : elle change en permanence.

On a vu que le protocole IP permet le transit de paquets à travers Internet, en créant des routes à l'aide de relais appelés routeurs.

Dans ce chapitre, on va s'intéresser un peu plus en détails à la structure d'Internet.

Adressage IP

Dans le chapitre précédent, on a vu que chaque machine sur Internet a une adresse IP, composée de 4 nombres de 0 à 255. Par exemple 234.188.5.76.

remarque : c'est un peu plus compliqué en vrai parce qu'il n'y a pas assez d'adresses pour toutes les machines dans le monde.

Au contraire du protocole Ethernet et de la couche Liaison, où toutes les machines se connaissent, IP ne peut pas demander à toutes les machines de se connaitre : il y en a beaucoup trop.

A la place, Internet est découpé en sous-réseaux, qui permettent de faire un routage par zone.

Sous réseau

La notation d'une adresse IP corresponds à 32 bits. Même si on manipule les adresses en notation décimale pointée, ce sont en fait de simple entiers.

Par exemple :

221.240.123.43

Peut aussi s'écrire :

11011101 11110000 01111011 00101011

On peut grouper les adresse par plage de valeur. Par exemple, toutes les adresses de la forme 221.240.123.x, c'est à dire les adresses de 221.240.123.0 à 221.240.123.255.

C'est un peu comme si on avait coupé notre adresse en deux parties :

221.240.123      (adresse du sous-réseau)
x                (adresse des machines à l'intérieur du sous réseau)

En changeant l'endroit où on découpe, on peut créer des sous-réseaux plus ou moins grands.

Activité : taille d'un sous réseau

Calculez la taille (le nombre d'adresses de machine) des sous réseaux suivants:

221.x.y.z
240.222.x.y
130.190.3.x
221.x.y.z   (16 777 216 adresses)
240.222.x.y (65536 adresses)
130.190.3.x (256 adresses)

Pour les sous réseaux, on utilise généralement la notation CIDR, qui indique le nombre de bits de l'adresse du sous réseau :

221.0.0.0/8              (corresponds à 221.x.y.z)

Activité : notation CIDR d'un sous réseau

Donnez la notation CIDR des sous réseaux suivants:

240.222.x.y
130.190.3.x
240.222.x.y -> 240.222.0.0/16
130.190.3.x -> 130.190.3/24

A partir de l'adresse d'un sous réseau de la forme .../y, on peut créer son masque, comme suit :

  • Les y bits de poids fort sont à 1
  • les bits restants sont à 0

Activité : masque de sous réseau

Donnez le masque des sous réseaux suivants :

221.0.0.0/8
240.222.0.0/16
130.190.3.0/24
221.0.0.0/8      ->   11111111 00000000 00000000 00000000
240.222.0.0/16   ->   11111111 11111111 00000000 00000000
130.190.3.0/24   ->   11111111 11111111 11111111 00000000

En faisant un ET bit à bit entre une adresse IP et un masque de sous réseau, on retrouve l'adresse du sous-réseau correspondant.

adresse : 11011101 11110000 01111011 11110011
masque  : 11111111 11111111 11111111 00000000
&       : 11011101 11110000 01111011 00000000

adresse : 221.240.123.243
masque  : 255.255.255.0
&       : 221.240.123.0

Activité : adresse dans le sous réseau ?

Pour les paires adresse-adresse de sous réseau suivantes, dites si l'adresse appartient au sous réseau :

221.250.134.21
221.250.134.0/24
221.250.144.21
221.250.134.0/24
221.132.144.21
221.128.0.0/10
221.250.134.21
221.250.134.0/24  OUI (c'est évident)
221.250.144.21
221.250.134.0/24 NON (c'est évident)
221.132.144.21
221.128.0.0/10 OUI (AH ????)

Détaillons ce dernier point.

Commencons par convertir en valeurs binaires :

221.132.144.21 -> 11011101 10000100 10010000 00010101
221.128.0.0    -> 11011101 10000000 00000000 00000000
masque SR      -> 11111111 11000000 00000000 00000000

On fait le et du masque et de l'adresse, et on tombe bien sur l'adresse du sous-réseau:

  11011101 10000100 10010000 00010101
& 11111111 11000000 00000000 00000000
= 11011101 10000000 00000000 00000000

Remarque : En général, dans un sous-réseau, la dernière adresse a une signification particulière : elle sert au broadcast, c'est à dire à diffuser un message à toutes les machines du sous réseau. Pour des raisons de performances, le broadcast est parfois désactivé sur certain sous-réseaux.

Routage

Le rôle principal du protocole IP est d'acheminer des paquets à travers un réseau où aucune machine ne connait toutes les machines.

Pour ça, les routeurs doivent décider d'une route pour chaque paquet. C'est le routage. Nous allons l'aborder rapidement ici, et nous approfondirons en Terminale.

IP est un procotole distribué : chaque routeur agit indépendemment des autres avec les données qu'il a localement et celles qu'il obtient des routeurs voisins. Il n'y a pas d'entité responsable de la coordination. (gardez à l'esprit que c'est plus compliqué dans la réalité !)

Le routage se passe donc comme suit :

  • Un routeur reçoit un message.
  • Il sélectionne dans une table de routage le prochain routeur dans la route.
  • Il transmet le message au prochain routeur.

Une table de routage renseigne les routes locales à destination de différents sous réseaux. Chaque ligne corresponds à une route, avec les informations suivantes :

Champs Description
Réseau destination Le réseau ciblé par la route
Masque Le masque du réseau ciblé
Passerelle L'adresse du prochain routeur pour accéder au réseau
Interface Le numéro ou l'adresse de l'interface connectée à la passerelle
Métrique Une valeur de l'efficacité de la route. Le plus petit est le mieux. Ce que représente cette métrique varie avec le protocole de routage utilisé.

Voici un exemple de table de routage :

Destination Masque Passerelle Interface Métrique
0.0.0.0 0.0.0.0 215.234.5.2 167.2.3.4 10
223.234.0.0 255.255.0.0 221.234.2.4 162.1.2.3 2
223.234.2.0 255.255.255.0 222.123.7.101 22.123.7.220 3

Pour sélectionner une route pour un paquet :

  • Le routeur compare son adresse avec les adresses des réseaux de destination, pour trouver celles qui corresponds.
  • Si une seule est trouvée, elle est sélectionnée.
  • Si plusieurs routes sont trouvées, c'est la plus spécifique, c'est à dire avec le masque avec le plus de 1, qui est sélectionnées.
  • En cas d'égalité, c'est celle avec la métrique la plus faible qui est sélectionnée.
  • En cas d'égalité, la sélection est libre.

Exercice : routage

Vous pouvez télécharger le fichier de l'énoncé en cliquant sur ce lien.

TODO (prof) ajouter correction

DNS

Bon, tout ça, c'est bien beau... Mais il manque pas un truc ?

Je ne vous ai jamais donné l'adresse IP du serveur du cours, et pourtant... vous y avez accès !

En fait, les adresses IP sont très compliquées à manipuler pour les humains. Alors à la place, on utilise un nom de domaine.

Par exemple :

1nsi.felix-bertoni.fr

Ce nom est ensuite converti en adresse IP à l'aide du service DNS, le Domain Name System.

Quand on tape un nom de domaine dans la barre de recherche d'un navigateur, il effectue d'abord un requête DNS pour obtenir l'IP du serveur correspondant.

Puis il fait une requête au serveur (généralement HTTPS) pour obtenir la ressource demandée (généralement une page web).

On peut découper un nom de domaine par ses points :

1nsi.felix-bertoni.fr

Corresponds à plusieurs domaines et sous domaines, hiérarchisés :

  • fr est un domaine de premier niveau. Il regroupe beaucoup d'adresse IP reliées à des services français.
  • felix-bertoni est un domaine de second niveau. C'est le mien, il regroupe les adresses IP de tous mes serveurs (en réalité je n'en ai que quelques uns).
  • 1nsi est un serveur, celui qui vous sert le site du cours. A noter que "serveur" est ici virtuel : c'est possiblement plusieurs machines.

Le serveur responsable du domaine fr connaît le serveur responsable du domaine felix-bertoni, puisque c'est un sous-domaine immédiat. felix-bertoni connaît fr, parce que c'est son parent immédiat.

Activité : représentation

Dessinez la hiérarchie des serveurs DNS pour l'ensemble des domaines suivants:

1nsi.felix-bertoni.fr
www.google.com
www.impots.gouv.fr
linuxfr.org
handbook.gitlab.com
about.gitlab.com

TODO ajouter solution ici

Une requête DNS se passe comme suit :

  • L'emetteur demande à son DNS local (souvent configuré par le routeur) l'adresse IP correspondant à un domaine, par exemple linuxfr.org.
  • Si le DNS local connaît le nom de domaine, il réponds. Sinon, il passe la requête à son parent, et ainsi de suite jusqu'à qu'un des parents responsable de la partie haute du domaine soit rencontré.
  • Quand un parent ne connaît qu'une partie du domaine, par exemple org, il fait passer aux DNS responsables du sous-domaine correspondant, jusqu'à atteindre un serveur qui connaît l'adresse.

Activité : Requêtes DNS

A partir du schéma de l'activité précédente, et en supposant une machine ayant pour DNS local about.gitlab.com, dites quels serveurs DNS seront interrogés par une requête DNS pour connaître l'adresse IP de www.google.com.

about.gitlab.com
gitlab.com
com
google.com

Essayez la même chose pour une requête sur 1nsi.felix-bertoni.fr.

Quel est le problème ? A votre avis, comment est-il résolu en pratique ?

fr et com ne se connaissent pas !

Il faudrait qu'ils se connaissent, ou alors, il faudrait un DNS qui connaît tous les DNS de haut niveau. C'est les serveurs DNS racine. Il est noté '' (oui, c'est une chaîne vide, parce qu'il est implicite dans tout nom de domaine)

Donc

1nsi.felix-bertoni.fr

est en réalité

1nsi.felix-bertoni.fr. <--- remarquez l'ajout du point ici !!!

Complétez le schéma de l'activité précédente.

TODO ajouter ici