要約

  • 対象はシーケンス番号の記憶を失った場合であり、すべての再起動ではない。
  • RFC 793は、古い重複セグメントを排出するため1 MSLの沈黙を定めた。
  • RFC 9293は安全上の境界を残しつつ、現在は条件が成立しにくいと説明する。
  • 状態保持とPAWSは別の防御である。

ホストは忘れても、ネットワークは忘れない

クラッシュはTCPの揮発状態を消しても、送信済みセグメントをキューや経路、受信側から消すわけではない。同じアドレスとポートを再利用すると、古いセグメントが新しいデータに見える可能性がある。データ、SYN、FINは有限のシーケンス空間を占有するためである。

沈黙という代替証拠

RFC 793は、使用中の接続で使った番号の知識を失ったTCPに、最大セグメント生存時間のあいだ送信しないよう求めた。二分という値は工学上の選択であり、再送タイマーやRTTの推定ではない。古い痕跡がネットワークから消える時間を置くのである。

条件を満たす必要がある。最近の番号を保持していれば、既使用番号より後の番号を使って待たずに再開できる。また、すでに1 MSL以上稼働していれば、必要な時間境界は過ぎている。

現行仕様の判断

RFC 9293は、記憶を失った後に少なくとも1 MSL待つ原則を維持する。一方で、ISNとエフェメラルポートのランダム化、リンク高速化による実効MSLの短縮、そして再起動が1 MSLより長くなることが多い点から、危険な条件は現在ほとんど同時に起きないと説明する。

これは原理の撤回ではない。ランダム化は衝突確率を下げるが、実際の履歴を記憶することとは違う。高速通信では、TCPタイムスタンプとPAWSが、32ビット空間の急速な周回に対する別種の古い重複検出を提供する。

出典