Leçon 21 : TCP Sockets — Serveur et client
TCP (Transmission Control Protocol) est le fondement de toute communication réseau fiable. Quand tu ouvres un navigateur, que tu lances un git fetch, ou que tu connectes deux processus NCCL pour un entraînement distribué — dans la plupart des cas, c'est TCP qui travaille en coulisses. Dans cette leç
Imagine un serveur TCP comme un restaurant. Tu commences par choisir un numéro de table (bind sur un port), puis tu ouvres la porte et tu annonces « on est ouvert » (listen), puis tu t'assieds et tu attends qu'un client entre (accept). Le client arrive (connect), s'assied, passe commande (send), et reçoit sa commande en retour (recv). TCP garantit que chaque plat arrive dans le bon ordre et que rien ne manque — comme un serveur qui vérifie que chaque assiette est arrivée avant de servir la suivante.
- socket
- Un point de terminaison pour la communication réseau. Représenté dans le code comme un descripteur de fichiers (un entier) sur lequel tu peux écrire et depuis lequel tu peux lire, exactement comme un fichier.
- bind
- L'attribution d'une adresse IP et d'un port à un socket. Le syscall bind() indique au noyau : « ce socket recevra les connexions arrivant sur le port X ».
- listen
- Le passage du socket en mode passif afin qu'il soit prêt à accepter les connexions entrantes. Le paramètre backlog définit le nombre de connexions en attente que le noyau peut conserver dans sa file.
- accept
- Le retrait de la connexion suivante dans la file d'attente. Retourne un nouveau descripteur de fichiers dédié à ce client unique. Le socket d'origine continue d'écouter d'autres clients.
- SO_REUSEADDR
- Une option de socket qui permet de refaire un bind sur le port immédiatement après la fermeture du serveur, sans attendre l'expiration de TIME_WAIT. Essentielle en développement pour éviter 'Address already in use' à chaque redémarrage.