要約

  • TIME-WAIT は切断後も状態を保持し、同じ四タプルを使う次の接続が、前の接続の遅延セグメントを受け入れないようにする。
  • RFC 1337 は、受け入れ不能な古いセグメント、TIME-WAIT からの ACK、状態を持たない相手の RST、そして早すぎる状態削除という連鎖を記録した。
  • RST を TIME-WAIT で無視する案は RFC 1337 の提案であり、Informational 文書の内容を現在の全実装の要件として扱うことはできない。
  • RFC 6191 は、タイムスタンプとシーケンス番号が新しい接続インスタンスを示す場合に限り、特定の SYN を早期に受け入れる。

待機が守るもの

アクティブクローズの後、TCP は通常 2×MSL の間、制御ブロックを残す。これにより、古い重複セグメントが消える時間を確保してから、同じアドレスとポートを再利用できる。TIME-WAIT は再送タイマーでも、アプリケーションの配送期限でもない。接続の世代を分けるための状態である。

三段階で成立する連鎖

RFC 1337 の例では、A が TIME-WAIT、B が CLOSED に戻っている。古いデータまたは ACK が A に届き、受け入れ不能と判定される。A は現在の期待値を載せた ACK を返す。対応する接続を持たない B は、その ACK に RST で応答する。A が RST を処理すると、TIME-WAIT の制御ブロックが削除される。

個々の動作は通常の規則に見えても、組み合わさると保護の根拠を取り除く。状態を消すのは RST だが、後で新しい接続を乱すのは別の古いパケットかもしれない。

早期再利用には根拠が要る

RFC 1337 の F1 は TIME-WAIT 中の RST を無視するという単純な短期策だった。ただし文書は、MSL が守られることを条件にし、予期しない影響を確認する長期の本番試験も求めた。RFC 9293 の基本処理では、検証済みの RST により TIME-WAIT から CLOSED へ移り、制御ブロックを削除する。F1 が全面的に標準化されたとは言えない。

RFC 6191 は、入ってくる SYN のタイムスタンプとシーケンス番号を調べる。新しい世代の証拠がなければ SYN を静かに破棄し、TIME-WAIT を残す。RFC 9293 が直接の再オープンを認めるのは、以前より大きい初期シーケンス番号を使い、SYN が古い重複だった場合には TIME-WAIT に戻るという保護条件を満たすときに限られる。高い接続確立率には RFC 6191 のタイムスタンプ方式を推奨している。状態を消すことと、安全な再利用を証明することは同じではない。

出典