TCP拥塞控制

TCP的拥塞控制一共分为四个过程,分别为慢启动过程,拥塞避免过程,快速重传和快速恢复。
首先呢,先理解一下,TCP是通过什么方式得知到当前的网络状况是什么样子的呢。这样从TCP的超时重传计时器说起,当TCP每次发送一个数据包,都会为数据包建立一个计时器,当在规定的时间接收方没有ACK回复,那么TCP就会认为是当前的网络出现拥塞,会开始重传该包并且,对于拥塞的状态进行相应的处理。但是还存在这样一种情况,就是接收方收到的报文不是按序到达的,可能收到了1,2,4,5号数据包,但是没有收到3号,这时候接收方就不会等到下次给发送方返回信息的时候进行捎带确认,然后等待发送方超时重传了,而是会发送连续三个关于当前包的ACK给接收方,而这连续三个ACK也是标志着网络拥塞的一种方式,但是跟超时重传那种标志着网络拥塞的方式处理的方式不同。
从拥塞窗口cwnd开始说起,我们都知道TCP有个用于端对端流量控制的rwnd窗口,用于接收方告知发送方当前接收方的接收能力,流量控制要求通信的双方在每次交互的时候告诉对方此时自己能接收流量的多少,。而cwnd窗口值的大小就表示能够发出去但是还没有收到ACk的包的数量,是发送方自己维护的一个值,是不需要通知给接收方的,它是用来做拥塞控制的,而且我们可以很容易的得出来一个结论,那就是cwnd的大小永远不可能超过rwnd的大小。

  1. 慢启动过程
    慢启动过程中有两个很重要的参数一个是cwnd,一个是ssthresh(这个值为慢启动的阈值,在下面会谈到)。
    下面先谈一下整个慢启动的过程,首先拥塞窗口被初始化为cwnd=1(代表了一次只能发送一个包MSS),每次经过一个RTT,发送方收到了所发出去的包的ACK后,cwnd就会指数增长,例如第一次发送1个包,收到了ACK,第二次就可以发送2个包,第三次4个,8个…直到到达ssthresh,进入拥塞避免阶段。为什么有慢启动这个过程呢,首先我们会发现,慢启动并不慢,个人觉得更像是一种对于网络的传输能力的快速验证,这样可以更充分的利用网络带宽,因为达到网络当前的极限的速度更快,我们争取快点探测出网络的状况,然后去做出调整,说到底也不过就是为了发出更多的包。
  2. 拥塞避免
    拥塞避免阶段是因为,一个TCP不应该一直无限度的进行指数增长,那样网络拥堵的概率就太高了。所以当慢启动过程中没有出现丢包并且到达阈值的时候我们就让cwnd进行线性增加,也就是每次经过一个没有丢包的或者快速重传(3个ACK)的RTT之后cwnd就会增长一个,但是请记住cwnd永远是不可以超过rwnd的。

关于上面两个过程中出现超时重传之后的应对措施:
首先会将将ssthresh置为cwnd的一半,cwnd置为1,然后从慢启动开始进行,还是按照1,2过程。

快速重传
关于上面两个过程中出现收到三个重复的ACK之后的应对措施:
这是避免在网络状态不是十分拥堵的情况下过于减小了拥塞窗口的大小。当发送方接收到三个重重复的ACK之后就说明了,当前接收方接受到的数据不是按序的,出现了丢包,那么就会进入快速重传过程:
1. 首先将ssthresh置为当前的cwnd的一半,然后将cwnd置为ssthresh加3
2. 进入快速恢复阶段
快速恢复
1. 重传丢失的包
2. 当收到老的ACK的时候,cwnd就增加一个
3. 当收到新的ACK,就将cwnd设置为慢启动阶段的阈值(ssthresh)进入拥塞避免阶段。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值