TCP滑动窗口机制 流量控制

  • TCP滑动窗口机制

TCP滑动窗口机制分为两种:固定大小窗口;滑动窗口(不固定大小)。

由于TCP传输是支持全双工的,因此发送方和接收方各维护了两个滑动窗口(接收窗口和发送窗口)。

滑动窗口会对数据帧进行编号,只有落在发送窗口的数据才能被发送,也只有落在接收窗口的数据才能被读取。因此滑动窗口可以用来实现流量控制(动态改变滑动窗口的大小)。

TCP使用肯定确认机制,其确认号为下一个所期待的字节。假设发送方窗口此时大小为3,也就是说每次以三个数据包的方式发送数据。发送方发送***为1、2、3的三个数据包,接收方设备成功接收数据包,用***4确认。发送方设备收到确认,继续以窗口大小3发送数据。当接收方设备要求降低或者增大网络流量时,可以对窗口大小进行减小或者增加,本例降低窗口大小为2,每一次发送两个数据包。当接收方设备要求窗口大小为0,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。发送方接收到携带窗口号为0的确认,停止这一方向的数据传输。

  • 固定大小窗口机制

TCP滑动窗口机制 流量控制

从上图可以看出,固定大小窗口机制在发送数据时必须要先得到接收方的确认消息才可以继续发送。当发送的数据量很大时,如果窗口过小很容易就会造成网络延迟。而发送窗口过大,接收窗口过小时,就容易造成网络拥塞。所以我们就引入了滑动窗口机制,窗口的大小并不是固定的而是根据我们之间的链路的带宽的大小,这个时候链路是否拥护塞。接受方是否能处理这么多数据了。

我们可以通过以下几张图分析滑动窗口机制。

  • 滑动窗口机制

TCP滑动窗口机制 流量控制

如图第一次发送,连续发送三个数据包,接收端接收数据包,并发送ACK确认.此时ACK=3,说明这是对数据包2的确认,数据包3丢弃。发送方在下一次发送时便知接收方只能接收2个数据包,因此下次发送时将从第三个数据包开始发送,发送2个数据包。

TCP滑动窗口机制 流量控制

此时发送方接收到ACK之后将3、4的数据包发送给接收方,接收方接收到数据包并发送ACK=5给发送方。至此开始循环往复发送和就收数据,中间可能滑动窗口大小可能还会改变,但原理同上。

  • 滑动窗口协议 

滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。 

只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。    

收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。    

当发送窗口和接收窗口的大小都等于1时,就是停止等待协议。

---------------------------------------------------------------------------------------------------------------------------------

  • 本文参考自以下博文:

点击打开链接