TCP序列号的最大值

时间:2013-01-28 05:04:54

标签: tcp packet iptables

我正在尝试捕获数据包并重新组织数据包以获取原始HTTP请求。

我正在通过IPQUEUE(通过iptables规则)捕获数据包,我发现数据包没有按顺序捕获。

我已经知道在TCP协议中,数据包必须重新排序,所以我试图按序列号重新排序数据包。

根据维基百科,TCP的序列号是32位数。那么,如果序列号达到MAX 32位数会怎么样?

因为SYN包的序列号是随机数,我认为可以非常快地达到这个限制。

如果有人对此表示赞扬,或者有一些链接有帮助,请给我一个答案。

3 个答案:

答案 0 :(得分:1)

来自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还具有Timestamps的概念来处理条件数环绕条件。来自上面的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环绕情况。 您可以在RFC-1323

中找到有关PAWS的更多信息

答案 1 :(得分:0)

RFC793第3.3节:

  

必须记住实际的序列号空间是     有限的,虽然非常大。此空间范围为0到2 * 32 - 1。     由于空间有限,所有算术处理序列     数字必须以模2执行 * 32。这个无符号算术     保留序列号循环时的关系     再次2 ** 32 - 1到0。计算机模数有一些细微之处     算术,所以在编程时应该非常小心     比较这些价值观。

对序列号进行的任何算术都是模2 ^ 32

答案 2 :(得分:0)

简单来说,32位无符号数将包围:

...
0xFFFFFFFE
0xFFFFFFFF
0x00000000
0x00000001
...