Answers:
它回绕到0。根据RFC 793:
重要的是要记住,实际的序列号空间是有限的,尽管非常大。该空间的范围是0到2 ** 32-1。由于该空间是有限的,因此所有处理序列号的算法都必须以2 ** 32为模。当序列号从2 ** 32-1再次循环到0时,此无符号算法保留了序列号的关系。计算机模运算有一些微妙之处,因此在编程比较这些值时应格外小心。符号“ = <”表示“小于或等于”(模2 ** 32)。
是。所有详细信息都可以在TCP规范RFC 793-传输控制协议中找到。
重要的是要记住,实际的序列号空间是有限的,尽管非常大。该空间的范围是0到2 32-1。
由于空间是有限的,因此所有处理序列号的算法都必须以2 32为模。当序列号从2 32-1再次循环到0时,这种无符号算法保留了序列号的关系。
计算机模运算有一些微妙之处,因此在编程比较这些值时应格外小心。符号“ = <”表示“小于或等于”(模2 32)。
x
和y
被键入,uint32_t
则定义x<=y
为mean是可行的(uint32_t)(y-x) < 0x80000000
。
是的,它确实可以环绕。您可以在Wikipedia或RFC1323 上阅读它,该书显示了如何防止包装的序列号。
让我引用:
TCP时间戳用于称为“保护的序列号保护”或PAWS的算法中(有关详细信息,请参阅RFC 1323)。当接收窗口越过序列号回绕边界时,将使用PAWS。如果数据包可能被重传,它会回答以下问题:“此序号是在前4 GB还是在第二GB?” 时间戳用于打破平局。
和:
PAWS使用与前面描述的RTTM机制相同的TCP时间戳选项,并假定每个接收到的TCP片段(包括数据和ACK片段)都包含一个时间戳SEG.TSval,其值在时间上是单调不变的。基本思想是,如果接收到的段的时间戳SEG.TSval小于最近在此连接上收到的某个时间戳,则该段可以作为旧副本丢弃。
在PAWS和RTTM机制中,“时间戳”都是模块化32位空间中的32位无符号整数。因此,“小于”的定义方式与对TCP序列号的定义方式相同,并且应用了相同的实现技术。如果s和t是时间戳记值,则在0 <(t-s)<2 ** 31时,s <t,以无符号32位算术计算。