最初在 Networking SE 中询问时,我被提到了这个站点。
我对 TCP 中的 rwnd 广告有一些疑问。我已经阅读了 RFC,但留下了没有答案的想法(或者我可能错过了一些东西)。也许有些答案取决于实现 - 在这种情况下,请使用您的经验回答,因为我想知道在一般情况下会发生什么。
TCP标准规定如下:
即使发送窗口为零,发送 TCP 也必须准备好从用户处接受并发送至少一个八位字节的新数据。
我认为这样做的原因是窗口探测消息包含一个八位字节的数据。然而,这让我想到:
我没有看到标准中规定探测数据包必须包含一个八位字节的新数据。是否有不同的方法来探测窗口大小?
如果这是唯一的方法,我想知道为什么重新发送旧段(带有旧序列号)是不够的。接收方是否必须在某个时刻仅确认窗口内的数据(意味着不一定要确认旧数据),这意味着我们必须将探测数据包视为该规则的例外?
一般来说,当窗口变大时,接收方会通知发送方吗?是否必须这样做(我知道确认可能会丢失,所以发件人可能不得不进行调查)?
探测数据包是否仅在
window = 0
或可能之前发送时发送?