TCPに関するウィキペディアの記事 は、TCPセグメントを転送するIPパケットが失われることがあり、TCP「失われたデータの再送信を要求する」ことを示します。
失われたデータの再送信を要求するための規則は正確に何ですか?再送信リクエストは何時に実行されますか?数値に上限はありますか? IPパケットが欠落したときに一部が欠落したTCPセグメント全体を忘れるようにサーバーに指示する機能はクライアントにありますか?
失われたデータの再送信を要求するためのルールは正確に何ですか?
受信者は再送信を要求しません。送信者は、クライアントに送信されたバイト範囲の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?)
再送信の固定時間はありません。単純な実装では、RTT(往復時間)を推定し、その時間の2倍の時間内にデータを送信するACKが受信されなかった場合、再送信します。
その後、double待機時間を設定し、再度応答がない場合は再度送信します。リンス。繰り返す。
より洗練されたシステムは、ACKにかかる時間をより正確に推定し、失われたデータを正確に推測します。
一番下の行は、正確に再送信するタイミングに関する厳格なルールがないということです。実装次第です。 All再送信は、受信者からの応答がないことに基づいて、送信者のみによってトリガーされます。
TCP neverはデータをドロップするため、いいえ、サーバーがセグメントを忘れる必要があることを示す方法はありません。