2017-01-09 17 views
0

TCPのRetransmission Timerに関する質問があります。私は、TCP輻輳制御について多くの記事、ブログエントリ、その他のものを読んできましたが、もちろん私はRetransmission Timerを見つけました。
たぶんそれは愚かな質問ですが、送信される各セグメントに対してタイマーが開始され、他の場所では、送信された各セグメントに対してタイマーがリセットされると言われることがあります。
送信セグメントごとに1つの再送信タイマーがあるので、送信セグメントと同数のタイマーが存在するか、再送信タイマーは1つだけですか?送信されたTCPパケットごとに1つの再送信タイマーがありますか?

+1

TCPセグメント(パケットではないが)個別ように、各セグメントの再送タイマが意味をなさない、認めていません。 –

+0

累積肯定応答は、送信された各セグメントの再送タイマーの文が私を混乱させた理由の1つです。 – idlmn89

答えて

0

一般的には(個々の実装では非典型的なこともありますが)単一の再送信タイマーがあり、相手側が新しいデータを確認するとリセットされます。データが送信されてから確認応答されるまでの時間は、RTT(往復時間)を更新するために使用されます。

TCPはシーケンス番号に基づいて動作し、パケットではないことを覚えておいてください。これは累積確認応答の仕組みです。実装では、ストリームの分割方法を記録する必要はありません。

0

TCP実装では、最新の速度にはまったく対応していませんが、TCP実装では高速(一般に200msの解像度)と「低速」のクロックがあります500ms分解能)。たとえば、を参照してください。this

したがって、すべてのパケットに関連する再送信時間がありますが、再送信のためのクロックの精度は遅いクロックでした。 RFC 6298は指定されたアルゴリズムよりも積極的でなければならないと言いますので、最も近い500msのクロックティックに切り上げられます。これはパフォーマンス上の理由から、カーネルは再送信のために多くのタイマーイベントを処理するのではなく、一回で500ms間隔ですべての再送信を処理します。

これは、多くのTCPフローが相関付けされると、実際には多くの問題を引き起こす可能性があります。 TCPによって使用されるアルゴリズムの設計および分析の多くは、フローが相関しないと仮定している。相関フローの簡単な例は、1つまたは複数のソースから情報を受け取り、各クライアントTCP接続を介して接続されたすべてのクライアントに送信する「ファンアウト」プロセスです。これは非常にバースト的なネットワークの流れであり、「ファンアウト」プロセスがうまく設計されていないと、ネットワーク上のサービス拒否攻撃として効果的に機能する可能性があります(各TCP接続は互いに認識しません。 1つのクライアントにデータを送信することができれば、すぐにすべての接続されたクライアントにデータが送信されます)。この結果、大きなパケット損失が発生し、再送信クロックの500msの細分性により、失われたセグメントはすべて同時に再送信され、パケット損失がさらに大きくなる可能性があります。

パケットは再送信時間を持つことがありますが、その粒度は非常に当てはまる可能性があり、そのために他の多くのパケットと再送信時間を共有することが説明されています。したがって、ある意味では、これは答えます。いいえ、実際には独自の再送信タイマーはありません。

しかし、ACK(またはより良い選択ACK)は複数のセグメントの受信を確認できるため、パケットに関連する再送信時間を持つことは意味があります。答えは「はい」です。セグメントで送信されたデータは、計算されたRTO後に再送信されます。それがRTOの前に(おそらく他のセグメントと一緒に)ACKされれば、そうではないでしょう。

TCPスタックの実装によっては、状況が大きく異なる場合があります。

-1

以下の行は「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.

関連する問題