我正在尝试捕获数据包并重新组织数据包以获取原始HTTP请求。
我正在通过IPQUEUE(通过iptables规则)捕获数据包,我发现数据包没有按顺序捕获。
我已经知道在TCP协议中,数据包必须重新排序,所以我试图按序列号重新排序数据包。
根据维基百科,TCP的序列号是32位数。那么,如果序列号达到MAX 32位数会怎么样?
因为SYN包的序列号是随机数,我认为可以非常快地达到这个限制。
如果有人对此表示赞扬,或者有一些链接有帮助,请给我一个答案。
答案 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
...