要約

  • TCPのシーケンス番号は0から2^32−1までで、演算はすべて2^32を法として行います。
  • 最大値の次にゼロへ回っても、剰余比較によって接続内の局所的な前後関係を保てます。
  • 確認応答、再送、受信ウィンドウの判定がこの規則に依存します。

増え続けることのできない番号

RFC 793とRFC 9293は、TCPのシーケンス空間が有限であることを示しています。値はゼロから2^32−1までで、すべてのシーケンス番号演算は2^32を法として扱います。最大値の次はゼロです。

通常の符号なし整数として比較すれば、ゼロは最大値より小さく、古い値に見えます。しかし接続の進行上は次の位置かもしれません。回り込みの近くでは、表示された数の大小だけで時間的な順序は決まりません。

数直線ではなく輪

剰余算術は番号空間を輪に変えます。送信と受信の境界、確認応答、そして有限のウィンドウが、現在解釈すべき局所的な範囲を示します。接続状態から切り離された任意の2つの32ビット値に、普遍的な時間順序はありません。

TCPは、確認応答が送信済みの位置を指すか、再送の対象が残っているか、セグメントが受信ウィンドウ内にあるかを判断します。仕様が剰余形式の比較を定めるのは、単純な比較ではゼロ付近で新旧が逆転するためです。

ゼロはリセットではない

ゼロへの回り込みは接続の再開や状態の消去を意味しません。同じ輪の次の座標へ進むだけで、制御状態は剰余比較に従って継続します。

規則が扱う範囲

正しい算術だけで、古いセグメントや接続期間、ウィンドウ境界に関するすべての曖昧さが消えるわけではありません。この規則が提供するのは、線上のフィールドを大きくせずに局所的な順序を維持する仕組みです。

Sources