如果是这样,应用程序是否可以做出任何合理的猜测,或者更好的是 API 调用,以确定空闲多长时间导致窗口缩小?
需要低延迟的应用程序是否会在空闲时定期发送不必要的流量以保持窗口大小?
另一种表述问题的方式——Google 做了什么(除了避免 tcp 本身并只使用 ip / udp)?
[RFC2581] 建议如下:“如果 TCP 在超过重传超时的时间间隔内没有发送数据,则 TCP 应该在开始传输之前将 cwnd 设置为不超过 RW [初始窗口]。” 重传超时可能大约是几个往返时间,因此您需要保持相当高的发送速率以避免这种情况。那是假设您正在使用的实现遵循此建议。我不确定今天的常见做法是什么。
如果您控制平台,您可能可以使用 tcp 配置参数进行设置。在 Linux 上:tcp_slow_start_after_idle 但是请注意,关闭它可能会导致空闲后出现过大的突发。当发送处于活动状态时,发送窗口将被填满,因此只有在 ack 到达时才会将新段计量到网络中。在一段空闲时间之后,您将被允许一次填充该窗口。