Réseaux et VPN : de l'adressage IP au tunnel WireGuard, OpenVPN et IPsec
Quitter

Leçon 1 sur 13 · Fondamentaux

Le modèle OSI et TCP/IP, l'encapsulation et les ports

35 min Debian 12

Objectif

Savoir décrire ce qui se passe quand un poste d'agence envoie une requête au serveur du siège : quelles couches interviennent, ce qu'on ajoute au message à chaque étape, et sur quel port le serveur répond. C'est le vocabulaire de base de toute la formation.

L'essentiel

  • Le modèle OSI découpe la communication en 7 couches ; le modèle TCP/IP, celui qu'on utilise vraiment, en 4.
  • Chaque couche ajoute un en-tête au message de la couche du dessus : c'est l'encapsulation. À l'arrivée, chaque couche retire le sien.
  • IP (couche 3) achemine les paquets d'une machine à l'autre ; TCP et UDP (couche 4) les livrent à la bonne application grâce au port.
  • TCP est fiable et ordonné (connexion, accusés de réception) ; UDP est léger et sans connexion (DNS, DHCP, VoIP, WireGuard).
  • Retenez une poignée de ports : 22 SSH, 53 DNS, 80/443 HTTP(S), 25/587 SMTP, 67/68 DHCP, 3306 MySQL, 51820 WireGuard.

Pourquoi des couches ?

Imaginez la Banque Atlas (banque fictive qui nous suivra tout au long du cours) : un siège à Casablanca, des agences à Fès et à Tanger, des conseillers en télétravail. Quand un guichetier de Fès consulte un compte, il se passe beaucoup de choses : le navigateur fabrique une requête HTTPS, le système la découpe, la carte réseau la transforme en signaux électriques ou radio, des routeurs d'opérateur la transportent jusqu'à Casablanca…

Personne ne pourrait concevoir tout cela d'un bloc. On a donc découpé le problème en couches : chacune rend un service à celle du dessus et utilise celle du dessous, sans connaître les détails des autres. Le navigateur ne sait pas si la liaison passe par la fibre ou la 4G ; la carte Wi-Fi ne sait pas qu'elle transporte du HTTPS.

Le modèle OSI (7 couches)

N° Couche Rôle Exemples Unité de données
7 Application Le service vu par l'utilisateur HTTP, DNS, SSH, SMTP message
6 Présentation Format, chiffrement, compression TLS (en partie), encodage UTF-8 message
5 Session Ouvrir, maintenir, fermer un dialogue reprise de session TLS message
4 Transport Livrer à la bonne application, fiabilité TCP, UDP segment (TCP), datagramme (UDP)
3 Réseau Adresser et acheminer entre réseaux IPv4, IPv6, ICMP paquet
2 Liaison Transmettre sur un même réseau local Ethernet, Wi-Fi, VLAN 802.1Q trame
1 Physique Les signaux sur le support câble cuivre, fibre, ondes radio bits

Moyen mnémotechnique (de 1 à 7) : « Pour Le Réseau, Tout Se Passe Automatiquement ».

Les couches 5 et 6 existent surtout sur le papier : dans la pratique, l'application les gère elle-même. Les techniciens parlent pourtant tous les jours en numéros de couche : « un problème de couche 1 » (câble débranché), « un commutateur de niveau 3 » (qui sait aussi router), « un répartiteur de charge de couche 7 » (qui lit les URL).

Le modèle TCP/IP (4 couches)

TCP/IP Correspond à OSI Ce que vous configurez
Application 5, 6, 7 serveur web, DNS, SSH
Transport 4 ports TCP/UDP, pare-feu
Internet 3 adresses IP, routes, passerelle
Accès réseau 1, 2 interface, VLAN, Wi-Fi, câble

C'est ce modèle que suivent Linux, Windows et le cloud. Dans Azure, par exemple, un réseau virtuel vous laisse choisir des adresses IP, des sous-réseaux et des routes (couche 3) et filtrer par ports (couche 4) ; la couche physique, elle, est entièrement gérée par Microsoft.

L'encapsulation, étape par étape

Le guichetier de Fès ouvre https://compte.atlas.lan. Voici comment le message descend les couches :

[ Données HTTP chiffrées par TLS ]                                    couche 7
[ En-tête TCP | Données ]                    port source 51544 → port 443   couche 4
[ En-tête IP | En-tête TCP | Données ]       10.21.10.25 → 10.20.1.10        couche 3
[ En-tête Ethernet | IP | TCP | Données | FCS ]  MAC du poste → MAC du routeur   couche 2
0101100101…                                   signaux sur le câble          couche 1

À chaque saut (routeur d'agence, réseau de l'opérateur, routeur du siège), la trame (couche 2) est retirée puis refaite pour le lien suivant ; le paquet IP (couche 3), lui, voyage de bout en bout. Au serveur, le chemin se fait à l'envers : chaque couche lit son en-tête, le retire et passe le reste à la couche du dessus. C'est la désencapsulation.

Des tailles à connaître

Élément Taille habituelle
MTU Ethernet (données utiles d'une trame) 1500 octets
En-tête IPv4 sans option 20 octets
En-tête IPv6 40 octets
En-tête TCP sans option 20 octets
En-tête UDP 8 octets

Le plus gros morceau de données TCP qui tient dans une trame s'appelle le MSS : 1500 − 20 − 20 = 1460 octets en IPv4. Ces calculs reviendront avec les VPN : un tunnel ajoute ses propres en-têtes, il faut donc réduire la MTU à l'intérieur du tunnel, sinon les gros paquets sont fragmentés ou perdus. Les clouds publics publient d'ailleurs leurs recommandations de MTU pour les machines virtuelles.

TCP ou UDP ?

TCP UDP
Connexion oui : poignée de main SYN, SYN-ACK, ACK non
Fiabilité accusés de réception, retransmission aucune : l'application s'en charge si besoin
Ordre garanti non garanti
Coût plus lourd très léger
Usages web, SSH, courrier, bases de données DNS, DHCP, VoIP, vidéo, WireGuard, IPsec NAT-T

La poignée de main TCP en trois temps :

Poste de Fès                       Serveur du siège
   SYN  (je veux parler, port 443)  ─────────►
        ◄─────────  SYN-ACK (d'accord)
   ACK  (c'est parti)               ─────────►
   … données …
   FIN / ACK pour fermer

Pourquoi WireGuard choisit UDP ? Parce qu'il transporte lui-même du TCP : mettre du TCP dans du TCP provoque des retransmissions en cascade dès que la 4G d'un télétravailleur perd quelques paquets.

Les ports

Une adresse IP désigne une machine ; un port (0 à 65535) désigne une application sur cette machine. Le couple « adresse IP + port + protocole » est une socket.

  • 0 à 1023 : ports bien connus, réservés aux services standard (il faut être root pour les ouvrir sous Linux).
  • 1024 à 49151 : ports enregistrés (3306 MySQL, 5432 PostgreSQL, 1194 OpenVPN…).
  • 49152 à 65535 : ports éphémères, choisis au hasard par le client pour chaque connexion sortante.
Port Protocole Service
20/21 TCP FTP (à éviter : non chiffré)
22 TCP SSH, SFTP, SCP
25 / 587 / 465 TCP SMTP (envoi de courrier)
53 UDP (et TCP) DNS
67 / 68 UDP DHCP (serveur / client)
80 / 443 TCP HTTP / HTTPS (443 aussi en UDP pour HTTP/3)
123 UDP NTP (heure)
143 / 993 TCP IMAP / IMAPS
389 / 636 TCP LDAP / LDAPS
445 TCP partage Windows (SMB)
500 / 4500 UDP IKE et IPsec NAT-T
1194 UDP OpenVPN
3389 TCP Bureau à distance Windows (RDP)
3306 / 5432 TCP MySQL / PostgreSQL
51820 UDP WireGuard (valeur habituelle)

Sur un système Linux, le fichier /etc/services donne la correspondance nom ↔ numéro :

grep -w 443 /etc/services       # https 443/tcp
getent services ssh             # ssh 22/tcp

Voir les couches sur une machine Linux

ip link show                    # couche 2 : interfaces, adresses MAC, MTU
ip address show                 # couche 3 : adresses IP de chaque interface
ip route show                   # couche 3 : par où partent les paquets
ss -tulpn                       # couche 4 : ports TCP/UDP en écoute et programmes associés
curl -I https://exemple.ma      # couche 7 : une vraie requête HTTP

Un dépannage efficace suit les couches de bas en haut : le câble ou le Wi-Fi est-il connecté (1-2) ? La machine a-t-elle une adresse et une route (3) ? Le port répond-il (4) ? Le service fonctionne-t-il (7) ? Cette méthode est détaillée dans la leçon 4.1.

Exercice guidé : nommer les couches

Pour chaque situation de l'agence de Tanger, dites la couche concernée.

  1. Le câble du poste de la caissière a été arraché par une chaise. → couche 1.
  2. Deux machines ont la même adresse IP. → couche 3.
  3. Le pare-feu bloque le port 3389. → couche 4.
  4. Le site interne répond « 404 page introuvable ». → couche 7.
  5. Le poste est branché sur le mauvais VLAN du commutateur. → couche 2.

Les protocoles courants en un coup d'œil

Protocole Couche À quoi il sert Où vous le croiserez
Ethernet 2 trames sur le réseau local câblé chaque prise RJ45 de l'agence
Wi-Fi (802.11) 1-2 réseau local sans fil bornes du hall, Wi-Fi invités
ARP 2-3 trouver l'adresse MAC qui porte une IP leçon 2.1
IPv4 / IPv6 3 adresser et router les paquets leçons 1.2 et 1.3
ICMP 3 messages d'erreur et ping dépannage, leçon 4.1
TCP / UDP 4 livrer aux applications pare-feu, leçon 2.4
DHCP 7 (sur UDP) distribuer les adresses leçon 2.1
DNS 7 (sur UDP/TCP) traduire les noms en adresses leçon 1.4
TLS 5-6 chiffrer HTTPS, OpenVPN, LDAPS leçon 3.3
IPsec 3 chiffrer des paquets IP entiers leçon 3.4

Exercice : lire un paquet

Voici, simplifié, ce qu'affiche un outil de capture pour un paquet capturé au siège, juste devant le serveur :

Ethernet  src 52:54:00:aa:10:25  dst 52:54:00:bb:00:01
IPv4      src 10.21.10.25        dst 10.20.1.10       ttl 63  proto TCP
TCP       sport 51544            dport 443            flags [S]

Questions et réponses :

  1. Quelle machine a envoyé le paquet ? → 10.21.10.25 (un poste de l'agence).
  2. Quel service est demandé ? → port de destination 443, donc HTTPS.
  3. Que signifie le drapeau [S] ? → SYN : c'est le premier paquet de la poignée de main TCP.
  4. Le port 51544 est-il un service ? → non, c'est un port éphémère choisi par le client.
  5. Le TTL vaut 63 : que s'est-il passé ? → le poste l'a envoyé avec un TTL de 64 (valeur habituelle sous Linux) ; chaque routeur traversé retire 1 : un routeur l'a déjà fait suivre. Dans un VPN, tout le trajet chez l'opérateur est caché dans le tunnel et ne compte pas.

Pièges fréquents

  • Confondre adresse et port : 10.20.1.10:443 désigne le service HTTPS de la machine 10.20.1.10. Ouvrir le port sur le pare-feu ne sert à rien si le service n'écoute pas.
  • Croire que DNS n'utilise que UDP : les grosses réponses et les transferts de zone passent en TCP 53. Un pare-feu qui ne laisse passer que UDP 53 crée des pannes étranges.
  • Oublier la MTU dans un tunnel : le site s'ouvre mais les gros fichiers bloquent. C'est presque toujours une MTU trop grande.
  • Penser « OSI » pour configurer : on raisonne avec OSI, mais on configure avec TCP/IP (interface, IP, route, port, service).

Lab

Vous allez écrire vos fiches de révision dans /root/reseau : la liste des sept couches, les ports à connaître, le calcul du MSS à partir de la MTU, puis un petit script shell qui donne la couche d'un protocole. Le script est vraiment exécuté par la vérification : il doit afficher le bon numéro pour chaque protocole.

Quiz

  1. Combien de couches comptent le modèle OSI et le modèle TCP/IP ?
  2. À quelle couche travaillent un commutateur classique et un routeur ?
  3. Qu'est-ce que l'encapsulation ?
  4. Pourquoi le DNS utilise-t-il surtout UDP, et dans quel cas passe-t-il en TCP ?
  5. Quel est le MSS habituel d'une connexion TCP en IPv4 sur Ethernet ?
Réponses
  1. 7 pour OSI, 4 pour TCP/IP.
  2. Le commutateur à la couche 2 (il lit les adresses MAC), le routeur à la couche 3 (il lit les adresses IP).
  3. Chaque couche ajoute son propre en-tête aux données de la couche supérieure avant de les passer à la couche inférieure ; à l'arrivée, chaque couche retire son en-tête.
  4. Parce qu'une question et sa réponse tiennent souvent dans un seul petit paquet : UDP évite le coût d'une connexion. Il passe en TCP pour les réponses trop grosses et les transferts de zone.
  5. 1460 octets (1500 de MTU − 20 d'en-tête IPv4 − 20 d'en-tête TCP).

Sources de référence : documentations officielles Microsoft Learn (Windows Server, Azure) et Red Hat. Texte original MasterLinux.

Exercices pratiques

À réaliser sur Debian 12

Le terminal en ligne ouvre bientôt. En attendant, réalisez ces tâches sur votre machine Linux, une machine virtuelle ou WSL.

  1. Créez /root/reseau/couches.txt : 7 lignes, de la couche 1 à la couche 7, au format « numéro nom » sans accent ni majuscule : 1 physique, 2 liaison, 3 reseau, 4 transport, 5 session, 6 presentation, 7 application
    Afficher un indicemkdir -p /root/reseau puis printf '%s\n' '1 physique' '2 liaison' … > /root/reseau/couches.txt
    Voir la solution
    mkdir -p /root/reseau && printf '%s\n' '1 physique' '2 liaison' '3 reseau' '4 transport' '5 session' '6 presentation' '7 application' > /root/reseau/couches.txt

    Vérification : f=/root/reseau/couches.txt; test -f $f && test $(grep -c . $f) -eq 7 && grep -qx '1 physique' $f && grep -qx '2 liaison' $f && grep -qx '3 reseau' $f && grep -qx '4 transport' $f && grep -qx '5 session' $f && grep -qx '6 presentation' $f && grep -qx '7 application' $f

  2. Créez /root/reseau/ports.txt, une ligne par service au format « service port/protocole » : ssh 22/tcp, dns 53/udp, http 80/tcp, https 443/tcp, dhcp 67/udp, smtp 25/tcp
    Afficher un indiceMême méthode : printf '%s\n' 'ssh 22/tcp' 'dns 53/udp' … > /root/reseau/ports.txt
    Voir la solution
    printf '%s\n' 'ssh 22/tcp' 'dns 53/udp' 'http 80/tcp' 'https 443/tcp' 'dhcp 67/udp' 'smtp 25/tcp' > /root/reseau/ports.txt

    Vérification : f=/root/reseau/ports.txt; grep -qx 'ssh 22/tcp' $f && grep -qx 'dns 53/udp' $f && grep -qx 'http 80/tcp' $f && grep -qx 'https 443/tcp' $f && grep -qx 'dhcp 67/udp' $f && grep -qx 'smtp 25/tcp' $f

  3. Une trame Ethernet transporte au plus 1500 octets (MTU). Écrivez dans /root/reseau/mss.txt la taille maximale des données TCP par paquet, en IPv4, sans options (en-tête IPv4 = 20 octets, en-tête TCP = 20 octets) : juste le nombre
    Afficher un indice1500 − 20 − 20. echo $((1500-20-20)) > /root/reseau/mss.txt
    Voir la solution
    echo $((1500-20-20)) > /root/reseau/mss.txt

    Vérification : grep -qx 1460 /root/reseau/mss.txt

  4. Écrivez le script /root/reseau/couche.sh qui affiche le numéro de couche OSI du protocole passé en argument : ethernet → 2, ip → 3, icmp → 3, tcp → 4, udp → 4, http → 7, dns → 7 (sh couche.sh tcp affiche 4)
    Afficher un indiceUtilisez case "$1" in ethernet) echo 2 ;; ip|icmp) echo 3 ;; … esac, écrit ligne par ligne avec printf '%s\n'
    Voir la solution
    printf '%s\n' '#!/bin/sh' 'case "$1" in' '  ethernet|wifi) echo 2 ;;' '  ip|icmp|ipv6) echo 3 ;;' '  tcp|udp) echo 4 ;;' '  http|https|dns|ssh|smtp|dhcp) echo 7 ;;' '  *) echo inconnu ;;' 'esac' > /root/reseau/couche.sh && chmod +x /root/reseau/couche.sh

    Vérification : f=/root/reseau/couche.sh; test "$(sh $f ethernet)" = 2 && test "$(sh $f ip)" = 3 && test "$(sh $f icmp)" = 3 && test "$(sh $f tcp)" = 4 && test "$(sh $f udp)" = 4 && test "$(sh $f http)" = 7 && test "$(sh $f dns)" = 7

Références officielles consultées : Networking documentation (Windows Server) — https://learn.microsoft.com/fr-fr/windows-server/networking/ ; Présentation du réseau virtuel Azure — https://learn.microsoft.com/fr-fr/azure/virtual-network/virtual-networks-overview ; Configurer MTU pour les machines virtuelles dans Azure — https://learn.microsoft.com/fr-fr/azure/virtual-network/how-to-virtual-machine-mtu ; RHEL 8 — Configuring and managing networking. Texte original MasterLinux.