四种拥塞控制算法PPT
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报 文段。 慢开始门限的初始值设置为 16 个报文段, 即 ssthresh = 16。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
发送方 发送 M1 发送 M2 发送 M3 发送 M4
接收方
确认 M1
丢失 ?
确认 M2 重复确认 M2 重复确认 M2 重复确认 M2
发送 M5
收到三个连续的 对 M2 的重复确认 立即重传 M3
发送 M6 发送 M7 t
t
4.快恢复算法
(1) 当发送端收到连续三个重复的确认时,就执行“乘法减小” 算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开 始算法。 (2)由于发送方现在认为网络很可能没有发生拥塞,因此现在 不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1, 而是设置为慢开始门限 ssthresh 减半后的数值,然后开始 执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地 线性增大。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
拥塞Hale Waihona Puke Baidu免 “加法增大”
网络拥塞
“乘法减小” 拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
2.拥塞避免算法
从慢启动可以看到,cwnd可以很快的增长上来,从而最大 程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去, 一定需要某个限制。TCP使 用了一个叫慢启动门限(ssthresh)的 变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶 段。 拥塞避免算法原理: 拥塞避免的主要思想是加法增大,也就是cwnd的值不再指 数级往上升,开始加法增加。此时当窗口中所有的报文段都被 确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加, 这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网 络的最佳值。
拥塞避免 “加法增大”
网络拥塞
“乘法减小” 拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置 为 1,并执行慢开始算法。
慢开始和拥塞避免算法的实现举例
当网络出现拥塞时
• 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判 断网络出现拥塞(其根据就是没有按时收到确认),就 要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口 值的一半(但不能小于2)。 • 然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。 • 这样做的目的就是要迅速减少主机发送到网络中的分组 数,使得发生拥塞的路由器有足够时间把队列中积压的 分组处理完毕。
AIMD算法
在TCP拥塞控制的文献中,经常可看见“乘 法减小”(Multiplicative Decrease)和“加法 增大”(Additive Increase)这样的提法。 这两种算法合起来常称为AIMD算法。
乘法减小 • 无论慢开始还是拥塞避免阶段,只要出现超时,就把慢开始门限值 ssthresh 减半,即设置为当前的拥塞窗口的一半(与此同时,执行 慢开始算法)。 • 当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注 入到网络中的分组数。 加法增大 • 执行拥塞避免算法后,使拥塞窗口缓慢增大 • 以防止网络过早出现拥塞 必须强调指出 • “拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全 避免网络拥塞还是不可能的。 • “拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增 长,使网络比较不容易出现拥塞。
几种常见TCP的拥塞控制算法
• • • • • • • 1.慢开始算法 2.拥塞避免算法 3.快重传算法 4.快恢复算法 我们假设: 1.数据是单方向传送,而另一个方向只传送确认。 2.接收方总是有足够大的缓存空间,因而发送窗 口的大小由网络的拥塞程度来决定。
1.慢开始算法
•
最初的TCP在连接建立成功后会向网络中发送大量的数据包, 这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。 因此新建立的连接不能够一开始就大量发送数据包,而只能根 据网络情况逐步增加每次发送的数据量,以避免上述现象的发 生。 • 发送方维持一个叫做拥塞窗口 cwnd (congestion window)的状 态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地 在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到 接收方的接收能力,则发送窗口还可能小于拥塞窗口。(取决 于接收方缓存空间的大小) • 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥 塞窗口就再增大一些,以便把更多的分组发送出去。但只要网 络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分 组数。
拥塞控制方法
计算机科学与技术 卢连女
拥塞
• 拥塞:在某段时间,若对网络中某资源的需求超过了该资 源所能提供的可用部分,网络的性能就要变坏 • 出现资源拥塞的条件: 对资源需求的总和 > 可用资源 • 为什么要控制拥塞: 若网络中有许多资源同时产生拥塞,网络的性能就要 明显变坏,整个网络的吞吐量将随输入负荷的增大而下降
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
拥塞避免 “加法增大”
网络拥塞
“乘法减小” 拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。
慢启动门限(ssthresh)的设置
• 慢开始门限 ssthresh 的用法如下: • 当 cwnd < ssthresh 时,使用慢开始算法。 • 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞 避免算法。 • 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用 拥塞避免算法。 • 拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大, 即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律 缓慢增长。
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为 执行拥塞避免算法,拥塞窗口按线性规律增长。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
拥塞避免 “加法增大”
3.快重传
• 快重传算法首先要求接收方每收到一个失序的报 文段后就立即发出重复确认。这样做可以让发送 方及早知道有报文段没有到达接收方。 • 发送方只要一连收到三个重复确认就应当立即重 传对方尚未收到的报文段。 • 不难看出,快重传并非取消重传计时器,而是在 某些情况下可更早地重传丢失的报文段。
快重传举例
拥塞避免 “加法增大”
网络拥塞 “乘法减小”
拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假 定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。
网络拥塞
“乘法减小” 拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 0
拥塞避免 “加法增大”
网络拥塞
“乘法减小” 拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始 接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 加 1。现在 cwnd 从 2 增大到 4,并可接着发送后面的 4 个报文段。
慢开始
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
拥塞避免 “加法增大”
网络拥塞
“乘法减小” 拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
拥塞避免 “加法增大”
网络拥塞
“乘法减小” 拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一 个往返时延就增加一个 MSS 的大小。
具体如后图所示
发送方每收到一个对新报文段的确认(重传的不算在内)就使 cwnd 加 1。
cwnd = 1
发送方 发送 M1
接收方 确认 M1
轮次 1
轮次 2
cwnd = 2
cwnd = 4
发送 M2~M3
发送 M4~M7
确认 M2~M3 确认 M4~M7
轮次 3 cwnd = 8 发送 M8~M15 t
拥塞控制算法的引入
TCP有一个端对端通告的接收窗口(rwnd)。窗口值的大小就代表能 够发送出去的但还没有收到ACK(确认)的最大数据报文段,显然窗 口越大那么数据发送的速度也就越快,但是也越有可能使得网络出现 拥塞, • 如果窗口值为1,那么就简化为一个停等协议,每发送一个数据, 都要等到对方的确认才能发送第二个数据包,显然数据传输效率低下。 • TCP的拥塞控制算法就是要在这两者之间权衡,选取最好的cwnd值, 从而使得网络吞吐量最大化且不产生拥塞。
发送端每收到一个确认 ,就把 cwnd 加 1。于是发送端可以接着发送 M1 和 M2 两个 报文段。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
拥塞避免 “加法增大”
网络拥塞
“乘法减小”
拥塞避免 “加法增大”
慢开始算法原理
• • • 在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1。 在每收到一个对新的报文段的确认后,将拥塞窗口加 1。 用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入 到网络的速率更加合理 这里 是说每收到1个对新的报文段的确认后,将拥塞窗口加1,而第二次 会收到2个确认,第三次会收到4个确认,以此类推,可以知道每经过 一个传输轮次,拥塞窗口就加倍。 即cwnd的大小呈指数形式增长(与拥塞避免算法相区别)
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20 ssthresh 的初始值16 新的 ssthresh 值12 8 4 慢开始 0
拥塞避免 “加法增大”
网络拥塞 “乘法减小”
拥塞避免 “加法增大”
指数规律增长
0 2 4 6 8 10 12 14 16 18 20
传输轮次
22
慢开始
慢开始
…
t
传输轮次
• 使用慢开始算法后,每经过一个传输轮次,拥塞窗口 cwnd 就加倍。
• 一个传输轮次所经历的时间其实就是往返时间 RTT。 • “传输轮次”更加强调:把拥塞窗口 cwnd 所允许发送的 报文段都连续发送出去,并收到了对已发送的最后一个字 节的确认。 • 例如,拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发 送方连续发送 4 个报文段,并收到这 4 个报文段的确认, 总共经历的时间。