5

元のHTTPリクエストを取得するために、パケットをキャプチャしてパケットを再編成しようとしています。

IPQUEUE(iptablesルールによる)でパケットをキャプチャしていますが、パケットが順番にキャプチャされていないことがわかりました。

TCP プロトコルでは、パケットを再配列する必要があることを既に知っているので、シーケンス番号でパケットを再配列しようとしています。

ウィキペディアによると、TCPのシーケンス番号は32ビットの数字です。では、シーケンス番号が MAX 32bits の数に達するとどうなるでしょうか?

SYN パケットのシーケンス番号は乱数であるため、この制限には非常に早く到達できると思います。

誰かがそれを称賛している場合、または役立つリンクがいくつかある場合は、回答を残してください。

4

3 に答える 3

3

RFC-1185から

  Avoiding reuse of sequence numbers within the same connection is
  simple in principle: enforce a segment lifetime shorter than the
  time it takes to cycle the sequence space, whose size is
  effectively 2**31.

  If the maximum effective bandwidth at which TCP
  is able to transmit over a particular path is B bytes per second,
  then the following constraint must be satisfied for error-free 
  operation:
      2**31 / B  > MSL (secs)  

つまり、簡単に言えば、TCPがそれを処理します。この条件に加えて、TCPには、シーケンス番号のラップアラウンド条件を処理するためのタイムスタンプの概念もあります。上記の同じRFCから

  Timestamps carried from sender to receiver in TCP Echo options can
  also be used to prevent data corruption caused by sequence number
  wrap-around, as this section describes.

具体的には、TCPはPAWSメカニズムを使用してTCPラップアラウンドケースを処理します。PAWSの詳細については、RFC-1323を参照してください。

于 2013-01-28T06:17:57.637 に答える
0

RFC793 セクション 3.3:

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

シーケンス番号に対して行われる算術演算は、モジュロ 2^32 です。

于 2013-01-28T05:08:31.137 に答える