Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
doc:web:tcp [2017/10/04 01:31] – Ajout du cheminement des ACK et du délai avant ACK root | doc:web:tcp [2020/05/11 00:29] (Version actuelle) – Suppression de la taille par défaut pour les images root |
---|
====Négociation de la connection==== | ====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?500 |Archive}} | [[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. | 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==== | ====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?500 |Archive}} | [[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==== | ====TCP Sequence et Acknowledgment Numbers==== |
<blockquote>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.<cite>[[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.mhtml |Archive}}, {{ :doc:web:tcp:tcp_example.zip |Archive capture}}</cite></blockquote> | <blockquote>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.<cite>[[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}}</cite></blockquote> |
| |
====Délai entre le paquet de donnée et l'ACK==== | ====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. | 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_2016_best_practices_for_tcp_optimization_extrahop.mhtml |Archive}} | [[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== | ==Dump Wireshark avec Nagle== |
{{:doc:web:tcp:tcpdelay.png?800|}} {{ :doc:web:tcp:yesdelayserveur.pcapng |Source}} | {{: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. | Les trames 1, 2 et 3 et 9, 10 et 11 représente la connexion avec le serveur. |
| |
==Dump Wireshark sans délai== | ==Dump Wireshark sans délai== |
{{:doc:web:tcp:tcpnodelay.png?280000|}} {{ :doc:web:tcp:nodelayserveur.pcapng |Source}} | {{: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. | 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. |