為什麼我在發送資料包後立即收到「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/

相關內容