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). 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.
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