La couche transport TCP/IP
Transmission Control Protocol (TCP)
TCP, ou Transmission Control Protocol, est l'un des deux principaux protocoles opérant au niveau de la couche de transport du modèle TCP/IP, l'autre étant UDP (User Datagram Protocol). TCP joue un rôle essentiel dans la transmission fiable des données entre deux hôtes sur un réseau, en s'assurant que l'information envoyée par l'émetteur parvienne correctement au destinataire, dans le bon ordre et sans erreurs.
Le fonctionnement de TCP repose sur le découpage des données en paquets appelés segments. Chaque segment est numéroté et assorti d'un checksum, une valeur calculée permettant de vérifier l'intégrité des données à l'arrivée. Ces segments sont ensuite enveloppés dans une enveloppe TCP, contenant toutes les informations nécessaires à la gestion de la connexion, puis placés à l'intérieur d'une enveloppe IP (Internet Protocol). Cette dernière contient les adresses IP de l'expéditeur et du destinataire, assurant ainsi que le segment parvienne à la bonne machine sur le réseau. Ainsi, le bloc que TCP transmet à IP est constitué d'une entête TCP détaillée et des données issues de la couche application.
TCP se distingue par sa nature orientée connexion, ce qui signifie qu'il établit une session fiable entre deux machines avant tout échange de données. Contrairement à UDP, étant connectionless et minimaliste, TCP assure la fiabilité, la correction d'erreurs et le contrôle de flux, tout en garantissant que les données sont livrées exactement comme elles ont été envoyées. Pour ce faire, TCP utilise un mécanisme appelé handshake en trois phases, ou three-way handshake, qui initialise et synchronise les numéros de séquence entre les deux hôtes.
Lorsqu'une machine A souhaite établir une connexion, elle envoie un segment avec le drapeau SYN (Synchronize sequence numbers) pour indiquer le début d'une session et proposer des numéros de séquence. La machine B répond alors avec un segment où les drapeaux SYN et ACK (Acknowledgement) sont positionnés, confirmant la réception et synchronisant ses propres numéros de séquence. La machine A termine le processus en envoyant un dernier segment avec le flag ACK, marquant la fin de l'établissement de la connexion. Une fois ce handshake terminé, les données peuvent circuler en toute fiabilité entre les deux hôtes.
TCP utilise également un mécanisme de confirmation positive avec retransmission (Positive Acknowledgement with Re-transmission, PAR) pour garantir l'intégrité des données. Chaque segment envoyé doit être confirmé par le destinataire : si la confirmation n'arrive pas dans un délai imparti, le segment est automatiquement retransmis. Ce processus assure que tous les paquets perdus ou corrompus sont renvoyés jusqu'à ce que leur réception correcte soit confirmée.
Enfin, TCP prévoit également la fermeture de la connexion de manière fiable grâce à une procédure similaire en trois étapes, utilisant le drapeau FIN (Finish). Le FIN indique que l'émetteur n'a plus de données à envoyer. Le destinataire accuse réception et, après que toutes les données restantes ont été traitées, la connexion est complètement terminée. Cette approche garantit que toutes les données sont transmises correctement et que la session est fermée de façon ordonnée, sans risque de perte d'informations ou de corruption.
En résumé, TCP constitue la pierre angulaire de la couche transport du modèle TCP/IP, combinant découpage des données, numérotation des segments, contrôle d'intégrité, gestion de la connexion et mécanismes de fiabilité pour assurer un transfert de données robuste et précis, parfaitement adapté aux applications nécessitant une communication fiable et ordonnée, comme le web, le courrier électronique et le transfert de fichiers.
Les différents champs de l'entête TCP
L'entête d'un segment TCP se compose de plusieurs champs essentiels, chacun ayant une fonction spécifique pour assurer la transmission fiable, ordonnée et sécurisée des données entre deux machines. Ces champs sont soigneusement définis afin de permettre au protocole TCP de gérer les connexions, de détecter les erreurs, d'indiquer la priorité et de synchroniser les flux de données :
| Champ | Taille | Description | |
|---|---|---|---|
| Source Port | 16 bits | Ce champ identifie le port de l'émetteur, c'est-à-dire l'application ou le processus envoyant le segment sur la machine source. Il permet au destinataire de savoir à quel service ou application renvoyer les éventuelles réponses. | |
| Destination Port | 16 bits | Ce champ indique le port de réception, correspondant à l'application ou au service sur l'ordinateur destinataire. Grâce à cette information, TCP peut diriger le segment vers la bonne application sur la machine de destination. | |
| Sequence Number | 32 bits | Ce nombre sert à numéroter les octets du flux de données, de manière à identifier précisément la position du premier octet de données d'un segment donné dans l'ensemble du flot de données initialement envoyé. Cela permet de reconstituer l'ordre correct des données, même si certains segments arrivent dans le désordre. | |
| Acknowledgment Number | 32 bits | Ce champ est utilisé pour accuser réception des données reçues. Il contient le numéro du prochain octet attendu par le destinataire et joue un rôle clé dans le mécanisme de confirmation positive avec retransmission (PAR), garantissant que toutes les données sont bien reçues. | |
| Offset (Data Offset) | 32 bits | Ce champ indique le déplacement en mots de 32 bits entre le début de l'entête et le début des données applicatives. Il permet au protocole de savoir où commence réellement la partie « données » du segment. La valeur par défaut est généralement 5, ce qui correspond à un en-tête TCP de 20 octets sans options supplémentaires. | |
| Flags (drapeaux de contrôle) | Variable | Ces bits spéciaux régulent le comportement de la connexion TCP et signalent des informations importantes : | |
| Bits | Description | ||
| URG (Urgent Pointer) | Indique que certaines données contenues dans le segment sont urgentes et doivent être traitées immédiatement par la couche application. | ||
| ACK (Acknowledgment Field) | Active le champ d'accusé de réception pour signaler que le segment contient un numéro de séquence valide à confirmer. | ||
| PSH (Push Flag) | Force la transmission immédiate des données à la couche application, évitant qu'elles ne soient mises en mémoire tampon. | ||
| RST (Reset Flag) | Utilisé pour forcer la fermeture d'une connexion en cas d'erreur critique ou irrécupérable, réinitialisant le flux de données. | ||
| SYN (Synchronize Flag) | Sert à synchroniser le démarrage d'une connexion lors du three-way handshake, permettant aux deux hôtes d'échanger leurs numéros de séquence initiaux. | ||
| FIN (Finish Flag) | Indique que l'émetteur n'a plus de données à envoyer et souhaite terminer la connexion de manière ordonnée. | ||
| Window | 16 bits | Ce champ annonce la taille de la fenêtre, c'est-à-dire la quantité maximale de données que le destinataire peut accepter sans envoyer d'accusé de réception. Il permet un contrôle de flux efficace, garantissant que le serveur ou client récepteur n'est pas saturé. | |
| Checksum | 16 bits | Ce champ contient un code de contrôle d'erreur, calculé comme le « complément à un » du total des mots de 16 bits de l'en-tête et des données. Il permet de détecter toute corruption de segment pendant le transport sur le réseau. | |
| Urgent Pointer | 16 bits | Si le drapeau URG est activé, ce champ indique la position finale des données urgentes dans le segment, permettant à l'application de traiter rapidement les informations prioritaires. | |
| Options | Longueur variable | Ce champ est utilisé pour ajouter des fonctionnalités supplémentaires à TCP. La principale option est le MSS (Maximum Segment Size), qui spécifie la taille maximale des données qu'un segment peut contenir, afin d'optimiser la fragmentation et la transmission. | |
| Padding | Longueur variable | Le champ de bourrage, ou padding, est généralement rempli de zéros pour garantir que l'en-tête TCP est aligné sur un multiple de 32 bits. Cela facilite le traitement des segments par les routeurs et systèmes récepteurs, améliorant l'efficacité et la compatibilité matérielle. | |
Chaque champ de l'entête TCP joue un rôle crucial pour que la communication soit fiable, ordonnée et efficace, en permettant de gérer les connexions, de contrôler le flux, d'assurer l'intégrité des données et de gérer la priorité des informations transmises entre deux machines sur un réseau TCP/IP.
User Datagram Protocol (UDP)
Le User Datagram Protocol, plus communément appelé UDP, est un protocole de la couche transport du modèle TCP/IP offrant aux applications un accès direct et simplifié à un service de transmission de datagrammes. Contrairement à TCP, UDP ne met pas en place de mécanisme de connexion préalable entre les machines communicantes, ce qui en fait un protocole dit connectionless, c'est-à-dire sans établissement de session formelle avant l'échange de données.
UDP permet ainsi l'envoi rapide de messages appelés datagrammes, sans garantie de livraison, d'ordre ou d'unicité. Cette absence de contrôle rend le protocole extrêmement léger et rapide, car il n'introduit pas de surcharge liée à des mécanismes de contrôle complexes comme les accusés de réception, la retransmission ou la gestion de congestion. En conséquence, UDP est particulièrement adapté aux communications dites "one-to-many", telles que les transmissions en broadcast (diffusion à tous les hôtes d'un réseau) ou en multicast (diffusion à un groupe spécifique de destinataires).
Cependant, cette simplicité a un coût : la livraison des datagrammes UDP n'est pas garantie. Les paquets peuvent être perdus, dupliqués ou reçus dans un ordre différent de celui de leur émission. Par conséquent, les applications qui utilisent UDP doivent implémenter elles-mêmes les mécanismes de fiabilité si nécessaire, comme la vérification de l'intégrité des données, la détection des pertes ou la gestion de l'ordre des messages.
UDP est donc privilégié dans des situations où la rapidité prime sur la fiabilité, ou lorsque les applications peuvent tolérer une certaine perte de données. C'est notamment le cas des flux multimédias en temps réel (audio ou vidéo), des jeux en ligne ou encore des protocoles de découverte réseau.
Un exemple classique d'utilisation de UDP est la résolution de noms de domaine (DNS), qui s'effectue généralement via le port 53. Dans ce contexte, la rapidité de réponse est essentielle et les requêtes sont suffisamment courtes pour limiter les risques liés à l'absence de retransmission. Si une requête échoue, il est souvent plus efficace de la renvoyer que de maintenir une connexion persistante.
En résumé, UDP constitue un protocole simple, efficace et rapide, idéal pour les applications nécessitant une transmission légère et à faible latence, mais qui doivent être capables de gérer elles-mêmes les éventuelles pertes ou erreurs de communication.
Comme le protocole UDP répond à une logique de simplicité et de moindre effort, en étant connectionless, sans mécanisme intégré de correction d'erreurs ni de détection fiable de perte de paquets, il présente certaines faiblesses du point de vue de la sécurité. Contrairement à TCP, UDP ne met en place ni établissement de connexion préalable, ni vérification systématique de la réception des données, ni numérotation des segments permettant de contrôler l'ordre et l'intégrité des échanges. Cette absence de contrôles rend le protocole plus léger et rapide, mais également plus vulnérable à certaines formes de manipulation.
En particulier, il est généralement plus aisé pour un attaquant de modifier, falsifier ou injecter des paquets UDP dans un flux de communication que dans un échange TCP. L'une des raisons principales est l'absence de numéros de séquence et de mécanisme de handshake (échange de salutation) qui, dans TCP, permettent de valider et de synchroniser les communications entre deux hôtes. Sans ces éléments, UDP ne dispose d'aucun moyen intrinsèque de vérifier l'authenticité de l'expéditeur ni la cohérence du flux de données reçu.
De plus, il est relativement simple de falsifier l'adresse IP source dans un datagramme UDP, pratique connue sous le nom de spoofing IP. Étant donné que cette adresse ne fait l'objet d'aucune vérification stricte au niveau du protocole UDP, elle ne doit jamais être utilisée comme mécanisme d'authentification fiable. Un attaquant peut ainsi envoyer des paquets en se faisant passer pour une autre machine, ce qui peut être exploité dans divers types d'attaques, comme les attaques par amplification ou les tentatives de dissimulation d'identité.
En résumé, bien que UDP soit extrêmement performant et adapté à de nombreux usages nécessitant rapidité et simplicité, son absence de mécanismes de contrôle intégrés en fait un protocole qui doit être utilisé avec précaution. Les applications reposant sur UDP doivent impérativement implémenter leurs propres mécanismes de sécurité et de validation, afin de compenser ces limitations et de garantir l'intégrité et l'authenticité des communications.
Internet Protocol (IP)
Intéressons-nous maintenant, au sein de l'architecture TCP/IP, à la couche IP, c'est-à-dire au Internet Protocol, constituant l'un des éléments fondamentaux permettant le fonctionnement des réseaux modernes. Ce protocole définit les règles que doit respecter chaque machine afin d'être identifiée de manière unique sur un réseau local TCP/IP ou sur l'Internet dans son ensemble. Grâce à IP, chaque équipement connecté dispose d'une adresse IP, permettant de l'identifier et de localiser sa position logique dans le réseau, rendant possible l'acheminement des données entre émetteurs et destinataires.
Le protocole IP est de type connectionless, ce qui signifie qu'il n'établit pas de connexion préalable entre les machines avant l'envoi des données. Contrairement aux protocoles orientés connexion, comme TCP, IP ne met en place aucun échange de contrôle, ni handshake, pour vérifier que le système distant est prêt à recevoir les informations. Les données sont envoyées directement sous forme de datagrammes indépendants, sans garantie de livraison, d'ordre ou d'intégrité. Cette approche permet une grande flexibilité et une meilleure performance, mais implique également que les mécanismes de fiabilité doivent être pris en charge par d'autres couches du modèle TCP/IP.
En effet, IP ne propose aucun mécanisme de détection d'erreur avancé, ni de correction ou de récupération des données perdues. Si un datagramme est corrompu, perdu ou arrive dans le désordre, le protocole IP ne prend aucune mesure pour le retransmettre ou le corriger. Cette responsabilité est généralement déléguée à des protocoles de niveau supérieur, comme TCP, assurant la fiabilité de la transmission.
Les principales fonctions assurées par le protocole IP sont multiples et essentielles au bon fonctionnement des réseaux :
- La définition des datagrammes : IP spécifie la structure des paquets de données appelés datagrammes, incluant les en-têtes contenant les informations nécessaires à leur acheminement.
- La définition du schéma d'adressage Internet : IP établit le système d'adresses permettant d'identifier de manière unique chaque machine connectée, qu'il s'agisse d'une adresse IPv4 ou IPv6.
- Le routage des datagrammes vers les hôtes distants : IP permet de déterminer le chemin que doivent suivre les paquets à travers différents réseaux et routeurs pour atteindre leur destination finale.
- La fragmentation et le réassemblage des datagrammes : lorsque les paquets sont trop volumineux pour être transmis sur un réseau donné, IP les fragmente en plusieurs morceaux, qui seront ensuite réassemblés à destination pour reformer le message original.
Ainsi, le protocole IP constitue le socle de communication des réseaux TCP/IP, assurant le transport des données d'un point à un autre, sans se préoccuper de leur fiabilité. Sa simplicité et sa robustesse en font un élément clé de l'Internet, capable de fonctionner sur des infrastructures très diverses tout en garantissant l'interconnexion globale des systèmes informatiques.
Datagramme
Les protocoles de la suite TCP/IP ont été initialement conçus pour fonctionner sur le réseau ARPANET, reposant sur une architecture de type réseau à commutation de paquets (packet switching network). Dans ce modèle, les données ne sont pas transmises sous forme de flux continu, mais sont découpées en blocs indépendants appelés paquets. Chaque paquet contient non seulement les données utiles, mais également les informations nécessaires pour être acheminé correctement jusqu'à sa destination. Une analogie classique consiste à comparer ce mécanisme à une lettre envoyée par la poste : le contenu correspond aux données, tandis que l'adresse inscrite sur l'enveloppe permet son acheminement.
Dans le cadre du protocole IP, le format de paquet utilisé est appelé datagramme. Un datagramme IP est constitué d'une entête suivie des données à transporter. L'en-tête standard est composée de cinq mots de 32 bits, soit 20 octets, mais elle peut être étendue jusqu'à six mots ou plus lorsque des options sont utilisées. Cette structure permet d'inclure toutes les informations nécessaires au routage, au contrôle et à la gestion des paquets sur le réseau.
Les différents champs de l'en-tête IP sont les suivants :
| Champ | Taille | Description |
|---|---|---|
| Version | 4 bits | Ce champ indique la version du protocole IP utilisée. Dans la majorité des cas actuels, il s'agit de la version 4 (IPv4), bien que la version 6 (IPv6) tende à se généraliser. |
| Internet Header Length (IHL) | 4 bits | Ce champ précise la longueur de l'entête en mots de 32 bits. Sa valeur varie de 5 à 15, la valeur 5 correspondant à une entête standard sans options supplémentaires. |
| Type de service | 8 bits | Ce champ permet de définir la priorité et la qualité de service souhaitée pour le paquet. Il peut indiquer des préférences telles qu'un délai réduit, un débit élevé, une fiabilité accrue ou encore un coût minimal, selon les besoins de l'application. |
| Longueur totale | 16 bits | Ce champ indique la taille totale du datagramme en octets, en incluant l'en-tête et les données. Étant codé sur 16 bits, il limite la taille maximale d'un paquet IP à 65 535 octets. |
| Identification | 16 bits | Ce champ contient une valeur unique permettant d'identifier les fragments d'un même datagramme. Il est essentiel lors du processus de fragmentation et de réassemblage des paquets. |
| Flags | 3 bits | Ces bits contrôlent le mécanisme de fragmentation : Le bit MF (More Fragments) indique s'il reste d'autres fragments à suivre. Le bit DF (Don't Fragment) empêche la fragmentation du paquet. Le troisième bit n'est pas utilisé. |
| Fragment Offset | 13 bits | Ce champ précise la position du fragment dans le datagramme original, permettant ainsi de reconstituer correctement les données lors du réassemblage. |
| TTL (Time To Live) | 8 bits | Le TTL représente la durée de vie maximale d'un paquet sur le réseau. À chaque passage par un routeur, sa valeur est décrémentée. Si elle atteint zéro, le paquet est détruit, évitant ainsi les boucles infinies. Les valeurs courantes se situent entre 40 et 64. |
| Protocole | 8 bits | Ce champ identifie le protocole de la couche supérieure auquel les données doivent être remises. Par exemple : 17 pour UDP 6 pour TCP 1 pour ICMP 8 pour EGP 89 pour OSPF |
| Checksum | 16 bits | Ce champ permet de vérifier l'intégrité de l'en-tête IP. Il est calculé à partir d'un complément à un des mots de 16 bits de l'entête. |
| Adresse IP source | 32 bits | Indique l'adresse de la machine émettrice du datagramme. |
| Adresse IP destination | 32 bits | Indique l'adresse de la machine destinataire du datagramme. |
| Options | Longueur variable | Ce champ facultatif permet d'ajouter des informations supplémentaires, comme des demandes de routage spécifique ou des contrôles particuliers. |
| Padding | Longueur variable | Ce champ est utilisé pour compléter l'entête avec des zéros afin d'assurer un alignement sur un multiple de 32 bits, facilitant le traitement par les équipements réseau. |
Une fois le datagramme construit, le protocole IP assure sa transmission en examinant l'adresse de destination contenue dans l'en-tête. Si cette adresse correspond à un hôte du réseau local, le paquet est remis directement à son destinataire. Dans le cas contraire, il est transmis à un gateway (ou passerelle), qui se charge de l'acheminer vers un autre réseau. Le choix du chemin emprunté par le paquet est appelé routage, et repose sur des tables et des algorithmes spécifiques.
On parle souvent de routeurs IP pour désigner ces passerelles, car elles utilisent le protocole IP pour transférer les paquets entre différents réseaux. Dans la terminologie stricte du modèle TCP/IP, il existe essentiellement deux types de dispositifs : les hosts, qui sont les machines finales (ordinateurs, serveurs), et les gateways, qui assurent le transport des paquets entre réseaux distincts. Les hosts consomment ou produisent les données, tandis que les gateways jouent un rôle clé dans leur acheminement à travers l'infrastructure globale d'Internet.
Sécurité
Au niveau de la couche IP (Internet Protocol), il n'existe pas de mécanisme de sécurité avancé garantissant la fiabilité ou l'intégrité de la transmission des datagrammes. En effet, ce protocole fonctionne selon un modèle non orienté connexion, sans notion de circuit virtuel entre l'émetteur et le récepteur. Chaque paquet est traité de manière totalement indépendante, ce qui signifie qu'aucune relation persistante n'est maintenue entre les différents datagrammes envoyés.
Dans ce contexte, il n'existe aucune garantie que tous les paquets atteindront leur destination, ni qu'ils arriveront dans un ordre cohérent. Les paquets peuvent être perdus, dupliqués ou arriver dans un ordre différent de celui dans lequel ils ont été émis, sans que le protocole IP ne s'en préoccupe. Cette responsabilité est généralement déléguée à des protocoles de couches supérieures, comme TCP, assurant la gestion de la retransmission et du réordonnancement des données.
Par ailleurs, IP ne met en ouvre aucun contrôle de validité global des paquets au niveau de leur contenu. Le mécanisme de vérification présent dans l'entête IP, appelé checksum, ne porte que sur l'en-tête lui-même et ne couvre pas les données transportées. Ainsi, si le contenu du paquet est corrompu après la vérification de l'en-tête, le protocole IP ne dispose d'aucun moyen pour détecter ou corriger cette altération.
Un autre point important concerne l'authentification de l'origine des paquets. Rien dans le protocole IP ne garantit qu'un paquet provient réellement de l'adresse source indiquée dans son en-tête. Il est donc relativement simple de falsifier l'adresse IP source, une technique connue sous le nom de spoofing. Cette faiblesse rend nécessaire l'utilisation de mécanismes de sécurité supplémentaires pour vérifier l'identité de l'expéditeur.
Pour pallier ces limitations, il est indispensable de recourir à des protocoles ou des mécanismes situés dans les couches supérieures du modèle OSI, tels que TLS, SSL ou encore des mécanismes d'authentification applicative. Ces couches permettent d'ajouter des fonctionnalités de chiffrement, d'authentification et d'intégrité des données, compensant ainsi les lacunes inhérentes au protocole IP.
En résumé, bien que la couche IP soit essentielle au fonctionnement des réseaux et à l'acheminement des données, elle reste volontairement simple et peu sécurisée, laissant aux couches supérieures le soin d'assurer la fiabilité, l'intégrité et l'authenticité des communications.
Maximum Transmission Unit (MTU)
Lors du processus de routage, lorsqu'un datagramme traverse différents réseaux physiques, il peut être nécessaire de procéder à sa fragmentation. Cette fragmentation est effectuée par un équipement intermédiaire, généralement une gateway ou un routeur, qui découpe le datagramme en plusieurs fragments de taille plus petite afin de respecter les contraintes du réseau de destination. Chaque fragment ainsi créé conserve le même format général que le datagramme original, incluant son en-tête IP, ce qui permet de les traiter indépendamment tout en garantissant leur réassemblage ultérieur.
Chaque type de réseau possède sa propre valeur de MTU (Maximum Transmission Unit). Cette valeur définit la taille maximale d'un paquet qu'un réseau peut transmettre sans fragmentation. Par exemple, certains réseaux à haut débit permettent des paquets plus volumineux, tandis que d'autres, plus anciens ou plus limités, imposent des tailles plus réduites. Lorsqu'un paquet dépasse la MTU d'un réseau intermédiaire, il doit être fragmenté avant d'être transmis, puis réassemblé à destination.
Les fragments d'un datagramme sont gérés à l'aide de plusieurs champs situés dans l'entête IP, notamment dans ce que l'on appelle le deuxième mot (word 2) de l'entête. Le champ Identification permet de regrouper tous les fragments appartenant à un même datagramme original, en leur attribuant un identifiant commun. Le champ Fragment Offset indique la position exacte du fragment dans le datagramme d'origine, permettant ainsi de reconstituer correctement les données dans le bon ordre lors du réassemblage.
Le champ Flags joue également un rôle essentiel dans la gestion de la fragmentation. Il contient notamment un bit appelé More Fragments (MF), indiquant si d'autres fragments suivent ou si le fragment actuel est le dernier de la séquence. Lorsque ce bit est désactivé, cela signifie que le fragment en question est le dernier, et que le réassemblage peut être considéré comme complet une fois tous les fragments précédents reçus.
La taille variable des paquets, et donc la fragmentation, dépend directement des caractéristiques du réseau traversé, notamment de son débit et de ses contraintes techniques. Sur des réseaux plus lents, l'envoi de paquets trop volumineux peut entraîner des délais importants, voire des pertes de performances dues à des retransmissions fréquentes. À l'inverse, des paquets plus petits permettent une meilleure adaptabilité, mais augmentent le nombre de paquets à traiter.
À titre indicatif, voici quelques valeurs de MTU observées sur différents types de réseaux ou technologies :
| Technologie/types de réseau | Description |
|---|---|
| Réseau Ethernet 10 Mbps | Environ 1536 octets, ce qui constitue une valeur courante pour les réseaux Ethernet classiques. |
| FDDI (Fiber Distributed Data Interface) | Jusqu'à 4096 octets, permettant une transmission de paquets plus volumineux sur fibre optique. |
| IEEE 802.3 | Environ 1492 octets, une valeur standard utilisée dans certaines implémentations Ethernet. |
| X.25 | Inférieur à 128 octets, ce qui reflète une technologie plus ancienne avec des contraintes importantes. |
| Token Ring | Environ 4000 octets, offrant une capacité de transmission relativement élevée pour ce type de réseau. |
Ainsi, la gestion du MTU et de la fragmentation est un élément clef du fonctionnement des réseaux IP, permettant d'adapter les transmissions aux contraintes physiques des différents supports tout en assurant l'acheminement correct des données à travers des infrastructures hétérogènes.
Internet Control Message Protocol (ICMP)
L'Internet Control Message Protocol (ICMP) est un protocole essentiel de la suite TCP/IP fonctionnant en étroite collaboration avec le protocole IP. Il utilise directement les datagrammes IP pour transporter ses messages de contrôle et de diagnostic entre les différents nouds d'un réseau. Contrairement aux protocoles de transport comme TCP ou UDP, ICMP n'est pas destiné à transporter des données applicatives, mais plutôt à fournir des informations de gestion, d'erreur et de supervision du réseau.
ICMP joue un rôle fondamental dans plusieurs mécanismes critiques du fonctionnement des réseaux :
- Le contrôle de flux : lorsqu'un récepteur est submergé par un émetteur trop rapide, il peut envoyer un message ICMP de type Source Quench afin de demander à l'émetteur de ralentir temporairement son rythme d'envoi.
- La détection de destinations inaccessibles : si un paquet ne peut pas être acheminé vers sa destination, un message Destination Unreachable est renvoyé à l'expéditeur.
- La redirection de routes : les routeurs peuvent informer une machine hôte qu'un chemin plus optimal existe pour atteindre une destination, via un message ICMP de type Redirect.
ICMP est également largement utilisé pour les outils de diagnostic réseau, car il permet d'évaluer la connectivité entre machines et de détecter les anomalies dans le routage. Chaque message ICMP est encapsulé dans un datagramme IP et circule entre les machines concernées. Lorsqu'un problème est détecté par une machine intermédiaire, celle-ci génère un message ICMP et le renvoie à l'adresse source du paquet ayant causé l'erreur.
Structure d'un message ICMP
Un message ICMP possède une entête relativement simple, codée sur 32 bits, répartie comme suit :
| Champ | Taille | Description |
|---|---|---|
| Type | 8 bits | Identifie la nature du message ICMP |
| Code | 8 bits | Précise la signification du type |
| Checksum | 16 bits | Permet la vérification d'intégrité |
Le champ Code varie en fonction du type et permet de détailler plus finement la cause ou la nature du message.
Principaux types de messages ICMP
Les types ICMP définis notamment par les RFC 792 et 1256 sont résumés dans le tableau suivant :
| Type | Nom du message |
|---|---|
| 0 | Echo Reply |
| 3 | Destination Unreachable |
| 4 | Source Quench |
| 5 | Redirect |
| 8 | Echo Request |
| 9 | Router Advertisement |
| 10 | Router Solicitation |
| 11 | Time Exceeded |
| 12 | Parameter Problem |
| 13 | Timestamp Request |
| 14 | Timestamp Reply |
| 15 | Information Request |
| 16 | Information Reply |
| 17 | Address Mask Request |
| 18 | Address Mask Reply |
Cas particulier : Ping (Echo Request / Reply)
Les messages ICMP les plus courants sont les types 8 (Echo Request) et 0 (Echo Reply), utilisés par l'outil bien connu ping. Le fonctionnement est simple :
| Étape | Description |
|---|---|
| 1 | Le client envoie un message ICMP de type 8 (Echo Request) |
| 2 | Le destinataire reçoit la requête |
| 3 | Le destinataire répond avec un message ICMP de type 0 (Echo Reply) |
| 4 | Les données initiales sont renvoyées à l'expéditeur |
Cet échange permet de vérifier la connectivité réseau et de mesurer les temps de réponse.
Détails du type 3 : Destination Unreachable
Lorsqu'un message ICMP de type 3 est émis, le champ Code permet de préciser la cause exacte de l'indisponibilité :
| Code | Signification |
|---|---|
| 0 | Network unreachable |
| 1 | Host unreachable |
| 2 | Protocol unreachable |
| 3 | Port unreachable |
| 4 | Fragmentation needed and DF bit set |
| 5 | Source route failed |
| 7 | Destination host unknown |
| 11 | Network unreachable for type of service |
| 12 | Host unreachable for type of service |
| 13 | Communication administratively prohibited |
| 14 | Host precedence violation |
| 15 | Precedence cut-off in effect |
Autres messages ICMP importants
Source Quench (Type 4)
Ce message est utilisé pour le contrôle de flux. Lorsqu'un routeur est surchargé, il peut demander à l'émetteur de ralentir temporairement l'envoi des paquets. Le message contient des informations similaires à Destination Unreachable, mais avec une finalité différente.
Redirect (Type 5)
| Code | Signification |
|---|---|
| 0 | Redirect datagram to network |
| 1 | Redirect datagram to host |
| 2 | Redirect for TOS + network |
| 3 | Redirect for TOS + host |
Ce mécanisme permet à un routeur d'indiquer une meilleure route pour atteindre une destination donnée.
Router Discovery (Types 9 et 10)
Le protocole de découverte des routeurs permet à une machine d'être informée automatiquement de la présence des routeurs sur un réseau local.
- Type 9 (Router Advertisement) : envoyé périodiquement par les routeurs
- Type 10 (Router Solicitation) : envoyé par un hôte pour demander des informations
Time Exceeded (Type 11)
Ce message est généré lorsque le champ TTL (Time To Live) d'un paquet atteint zéro. Cela signifie généralement qu'un paquet est resté trop longtemps dans le réseau, souvent à cause d'une boucle de routage.
Parameter Problem (Type 12)
Ce message indique qu'un paramètre invalide a été détecté dans l'en-tête IP, notamment dans le champ Options.
Timestamp (Types 13 et 14)
| Type | Fonction |
|---|---|
| 13 | Timestamp Request |
| 14 | Timestamp Reply |
Ces messages permettent de synchroniser l'horloge entre machines ou de collecter des données statistiques.
Information et Address Mask
| Type | Utilisation |
|---|---|
| 15-16 | Information Request/Reply |
| 17-18 | Address Mask Request/Reply |
Ces messages sont utilisés pour obtenir des informations réseau, notamment dans des environnements comme SLIP, ou pour découvrir le masque de sous-réseau.
Sécurité et usages détournés
ICMP peut également être utilisé de manière malveillante. Par exemple :
- Certains anciens systèmes pouvaient fermer toutes les connexions si un message ICMP de type Destination Unreachable était reçu.
- Des attaquants peuvent exploiter les messages Redirect pour rediriger le trafic vers une machine malveillante.
- ICMP est aussi utilisé dans certaines techniques de scan réseau ou d'attaque par déni de service (DoS).
Ainsi, bien qu'ICMP soit indispensable au bon fonctionnement et au diagnostic des réseaux, il doit être surveillé et contrôlé pour éviter les abus.
Adressage IP
Chaque interface réseau connectée à Internet est identifiée par une adresse IP (Internet Protocol) codée sur 32 bits dans le cas d'IPv4. Cette adresse constitue un identifiant unique permettant de localiser et de distinguer chaque machine sur un réseau TCP/IP. Une adresse IP est généralement représentée sous une forme lisible appelée notation décimale pointée, composée de quatre nombres compris entre 0 et 255, séparés par des points, comme par exemple :
194.78.19.132Cette représentation correspond en réalité à quatre octets (32 bits), et peut également être exprimée sous forme hexadécimale, comme dans l'exemple : 0x9A0B3CFF. Quelle que soit sa représentation, chaque adresse IP est conçue pour être unique au sein d'un réseau donné, garantissant ainsi l'identification sans ambiguïté de chaque périphérique connecté.
Structure d'une adresse IP
Une adresse IP est divisée en deux parties principales :
- Le numéro de réseau (Network ID)
- Le numéro d'hôte (Host ID)
Cette séparation permet de structurer l'adressage en distinguant la partie qui identifie le réseau global et celle qui identifie une machine spécifique au sein de ce réseau.
Caractéristiques générales
L'adresse IP doit être unique dans l'ensemble du réseau afin d'éviter tout conflit de communication. Si un ordinateur dispose de plusieurs interfaces réseau (par exemple Ethernet et Wi-Fi), il devra posséder une adresse IP distincte pour chacune d'elles.
Il est important de noter qu'une adresse IP ne contient aucune information géographique. Contrairement à certains systèmes de numérotation (comme les numéros de téléphone), il n'existe pas de découpage géographique explicite dans l'adressage IP. De même, il n'existe pas de hiérarchie stricte comparable à certains systèmes de communication comme la norme CCITT X.121.
Les classes d'adresses IP
Lorsqu'une organisation demande des adresses IP auprès d'une autorité (comme un registre Internet régional), il lui est demandé de préciser la classe de réseau souhaitée. Les adresses IPv4 sont historiquement divisées en plusieurs classes, dont les principales sont les classes A, B et C.
Tableau des classes IP
| Classe | Plage d'adresses | Répartition réseau/hôte | Nombre d'hôtes possibles |
|---|---|---|---|
| A | 1.0.0.0 à 126.255.255.255 | 1 octet réseau / 3 octets hôte | 16 777 214 |
| B | 128.0.0.0 à 191.255.255.255 | 2 octets réseau / 2 octets hôte | 65 534 |
| C | 192.0.0.0 à 223.255.255.255 | 3 octets réseau / 1 octet hôte | 254 |
Détails des classes
Classe A
Un réseau de classe A utilise le premier octet pour identifier le réseau, laissant 24 bits (3 octets) pour les hôtes. Cela permet un très grand nombre d'adresses, soit environ 16 777 216 combinaisons, dont 16 777 214 utilisables, car certaines adresses sont réservées.
- X.0.0.0 : désigne le réseau lui-même
- X.255.255.255 : désigne tous les hôtes du réseau (broadcast)
Ce type d'adressage est réservé aux très grands réseaux, comme ceux des grandes entreprises ou institutions mondiales.
Classe B
Les réseaux de classe B utilisent deux octets pour le réseau et deux octets pour les hôtes, ce qui offre une capacité intermédiaire.
- Nombre d'adresses : 256 × 256 = 65 536
- Adresses utilisables : 65 534
Cette classe est adaptée aux organisations de taille moyenne à grande.
Classe C
Les réseaux de classe C utilisent trois octets pour le réseau et un seul octet pour les hôtes.
- Nombre total d'adresses : 256
- Adresses utilisables : 254
Cette classe est généralement utilisée pour des petits réseaux locaux.
Répartition des classes selon les bits
Les classes d'adresses sont également identifiables par les bits de poids fort :
| Classe | Bits de début | Plage |
|---|---|---|
| A | 0xxxxxxx | 1 à 126 |
| B | 10xxxxxx | 128 à 191 |
| C | 110xxxxx | 192 à 223 |
Adresses spéciales : Loopback
Les adresses de la forme 127.0.0.x sont utilisées pour le loopback (bouclage local). Elles permettent de tester le fonctionnement du protocole IP sans utiliser de réseau physique.
Tableau des usages de 127.0.0.x
| Adresse | Utilisation |
|---|---|
| 127.0.0.1 | Adresse loopback standard (localhost) |
| 127.0.0.x | Toute adresse de la classe loopback |
Ces adresses sont utilisées pour :
- Tester la pile réseau localement
- Simuler une adresse IP sans interface réseau
- Éviter que les paquets quittent la machine
Remarques importantes
Le loopback (classe 127) est essentiel pour :
- Vérifier le bon fonctionnement de la couche IP
- Tester des applications réseau localement
- Effectuer des diagnostics sans dépendre d'un réseau externe
En résumé, l'adressage IP constitue un élément fondamental du réseau Internet, permettant d'identifier de manière unique chaque machine et d'organiser les communications à grande échelle, tout en introduisant une structure hiérarchique basée sur les classes d'adresses.
Adresses IP spéciales et règles avancées d'adressage
Dans le cadre du protocole Internet (IP), certaines adresses ne sont pas utilisées pour identifier directement une machine classique sur le réseau, mais remplissent des fonctions particulières essentielles au bon fonctionnement des communications. Ces adresses sont appelées adresses spéciales, et leur compréhension est fondamentale pour maîtriser les mécanismes de routage, de configuration et de diffusion des données.
Les principales adresses spéciales
Parmi ces adresses particulières, deux valeurs sont particulièrement importantes et fréquemment utilisées :
- 0.0.0.0 : Cette adresse possède plusieurs significations selon le contexte dans lequel elle est utilisée. Elle peut représenter :
- Une adresse IP dynamique non encore attribuée à une machine
- L'expression « cet hôte-ci sur ce réseau-ci »
- Une route par défaut dans une table de routage, permettant d'indiquer un chemin générique lorsque aucune route plus spécifique n'est connue
- 255.255.255.255 : Cette adresse est appelée adresse de broadcast limitée. Elle permet d'envoyer un paquet à tous les hôtes présents sur le réseau local. Contrairement à d'autres formes de broadcast, elle ne traverse pas les routeurs et reste confinée au segment réseau local.
Elle est donc omniprésente dans les mécanismes d'initialisation réseau, notamment lors de l'utilisation de protocoles comme DHCP.
Classes d'adresses étendues : D et E
Dans le système d'adressage IP classique (classful), les adresses dont la valeur du premier octet dépasse 223 sont réservées à des usages spécifiques :
- Classe D (224 à 239)
- Destinée aux communications multipoints (multicast)
- Permet d'envoyer un message à un groupe de machines plutôt qu'à une seule
- Utilisée notamment dans des architectures comme le MBONE (Multicast Backbone), un réseau expérimental dédié à la diffusion de flux multimédias
- Sert également pour certaines fonctions de supervision et de monitoring réseau, notamment par les routeurs
- Classe E (240 à 255)
- Réservée à des usages expérimentaux
- Très peu utilisée dans la pratique
- Non routée sur Internet public
Contrairement aux classes A, B et C, ces classes ne sont donc pas destinées à l'attribution classique d'adresses à des hôtes.
Contraintes sur les adresses IP des hôtes
Pour garantir un fonctionnement correct du réseau, certaines règles doivent impérativement être respectées :
- Une adresse IP d'hôte ne peut pas :
- contenir 0 dans sa partie hôte (cela désigne le réseau)
- contenir 255 dans sa partie hôte (cela désigne un broadcast)
- Une adresse ne peut pas commencer par :
- 0 (réservé)
- 127 (loopback)
- une valeur supérieure à 223 (classes spéciales)
Dans le jargon des réseaux, les utilisateurs qui ne respectent pas ces conventions sont parfois appelés avec humour des «martiens», car leurs configurations semblent "venir d'une autre planète".
Adresse réseau et adresse de diffusion
Une adresse IP est composée de deux parties : une partie réseau et une partie hôte. Selon la valeur de la partie hôte, l'adresse prend une signification particulière.
Adresse réseau
Lorsqu'une adresse IP possède tous les bits de la partie hôte à zéro, elle ne désigne pas une machine, mais le réseau lui-même.
Exemple :
- 193.75.199.0
→ représente l'ensemble du réseau 193.75.199
Ces adresses sont principalement utilisées :
- dans les tables de routage
- pour désigner des réseaux entiers
- comme adresse source dans certains cas spécifiques
Elles ne doivent jamais être utilisées comme adresse de destination.
Adresse de broadcast (diffusion dirigée)
À l'inverse, lorsqu'une adresse possède tous les bits hôte à 1, elle correspond à une adresse de diffusion (broadcast).
Exemple :
- 26.255.255.255
→ correspond à tous les hôtes du réseau 26
Caractéristiques :
- Permet d'envoyer un message à toutes les machines d'un réseau
- Toujours utilisée comme adresse de destination
- Jamais comme adresse source
Interprétation des adresses particulières
Voici quelques exemples typiques permettant de mieux comprendre la signification concrète des adresses IP :
- 0.0.0.0 → hôte inconnu ou non initialisé (source)
- 255.255.255.255 → tous les hôtes du réseau local
- 193.75.199.3 → hôte numéro 3 du réseau 193.75.199
- 193.75.199.0 → réseau 193.75.199
- 193.75.199.255 → broadcast du réseau 193.75.199
- 0.0.0.4 → hôte local dans certains contextes
- 127.0.0.1 → boucle locale (localhost)
L'adresse 127.0.0.1 est particulièrement importante, car elle permet de tester la pile réseau localement sans envoyer de trafic sur le réseau.
Utilisation des adresses privées
Lors de tests ou de configurations internes, il est fortement déconseillé d'utiliser des adresses IP arbitraires, car cela peut provoquer des conflits avec des réseaux existants.
Pour éviter cela, des plages d'adresses privées ont été définies :
- 10.0.0.0 à 10.255.255.255 (classe A)
- 172.16.0.0 à 172.31.255.255 (classe B)
- 192.168.0.0 à 192.168.255.255 (classe C)
Ces adresses :
- sont réservées pour un usage interne
- ne sont pas routées sur Internet
- sont idéales pour les réseaux locaux
Rôle des organismes de gestion
L'attribution des adresses IP est coordonnée à l'échelle mondiale par l'Internet Assigned Numbers Authority (IANA).
Cette organisation délègue la gestion à des entités régionales :
- NIC (Amérique du Nord)
- RIPE NCC (Europe)
- APNIC (Asie-Pacifique)
Ces organismes délèguent ensuite à des structures locales appelées local registries, qui :
- reçoivent les demandes d'adresses
- attribuent les plages IP
- maintiennent les bases de données associées
Relations avec les fournisseurs d'accès
Dans la pratique, ce sont souvent les fournisseurs d'accès Internet (FAI) qui attribuent les adresses IP.
Selon le type de contrat :
- Les adresses peuvent être temporaires (dynamiques) ou permanentes
- Le fournisseur peut :
- exiger leur restitution
- imposer une renumérotation
- facturer certaines configurations
Ces contraintes sont liées aux techniques modernes de routage comme le CIDR (Classless InterDomain Routing), qui optimise l'utilisation des adresses IP.
Attribution dynamique des adresses
Dans le cas de connexions via modem ou réseau distant (ex : SLIP ou PPP) :
- L'adresse IP est souvent attribuée dynamiquement
- Elle est fournie au moment de la connexion
- L'utilisateur peut temporairement utiliser 0.0.0.0
Sous des systèmes comme Windows, il suffit d'activer :
- l'option « obtenir une adresse IP automatiquement »
Communication entre réseaux
Un point fondamental du fonctionnement IP est le suivant :
- Deux machines appartenant à des réseaux différents ne peuvent pas communiquer directement
- Elles doivent passer par un routeur
Cas typiques
- Machines séparées par un bridge ou un répéteur
- Machines séparées par un routeur
→ même réseau IP
→ réseaux IP différents
Le routeur joue donc un rôle essentiel en assurant :
- le transfert des paquets
- le choix des routes
- l'interconnexion des réseaux
Conclusion
L'ensemble des règles entourant les adresses IP spéciales, les classes d'adresses et les mécanismes de routage constitue la base du fonctionnement d'Internet. Une bonne compréhension de ces notions permet :
- d'éviter les erreurs de configuration
- de concevoir des réseaux cohérents
- d'optimiser les communications
Ces concepts restent fondamentaux, même dans les architectures modernes où les mécanismes comme le CIDR ou le DHCP ont largement automatisé la gestion des adresses.