[TCP灵魂之问]TCP 的流量控制、滑动窗口
说一说 TCP 的流量控制
流量控制要做的事情,就是在通过接收缓存区的大小,控制发送端的发送。如果对方的接收缓存区满了,就不能再继续发送了。
具体是如何做的呢?举个例子:
- 首先双方三次握手,初始化各自的窗口大小,均为 200 个字节。
- 假如当前发送端给接收端发送 100 个字节,那么此时对于发送端而言,可用窗口减少了 100 个字节。
- 现在这 100 个到达了接收端,被放到接收端的缓冲队列中。不过此时由于大量负载的原因,接收端处理不了这么多字节,只能处理 40 个字节,剩下的 60 个字节被留在了缓冲队列中。
- 上述是处理能力不够用啦的情况,意思你发送端给我少发点,所以此时接收端的接收窗口应该缩小,具体来说,缩小 60 个字节,由 200 个字节变成了 140 字节,因为缓冲队列留下 60个字节没被拿走。
- 因此,接收端会在 ACK 的报文首部带上缩小后的滑动窗口 140 字节,发送端对应地调整发送窗口的大小为 140 个字节。
- 此时发送端情况是,已经发送且确认的部分增加 40 字节,右移 40 个字节,同时发送窗口缩小为 140 个字节。
- 下图:滑动窗口结构(发送端)
还是搞不清,那你写一下画一下就想得明白了