TCP序列号问题

时间:2010-04-20 05:21:37

标签: tcp

这是一个理论问题,而不是我遇到的实际问题。

如果我理解正确,数据包的TCP头中的序列号是整个数据包中第一个字节的索引,对吗?如果是这种情况,由于序列号是无符号的32位整数,那么超过FFFFFFFF = 4294967295字节后会发生什么?序列号是否会回绕,或者发送方是否会发送SYN数据包以重新启动0?

3 个答案:

答案 0 :(得分:30)

序列号循环回0. Source

alt text

  

TCP序列号和接收   窗户的表现非常像时钟。   接收窗口每次都会移动   接收器接收并确认   一个新的数据段。一旦运行   序列号不按顺序排列   数字循环回到0。

另见RFC 1323第4章。

答案 1 :(得分:19)

它包装。 RFC 793:

  

必须记住,实际的序列号空间是有限的,尽管非常大。此空间的范围为0到2 ** 32 - 1.由于空间是有限的,所有处理序列号的算术必须以2 ** 32为模进行。这个无符号算术保留了序列号的关系,因为它们再次从2 ** 32 - 1循环到0。计算机模运算有一些细微之处,因此在对这些值的比较进行编程时应该非常小心。符号“=<”表示“小于或等于”(模2 ** 32)。

了解详情:http://www.faqs.org/rfcs/rfc793.html#ixzz0lcD37K7J

答案 2 :(得分:13)

序列号实际上并不是“整个流中数据包中第一个字节的索引”,因为序列号故意以随机值开始(这是为了阻止一种称为TCP Sequence Prediction Attack的攻击形式)。

不需要SYN,序列号一旦达到极限就会再次循环回零。