Le protocole IP, qui opère à la couche internetwork (ou réseau) du modèle TCP/IP, est chargé de router les paquets, aussi appelés datagrammes, depuis une adresse IP source vers une adresse IP destination. Il est fondamental de comprendre ses caractéristiques principales, car elles expliquent pourquoi des protocoles comme TCP sont nécessaires à la couche supérieure.
🎯 Caractéristiques Fondamentales d'IP
Le protocole IP adopte un principe d'acheminement en "best effort" (acheminement au mieux) :
📊
Stateless (sans état)
C'est une notion très importante. Les routeurs (nœuds) ne conservent aucune information sur les échanges précédents. Chaque paquet est traité indépendamment des autres, ce qui simplifie grandement le routage mais reporte la gestion de la session aux couches supérieures.
🔄
Connectionless (sans connexion)
Avant d'envoyer un datagramme IP, l'émetteur n'a pas besoin d'établir une connexion préalable avec le destinataire. Cela contraste fortement avec TCP.
⚠️
Best Effort (acheminement au mieux)
IP fait de son mieux pour acheminer les datagrammes, mais sans aucune garantie. Les paquets peuvent être perdus ou altérés en cas de défaillance réseau (IP est dit unreliable ou non fiable). Un même paquet peut être acheminé plus d'une fois. IP se contente de rejeter un paquet erroné (détecté via le checksum de l'en-tête) sans entreprendre d'action corrective.
🔀
Unordered (non ordonné)
Les paquets peuvent arriver à destination dans le désordre (unordered).
💡 Point d'attention pour les questions pièges : La non-fiabilité et le désordre des paquets ne sont pas des "bugs" d'IP, mais des choix de conception. La complexité (fiabilité, ordonnancement) est volontairement laissée aux couches supérieures, comme la couche transport (TCP), si l'application en a besoin.
Chaque paquet IP commence par un en-tête qui contient toutes les informations nécessaires à son acheminement. La structure de l'en-tête est une succession de mots de 32 bits.
🔍 Champs Clés de l'En-tête IP
- IHL (Internet Header Length) : Indique la longueur de l'en-tête en mots de 32 bits (soit 4 octets). La longueur minimale et la plus courante est de 5 mots (20 octets). Ce champ est crucial car il permet de savoir où l'en-tête se termine et où les données (la charge utile) commencent.
- Total Length : C'est la taille totale du datagramme (en-tête + données) en octets. Ce champ étant sur 16 bits, la taille maximale d'un datagramme IP est de 65 535 octets (2¹⁶ - 1).
- TTL (Time to Live) : Limite la durée de vie d'un paquet. C'est un compteur (codé sur 8 bits) qui est décrémenté de 1 par chaque routeur traversé. Si le TTL atteint zéro, le paquet est détruit, ce qui évite les boucles de routage infinies.
- Protocol Number : Identifie le protocole de la couche supérieure dont les données sont transportées dans le paquet. Par exemple, 6 pour TCP, 17 pour UDP, et 1 pour ICMP.
- Header Checksum : Une somme de contrôle calculée uniquement sur l'en-tête IP pour détecter les erreurs. Point important : comme le TTL est modifié par chaque routeur, le checksum doit être recalculé à chaque saut.
- Identification, Flags (DF, MF) et Fragment Offset : Ces trois champs sont essentiels pour la gestion de la fragmentation.
🚨 Sécurité : Le TTL prévient les boucles infinites. Le checksum ne couvre que l'en-tête, les données peuvent être corrompues sans détection au niveau IP.
📏 Maximum Transmission Unit (MTU)
- MTU (Maximum Transmission Unit) : C'est la taille maximale, en octets, d'une trame que la couche de liaison de données peut transporter. Par exemple, le MTU standard d'Ethernet est de 1500 octets. Si un paquet IP est plus grand que le MTU de la liaison qu'il doit emprunter, il doit être fragmenté.
- Path MTU (PMTUD) : Lorsque deux hôtes communiquent à travers plusieurs réseaux, le Path MTU est le plus petit MTU de toutes les liaisons sur le chemin entre eux.
Ethernet MTU = 1500 octets
Wi-Fi (WLAN) MTU = 2304 octets
✂️ Fragmentation IP
La fragmentation est le processus par lequel un datagramme IP est décomposé en plusieurs morceaux (fragments), chacun étant suffisamment petit pour tenir dans une trame de la couche liaison.
Fonctionnement :
- Identification : Tous les fragments d'un même datagramme original partagent le même numéro dans le champ `identification` de l'en-tête IP. Cela permet au destinataire de savoir quels fragments vont ensemble.
- Fragment Offset : Ce champ indique la position (le décalage) du premier octet des données de ce fragment par rapport au début des données du datagramme original. L'unité de mesure est de 8 octets. Le premier fragment a un offset de 0.
- Flag MF (More Fragments) :
- Si MF = 1, cela signifie que d'autres fragments suivent. Tous les fragments, sauf le dernier, ont ce flag à 1.
- Si MF = 0, cela indique qu'il s'agit du dernier fragment (ou qu'il n'y a pas eu de fragmentation).
- Réassemblage : C'est l'hôte de destination final qui est responsable du réassemblage des fragments. Il utilise les champs `identification`, `fragment offset` et le flag `MF` pour reconstituer le datagramme original.
⚠️ Point d'attention pour les questions pièges : La fragmentation est coûteuse en termes de performance (chaque fragment a son propre en-tête IP, ce qui crée une surcharge) et augmente les risques de perte (si un seul fragment est perdu, tout le paquet original est perdu). C'est pourquoi le PMTUD est préférable.
Risques de sécurité :
- Attaques par fragmentation (Fragment overlap attacks)
- Déni de service par consommation de ressources
- Contournement de firewalls
🔍 PMTUD (Path MTU Discovery)
Pour éviter les inconvénients de la fragmentation (surcharge, baisse de performance), un hôte peut utiliser le PMTUD. Le principe est le suivant :
- L'hôte émetteur envoie des paquets IP avec le flag DF (Don't Fragment) positionné à 1 dans l'en-tête.
- Si un routeur sur le chemin reçoit ce paquet et que celui-ci est plus grand que le MTU de l'interface de sortie, le routeur ne fragmente pas le paquet mais le supprime.
- Le routeur renvoie alors un message ICMP de type 3, code 4 ("Fragmentation Needed") à l'hôte source, en indiquant son propre MTU.
- L'hôte source réduit alors la taille de ses paquets et répète le processus jusqu'à ce que les paquets puissent traverser tout le chemin sans fragmentation.
Internet est un "réseau de réseaux" composé de Systèmes Autonomes (AS).
🏢 AS (Autonomous System)
C'est un ensemble de routeurs et de réseaux IP sous le contrôle d'une seule entité administrative (par exemple, un opérateur comme Orange) qui partage une politique de routage commune. L'Internet est un immense réseau d'AS interconnectés.
🤝 Relations entre AS
Il existe deux types de relations principales qui définissent comment le trafic circule entre les AS.
💰
Client / Fournisseur (Transit)
L'AS client paie l'AS fournisseur pour que celui-ci achemine son trafic vers n'importe quelle autre destination sur Internet. Le fournisseur autorise le trafic de transit.
🤝
Peering (Pair à pair)
Deux AS (souvent de taille similaire) s'accordent pour échanger directement du trafic entre leurs clients respectifs, généralement sans frais. Important : un pair n'autorise pas le trafic de transit. Par exemple, si A et B sont en peering, B n'acheminera pas le trafic de A vers un autre fournisseur de B.
💡 Point d'attention pour les questions pièges : La distinction entre transit et peering est fondamentale pour comprendre les politiques de routage sur Internet. Un lien de peering ne sera pas utilisé comme un chemin de transit pour atteindre des destinations tierces.
🛡️ Implications de sécurité : Le routage BGP entre AS peut être vulnérable aux détournements de routes (BGP hijacking) et aux attaques man-in-the-middle.
Le routage distance vector est un type d'algorithme utilisé par des protocoles de routage dynamique comme RIP (Routing Information Protocol).
📍 Principe de fonctionnement
- Chaque routeur (nœud) ne connaît initialement que le coût pour atteindre ses voisins directs.
- Périodiquement (toutes les 30 secondes pour RIP), chaque routeur partage son propre tableau de routage (son "vecteur de distances") avec ses voisins immédiats.
- Lorsqu'un routeur reçoit le vecteur d'un voisin, il met à jour sa propre table de routage. L'algorithme de base est celui de Bellman-Ford : pour atteindre une destination Y, un routeur X calcule le coût minimal en passant par chacun de ses voisins. La formule est :
dx(y) = min{c(x,voisin) + d_voisin(y)} pour tous les voisins de x.
- Convergence : C'est le processus par lequel tous les routeurs du réseau obtiennent des informations de routage cohérentes et stables. Ce processus se propage "de proche en proche".
- Métrique de RIP : La métrique (le "coût") est simplement le nombre de sauts (hops), c'est-à-dire le nombre de routeurs à traverser pour atteindre une destination. Le nombre maximal de sauts est de 15 ; une route à 16 sauts est considérée comme infinie (inaccessible).
⚠️ Inconvénient principal : La convergence peut être lente, et le protocole est sensible au problème de "comptage jusqu'à l'infini" en cas de défaillance d'un lien.
🚨 Vulnérabilités RIP :
- Pas d'authentification des mises à jour
- Sensible aux attaques par empoisonnement de route
- Compte jusqu'à l'infini (loops)
- Limite de 15 sauts maximum
🔄 Phases de la connexion
1. Établissement (3-way handshake)
- Client → Serveur :
SYN (avec un numéro de séquence initial, seq=x).
- Serveur → Client :
SYN, ACK (le serveur accuse réception avec ack=x+1 et envoie son propre numéro de séquence seq=y).
- Client → Serveur :
ACK (le client accuse réception avec ack=y+1).
- La connexion est alors à l'état
ESTABLISHED.
Client
SYN (seq=x)
→
Serveur
SYN+ACK (seq=y, ack=x+1)
←
Client
ACK (ack=y+1)
3. Fermeture (4-way handshake)
La connexion est fermée dans chaque direction indépendamment. Un côté envoie un FIN, l'autre répond par un ACK, puis envoie son propre FIN, qui est à son tour acquitté.
TCP est un protocole de la couche transport qui fournit un service fiable, orienté connexion et en mode flot d'octets au-dessus du service non fiable d'IP.
🎯 Caractéristiques TCP
- Fiable : Gestion des erreurs et retransmissions
- Orienté connexion : Établissement préalable
- Orienté flux : Stream d'octets continu
- Contrôle de flux : Fenêtre coulissante
- Contrôle de congestion : Évite la saturation réseau
🔢 Numéros de Séquence et Acquittement
Numéros de séquence (SEQ) et d'acquittement (ACK) : TCP numérote chaque octet envoyé dans un flux.
- Le
sequence number d'un segment est le numéro du premier octet de données de ce segment.
- Le
acknowledgment number (si le flag ACK est à 1) indique le numéro du prochain octet que le récepteur s'attend à recevoir. C'est un acquittement cumulatif.
- Flags : Les flags (URG, ACK, PSH, RST, SYN, FIN) contrôlent l'état de la connexion.
SYN pour l'ouverture, FIN et RST pour la fermeture, ACK pour l'acquittement.
SEQ = Numéro du premier octet de données
ACK = Numéro du prochain octet attendu
⚙️ Mécanismes de fiabilité et de performance
🔄 Gestion des erreurs et retransmission
TCP gère la perte de segments, les segments erronés (via un checksum calculé sur l'en-tête, les données et un pseudo-en-tête IP) et les octets arrivant dans le désordre. Si un acquittement n'est pas reçu dans un certain délai, le segment est retransmis.
🌊 Contrôle de flux (Flow Control)
- Objectif : Empêcher l'émetteur de saturer le buffer du récepteur.
- Mécanisme : Le récepteur utilise le champ
window size dans l'en-tête TCP pour indiquer à l'émetteur la quantité de données (en octets) qu'il est prêt à recevoir. Si le récepteur est lent, il annonce une fenêtre plus petite, voire une fenêtre de 0, ce qui arrête l'émission.
- Fenêtre coulissante (Sliding Window) : Permet à l'émetteur d'envoyer plusieurs segments (jusqu'à la taille de la fenêtre) sans attendre un acquittement pour chacun, ce qui améliore le débit.
🚦 Contrôle de congestion (Congestion Control)
- Objectif : Éviter de saturer le réseau lui-même.
- Mécanisme : TCP maintient une fenêtre de congestion (
cwnd). Sa taille augmente progressivement tant qu'aucune perte de paquet n'est détectée. En cas de perte (interprétée comme un signe de congestion), la taille de la fenêtre est drastiquement réduite, puis elle recommence à croître lentement.
🚨 Attaques TCP :
- SYN Flood : Saturation par connexions incomplètes
- TCP Hijacking : Détournement de session
- RST Attack : Fermeture forcée de connexions
- Sequence Number Attacks : Prédiction des numéros de séquence
🛡️ Protections :
- Randomisation des ISN (Initial Sequence Numbers)
- SYN Cookies contre les SYN floods
- Firewalls stateful
- Chiffrement avec TLS/SSL
🎣
Hameçonnage (Phishing)
Emails malveillants incitant à cliquer sur des liens ou fournir des informations sensibles.
🔒
Rançongiciel (Ransomware)
Chiffrement des données et exfiltration pour faire pression (double extorsion).
💥
DDoS
Attaques par déni de service distribué pour perturber les services.
🕳️
Man-in-the-Middle
Interception et modification des communications réseau.
🌐 CIS Control 09 : Protection Email & Navigateur
Protège contre 77% à 86% des sous-techniques d'attaque (IG1)
Mesures IG1 (Cyber Hygiène de Base) :
- Navigateurs et clients non obsolètes : Mises à jour de sécurité critiques
- Filtrage DNS : Blocage des domaines malveillants
🔍 Filtrage DNS :
- Interception des requêtes DNS de l'entreprise
- Comparaison avec liste noire de sites malveillants
- Blocage et affichage d'un message d'erreur si correspondance
🏗️ Architecture de Sécurité Réseau
Firewall
Filtrage de paquets
IDS/IPS
Détection d'intrusions
DNS Filtering
Blocage domaines
VPN
Chiffrement tunnel
✅ Essentiel pour l'examen :
- Protocole IP : Caractéristiques (stateless, connectionless, unreliable, unordered)
- En-tête IP : TTL, Protocol Number, Fragmentation
- MTU : Ethernet (1500), Wi-Fi (2304), risques de fragmentation
- TCP : 3-way handshake, SEQ/ACK, attaques SYN flood
- Routage : RIP, vecteur de distance, vulnérabilités
- Sécurité : CIS Control 09, filtrage DNS, protection navigateur
🧮 Formules importantes :
MTU Ethernet = 1500 octets
TTL max = 255 (8 bits)
Taille max datagramme IP = 65 535 octets (2¹⁶ - 1)
Fragment Offset en unités de 8 octets