URL: https://linuxfr.org/users/benoar/journaux/syn-c-est-pour-synchronisation Title: SYN c'est pour « SYNchronisation » Authors: benoar Date: 2017年02月05日T12:47:06+01:00 License: CC By-SA Tags: internet et tcp Score: 28 Jouons un peu avec TCP : à l'époque où ce mot voulait encore dire « Transmission Control Program », on se souciait de pouvoir faire communiquer de manière fiable deux processus discutant à travers un réseau à commutation de paquet non fiable (on n'avait pas encore séparé IP de TCP, et la taille des adresses n'était pas encore définie : de 24 bits en 1974 à « variable » en 1978, par exemple), et en réassemblant et réordonnant ces paquets, avec une fenêtre d'envoi et de réception pour gérer tout ça et en bonus le contrôle du flux. L'idée fondamentale derrière tout ça était de trouver le « minimum » vital qui permettait d'obtenir ce résultat. Il en sorti qu'il fallait « simplement » établir un protocole qui permet de **synchroniser** des numéros de séquence et des tailles de fenêtre — si on fait abstraction de l'adressage, en se concentrant sur le flux. Vous retrouverez ces concepts dans la très bonne lecture qu'est l'*Internet Experiment Note* 21, [Specification of Internetwork Transmission Control Program](http://www.postel.org/ien/pdf/ien021.pdf) (disponible seulement en PDF scanné), par Vint Cerf et Jon Postel, en 1978. Vous retrouvez également l'idée originale dans [A Protocol for Packet Network Intercommunication](https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf), par Vint Cerf et Bob Kahn, en 1974, qu'on considère comme les inventeurs d'Internet. Et donc en lisant le 4.2.2, où on retrouve la fameuse machine à état de TCP, on se rend compte que deux processus *actifs* (i.e. initiant une connexion) peuvent se synchroniser, car ce protocole a été bien fait. Démonstration ; dans un terminal, lancez un netcat ainsi : while true; do nc -p 5678 ::1 1234 ; done Et dans un deuxième : while true; do nc -p 1234 ::1 5678 ; done Et magie ! Vous vous retrouvez avec deux *sockets* synchronisées, qui vous permettent ici de retrouvez ce que vous tapez dans un terminal dans l'autre (à la gestion de buffer prêt : il faut valider avec *entrée* pour que les buffers soient vidés). Je vous conseille donc grandement la lecture de ces documents historiques très intéressants.