TCPシーケンス番号予測攻撃
TCPでは、フロー制御にスライディングウィンドウを用いており、そのスライディング管理にシーケンス番号を用いている。例えば、1000オクテットのデータを3パケット送信すると、以下のような通信内容となる。
実際にはスライディングウィンドウの影響を受けるため、項番3の送信は項番2のACK応答が返ってくる前に送信されると考えられる。また、受信側の都合で途中までしか受信されなかった場合はACK番号が1000単位未満の値が返されることもある。しかし、これらの事情はここでの主題とは外れる話であるため割愛する。
上表は理解のために簡素化して記しているが、実際にはシーケンス番号は0から始まるのではなく、適当な番号から始まり、以降のパケットにおいても第1パケットのシーケンス番号だけ加算された値が用いられる。この事情は、上表の「シーケンス番号」だけでなく「ACK番号」についても同様である。つまり、上の表を、実際の送受信パケット内で用いられるもので表記すると、以下のようになる。
この加算値、つまり、セッションの第1パケットに含まれるシーケンス番号は、イニシャルシーケンス番号(ISNと略される)と呼ばれている。上表がセッション確立開始時点からのパケットであれば、990000がイニシャルシーケンス番号となる。
なお、シーケンス番号が取りうる範囲は32ビットで示される数値に限られる。上限に達した場合は0からサイクリックに使用されることになる。