TCP序列号的最大值

TCP序列号的最大值,tcp,packet,iptables,Tcp,Packet,Iptables,我试图捕获数据包并重新组织数据包以获得原始HTTP请求 我是通过IPQUEUE(根据iptables规则)捕获数据包的,我发现数据包不是按顺序捕获的 我已经知道,在TCP协议中,数据包必须重新排序,所以我尝试按序列号重新排序数据包 根据维基百科,TCP的序列号是32位数字。然后,如果序列号达到最大32位,会发生什么 因为SYN包的序列号是随机数,我认为这个限制可以很快达到 如果有人对此有建议,或者有一些有用的链接,请给我一个答案。RFC793第3.3节: 必须记住,实际的序列号空间是 有限的,虽

我试图捕获数据包并重新组织数据包以获得原始HTTP请求

我是通过IPQUEUE(根据iptables规则)捕获数据包的,我发现数据包不是按顺序捕获的

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

根据维基百科,TCP的序列号是32位数字。然后,如果序列号达到最大32位,会发生什么

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

如果有人对此有建议,或者有一些有用的链接,请给我一个答案。

RFC793第3.3节:

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


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

简单来说,32位无符号数将环绕:

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

简单地说,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的更多信息如果序列号扭曲,我如何区分正确的序列数据包和重新传输的数据包?例如,如果头部序列号从0x00000000开始并缠绕,然后完成0x00000001,我怎么知道序列号为0x00000001的数据包不是重传数据包?它不会在一个数据包中以0xFFFFFFFF(4G)环绕。如果我在webhard上上载10Gb文件,数据包序列号会发生什么变化?若SYN数据包序列号为0x00000000,且数据包传输继续,则最终数据包序列号将为0xFFFFFF,并将其环绕,并且额外的数据包将具有序列号0x00000000。这是我的问题。如何确定第二个0x00000000数据包是否被重新传输?请在Wireshark中查看此信息,您可能会理解。不会那样的。
  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.