30

TCP ヘッダーのシーケンス番号がどのように生成されるかを理解しようとしています。

いくつかの場所では、それは「パケットの最初のバイトのインデックス」(リンクはこちら) であると読みましたが、他のサイトでは、ランダムに生成された 32 ビットの数値であり、インクリメントされます。

どれがどれなのかよくわからないので、いくつか質問があります。

  • 初期シーケンス番号はどのように生成されますか? (RFC 番号がある場合は、それを提供してください)
  • どのように増分されますか?
  • 秘密鍵はどのように生成されますか?

RFC 6528RFC 793、およびRFC 1948などのいくつかの RFC を読みましたが、どれが実際に実装されているのか理解できないようです。

「std」ステータスについて読みましたが、それでも...

前もって感謝します!

4

3 に答える 3

40

TCP 接続の各エンドポイントは、送信するパケットの開始シーケンス番号を確立し、接続確立の一部として送信する SYN パケットでこの番号を送信します。

開始シーケンス番号を選択する際に、どちらかの端が特定の手順に従う必要はありません。オペレーティング システムは、任意のメカニズムを自由に使用できますが、一般的には、より安全な乱数を選択するのが最善です。

その開始点から、両端から送信される各パケットには 2 つのシーケンス番号が含まれます。1 つはパケットがストリーム内のどこにあるかを指定する番号で、もう 1 つは受信したバイト数を示す ACK シーケンス番号です。両方の番号は、開始シーケンス番号によってオフセットされます。

もちろん、ウィキペディアですべてを読んでください。そのページで「シーケンス番号」を探して、すべての悲惨な詳細を取得してください。

于 2012-05-04T17:01:18.273 に答える