[TCP灵魂之问]TCP 的拥塞控制、慢启动、慢启动阈值、拥塞避免、快速重传和快速恢复

说说 TCP 的拥塞控制?

  • 流量控制发生在发送端跟接收端之间
  • 而TCP 的拥塞控制主要处理的问题是,整个网络环境,网络特别差,特别容易丢包的情况。

在这里插入图片描述

对于拥塞控制来说,TCP每条连接都需要维护两个核心状态:
  • 拥塞窗口(Congestion Window,cwnd):
 是指目前自己还能传输的数据量大小;
	接收窗口(rwnd)是接收端给的限制
	拥塞窗口(cwnd)是发送端的限制 发送窗口大小 = min(rwnd, cwnd)
  • 慢启动阈值(Slow Start Threshold,ssthresh)
涉及到的算法有这几个:
  • 慢启动
采用一种保守的算法来慢慢地适应整个网路,这种算法叫慢启动;
过程:
1.首先,三次握手,双方宣告自己的接收窗口大小
2.双方初始化自己的拥塞窗口(cwnd)大小
3.在开始传输的一段时间,发送端每收到一个 ACK,拥塞窗口大小加 1,
也就是说,每经过一个 RTT,拥塞窗口 翻倍。
如果说初始窗口为 10,
那么第一轮 10 个报文传完且发送端收到 ACK 后,拥塞窗口 变为 20,
第二轮变为 40,第三轮变为 80,依次类推。
直到达到慢启动阈值
  • 拥塞避免
达阈值后,如何来控制拥塞窗口的大小;
原来每收到一个 ACK,拥塞窗口加1,现在到达阈值了,拥塞窗口只能加: 1/拥塞窗口
以前一轮 RTT 下来,cwnd翻倍,现在cwnd只是增加 1 而已。

慢启动和拥塞避免是一起作用的,是一体的。

  • 快速重传和快速恢复
快速重传
如果发生了丢包,数据不是按序到达,接收端则重复发送之前的ACK
比如第5个包丢了,即使第6、7个包到达的接收端,接收端也一律返回第4个包的ACK。
收到 3 个重复的 ACK ,意识到丢包,马上重传;
选择性重传
ACK 报文SACK属性,通过left edge和right edge已经收到区间
快速恢复
发送端收到三次重复ACK之后,发现丢包觉得现网络已经有些拥塞了,会进入快速恢复阶段
发送端如下改变:
拥塞阈值降低为 cwnd 的一半
cwnd 的大小变为拥塞阈值
cwnd 线性增加

结合图片更好理解:

在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值