Chapitre 7 : Le protocole IP
Présentation
L'Internet Protocol a pour rôle d’envoyer des paquets, contenant des données, d’un bout à l’autre du réseau. Pour cela, il utilisera l’adresse finale de l’utilisateur couramment appelée “adresse IP”, elle doit être unique dans un réseau, elle permet d’identifier chaque machine. Il existe deux versions du protocole IP : IPv4 et IPv6.
Le protocole IP fonctionne en mode déconnecté, en effet, lors de l’envoie d’un paquet, il ne demandera pas de connexion préalable au destinataire. Ce mode permet au protocole IP d’être rapide mais fait de lui un protocole non-sûr. Afin de garantir l’arrivée d’un paquet, il faudra donc compter sur un protocole de niveau supérieur, par exemple “TCP” ou un protocole de niveau “application” qui va gérer lui-même le bon envoie des données.
Le paquet IPv4
D’abord, commençons par étudier la composition de l’entête d’IPv4 :
- Version : IPv4 dans notre cas ;
- IHL (Internet Header Lenght) : correspond à la longueur de l’en-tête ;
- ToS (Type of Service) : précise le type de service des informations transportées dans le corps du paquet, cette information n’a jamais été utilisée ;
- Total lenght : la longueur totale du paquet ;
- Identification : quand le message (niveau 4) a été découpé en paquets, ce champs permet au destinataire de reconstituer le message ;
- Flag : précise si une segmentation a été effectuée. Si oui, la place du segment, provenant de la segmentation du message de niveau 4, est indiquée dans le champ Offset ou “emplacement du segment” ;
- TTL (Time To Live ou “temps en vie”) : désigne le nombre de routeur traversé avant destruction ;
- Protocol : indique le protocole qui a été encapsulé à l’intérieur du paquet. Les protocoles sont désignés par un code, par exemple
0x6
pour TCP,0x11
pour l’UDP0x11
… - Checksum : permet de voir si la transmission du paquet s’est bien passée. C’est un calcul qui est effectué avant l’envoie sur l’ensemble du paquet IP, à la réception, ce calcul est effectué de nouveau, si les deux checksum sont identique, alors le paquet a correctement été envoyé ;
- Adresse source et adresse de destination : nous détaillerons l’adresse IPv4 dans la prochaine section.
Le paquet IPv6
La première modification que l’on remarquera est le changement de l’espace d’adressage, le nombre d’adresse IP disponible passe de 232 à 2128. De plus, l’IPv6 est capable de s’auto-configurer. Ainsi, sur un réseau local, on configura le routeur avec un “bloc d’IP”. Un bloc d’IP représente un ensemble d’adresse IP qui se suivent. Le routeur fera des annonces sur le réseau. Les machines du réseau qui recevront ces annonces utiliseront ce bloc pour ce faire une adresse IP qui sera unique. En effet, cette dernière est basée sur l’adresse MAC de l’interface réseau, dans certains cas, elle sera générée aléatoirement.
L’IPv6 apporte aussi d’autres nouveautés, même si celles-ci ont été incluses dans IPv4 dans des versions “étendues”, comme IPsec qui permet de sécuriser les communications sur le réseau, la gestion du multicast et de la qualité de service.
L’adresse de broadcast qui était utilisée en IPv4 a toutefois disparue, nous verrons comment cette dernière fonctionne dans la suite de ce chapitre.
- Version : pas de surprise, la valeur est à “6” ;
- Trafic class : utilisé pour la qualité de service ;
- Flow label : permet de marquer un flux pour qu’il soit traité différemment dans les nœuds du réseau, cette valeur est aussi utilisée pour la qualité de service ;
- Playload lenght : désigne la taille du contenu du paquet ;
- Next header : numéro correspondant au protocole utilisé dans la couche suivante (TCP
6
, UDP17
, …) ; - Hop limit : nombre maximal de nœuds traversé avant la destruction du paquet ;
- Adresse source et adresse de destination ;
- Options : les options apportent des fonctionnalités à IPv6 comme l’authentification.
Type d’adresse IP
Il existe différentes techniques de routage ou d’utilisation des adresses IP qui seront énoncée dans la suite du livre. Voici les différents termes utilisés et une définition :
- Unicast : l’adresse IP est associée à un seul hôte ;
- Multicast : l’adresse IP est associée à un groupe de machine, n’importe quel machine peut faire partie du groupe, il n’y a pas d’authentification ;
- Broadcast : tous les hôtes d’un même sous-réseau recevrons le message ;
- Anycast : technique de routage qui consiste à envoyer les données à la machine la plus proche du client.
Les sous-réseaux
Le protocole IP travaille avec des sous-réseaux pour diriger (router) les paquets dans le réseau. Un sous-réseau désigne une plage d’IP, par exemple, les IP de 192.168.1.0
à 192.168.1.255
. Dans un même sous-réseau, toutes les machines pourront communiquer directement entres elles, ceci est lié au domaine de diffusion vu précédemment. En effet, on associera souvent un domaine de diffusion (de niveau deux) à un sous-réseau IP. Par contre, lorsque l’on voudra raccorder deux domaines de diffusion, on aura besoin d’ajouter un routeur, nous verrons cela dans le chapitre sur le routage IP.
Le netmask (ou masque de sous-réseau) permet de séparer l’adresse IP en deux parties : le sous-réseau et la partie hôte, un hôte étant une machine reliée à un réseau. Le netmask est un nombre représentant le nombre de bits à masquer. Dans un réseau local, il sera choisit par l’administrateur réseau en fonction du nombre de machine dans le domaine de broadcast.
Pour manipuler une adresse IPv4, il est préférable de convertir les nombres décimaux de l’adresse IP en binaire. Les bits du netmask positionnés à 1 correspondent à la partie sous-réseau. Les bits positionnés à 0 correspondent à la partie hôte. Le netmask permet aussi de déterminer deux choses:
- en plaçant tous les bits de l’hôte à 0, vous obtiendrez la première adresse du sous-réseau qui est réservée pour le nommer. On ne peut pas attribuer cette adresse à une machine ;
- en plaçant tous les bits de l’hôte à 1, vous obtiendrez la dernière adresse du sous-réseau. En IPv4, elle est réservée au broadcast en IPv4 mais n’a aucune signification particulière en IPv6.
Tous les hôtes appartenant au même sous-réseau peuvent communiquer directement entre eux. Si deux machines dans deux sous-réseaux différents veulent communiquer ensemble, elles devront passer par un routeur.
Note : cet exemple montre des adresses IPv4, mais la démarche est identique en IPv6.
Pour connaître le nombre d’adresses IP disponible avec un netmask on utilisera cette formule :
- 232 - 2 en IPv4, le - 2 signifie que l’on retire le nom du réseau et le broadcast ;
- 2128 - 1 en IPv6 car il n’y a que la première adresse qui n’est pas utilisable.
Lors ce l’envoie d’un paquet IP sur un réseau Ethernet, on devra l’encapsuler dans une trame et donc lui donner une adresse MAC. Celle-ci sera choisie grâce au protocole ARP que nous détaillerons plus loin. Mais, quand l’adresse IPv4 correspond à une adresse de broadcast, on utilisera l’adresse MAC FF:FF:FF:FF:FF:FF
. Toutes les machines appartenant au domaine de diffusion recevront le paquet.
L’adresse IPv4
L’adresse IPv4 est composée de quatre octets que l’on représente sous la forme décimale et les nombres sont séparés par des points, par exemple : 192.168.1.20
. Pour connaître le réseau auquel appartient l’IP, il faut lui ajouter un netmask comme nous l’avons vu plus haut : 192.168.1.20/24
.
Les classes en IPv4
Au début de l’adresse IPv4, on utilisait des classes pour déterminer un netmask. Ces classes ne sont plus très utilisées, mais aujourd’hui nous avons encore des restes, alors ça peut toujours être pratique de les connaître.
Nom de la classe | Premiers bits de l’adresse | Netmask associé |
---|---|---|
A | 0 |
/8 |
B | 10 |
/16 |
C | 110 |
/24 |
D | 1110 |
/32 |
La colonne “premiers bits de l’adresse” correspond au début de l’adresse IP une fois convertie en binaire. Par exemple, une adresse commençant par “0” fera obligatoirement partie de la classe A. En IPv4, les netmasks ne correspondant pas à ces classes sont dits “VLSM”, c’est-à-dire de longueur variable.
Les netmasks en notation longue
Les netmasks en notation longue sont encore utilisés dans certains logiciels, il est donc indispensable de les connaître. Toutefois, la première notation que je vous ai montrée est de plus en plus utilisée, elle se nomme CIDR. En notation longue, un netmask aura la même forme qu’une adresse IP : A.B.C.D
. Pour passer de la notation CIDR à celle-là, il suffit d’écrire tous les bits masqués avec un 1 et de compléter le reste de l’adresse avec des 0.
Pour un /20
on écrira : 1111 1111.1111 1111.1111 0000.0000 0000
ce qui donne 255.255.240.0
. Pour passer de la notation longue à la CIDR, il suffit de convertir chaque nombre en binaire, puis de compter le nombre de 1.
Adresses réservées et catégories d’adresse
Voici quelques adresses IP qui ont une utilisation spéciale définie par les organismes de normalisation :
Description | Adresse(s) |
---|---|
Adresses signifiant “ce réseau”, la signification peut changer suivant l’application | 0.0.0.0/8 |
Adresses locales (ou adresses privées) : ces adresses ne se retrouveront jamais sur Internet. Elles sont utilisées pour les réseaux locaux (LAN). | 10.0.0.0/8 , 172.16.0.0/12 , 192.168.0.0/16 |
Boucle locale, désigne la machine sur laquelle on se trouve | 127.0.0.0/8 |
Adresses multicasts | 224.0.0.0/4 |
Adresses auto-configurées (APIPA) | 169.254.0.0/16 |
Le reste des adresses, hormis celles réservées1, sont utilisées pour l’adressage Internet.
L’adresse IPv6
Nous avons vu que l’IPv6 offrait un espace d’adressage beaucoup plus important, en effet, les adresses sont codées sur 128 bits (16 octets) ce qui donne 2128 adresses IP disponibles. À cause de la pénurie d’adresse IPv4, il est probable que l’utilisation de l’IPv6 s’accélère au cours des prochaines années.
Une adresse IPv6 se représente sous la forme de huit groupes de quatre caractères hexadécimaux séparés par deux points (:
). Exemple : 2001:0db8:0000:0000:0000:00f0:0000:0001/64
. Cette adresse peut être simplifiée en retirant les 0
au début d’un groupe : 2001:db8:0:0:0:f0:0:1/64
. Par contre, il doit au moins rester un 0
dans le groupe. Une autre règle permet de remplacer une chaine de zéros successifs (0:0:...:0
) par deux fois deux points ::
. On ne peut procéder à cette étape qu’une seule fois : 2001:db8::f0:0:1/64
.
Avec l’IPv6, la notion de netmask est inchangée, mis à part qu’il est toujours écrit en notation CIDR. Par ailleurs, pour déterminer l’adresse de début et celle de fin en IPv6, on évitera de réécrire toute l’adresse en binaire. On se contentera, suivant les cas, de déterminer quelle partie est à convertir en binaire, d’effectuer la transformation et de l’intégrer après dans la notation “humaine” (celle détaillée plus haut).
Catégories d’adresse IPv6
Dès le début, l’espace d’adressage IPv6 a été découpé en bloc (il ne faut pas confondre les blocs avec les sous-réseaux) et seulement quelques blocs ont une réelle fonction aujourd’hui, voici un tableau présentant les principaux blocs :
Description | Bloc associé |
---|---|
La boucle locale | ::1/128 |
Adresses unicasts routables sur Internet | 2000::/3 |
Adresse de liaison locale, ces adresses ne sont pas routables | fe80::/10 |
Adresse de site local, ces adresses routables sont utilisées dans les LAN | fc00::/7 |
Adresses multicasts | ff00::/8 |
Les blocs présentés dans le tableau sont tous documentés et utilisables aujourd’hui.
Gestion des adresses IP sous Linux
La gestion des adresses IP se fait à l’aide de la commande ifconfig
. Cette dernière permet d’afficher toutes les interfaces réseaux de la machine. Les interfaces réseaux commençant par eth
sont des ports Ethernet. Voici un tableau récapitulatif des commandes :
Commande | Action |
---|---|
ifconfig |
Liste toutes les interfaces |
ifconfig eth0 192.168.1.20/24 |
Modifie l’adresse IP de l’interface eth0 |
ifconfig eth0 up |
Active l’interface eth0 |
ifconfig eth0 down |
Désactive l’interface eth0 |