Votre API ne répond pas et vous ne savez pas comment tester si le port est accessible ? Ce module vous explique les deux protocoles de transport d'Internet : TCP (fiable) et UDP (rapide). Vous apprendrez à tester une connexion TCP avec netcat et à interpréter les erreurs, des compétences essentielles pour diagnostiquer les problèmes de connectivité en production.
TL;DR, L'essentiel en 30 secondes
Section intitulée « TL;DR, L'essentiel en 30 secondes »- TCP = fiable (HTTP, SSH, bases de données), UDP = rapide (DNS, streaming, jeux)
- Tester un port TCP :
nc -zv hôte port - Connection refused = port fermé (service absent)
- Timeout = paquet filtré (pare-feu) ou machine inaccessible
Je sais que c'est bon si...
Section intitulée « Je sais que c'est bon si... »-
nc -zv google.com 443affiche "succeeded" - Je sais distinguer "refused" (port fermé) de "timeout" (filtré)
-
ss -tlnpme montre les ports en écoute sur ma machine
Commandes minimales à retenir
Section intitulée « Commandes minimales à retenir »# 1. Tester un port TCPnc -zv github.com 443
# 2. Voir les ports ouverts localementss -tlnp
# 3. Tester avec timeout courtnc -zv -w 3 192.168.1.1 22Prérequis
Section intitulée « Prérequis »- Module 4 complété : vous comprenez le routage et les passerelles
- Connaissance des ports : vous savez qu'un port identifie un service (cf. Module 2)
- Une machine Linux connectée à Internet
- Un terminal ouvert
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- TCP vs UDP : comprendre quand utiliser chaque protocole
- Le handshake TCP : comment une connexion s'établit
- Les ports bien connus : SSH, HTTP, HTTPS, DNS et autres
- Tester avec netcat : vérifier si un port est ouvert
- Interpréter les erreurs : refused vs timeout vs reset
- Cas pratiques : diagnostiquer un service qui ne répond pas
Recommandation rapide : TCP ou UDP ?
Section intitulée « Recommandation rapide : TCP ou UDP ? »Avant d'entrer dans les détails, voici le tableau de décision :
| Situation | Protocole | Pourquoi |
|---|---|---|
| Site web, API REST | TCP | Fiabilité requise |
| Base de données | TCP | Intégrité des données |
| SSH, transfert de fichiers | TCP | Pas de perte acceptable |
| Requête DNS simple | UDP | Rapidité, petite taille |
| Streaming vidéo/audio | UDP | Latence prime |
| Jeux en ligne | UDP | Réactivité critique |
| VoIP, visioconférence | UDP | Temps réel |
| HTTP/3, QUIC | UDP | Transport fiable implémenté au-dessus |
Règle simple : si vous ne pouvez pas vous permettre de perdre des données → TCP. Si la vitesse prime sur la fiabilité → UDP.
TCP vs UDP : les deux protocoles de transport
Section intitulée « TCP vs UDP : les deux protocoles de transport »Quand votre machine envoie des données sur le réseau, elle utilise l'un de ces deux protocoles. Ils ont des philosophies opposées.
TCP : le protocole fiable
Section intitulée « TCP : le protocole fiable »TCP (Transmission Control Protocol) garantit que vos données arrivent intégralement et dans l'ordre. C'est le protocole utilisé par la majorité des services : HTTP, SSH, email, bases de données.
Caractéristiques :
- Connexion établie avant d'envoyer des données (handshake)
- Accusé de réception pour chaque paquet
- Retransmission automatique si un paquet est perdu
- Ordre garanti : les paquets arrivent dans l'ordre d'envoi
- Contrôle de flux : évite de saturer le destinataire
Analogie : TCP, c'est comme envoyer un courrier recommandé avec accusé de réception. C'est plus lent, mais vous êtes sûr que ça arrive et dans quel état.
UDP : le protocole rapide
Section intitulée « UDP : le protocole rapide »UDP (User Datagram Protocol) envoie les données sans vérification. Pas de connexion, pas d'accusé, pas de retransmission. C'est le protocole utilisé quand la vitesse prime : DNS, streaming, jeux.
Caractéristiques :
- Pas de connexion : on envoie directement
- Pas de garantie : les paquets peuvent être perdus
- Pas d'ordre : les paquets peuvent arriver dans le désordre
- Overhead minimal : en-tête très petit (8 octets vs 20 minimum pour TCP)
- Latence très faible : pas d'attente d'accusé
Analogie : UDP, c'est comme envoyer une carte postale. C'est rapide et léger, mais pas de garantie que ça arrive.
Transport vs Application
Section intitulée « Transport vs Application »Rappel important : TCP et UDP sont des protocoles de transport (couche 4 du modèle OSI). Ils transportent des données, mais ne définissent pas ce qu'elles contiennent.
- TCP : fournit un "flux d'octets" fiable et ordonné
- UDP : fournit des "datagrammes" indépendants, sans état
Le port identifie le service (application), pas le protocole applicatif. HTTP/2 sur TCP et HTTP/3 sur UDP utilisent tous deux le port 443.
Le handshake TCP : comment une connexion s'établit
Section intitulée « Le handshake TCP : comment une connexion s'établit »Avant d'échanger des données, TCP doit établir une connexion. Ce processus s'appelle le three-way handshake (poignée de main en trois temps).
-
SYN (Synchronize)
Le client envoie un paquet SYN au serveur : "Je veux me connecter".
-
SYN-ACK (Synchronize-Acknowledge)
Le serveur répond avec SYN-ACK : "OK, je t'écoute, je suis prêt".
-
ACK (Acknowledge)
Le client confirme avec ACK : "Bien reçu, on peut commencer".
Après ces trois échanges, la connexion est établie et les données peuvent circuler dans les deux sens.
Le handshake observé en vrai avec tcpdump
Section intitulée « Le handshake observé en vrai avec tcpdump »La théorie se vérifie en une commande. En capturant le trafic avec tcpdump pendant une simple requête HTTP, on voit passer les trois paquets, reconnaissables à leurs flags :
IP 172.17.0.5.59184 > 172.66.147.243.80: Flags [S], seq 1867813481 # SYNIP 172.66.147.243.80 > 172.17.0.5.59184: Flags [S.], ack 1867813482 # SYN-ACKIP 172.17.0.5.59184 > 172.66.147.243.80: Flags [.], ack 1 # ACKLe flag [S] est le SYN, [S.] le SYN-ACK (le point représente l'ACK qui accompagne le SYN), et [.] l'ACK final. À l'inverse, une requête DNS sur UDP ne montre aucune négociation, juste la question envoyée directement :
IP 172.17.0.5.39089 > 192.168.10.1.53: 28634+ A? example.com. # question, sans handshakeC'est toute la différence en une image : TCP négocie avant de parler, UDP parle tout de suite.
Ce que ça implique en diagnostic
Section intitulée « Ce que ça implique en diagnostic »Quand vous testez une connexion TCP avec netcat, vous testez en réalité ce handshake :
| Résultat | Signification |
|---|---|
| Connection succeeded | Handshake complet → service accessible |
| Connection refused | Le serveur a répondu RST → port fermé |
| Timeout | Pas de réponse → paquet perdu ou filtré |
Les ports bien connus
Section intitulée « Les ports bien connus »Un port est un numéro (0–65535) qui identifie un service sur une machine. Certains ports sont réservés par convention :
| Port | Protocole | Service | Description |
|---|---|---|---|
| 22 | TCP | SSH | Connexion à distance sécurisée |
| 80 | TCP | HTTP | Sites web non chiffrés |
| 443 | TCP | HTTPS | Sites web chiffrés (TLS) |
| 53 | UDP/TCP | DNS | Résolution de noms |
| 25 | TCP | SMTP | Envoi d'emails |
| 3306 | TCP | MySQL | Base de données MySQL |
| 5432 | TCP | PostgreSQL | Base de données PostgreSQL |
| 6379 | TCP | Redis | Cache/base Redis |
| 8080 | TCP | HTTP alt | Tests, proxys |
| 27017 | TCP | MongoDB | Base de données MongoDB |
Tester une connexion TCP avec netcat
Section intitulée « Tester une connexion TCP avec netcat »netcat (ou nc) est l'outil de référence pour tester si un port TCP est ouvert et accessible.
Syntaxe de base
Section intitulée « Syntaxe de base »nc -zv <hôte> <port>Options :
-z: mode scan (ne pas envoyer de données)-v: mode verbeux (afficher le résultat)
Exemples concrets
Section intitulée « Exemples concrets »nc -zv github.com 443Sortie :
Connection to github.com 443 port [tcp/https] succeeded!Le port 443 (HTTPS) de GitHub est accessible. Le handshake TCP a réussi.
nc -zv github.com 22Sortie :
nc: connect to github.com port 22 (tcp) failed: Connection refusedLe port 22 (SSH) est fermé sur les serveurs publics de GitHub. Le serveur a répondu avec un paquet RST (reset).
nc -zv -w 3 192.0.2.1 80Sortie (après ~3 secondes) :
nc: connect to 192.0.2.1 port 80 (tcp) timed outPas de réponse du tout. Le paquet est probablement bloqué par un pare-feu (DROP).
L'option -w 3 limite le timeout à 3 secondes.
nc -zv google.com 80 443Sortie :
Connection to google.com 80 port [tcp/http] succeeded!Connection to google.com 443 port [tcp/https] succeeded!Vous pouvez tester plusieurs ports d'un coup.
Interpréter les résultats
Section intitulée « Interpréter les résultats »| Message | Signification | Cause probable |
|---|---|---|
succeeded | Connexion établie | Service accessible |
refused | Port fermé | Aucun service n'écoute |
timed out | Pas de réponse | Pare-feu (DROP), routage, ou rate-limit |
No route to host | Routage impossible | Problème réseau |
Voir les ports ouverts localement
Section intitulée « Voir les ports ouverts localement »Pour voir quels services écoutent sur votre machine :
ss -tulnOptions :
-t: TCP-u: UDP-l: en écoute (listening)-n: numérique (pas de résolution DNS)
Sortie typique :
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Porttcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*tcp LISTEN 0 511 127.0.0.1:3000 0.0.0.0:*tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*udp UNCONN 0 0 127.0.0.53:53 0.0.0.0:*Lecture :
| Local Address | Signification |
|---|---|
0.0.0.0:22 | SSH écoute sur toutes les interfaces |
127.0.0.1:3000 | App écoute uniquement en local |
127.0.0.53:53 | DNS local (systemd-resolved) |
Cas pratique : diagnostiquer un service inaccessible
Section intitulée « Cas pratique : diagnostiquer un service inaccessible »Scénario : votre API déployée sur api.example.com ne répond pas.
-
Vérifier la résolution DNS
Fenêtre de terminal dig +short api.example.comSi pas de réponse → problème DNS. Sinon, notez l'IP.
-
Tester la connectivité réseau
Fenêtre de terminal ping -c 3 api.example.comSi timeout → problème réseau ou ICMP bloqué. Ne concluez pas trop vite : continuez avec un test TCP.
-
Tester le port TCP
Fenêtre de terminal nc -zv api.example.com 443- succeeded → le port est ouvert, problème applicatif
- refused → le service n'écoute pas
- timeout → pare-feu ou routage
-
Vérifier côté serveur (si vous avez accès)
Fenêtre de terminal sudo ss -tulnp | grep :443Le service écoute-t-il ? Sur quelle interface ?
-
Vérifier le pare-feu
Fenêtre de terminal # iptables (legacy, encore courant)sudo iptables -L -n | grep 443# nftables (moderne, Debian 10+, Ubuntu 20.04+)sudo nft list ruleset | grep 443Une règle bloque-t-elle le trafic entrant ?
Travaux pratiques
Section intitulée « Travaux pratiques »TP 1 : Exploration des ports de services locaux
Section intitulée « TP 1 : Exploration des ports de services locaux »-
Testez un port fermé local
Fenêtre de terminal nc -zv localhost 12345Observez le message "Connection refused", aucun service n'écoute.
-
Testez un port ouvert local (si SSH actif)
Fenêtre de terminal nc -zv localhost 22Observez "succeeded" si sshd écoute.
-
Listez les services de votre machine
Fenêtre de terminal ss -tulnQuels services écoutent ? Sur quelle interface ?
-
Identifiez les processus (avec sudo)
Fenêtre de terminal sudo ss -tulnp | grep LISTENQuel processus écoute sur chaque port ?
TP 2 : Tester des services distants
Section intitulée « TP 2 : Tester des services distants »-
Testez les ports web de Google
Fenêtre de terminal nc -zv -w 3 google.com 80nc -zv -w 3 google.com 443Les deux devraient répondre "succeeded".
-
Simulez un timeout
Fenêtre de terminal nc -zv -w 2 192.0.2.1 80L'adresse 192.0.2.1 est réservée pour la documentation et ne répond jamais.
-
Mesurez le temps de réponse
Fenêtre de terminal time nc -zv -w 5 google.com 443La connexion TCP prend combien de temps ?
-
Testez plusieurs ports d'un coup
Fenêtre de terminal nc -zv -w 2 google.com 80 443
Testez vos connaissances
Section intitulée « Testez vos connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- TCP = fiable, connexion établie, retransmission → HTTP, SSH, bases de données
- UDP = rapide, sans connexion, sans garantie → DNS, streaming, jeux
- QUIC/HTTP/3 = UDP + fiabilité applicative (la fiabilité n'est pas réservée à TCP)
- Handshake TCP : SYN → SYN-ACK → ACK (3 échanges avant de communiquer)
nc -zv <hôte> <port>: teste si un port TCP est accessible- refused = port fermé (service absent), timeout = filtré (pare-feu DROP)
- UDP non testable comme TCP : "succeeded" ne garantit pas un service actif
ss -tuln: voir les ports en écoute sur votre machine- Ports privilégiés : < 1024, nécessitent root ou
CAP_NET_BIND_SERVICE
FAQ : questions fréquentes sur TCP et UDP
Section intitulée « FAQ : questions fréquentes sur TCP et UDP »tcpdump, ces paquets apparaissent avec les flags [S], [S.] et [.]. Une fois ces trois échanges réalisés, la connexion est établie et fiable. UDP, lui, n'a aucun handshake.