Skip to main content

Couche internet (protocoles IPv4 et IPv6)

IP est le protocole de base d'internet et globalement le seul protocole de la couche internet. Il a cependant deux versions majeures, la version 4 et la version 6.

IPv4 vs IPv6

La version 4 d'IP est celle qui est la plus répandue sur Internet, mais qui est toutefois limitée par le nombre d'adresses possibles, car les adresses sont codées sur 32 bits contre 128 bits pour l'IPv6.

Cela signifie que l'IPv4 à moins de cinq milliards d'adresses possibles. IPv6 a comparativement plus de 7x1028 fois plus d'adresses que l'IPv4.

Aujourd'hui toutes les adresses IPv4 ont été assignées, nous allons voir quels stratagèmes ont été utilisés pour faire en sorte que ce ne soit pas un trop gros problème. Mais il est bon de noter que le futur se trouve dans l'IPv6 et qu'il est donc très important de supporter l'IPv6.

CIDR vs classes

Historiquement, les adresses étaient définies suivant des "classes" allant de A à E. La classe A est équivalente à un masque /8, la classe B à un masque /16, la classe C à un masque /24, la classe D pour le multicast et la classe E pour une utilisation future.

Aujourd'hui, on utilise plus tôt le CIDR (Classless InterDomain Routing) qui consiste à préciser le masque avec un /<nombre> à la fin d'une IP (comme on a vu plus tôt). Le CIDR a l'avantage de permettre une configuration des réseaux plus précise et d'être plus simple à comprendre.

Types d'adresses

Il existe plusieurs types d'adresses :

  • Adresses publiques qui sont celles utilisées sur Internet et sont achetées à ou allouée par l'IANA (Internet Assigned Number Authority).
  • Adresse loopback est l'adresse désignant la machine courante, cela permet ainsi d'accéder à un serveur local. Cette adresse est 127.0.0.1 (IPv4) ou ::1 (IPv6) ou localhost (qui redirige vers l'adresse IPv4 ou IPv6 dans le fichier d'hôtes).
  • Adresses privées utilisées sur des réseaux locaux (LAN), elles ne sont pas propagées sur internet et en sont complètement isolées.
  • Adresse de réseau comme vu plus tôt (préfixe + le reste des bits à 0)
  • Adresse de broadcast comme vu plus tôt également (préfixe + le reste des bits à 1)

Paquet IPv4

Un paquet IPv4 contient diverses informations :

  • La version (IPv4 dans ce cas)
  • La longueur d'entête
  • Le "type of service" qui indique la priorité du paquet, cette valeur est généralement ignorée
  • Le datagram length qui indique la longueur totale du paquet sur 16 bits
  • L'identifiant du paquet
  • Des "flags" indiquant si le paquet est fragmenté ou non
  • Le fragmentation offset qui indique le déplacement par rapport au paquet initial
  • Le TTL (time to live) qui est le temps de survie d'un paquet dans le réseau
  • Le UP-protocol qui indique le destinataire des données (6 pour TCP, 17 pour UDP)
  • Le Checksum qui permet de détecter une erreur sur l'entête du paquet, redondant par rapport à TCP
  • L'adresse IP source
  • L'adresse IP destination
  • Les options à ajouter à l'information
  • Les données de la couche transport

Fragmentation IPv4

Comme le MSS (Maximum Segment Size) indiquait la taille maximum d'un TPDU de la couche transport, le MTU (Maximum Transert Unit) indique la taille maximale supportée d'un paquet IP, cette taille est imposée par le réseau, donc plusieurs réseaux peuvent avoir des tailles maximales différentes.

Donc si un paquet de longueur 1500 arrive dans un réseau avec un MTU de 600, il va falloir diviser le paquet courant en autres paquets afin de pouvoir le transmettre.

Ainsi le flag permet de savoir si le paquet est fragmenté, l'identifiant permet d'identifier les paquets fragments ensemble. Le fragmentation offset donne l'ordre des fragments. Le dernier fragment a le flag à zéro ce qui indique qu'il n'y a plus de fragments qui suivent.

Eviter les boucles

Pour éviter que des paquets ne bouclent dans le réseau, on utilise la valeur TTL qui indique le temps de vie du paquet en routeur parcouru. Ainsi, la valeur est décrémentée par chaque routeur et si un paquet arrive avec un TTL de un ou inférieur, le paquet est jeté.

ICMPv4

ICMP (Internet Control Message Protocol) permet de "diagnostiquer" certains problèmes réseau via PING et TRACEROUTE.

Ping permet de savoir si une machine est capable de recevoir ou répondre au niveau IP, très utile pour vérifier les connexions réseaux, mais souvent limité par les firewalls pour empêcher de pouvoir "tester" les machines du réseau.

Traceroute permet de déterminer le chemin d'une source vers une destination. Cela envoie des paquets IP avec un TTL croissant en partant de 1, qui va donc être rejeté par le routeur qui va ainsi renvoyer un message ICMP time-exceeded avec un identifiant du routeur, ce qui permet ainsi de connaitre tous les intermédiaires.

Il est parfois même possible, en utilisant certains sites internet, de retrouver les localisations des routeurs par lequel la requête est passée.

Paquet IPv6

IPv6 comme dit précédemment a pour but d'augmenter le nombre d'adresses disponible, améliorer les performances, intégrer de la sécurité, supporter les nouvelles applications en temps réel, facilité la configuration.

Un paquet IPv6 est composé de :

  • La version (ici IPv6)
  • Le Traffic Class permettant de marquer les paquets pour obtenir une qualité de service particulière
  • Flow label permettant d'étiqueter un paquet afin de grouper des paquets faisant partie d'un "flow" commun tel qu'un live vidéo par exemple
  • Le payload length indiquant la taille des données
  • Le next header qui mentionne une option à traiter ou pour indiquer la couche supérieure à recevoir des données (UDP ou TCP)
  • Le hop limit qui indique le total de routeurs que le paquet peut traverser, lorsque cette valeur arrive à 0 le paquet est jeté. Similaire au TTL en IPv4
  • L'adresse IP source
  • L'adresse IP destination
  • Les données de la couche de transport

Différence avec l'IPv4

Il y a donc certaines différences entre les paquets IPv6 et les paquets IPv4 :

  • Le checksum n'existe plus, car redondant par rapport à la couche de transport ou d'accès réseau. Cela permet d'améliorer les performances, parce que les routeurs n'ont plus besoin de vérifier cette valeur
  • Disparition des options de taille variable, ces derniers peuvent être placés dans un entête particulière
  • Disparition de la fragmentation au niveau des routeurs, IPv6 oblige un MTU de 1280 octets, les paquets peuvent donc être fragmentés. Cela est un grand avantage pour les routeurs qui n'ont plus besoin de fragmenter les paquets, c'est ainsi un gain de performance.

Types d'adresses IPv6

  • Adresses locale-lien est attachée à l'interface et a une portée limitée au LAN, et ne traverse pas les routeurs. Ce sont des adresses de type FE80::/10
  • Adresses locale-unique sont des adresses attachées à une interface qui peuvent traverser des routeurs mais non utilisable sur internet. Elles sont de type FC00::/7
  • Adresses globale-unique sont des adresses globales, uniques sur Internet et attribuée par le service d'accès Internet. Elles sont de type 2000::/3
  • Adresses multicast désignant un groupe de receveurs. Elles sont de type FF00::/8
  • Adresses anycast permettant d'interagir avec n'importe quelle adresse d'un groupe donné (le plus proche selon la politique de routage)

En IPv6, une machine a donc plusieurs adresses, par exemple une adresse globale-unique, une adresse locale-lien et une adresse IPv4 globale.

ICMPv6

ICMPv6 est une évolution d'ICMP pour l'IPv6. Ce protocole permet plusieurs choses :

  • Elle permet une gestion des groupes multicast (IGMP en IPv4),
  • Retrouver une adresse physique (MAC) en fonction d'une IP (ARP en IPv4),
  • Neighbor discovery qui permet de déterminer les adresses local-lien des voisins, routeurs, etc afin de savoir si un voisin est accessible ou non

Elle permet aussi la signalisation des erreurs (destination unreachable, packet too big, time exceeded, parameter problem) ou d'autres messages d'information (ping, gestion de groupes multicast, neighbor discovery).

Neighbor Discovery Protocol (ND)

Le ND est un protocole utilisé pour découvrir les voisins et réaliser de l'auto-configuration des interfaces réseaux (construire l'adresse locale-lien de façon à ce qu'elle soit unique sur le LAN).

Contrairement à DHCP (Dynamic Host Configuration Protocol), qui sert aussi à configurer les hôtes, les adresses ne sont pas distribuées, mais construites. Il est cependant aussi possible de distribuer des adresses en IPv6 en utilisant DHCPv6.

ND prévoit 5 types de messages :

  • Sollicitation de routeur, vérification d'un routeur
  • Réponse de routeur, un routeur annonce sa présence
  • Sollicitation de voisin, vérification d'un voisin
  • Réponse de voisin, un voisin indique sa présence
  • Redirection, redirige vers un autre routeur

Neighbor solicitation/adverisement permet d'obtenir l'adresse physique (MAC) d'un voisin et de vérifier s'il est accessible.