TCP序列号问题

Met*_*eta 30 tcp

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

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

Eli*_*sky 30

序列号循环回到0. 来源:

替代文字

TCP序列号和接收窗口的行为非常像时钟.每次接收器接收并确认新的数据段时,接收窗口就会移动.一旦序列号用完,序列号就会循环回0.

另请参阅RFC 1323的第4章.


cas*_*key 19

它包裹起来.RFC 793:

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

阅读更多:http://www.faqs.org/rfcs/rfc793.html#ixzz0lcD37K7J

  • 感谢RFC链接!如果我有足够的代表,我会投票给你! (2认同)

Dea*_*ing 13

序列号实际上不是"整个流中分组中第一个字节的索引",因为序列号故意以随机值开始(这是为了停止一种称为TCP序列预测攻击的攻击形式).

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