TCP拥塞控制

43 篇文章 1 订阅
18 篇文章 0 订阅

前一节分析了TCP流量控制,流量控制是接收端根据自身的自由限制(缓冲区大小、CPU处理性能)控制发送端端的数据包速率和大小,是点到点的通信质量控制。而拥塞控制是防止过多的数据包注入网络造成网络通信的阻塞,涉及网络中的交换机、路由器等资源的限制,所以拥塞控制是一个全局的过程,涉及整个网络的状况。拥塞控制主要冲三个方面介绍:慢启动、快速重传、快速恢复。

1、慢启动/拥塞避免算法

TCP的拥塞控制的慢启动定义了一个拥塞窗口cwnd和慢启动开始门限(ssthresh),发送端你的发送的数据包不能超过拥塞窗口cwnd,拥塞窗口cwnd刚开始设置为1,因为刚开始不知道网络环境是怎么样的,只能发送一个小的数据包探测,接下来拥塞窗口变成2,就可以发送2个报文了,接下来拥塞窗口变成4,慢启动时拥塞窗口的增加是指数增大。cwnd和ssthresh存在以下三种关系:

cwnd < ssthresh:收到ACK后拥塞窗口指数增大。

cwnd > ssthresh:使用拥塞避免算法,拥塞避免算法是cwnd每次收到ACk就加1,是线性增大窗口。

cwnd = ssthresh:这种情况既可以使用慢启动算法也可以使用拥塞避免算法。

当出现网络拥塞时无论是拥塞控制算法还是慢启动ssthresh都减小一半,如果是从慢启动开始那么cwnd变成1开始慢启动,如果是从拥塞控制算法开始那么就从新的sshtrresh开始线性增大窗口。拥塞控制算法比慢启动窗口增大要慢。

拥塞控制图

 

如上图所示刚开始ssthresh是64,当在67时出现网络拥塞ssthresh减小为32,cwnd减小为1重新开始慢启动。

2、快速重传/快速恢复

(1)快速重传

tcp协议是可靠的传输协议,接收端收到一个数据包就会回复ACK+序列号确认,序列号 = 起始序列号 + 接受的数据字节 + 1。比如起始序列号是1000,接受到数据200字节,就会回复1201序列号确认,如果200字节以后的数据包丢失没有收到,那么接受端就会一致回复ACK + 1201确认序列号,当接收到收到三次这样的ACK就会立即重传200字节以后的数据而不是等待定时器去触发重传。所以只要接受端收到三次重复的ACK就会立即启动重传。

(2)快速恢复

触发快速重传时接下来就是快速恢复,快速恢复触发时ssthresh就会减半,开始拥塞控制算法而不是慢启动算法,这时的拥塞窗口cwnd会变成新的ssthresh + 3倍数据包长度。因为200字节之前的数据包接受端已经收到了,要重传200字节以后的数据包,就要适当的增大拥塞窗口cwnd。重传数据后当下一个确认新数据的ACK到达时,设置cwnd为ssthresh,这个ACK应该是在进行重传后的一个往返时间内对步骤1中重传的确认。另外,这个ACK也应该是对丢失的分组和收到的第1个重复的ACK之间的所有中间报文段的确认

拥塞空时快恢复

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值