web-dev-qa-db-ja.com

TCPの再送信ルールは何ですか?

TCPに関するウィキペディアの記事 は、TCPセグメントを転送するIPパケットが失われることがあり、TCP「失われたデータの再送信を要求する」ことを示します。

失われたデータの再送信を要求するための規則は正確に何ですか?再送信リクエストは何時に実行されますか?数値に上限はありますか? IPパケットが欠落したときに一部が欠落したTCPセグメント全体を忘れるようにサーバーに指示する機能はクライアントにありますか?

53
Randomblue

失われたデータの再送信を要求するためのルールは正確に何ですか?

受信者は再送信を要求しません。送信者は、クライアントに送信されたバイト範囲のACKを待機し、受信されない場合、特定の間隔の後、パケットを再送信します。これは ARQ (Automatic Repeat reQuest)です。これを実装する方法はいくつかあります。

Stop-and-wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ

RFC 3366 で詳しく説明されています。

再送信要求はどのような頻度で実行されますか?

再送信回数と試行回数は、標準では強制されていません。オペレーティングシステムごとに実装方法は異なりますが、方法論は固定されています。 (OSをフィンガープリントする方法の1つでしょうか?)

タイムアウトは、RTT(ラウンドトリップタイム)時間で測定されます。ただし、3 Duplicate ACKが受信されたときに開始されるFast-retransmitのため、これはあまり必要ありません。

数値に上限はありますか?

はいあります。一定回数の再試行後、ホストは「ダウン」していると見なされ、送信者はTCP接続を放棄して破棄します。

IPパケットが欠落したときに一部が欠落したTCPセグメント全体を忘れるようにサーバーに指示する機能はクライアントにありますか?

全体のポイントは信頼できるコミュニケーションです。クライアントにいくつかの部分を忘れさせたい場合、そもそもTCPを使用しないでしょう。 (おそらくUDP?)

53

再送信の固定時間はありません。単純な実装では、RTT(往復時間)を推定し、その時間の2倍の時間内にデータを送信するACKが受信されなかった場合、再送信します。

その後、double待機時間を設定し、再度応答がない場合は再度送信します。リンス。繰り返す。

より洗練されたシステムは、ACKにかかる時間をより正確に推定し、失われたデータを正確に推測します。

一番下の行は、正確に再送信するタイミングに関する厳格なルールがないということです。実装次第です。 All再送信は、受信者からの応答がないことに基づいて、送信者のみによってトリガーされます。

TCP neverはデータをドロップするため、いいえ、サーバーがセグメントを忘れる必要があることを示す方法はありません。

11
Brian White