我在这里提问是因为 cs stack exchange 的计算机网络标签仅有50个关注者,且没有TCP标签。
在我国的某项全国级别的研究生入学考试中,出现了以下问题:
“在打开TCP连接时,初始序列号应使用即使在主机关闭时也能继续运行的时间戳(ToD)时钟来派生。低32位ToD时钟的计数器用于初始序列号。时钟计数器每毫秒递增一次。最大数据包生存期为64秒。
以下哪一个选项最接近连接数据包所使用的序列号可以增加的最小允许速率?”
答案显然是(B)0.064/s。
通常,TCP最大连接速度由数据包生命周期控制。如果您使用32位序列号,则在2^32计数后,数字将重复,因为会发生环绕。如果发送带有编号X的数据包,则在发送2^32字节后,编号X将被重新分配给其他某个数据包。当具有编号X的第二个数据包进入连接时,第一个数据包不应该在网络中(以避免重复)。因此,在数据包生命周期之前,序列号不应重复。
这就控制了最大速率。
但是,正如问题所问,我们需要找到最小速率。
顺便说一句,即使每隔64秒更改一次序列号(每64秒1个序列号),那么每秒的序列值数量= 1/64 = 0.015...,这是选项A,但显然不是正确答案。
我的问题:
在我国的某项全国级别的研究生入学考试中,出现了以下问题:
“在打开TCP连接时,初始序列号应使用即使在主机关闭时也能继续运行的时间戳(ToD)时钟来派生。低32位ToD时钟的计数器用于初始序列号。时钟计数器每毫秒递增一次。最大数据包生存期为64秒。
以下哪一个选项最接近连接数据包所使用的序列号可以增加的最小允许速率?”
(A) 0.015/s (B) 0.064/s (C) 0.135/s (D) 0.327/s"
答案显然是(B)0.064/s。
通常,TCP最大连接速度由数据包生命周期控制。如果您使用32位序列号,则在2^32计数后,数字将重复,因为会发生环绕。如果发送带有编号X的数据包,则在发送2^32字节后,编号X将被重新分配给其他某个数据包。当具有编号X的第二个数据包进入连接时,第一个数据包不应该在网络中(以避免重复)。因此,在数据包生命周期之前,序列号不应重复。
这就控制了最大速率。
但是,正如问题所问,我们需要找到最小速率。
顺便说一句,即使每隔64秒更改一次序列号(每64秒1个序列号),那么每秒的序列值数量= 1/64 = 0.015...,这是选项A,但显然不是正确答案。
我的问题:
- 什么因素决定了最小速率,是一般情况还是特定问题?
- 为什么是0.064/s,如果序列号的更改速度比这慢会发生什么?如何解决这个问题以得出0.064/s?
我知道这更多是一个理论性问题,但它一直在困扰着我很长时间...任何帮助都非常感谢。(包括证明这个问题和/或答案是错误的。这个问题值得思考的唯一原因是它曾在一个重要和高价值的全国性考试中被提出。)