为什么我发送数据包后会立即收到“TCP 重传”消息?

为什么我发送数据包后会立即收到“TCP 重传”消息?

我有一个程序(用 Python 编写),用于将信息发布到总线(MQTT,由 实现mosquitto)。这是一种“即发即弃”类型的消息,即没有长期订阅,只是发送一条消息。

所有这些都有效,但我(偶然)注意到 TCP 流量很奇怪:

在此处输入图片描述

192.168.10.2是一台服务器,上面172.19.0.20有一个装有 MQTT 服务器的 docker 容器。命令是tcpdump -i any port 1883 -w mqtt.pcap。这两行是每次传输(每次发布到 MQTT 总线)的唯一命令。

为什么会这样TCP Retransmission?(总体来说一切正常,我只是好奇为什么要重新传输)

答案1

TCP 的可靠服务要求所有包含数据的段都得到接收方的确认。当未收到某个段的确认 (ACK) 时,发送方必须重新传输该段。

对于每个连接,TCP 都会维护一个称为重传超时 (RTO) 的变量,该变量表示预计收到该段的 ACK 的时间量。如果 TCP 在 RTO 到期之前未收到 ACK,则将重新传输该段。

请参阅以下文章:

https://www.extrahop.com/company/blog/2016/retransmission-timeouts-rtos-application-performance-degradation/

相关内容