免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1974 | 回复: 0
打印 上一主题 下一主题

继续说bic和cubic [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-19 15:05 |只看该作者 |倒序浏览

                                               
以前写过一篇博客叫做tcp拥塞控制的核心,上面说过tcp拥塞控制的核心是慢启动,AIMD,丢包反馈。
bic和cubic针对tcp的改进主要就体现在AIMD上,bic和cubic用的不是AI了,而是在离目标窗口越远,增加的越多,离目标拥塞窗口越近,增加越缓。为什么用这样一个策略,请看我上一篇博客。同时针对high BDP网络的特点,采用了不同的MD参数,使得丢包的时候窗口减小的更少。
对于bic来说:
当网络出现丢包的时候,将拥塞窗口设为:
cwnd=cwnd*beta   (beta=0.8);
同时将目标拥塞窗口设定为:
last_max_cwnd=cwnd*((1+beta)/2);
当网络不丢包的时候,这个很复杂,原则是在接近目标拥塞窗口的两端,cwnd增长的很慢,离拥塞窗口越大,则增加的速度越快,但是每个rtt最大只增加16个拥塞窗口。
当拥塞窗口远小于目标拥塞窗口或者远大于目标拥塞窗口时,增加的拥塞窗口大小为:
(last_max_cwnd-cwnd)/BICTCP_B (BICTCP_B=4);last_max_cwnd-cwnd>BICTCP_B
(cwnd-last_max_cwnd)/(BICTCP_B-1);last_max_cwnd-cwnd<BICTCP_B
当拥塞窗口在目标拥塞窗口附近时,既|last_max_cwnd-cwnd|<BICTCP_B,拥塞窗口增加的很缓慢,每个往返时延增加的用手窗口为:
BICTCP_B/smooth_part  (smooth_part=20)也就是0.2个拥塞窗口。
顺带说一句,有兴趣去看bic的源码的话,结合我上面这一段去看,会非常轻松。
bic的算法有些问题,首先在拥塞窗口很小的时候中间僵持的时间太长了;其次,bic的rtt公平性不好,而且bic的算法会导致收敛到公平的性能低下。cubic用了一个和bic不同的“AI”函数:
W(t) = C(t-K)(t-k)(t-k) +last_max_cwnd;
k=(last_max_cwnd*beta)^(1/3);
这个函数唯一的变量是时间t,和rtt无关,这样以来,使得cubic的公平性得到了极大的改善。
除此以外cubic的另一个改善是他的tcp_friend函数,这个函数会计算按照传统的算法的拥塞窗口大小,当传统算法的拥塞窗口大于cubic的时,两者去其大。这个函数在拥塞窗口不够大时还是很有用处的。
                                                           
                                                           泓日天
                                                           hritian@163.com 欢迎交流
                                                                 
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93004/showart_1903874.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP