====Négociation de la connection==== [[https://commons.wikimedia.org/wiki/File:Tcp_connect.svg?uselang=fr|Establishing a TCP connection]], {{:doc:web:tcp:tcp_connect.svg|Archive}} Normalement, le numéro de l'ACK en réponse est celui de l'origine + la taille du paquet. Dans le cas d'une connexion entrante, la taille du paquet (hors entête) est nulle. Dans ce cas uniquement, l'ACK en réponse est incrémenté de 1. ====Envoi des trames TCP==== [[https://commons.wikimedia.org/wiki/File:Tcp_talk.svg?uselang=fr|Dialogue TCP entre deux interlocuteurs]], {{:doc:web:tcp:tcp_talk.svg|Archive}} ====TCP Sequence et Acknowledgment Numbers====
The client on either side of a TCP session maintains a 32-bit sequence number it uses to keep track of how much data it has sent. This sequence number is included on each transmitted packet, and acknowledged by the opposite host as an acknowledgement number to inform the sending host that the transmitted data was received successfully.[[http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/|Understanding TCP Sequence and Acknowledgment Numbers - PacketLife.net]], {{ :doc:web:tcp:understanding_tcp_sequence_and_acknowledgment_numbers_-_packetlife.net_2019-10-15_21_45_30_.html |Archive du 07/06/2010 le 15/10/2019}}, {{ :doc:web:tcp:tcp_example.zip |Archive capture}}
====Délai entre le paquet de donnée et l'ACK==== Souvent le délai entre le paquet et l'ACK est long, de l'ordre de plusieurs centaines de millisecondes. C'est la faute à l'algorithme de Nagle. [[https://www.extrahop.com/company/blog/2016/tcp-nodelay-nagle-quickack-best-practices/#5|TCP_NODELAY: 2016 Best Practices for TCP Optimization]], {{ :doc:web:tcp:tcp_nodelay_nagle_s_algorithm_in_2019_optimize_tcp_extrahop_2019-10-15_21_47_47_.html |Archive du 29/06/2019 le 15/10/2019}} ==Dump Wireshark avec Nagle== {{:doc:web:tcp:tcpdelay.png|}} {{ :doc:web:tcp:yesdelayserveur.pcapng |Source}} Les trames 1, 2 et 3 et 9, 10 et 11 représente la connexion avec le serveur. La trame 8 est la déconnexion du client du réseau. On constate que le délai entre l'envoi de la trame et l'ACK est de 200 ms exactement (trames 5, 7, 13 et 15). ==Dump Wireshark sans délai== {{:doc:web:tcp:tcpnodelay.png|}} {{ :doc:web:tcp:nodelayserveur.pcapng |Source}} Quand l'algorithme n'est pas utilisé, moins d'ACK est envoyé (??) mais on constate bien qu'il n'y a que 0.3 ms entre la trame et l'ACK.