拥塞控制的办法

慢开始阶段

发送方维持一个叫做拥塞窗口 cwnd (congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口。

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的数据发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的数据包。

慢开始算法的原理:

在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS 的数值

每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值。 (最初始时窗口大小是1,然后发送一个报文,然后得到确认,于是窗口变成2,然后就可以一次发送2 个报文,然后这2个报文都得到确认,于是窗口+2等于4,然后就可以一次发送4个报文,然后这4个报文都得到接收方的确认,于是窗口+4等于8,依次类推

用这样的方法逐步增大其实是以2的指数级增大)发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理

在这里插入图片描述
综上就是慢开始算法的原理

拥塞避免算法

当拥塞窗口cwnd超过了慢开始门限,则每次收到确认后,只让拥塞窗口+1

设置慢开始门限状态变量:
慢开始门限 ssthresh 的用法如下:

当 cwnd < ssthresh 时,使用慢开始算法

当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法

当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个轮次就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长

当网络出现拥塞时:

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh设置为出现拥塞时的发送方窗口值cwnd 的一半(但不能小于2)。

然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法

这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java全栈研发大联盟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值