假设 C 是 TCP 客户端,S 是 TCP 服务器。
C 向 S 发送了一个 TCP 段,其中包含字节 10、11、12 ... 20 (seq = 10)。到达 S 段(沿途没有丢失)。S是否有可能发送例如。ack 15,并且他丢弃所有其他字节(15、16、17、18、19、20),因此 C 必须在这次 seq = 15 时发送另一个段。
换句话说,“段拆分”是否可能:该服务器接受一个段的第一部分字节并丢弃第二部分(由于例如完整的缓冲区或类似的东西),然后从下一个获取第二部分字节分割?还是段总是被完全接受?
我知道窗口大小应该防止这种情况:在三次握手期间,服务器将发送他的窗口大小,客户端不会发送大于该大小的段。服务器稍后将更新他的窗口大小,客户端将继续尊重这一点。
但是这个呢:在三次握手期间,服务器发送他的窗口大小,例如 65000。当这个客户端发送他的段时,另一个客户端开始三次握手并向服务器发送一些大的东西,这使服务器窗口大小变小。第二个客户收到通知,但第一个没有。第一个可能会发送一个适合旧窗口大小但不适合新窗口大小的段。那么会发生什么呢?