パケットを送信した直後に「TCP 再送信」が発生するのはなぜですか?

パケットを送信した直後に「TCP 再送信」が発生するのはなぜですか?

バス (MQTT、 によって実装mosquitto) に情報を公開するプログラム (Python で記述) があります。これは「ファイア アンド フォーゲット」タイプのメッセージであり、長期サブスクリプションはなく、メッセージが送信されるだけです。

これらはすべて動作しますが、TCP トラフィックが異常であることに (偶然) 気付きました。

ここに画像の説明を入力してください

192.168.10.2はサーバーであり、その上に172.19.0.20MQTT サーバーを備えた Docker コンテナーがあります。コマンドは でしたtcpdump -i any port 1883 -w mqtt.pcap。これらの 2 行は、各送信 (MQTT バスへの各発行) に対してのみ使用されます。

なぜこのようなことが起こるのでしょうかTCP Retransmission? (全体的にはすべて正常に動作していますが、再送信の理由が気になります)

答え1

TCP の信頼性の高いサービスでは、データを含むすべてのセグメントが受信側によって確認応答される必要があります。セグメントの確認応答 (ACK) が受信されない場合、送信側はセグメントを再送信する必要があります。

TCP は、各接続に対して、再送信タイムアウト (RTO) と呼ばれる変数を維持します。これは、セグメントの ACK が期待される時間です。RTO が期限切れになる前に TCP が ACK を受信しない場合、セグメントは再送信されます。

以下の記事を参照してください。

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

関連情報