web-dev-qa-db-ja.com

TCPシーケンス番号の質問

これは、私が実際に抱えている問題というよりは、理論的な問題です。

私が正しく理解している場合、パケットのTCPヘッダーのシーケンス番号は、ストリーム全体のパケットの最初のバイトのインデックスです。正しいですか?その場合、シーケンスnumberは符号なし32ビット整数で、FFFFFFFF = 4294967295バイト以上が転送されるとどうなりますか?シーケンス番号は折り返されますか、それとも送信者はSYNパケットを送信して0から再起動しますか?

31
Meta

シーケンス番号は0にループバックします。 Source

alt text

TCPシーケンス番号と受信ウィンドウは、時計のように動作します。受信ウィンドウは、受信者がデータの新しいセグメントを受信して​​確認するたびにシフトします。シーケンス番号がなくなると、シーケンス番号は0にループバックします。

RFC 132 の第4章も参照してください。

30
Eli Bendersky

包みます。 RFC 793:

実際のシーケンス番号空間は有限ですが、非常に大きいことを忘れないでください。このスペースの範囲は0〜2 ** 32-1です。スペースは有限であるため、シーケンス番号を扱うすべての演算は2 ** 32を法として実行する必要があります。この符号なし演算では、シーケンス番号が2 ** 32-1から0に再び循環するときにシーケンス番号の関係が保持されます。コンピュータのモジュロ演算にはいくつかの微妙な点があるため、そのような値の比較をプログラミングする際には細心の注意を払う必要があります。記号「= <」は、「以下」(2 ** 32を法とする)を意味します。

詳細: http://www.faqs.org/rfcs/rfc793.html#ixzz0lcD37K7J

19
caskey

シーケンス番号は意図的にランダムな値で開始するため、実際には「ストリーム全体のパケットの最初のバイトのインデックス」ではありません(これは TCPシーケンス予測攻撃と呼ばれる形式の攻撃を阻止するためです) )。

SYNは必要ありません。シーケンス番号は、上限に達すると、再びゼロにループします。

13
Dean Harding