30-TCP 协议(糊涂窗口综合症)

1. 糊涂窗口综合症

糊涂窗口综合症,这个名字很有意思,原文叫 Silly Window Syndrome,简称 SWS.

一看到窗口,我们就应该反应过来这是流量控制中的东西。SWS 是这样一种情况:接收方通告了一个 1 字节的窗口给发送方,然后发送方发送了 1 字节的数据给接收方。接着,接收方又通告了一个 1 字节的窗口,这样持续下去,使网络的效率很低。

2. 解决 SWS

有两种办法可以解决此问题:

  • 针对接收方来说,先等一段时间,等到接收缓存有足够的空间了才发出确认。
  • 针对发送方来说,发送方不要发送太小的报文,而是把数据积累成一个足够大的报文段(达到 MSS),或者是积累到接收方通告窗口大小一半的报文段。

如果发送方总是有很多小数据要发送怎么办呢?实际上,我们前面学习过 Nagle 算法,它正是用于解决这个问题的。Nagle 算法的目的就是把小数据组合成一个大报文段发送出去的。

如果发送方禁用了 Nagle 算法,就不应该发送小数据,否则很容易引起 SWS 问题。

3. 总结

  • SWS 是指什么
  • 如何避免 SWS