我在一门课程中遇到了以下问题:
“假设互联网上的 TCP 连接可用带宽为 300Mbps。假设某些数据包的传输延迟非常高。在哪个延迟时间内可能会出现严重问题?这是一个现实问题吗?”
我计算出,在延迟时间约为 2 分钟时,序列计数器将发生溢出(如果您假设它从 0 开始)。根据 RFC,序列计数器将溢出到零。我在 RFC 中没有找到“如果发生这种情况该怎么办”,但也许我忽略了这一点。
我的问题是:会发生什么?这仅仅是 TCP 的限制吗?有没有解决方法(除了使用更大的序列计数器)?
答案1
好吧,相关的 RFC 会告诉你如何正确地做到这一点(并且实际上解决了这个问题)。请参阅http://www.apps.ietf.org/rfc/rfc1323.html第 4 节。
答案2
我认为溢出本身并不是一个问题,只有当您收到一个数据包时才会出现问题,该数据包的序列号在当前接收窗口内,但实际上来自数据流中的 4 GiB 之前(是 4 GiB 的倍数)。要发生这种情况,根据您的计算,数据包必须延迟两分钟(听起来很合理)。实际上,我认为这种情况不会经常发生,因为通常不会发生那所有中间系统都需要很大的缓冲空间(也需要达到 4 GiB 的数量级)。