Parler TCP à la main
Dialoguer avec netcat et voir un protocole brut.
Objectifs
À la fin de cette leçon, vous saurez :
- ouvrir une connexion brute vers un serveur et lui parler ligne par ligne ;
- comprendre qu'un protocole applicatif n'est « que » du texte sur un flux TCP ;
- préparer la lecture du protocole HTTP (chapitre suivant).
Un serveur d'écho avec netcat
Netcat (nc) est le couteau suisse réseau : il crée des sockets brutes.
# Terminal 1 : serveur qui écoute sur 9000
nc -l 9000
# Terminal 2 : client
nc localhost 9000
bonjour
Le texte tapé dans le terminal 2 apparaît dans le terminal 1, et réciproquement. Vous venez de voir l'essence de TCP : un canal d'octets bidirectionnel entre deux processus. Aucune magie : ce que HTTP appelle « requête » et « réponse », c'est du texte structuré envoyé dans ce canal.
Observer le protocole HTTP brut
Connectons-nous à un vrai serveur web et parlons-lui HTTP à la main :
nc example.com 80
Tapez exactement (deux lignes, puis Entrée vide) :
GET / HTTP/1.1
Host: example.com
La réponse brute arrive : une première ligne HTTP/1.1 200 OK, des en-têtes Content-Type: ..., une ligne vide, puis le HTML. Vous avez fabriqué à la main ce qu'un navigateur fait automatiquement — le chapitre HTTP détaillera chaque partie.
Ce que cet exercice révèle :
- le port 80 est celui où « parle » HTTP ;
- le protocole est du texte lisible par un humain ;
- l'en-tête
Hostpermet à un même serveur d'héberger plusieurs sites.
Fermer proprement
Ctrl+C ferme netcat ; côté distant, la connexion se termine. Sur un vrai serveur, cette fermeture correspond au FIN du chapitre TCP — vérifiez avec ss -tn pendant la session pour voir la connexion vivante.
Exercice
- Faites dialoguer deux netcat entre eux et observez avec
ss -tnples ports sources choisis. - Interrogez
example.comà la main comme ci-dessus. Notez le code de statut et le type de contenu. - Refaites la requête sans l'en-tête
Host. Qu'obtient-on ? Que déduit-on ?
Résumé
- Une socket = un flux d'octets bidirectionnel ; rien de plus.
- Tout protocole applicatif (HTTP inclus) est une convention de formatage sur ce flux.
ncrend visible ce que les navigateurs cachent.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 1. Chaque extrémité a son port source éphémère (>1024) et le port destination fixe (9000) : vous observez le quadruplet de connexion en direct.
Question 3. Sans Host, beaucoup de serveurs répondent 400 Bad Request : depuis HTTP/1.1, l'en-tête Host est obligatoire car plusieurs domaines cohabitent souvent sur une même adresse IP (virtual hosting). Le serveur a besoin de savoir quel site vous demandez.