要約

  • RFC 6298では、ACKが新しいデータを確認した場合にだけ再送タイマーを再開する。
  • データ送信時にタイマーを開始し、未確認データがなくなれば停止し、満了時には最も古い未確認セグメントを再送する。

ACKの数ではなく境界の前進

タイマーが守るのは、まだ確認されていないデータである。データを含むパケットを送った時点でタイマーが動いていなければ、現在のRTOで開始する。その後に追加のデータを送っても、既存の期限を自動的に延ばすことはない。

ルール5.3が再開を認めるのは、ACKが新しいデータを確認したときだけだ。受信側が確認したシーケンスの境界が進み、最初に残る未確認セグメントも変わり得るため、そこから新しいRTO区間を数える。

以前の境界を繰り返すACKはこの条件を満たさない。したがって、重複ACKが未解決データの期限を何度も押し出せない、という推論が成り立つ。ただし、TCP全体で重複ACKが無意味だという主張ではない。

すべてのデータが確認されればタイマーを止める。満了した場合は、最も早い未確認セグメントを再送する。

規範上の境界

RFC 6298が必須としているのは、セグメントを直前の送信から1 RTO未満で再送してはならないという不変条件である。開始・停止・再開の流れは、そのタイマー管理の推奨アルゴリズムとして示される。必須条件と推奨手順は同じではない。

このRFCから現在の全実装の動作を判断することはできない。また、この規則が扱うのはタイマーの再開条件であり、遅延ACK、RTT測定、高速再送、SACK、輻輳制御、タイムアウト後の指数的バックオフではない。

出典