TCPのRetransmission Timerに関する質問があります。私は、TCP輻輳制御について多くの記事、ブログエントリ、その他のものを読んできましたが、もちろん私はRetransmission Timerを見つけました。
たぶんそれは愚かな質問ですが、送信される各セグメントに対してタイマーが開始され、他の場所では、送信された各セグメントに対してタイマーがリセットされると言われることがあります。
送信セグメントごとに1つの再送信タイマーがあるので、送信セグメントと同数のタイマーが存在するか、再送信タイマーは1つだけですか?送信されたTCPパケットごとに1つの再送信タイマーがありますか?
答えて
一般的には(個々の実装では非典型的なこともありますが)単一の再送信タイマーがあり、相手側が新しいデータを確認するとリセットされます。データが送信されてから確認応答されるまでの時間は、RTT(往復時間)を更新するために使用されます。
TCPはシーケンス番号に基づいて動作し、パケットではないことを覚えておいてください。これは累積確認応答の仕組みです。実装では、ストリームの分割方法を記録する必要はありません。
TCP実装では、最新の速度にはまったく対応していませんが、TCP実装では高速(一般に200msの解像度)と「低速」のクロックがあります500ms分解能)。たとえば、を参照してください。this。
したがって、すべてのパケットに関連する再送信時間がありますが、再送信のためのクロックの精度は遅いクロックでした。 RFC 6298は指定されたアルゴリズムよりも積極的でなければならないと言いますので、最も近い500msのクロックティックに切り上げられます。これはパフォーマンス上の理由から、カーネルは再送信のために多くのタイマーイベントを処理するのではなく、一回で500ms間隔ですべての再送信を処理します。
これは、多くのTCPフローが相関付けされると、実際には多くの問題を引き起こす可能性があります。 TCPによって使用されるアルゴリズムの設計および分析の多くは、フローが相関しないと仮定している。相関フローの簡単な例は、1つまたは複数のソースから情報を受け取り、各クライアントTCP接続を介して接続されたすべてのクライアントに送信する「ファンアウト」プロセスです。これは非常にバースト的なネットワークの流れであり、「ファンアウト」プロセスがうまく設計されていないと、ネットワーク上のサービス拒否攻撃として効果的に機能する可能性があります(各TCP接続は互いに認識しません。 1つのクライアントにデータを送信することができれば、すぐにすべての接続されたクライアントにデータが送信されます)。この結果、大きなパケット損失が発生し、再送信クロックの500msの細分性により、失われたセグメントはすべて同時に再送信され、パケット損失がさらに大きくなる可能性があります。
パケットは再送信時間を持つことがありますが、その粒度は非常に当てはまる可能性があり、そのために他の多くのパケットと再送信時間を共有することが説明されています。したがって、ある意味では、これは答えます。いいえ、実際には独自の再送信タイマーはありません。
しかし、ACK(またはより良い選択ACK)は複数のセグメントの受信を確認できるため、パケットに関連する再送信時間を持つことは意味があります。答えは「はい」です。セグメントで送信されたデータは、計算されたRTO後に再送信されます。それがRTOの前に(おそらく他のセグメントと一緒に)ACKされれば、そうではないでしょう。
TCPスタックの実装によっては、状況が大きく異なる場合があります。
以下の行は「TCPIP Illustrated、volume 1」に由来しているため、1つのタイマーしか存在しないようですが、新しいものは古いものに置き換わります。
Once a sending TCP has established its RTO based upon measurements of the time-varying values of effective RTT, whenever it sends a segment it ensures that a retransmission timer is set appropriately. When setting a retransmission timer, the sequence number of the so-called timed segment is recorded, and if an ACK is received in time, the retransmission timer is canceled. The next time the sender emits a packet with data in it, a new retransmission timer is set, the old one is canceled, and the new sequence number is recorded. The sending TCP therefore continuously sets and cancels one retransmission timer per connection; if no data is ever lost, no retransmission timer ever expires.
- 1. TCP再送信:再送信されるパケットの数はいくつですか?
- 2. TCPパケット送信エラー
- 3. パケット再送信
- 4. TCPパケット送信プログラム(パケットサーバ)によって送信されたデータを見ることができません
- 5. TCPはファンクション再送信ロジックを送信しますか?
- 6. ソケットコンフィギュレーションでのTCP再送信
- 7. TCPパケットを送信するときにプログラムがクラッシュする
- 8. FB.ui - 送信後に送信ダイアログが再表示されます
- 9. サーバはTCP「接続クローズ」パケットの送信を再試行しますか?
- 10. パケットが送信者から受信者に転送される方法
- 11. PLCコントローラはカスタムTCPパケットをリッスン/送信しますか?
- 12. TCP経由でC#でパケットを送信していますか?
- 13. Ejabberd送受信されたパケット数は1秒あたり61に制限されています
- 14. dropzonejs写真ごとに1つのアヤックスを送信します
- 15. 送信されたファイルには、いくつかの破損したデータのTCPソケットがあります。
- 16. JVMがカスタムのtcpパケットを送信する
- 17. libeventはパケットを受信したときに送信します
- 18. TCP送信キューの深さ
- 19. ウェブサーバーにパケットを送信しますか?
- 20. Java TCPクライアント送信がブロックされましたか?
- 21. Wiresharkフィルタ:フィルタリングされたパケットの前に送信されたパケットの取得
- 22. TCP再送信をカウントする
- 23. ACKパケットが失われた場合、SYNパケットは同じシーケンス番号で再送信されますか?
- 24. タイマーがゼロになると、フォームは送信されません。
- 25. フォームを送信すると同じデータが再送信されます
- 26. 複数のメッセージが1つだけ送信されたときにコンテンツページに受信されますか?
- 27. パケットを送信する前にTCPシーケンス番号を読む
- 28. SILKコーデックでアスタリスクに送信されたパケットの送信間隔が増加しています
- 29. UDPパケット:1つのパケットに異なるデータ型を送信するには?
- 30. Cookieが保存され、リクエストごとに送信されますが、angularjs $ cookies内に見つかりません
TCPセグメント(パケットではないが)個別ように、各セグメントの再送タイマが意味をなさない、認めていません。 –
累積肯定応答は、送信された各セグメントの再送タイマーの文が私を混乱させた理由の1つです。 – idlmn89