Seb*_*ebi 16 networking tcp tcpip
我想知道,由于 TCP 标头字段中的序列号是在握手期间随机选择的,并且随着数据包的交换而逐渐增加,那么在 2^32 - initial_seq_no 传输之后会发生什么?序列号是否环绕并变为 0 或是否重用了初始值(或者是从前一个停止的位置初始化的新连接)?
jcb*_*rmu 19
它环绕到 0。根据RFC 793:
必须记住,实际的序列号空间是有限的,尽管非常大。这个空间的范围是从 0 到 2**32 - 1。由于空间是有限的,所有处理序列号的算术都必须以 2**32 为模进行。这个无符号算术保留了序列号的关系,因为它们再次从 2**32 - 1 到 0 循环。计算机模运算有一些微妙之处,因此在对这些值的比较进行编程时应格外小心。符号“=<”表示“小于或等于”(模 2**32)。
Dav*_*ill 17
是的。所有详细信息都可以在 TCP 规范RFC 793 - 传输控制协议中找到。
必须记住,实际的序列号空间是有限的,尽管非常大。这个空间的范围是从 0 到 2 32 - 1。
由于空间是有限的,所有处理序列号的算术都必须以 2 32为模进行。这个无符号算术保留了序列号的关系,因为它们再次从 2 32 - 1 到 0循环。
计算机模运算有一些微妙之处,因此在对这些值的比较进行编程时应格外小心。符号“=<”表示“小于或等于”(模 2 32)。
是的,它确实环绕。您可以在 Wikipedia或RFC1323上阅读它,其中显示了如何防止包装序列号。
让我引用:
TCP 时间戳用于称为防止包装序列号或 PAWS 的算法(有关详细信息,请参阅 RFC 1323)。当接收窗口跨越序列号环绕边界时使用 PAWS。在数据包可能被重新传输的情况下,它回答了以下问题:“这个序列号是前 4 GB 还是第二个?” 时间戳用于打破平局。
和:
PAWS 使用与前面描述的 RTTM 机制相同的 TCP 时间戳选项,并假设每个接收到的 TCP 段(包括数据和 ACK 段)都包含一个时间戳 SEG.TSval,其值在时间上是单调非递减的。基本思想是,如果收到的段的时间戳 SEG.TSval 小于最近在此连接上收到的某个时间戳,则可以将其作为旧副本丢弃。
在 PAWS 和 RTTM 机制中,“时间戳”都是模块化 32 位空间中的 32 位无符号整数。因此,“小于”的定义方式与 TCP 序列号相同,并且应用相同的实现技术。如果 s 和 t 是时间戳值,则 s < t 如果 0 < (t - s) < 2**31,以无符号 32 位算术计算。
归档时间: |
|
查看次数: |
8834 次 |
最近记录: |