TCP协议的拥塞控制

拥塞

拥塞是指对网络中某一资源的需求超过了该资源所能提供的可用的部分,从而会使网络的负载增大,性能降低。TCP协议主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、块重传、快恢复。
实现

拥塞窗口

发送方维护了一个叫做拥塞窗口(cwnd)的状态变量,它的大小取决于网络的拥塞程度,并且在动态的发生变化,它只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

慢开始

TCP 在刚建立连接完成后,首先是有个慢开始的过程,其体现就是一点一点的提高发送数据包的数量,当发送方每收到一个 ACK,拥塞窗口 cwnd 的大小就会加 1。慢开始算法过程中数据大致传输呈指数性增长。
指数性增长就体现在开始增长速率慢,所以叫慢开始。但指数性增长后期增长速率极快,为防止增长过快引起,有一个状态变量慢启动门限 ssthresh (slow start threshold)控制其何时停止慢开始算法。
当 cwnd < ssthresh 时,使用慢启“开始算法”。
当 cwnd >= ssthresh 时,使用“拥塞避免算法”。

拥塞避免

慢开始每个次都将 cwnd 加倍,这样就会让 cwnd增长速度非常快快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就会随之增高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,每个轮次只将 cwnd加 1,从而降低拥塞窗口的增长速度。如果出现了超时,就让 ssthresh = cwnd / 2,从这个值开始继续增长;然后开始执行快恢复。

快重传

发送方收到三个相同的 ACK 报文时,会在特定的时间间隔过期之前,重传丢失的报文段。
当发生“快速重传”,TCP 认为这种情况不严重,就会启动快恢复算法,ssthresh 和 cwnd 也会发生变化:
cwnd = cwnd/2 ;
ssthresh = cwnd;
进入“快恢复算法”;

快恢复

经过快重传算法后,cwnd的值已经减半,并且ssthresh的值等于cwnd的值。由于发送方接收到了对方连续三个确认数据包,它认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,拥塞窗口 cwnd 现在不设置为 1 。而是将cwnd当前值减半作为新的慢开始门限 ssthresh 值,并让cwnd的值等于这个新的慢开始门限ssthresh值。随后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大,拥塞控制的过程如图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

磨剑斩秋招

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值