3

たとえば、TCP Tahoe 接続で、大きなファイル転送が発生した場合。突然、受信プロセスまたはホストがシャットダウンまたは一時停止され、タイムアウトが発生し、その時点でウィンドウ サイズがリセットされることがわかっています。私が理解しているように、未確認のパケットを再送信し、再試行します。そしておそらくまた?

しかし、このようなタイムアウトの後、受信者が存在しなくなり、データの送信が停止すると想定される前に、データが何回再送信されるのか疑問に思っています。プロセスが一時停止状態から再開された場合、データを受信し続けることができますか?

トリプル デュプリケート ACK またはタイムアウト後にデータが再送信されることはわかっています。ただし、複数の再送信が失敗した場合、または受信プロセスが突然受信を停止した場合に何が起こるかについては、あまり読むことができません。

4

1 に答える 1

9

受信プロセスが終了または強制終了された場合、その最後のソケットはシャットダウンされます。送信者がパケットを送信し続ける場合、RST パケットを要求する必要があります。これにより、すぐにエラー (ECONNRESET) が発生します。

受信ホストが正常にシャットダウンされた場合、すべてのプロセスが強制終了され、上記の問題が発生します。

受信側のホストとプロセスが動作しているが、プロセスが中断されている場合 (Ctl-z など)、TCP レベルでは問題は検出されません。ウィンドウは最終的にいっぱいになりますが、受信システムはゼロ ウィンドウ プローブの確認を続けます。このケースを検出するには、アプリケーション層のキープアライブ メカニズムが必要です。

受信ホストがクラッシュしたり、電力が失われたり、ネットワーク接続に障害が発生した場合は、再送信のタイムアウトが関係するようになります。再送信の回数と頻度は実装に依存し、システム構成パラメータによって制御される場合もあります。典型的なパラメータが何であるかはわかりません。

タイムアウトが発生する前に受信システムが再起動すると、RST パケットで次の再送信に応答し、ECONNRESET エラーが発生します。

于 2012-11-07T09:03:57.137 に答える