滑动窗口协议
发送方和接收方都会维护一个数据帧的序列,这个序列称为窗口。发送方的窗口大小由接收方确定,目的在于控制发送速度,以免接收方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。
![TCP滑动窗口协议 - 枫叶 - 枫叶](http://img.ph.126.net/PrMLhIFUnLzExy9OjfnD_A==/670754869518310130.gif)
如图所示,4,5,6号数据帧已经被发送出去了,但是没有收到相应的ACK,7,8,9帧是等待发送的。可以看出窗口的大小为6,这是由接收端设置的。此时,如果发送端收到4号ACK,则窗口的左边缘向右收缩,窗口的右边缘则向右扩展,此时窗口就滑动了,即数据帧10也可以被发送了。
停等协议
停等协议,此时接收方的窗口和发送方的窗口大小都是1,1个比特表示就够了,所以也叫1比特滑动窗口协议。发送方这时自然发送每次只能发送一个,并且必须等待这个数据包的ACK,才能发送下一个。虽然在效率上比较低,带宽利用率明显较低,不过,在网络环境较差,或是带宽本身就很低的情况下,还是适用的。
![TCP滑动窗口协议 - 枫叶 - 枫叶](http://img612.ph.126.net/sJ9AmCXjGzsqZ_VQkXO1Ew==/1700390334310788596.gif)
后退n协议
后退n协议: