TCP滑动窗口协议

滑动窗口协议

发送方和接收方都会维护一个数据帧的序列,这个序列称为窗口。发送方的窗口大小由接收方确定,目的在于控制发送速度,以免接收方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。

TCP滑动窗口协议 - 枫叶 - 枫叶

 如图所示,4,5,6号数据帧已经被发送出去了,但是没有收到相应的ACK,7,8,9帧是等待发送的。可以看出窗口的大小为6,这是由接收端设置的。此时,如果发送端收到4号ACK,则窗口的左边缘向右收缩,窗口的右边缘则向右扩展,此时窗口就滑动了,即数据帧10也可以被发送了。

停等协议

停等协议,此时接收方的窗口和发送方的窗口大小都是1,1个比特表示就够了,所以也叫1比特滑动窗口协议。发送方这时自然发送每次只能发送一个,并且必须等待这个数据包的ACK,才能发送下一个。虽然在效率上比较低,带宽利用率明显较低,不过,在网络环境较差,或是带宽本身就很低的情况下,还是适用的。

TCP滑动窗口协议 - 枫叶 - 枫叶
后退n协议
后退n协议:停等协议在恶劣环境下,效率太低,所以有了后退n协议,这里发送的窗口大小为n,接收方的大小为1,
TCP滑动窗口协议 - 枫叶 - 枫叶
如图,发送方一口气发送了10个数据帧,前面的两个数据帧正确返回了,数据帧2出现了错误,这时发送方重新发送了2-8这7个帧,接受方也必须丢弃之前接受的3-8的帧。
 后退n协议的好处是提高了效率,但是一旦网络情况糟糕,则会导致大量数据重发,效率可能不如上面的停等协议。

 选择重传协议

后退n协议的另外一个问题,当有错误帧出现后,总是要重发所有的帧,在网络不好的情况下会进一步恶化网络,重传协议便是解决这个问题,接收端总会有缓存所有收到的帧,当某个帧出现错误时,只会要求重传这一个帧,只有当某个序号的所有帧都正确收到后,才会一起提交给高层应用。重传协议的缺点是接收端需要更多的缓存


转自:http://gengning938.blog.163.com/blog/static/12822538120116207431746/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值