滑动窗口本质上是描述接受方的 TCP 数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为 0 的 TCP 数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为 0 的数据报的到来。书中的 P211 和 P212 很好的解释了这一点。
关于滑动窗口协议,书上还介绍了三个术语,分别是:
1. 窗口合拢:当窗口从左边向右边靠近的时候,这种现象发生在数据被发送和确认的时候。
2. 窗口张开:当窗口的右边沿向右边移动的时候,这种现象发生在接受端处理了数据以后。
3. 窗口收缩:当窗口的右边沿向左边移动的时候,这种现象不常发生。
TCP 就是用这个窗口,慢慢的从数据的左边移动到右边,把处于窗口范围内的数据发送出去(但不用发送所有,只是处于窗口内的数据可以发送。)。这就是窗口的意义。图 20-6 解释了这一点。窗口的大小是可以通过 socket 来制定的, 4096 并不是最理想的窗口大小,而 16384 则可以使吞吐量大大的增加。