文献标识码: A
随着通信网络的不断发展,不同类型的网络并存成为目前通信领域的一种普遍现象,有线/无线混合网络成为目前通信研究的一个热点,通常情况下这种有线/无线混合网络被称为异构网络。异构网络的整体性能受TCP协议算法的影响,所以提高TCP协议性能对提高异构网络的整体性能来说是非常必要的。目前应用最广泛的TCP协议是TCP Reno协议,它是为有线网络设计的,在有线网络环境中性能表现良好。由于异构网络中有着较高的误码率,较大的带宽延时积,链路带宽不对称等特性,使得传统的TCP Reno协议应用在异构网络环境中性能低下。因此如何提高异构网络下的TCP性能已经成为了一个研究热点[1-3]。
目前改善TCP协议在异构网络环境下的性能的方法主要分为以下三类:链路层方法、分离连接方法和端到端方法。
链路层方法是通过本地重传和前向纠错屏蔽发送端与链路相关的丢包。但由于链路层协议与高层协议都有独立的差错控制功能,存在一定的重复性,相互竞争会降低无线信道的利用率,导致端到端吞吐量下降。代表性协议是Snoop[4]。
分离链接方法是在基站处将TCP连接分成有线连接和无线连接两部分:有线连接部分使用传统的TCP协议,无线连接部分使用改进的TCP协议。它破坏了端到端的TCP语义连接性。代表性协议是Indirect-TCP[5]。
端到端方法只修改TCP发送端和接收端的协议,保证了端到端的TCP语义连接性。代表性协议是TCP Westwood[6]。该协议在发端监视收到的ACK数据流,并以此来估计当前链路的可用带宽。一旦丢包,发端将利用估计的带宽对慢启动阈值和拥塞窗口进行适当设置,保证了网络的快速恢复并可更有效地避免拥塞。
本文提出了一种适用于异构网络的TCP算法TCP -BM(TCP Based Measurement),其基本思想是利用往返时延RTT来控制拥塞窗口的增长速度,使发送窗口稳定在一个比较理想的状态,在网络发生丢包后,通过对RTT的实时分析判断出丢包原因,从而采取相应的控制措施。
1 传统TCP Reno协议及分析
1.1 TCP Reno协议流程
TCP Reno协议包括慢启动、拥塞避免、快速重传和快速恢复4个阶段:
(a)慢启动阶段:TCP将拥塞窗口值设为1,发送端每收到一个新的ACK就把拥塞窗口值增加一个,即W=W+1,W表示拥塞窗口;
(b)拥塞避免阶段:发送端每收到一个新的ACK就把拥塞窗口值增加拥塞窗口值的倒数,即W=W+1/W;
(c)丢包标志为3个重复ACK:发送端重传丢失的包,并且在窗口范围内继续发送新的数据包,此后发送端每收到1个重复的ACK就将拥塞窗口值增加1;
(d)丢包标志为计时器超时:发送端重传丢失的包,然后将慢启动阈值设为当前窗口的一半,将拥塞窗口设为1。
因为TCP协议是端到端的协议,因此这里的说明只涉及发送端和接收端。在连接开始时,发送端执行(a), 直到拥塞窗口值大于(或等于)慢启动阈值或者出现丢包:(1)如果是出现丢包,发送端执行策略与丢包标志相关,如果丢包标志为3个重复ACK,则发送端执行(c), 直到发送端收到新的ACK为止,然后发送端TCP将拥塞窗口和慢启动阈值都设为快速重传前拥塞窗口值的一半,重新开始拥塞避免阶段;如果丢包标志为计时器超时,则发送端执行(d),重新开始慢启动阶段;(2)如果是拥塞窗口大于(或等于)慢启动阈值,则发送端执行(b),该策略一直持续到出现丢包为止,一旦出现丢包,发送端执行策略同慢启动阶段出现丢包时采取的策略一样。
1.2 TCP Reno协议分析
快速恢复算法避免了在快速重传之后通道为空的现象,从而避免了在单个报文丢失后重新开始慢启动阶段。TCP发送端在每个往返时延内最多重传1个包,因此在只有1个数据包丢失的情况下,该协议性能最佳。当1个窗口中有2个报文丢失时,在TCP发送端快速重传和快速恢复就将被执行2次,因为在快速恢复阶段窗口的调整策略为ssthresh=cwnd/2,cwnd=ssthresh,因此慢启动阈值和拥塞窗口都将被减小2次,这是不必要的。当有更多数据包丢失时,根据Reno协议TCP发送端就必须等待重发计时器超时才能恢复。
2 TCP-BM协议
该算法的基本思想是在慢启动阶段根据网络的实时状况来合理地调节拥塞窗口的增长速度;将拥塞避免过程分为正增长过程和负增长过程,从而使发送窗口稳定在比较理想的状态而有预见性地避免拥塞。在网络发生丢包后,通过对RTT的实时分析以及估计的带宽判断出丢包原因,从而采取不同的恢复措施。下面详细介绍TCP-BM协议的几个阶段,未说明部分沿用传统的TCP Reno协议。
2.1慢启动阶段
开始时数据量较少,对带宽的利用率较低,因此可以使拥塞窗口较快地增长;当拥塞窗口增大到一定程度时,减小其增长速度,使其相对缓慢并且平滑地增加;最后当拥塞窗口的大小接近于慢启动阈值时,再次减小其增加速度,使其更加缓慢且平滑地接近于慢启动阈值。算法描述如下:
If (cwnd<ssthresh)
If (cwnd*(1+(double)(rtt/rttmin)) <ssthresh)
cwnd+=(double)(rtt/rttmin);
else if (2*cwnd < ssthresh)
cwnd+=1;
else cwnd+=(double)(rttmin/ rtt)
其中,cwnd表示拥塞窗口;ssthresh表示慢启动阈值,rtt表示当前的往返时延值,它反映当前的网络状态;rttmin表示往返时延历史数据中的最小值,它反映历史上网络的最好状态。在连接开始时,拥塞窗口大小设为1,以后每收到一个ACK,拥塞窗口就增加(double)(rtt/rttmin);拥塞窗口增大到一定程度时降低其增长速度,变为每收到一个ACK,拥塞窗口就增加1;最后当拥塞窗口接近于慢启动阈值时,拥塞窗口以更缓慢的方式进行增长,cwnd+=(double)(rttmin/rtt), 直到拥塞窗口大于(或等于)慢启动阈值或者出现丢包为止。
2.2 拥塞避免阶段
当拥塞窗口大于(或等于)慢启动阈值后,TCP发送端发送的数据量已经向网络所能容忍的一个限度靠近,此时不能再使拥塞窗口像慢启动阶段那样快速地增长,因此利用往返时延值将此阶段分为正增长和负增长2个阶段,使传输过程能更长时间地稳定在该阶段。算法描述如下:
if((rtt/rttmin)< A
cwnd = cwnd + B1*increment;
else
cwnd = cwnd - B2*increment;
令T=rtt/rttmin,则T表示当前往返时延值是往返时延历史数据中的最小值的多少倍,即当前的网络状态比历史上网络的最好状态差多少;A表示拥塞阈值,即当前往返时延值达到往返时延历史数据中的最小值的A倍时,网络将趋于拥塞。在拥塞避免阶段,如果T≥A,则说明网络趋于拥塞,此时TCP发送端不宜再增加拥塞窗口,相反,TCP发送端将减小拥塞窗口以避免拥塞,拥塞窗口减小策略为cwnd=cwnd-B2*increment,B2>0;如果T<A,说明网络还没有趋于拥塞,此时TCP发送端可以增加拥塞窗口大小,进一步提高网络带宽利用率,拥塞窗口增加策略为cwnd=cwnd+B1*increment,B1>0; B1、B2为调整因子,B1用来增加拥塞窗口的大小,过大会使拥塞窗口增长过快,容易导致拥塞丢包,过小则无法充分利用网络资源;B2用来减小拥塞窗口的大小,有预见性地避免拥塞。B1、B2相互制约,使得拥塞窗口在增大到一定程度以后开始减小,这样可以使拥塞窗口维持在一个理想的发送状态,而使网络不至于发生拥塞。经过多次仿真分析A取1.5,B1取1,B2取0.5能达到较好的性能。
2.3快速重传和快速恢复
网络发生丢包后,TCP发送端采取快速重传措施,重传丢失的报文,然后根据丢包标志的不同,通过比较最新的往返时延值和前一次的往返时延值以及估计的带宽值来区分丢包原因,从而采取不同的控制措施。算法描述如下:
If (dupacks)
if(rtt>=lastrtt&&bw2<bw1)
ssthresh= cwnd /2, cwnd =ssthresh;
if (timeout)
ssthresh=cwnd/2,cwnd=1;
其中,dupacks表示3个重复ACK的情况,lastrtt表示上一次的往返时延值,bw2和bw1分别表示第二个重复ACK时的测量带宽和第三个重复ACK时的测量带宽(bw1=d/(t2-t1),bw2=d/(t3-t2),d表示ACK所确认的报文段的长度,t1表示第一个重复ACK到来的时间,t2表示第二个重复ACK到来的时间,t3表示第三个重复ACK到来的时间),timeout表示计时器超时的情况。当丢包标志为dupacks时,如果rtt≥lastrtt并且bw2<bw1,则认为是网络拥塞导致丢包,因此需要减小拥塞窗口和慢启动阈值,调整策略与传统的TCP Reno协议方法相同;否则就认为是无线误码导致网络丢包,对慢启动阈值和拥塞窗口值不做调整。当丢包标志为timeout时,因为计时器超时是比3个重复ACK更严重的情况,所以此处沿用传统的方法对拥塞窗口和慢启动阈值进行调整,其调整策略见算法描述。
3 性能分析
在ns-2[7]仿真平台上进行仿真,其网络拓扑如图1所示。网络拓扑由3段链路和4个节点组成,其中S表示TCP发送端,R表示路由器,BS表示基站,D表示TCP接收端,有线部分包括从发送端到路由器,从路由器到基站两部分,最后一段为无线部分。其中发送端与路由器之间的有线链路带宽为100 Mb/s,延迟为1 ms,路由器与基站之间的有线链路带宽为100 Mb/s, 延迟为49 ms,基站与接收端之间的无线链路带宽为1 Mb/s,延迟为0.01 ms。数据包的大小采用固定长度,其值设为1 000 byte,无线误码率设为0,仿真时间设为200 s,且只采用一个FTP数据流,该数据流在10 s开始,在200 s结束。
在上述仿真环境下比较TCP-BM协议和TCP Reno协议拥塞窗口随时间的变化情况,结果如图2所示。
图2中,横轴表示时间,单位为s,纵轴表示拥塞窗口大小,单位为packet。从图2中不难看出,在整个200 s的仿真过程中,TCP Reno协议的拥塞窗口大小随时间的变化非常剧烈,而TCP-BM协议的拥塞窗口的大小除了出现少数几次较为剧烈的波动之外,其余时间变化则较为平缓。对仿真追踪所得到的实验数据进行统计分析,TCP Reno协议的拥塞窗口最小值为1,最大值为26,且变化频繁,变化范围集中在10~18;而TCP-BM协议的拥塞窗口最小值为1,且只出现了屈指可数的几次,最大值为21,稳定之后变化范围集中在13~17。
对拥塞窗口值在时间上进行平均,TCP Reno协议的拥塞窗口平均值大小为13.10,而TCP-BM协议的拥塞窗口平均值大小为14.03,这说明TCP-BM协议发送量比TCP Reno协议有明显增加,这必将会导致业务吞吐量的提高。
对拥塞窗口值的方差在时间上进行平均可得TCP Reno协议的拥塞窗口值的平均方差大小为28.86,而TCP-BM协议的拥塞窗口值的平均方差为1.72,这表明了TCP-BM协议的拥塞窗口变化情况要比改进前缓和得多,说明了TCP-BM协议的带宽利用率较为稳定。
对TCP Reno协议和TCP-BM协议吞吐量变化情况进行比较,结果如图3所示。
图3中,横轴表示时间,单位为s,纵轴表示吞吐量,单位为kb/s。从图3中可以明显看出,TCP-BM协议的吞吐量比TCP Reno协议有明显的提高。对仿真数据进行统计分析可知,TCP Reno协议的吞吐量从零开始,然后急剧增加,增加到500 kb/s左右后发生波动,且波动幅度较大,60 s后趋于稳定,最终稳定在540 kb/s左右;TCP-BM协议的吞吐量从零开始,然后急剧增加,增加到600 kb/s左右开始缓慢地上升,分别在50 s和145 s左右时出现2次相对大的波动,这是因为出现了计时器超时的情况。图2中TCP-BM的拥塞窗口波动也可以说明这一问题。最终其吞吐量稳定在644 kb/s左右,TCP-BM协议的吞吐量比TCP Reno协议提高了大约19.3%。
最后对丢包率进行统计分析,对上述仿真结果进行计算可得,TCP Reno协议的丢包率为1.65%,而TCP-BM协议的丢包率为0.21%,对其进行比较可发现,TCP-BM协议的丢包率比TCP Reno协议的丢包率减小了1.44%,这也从一定程度上说明了TCP-BM协议的吞吐量比TCP Reno协议的吞吐量有所提高。
在传统的TCP Reno协议的基础上提出了一种适用于异构网络的TCP拥塞控制协议,该协议在慢启动阶段根据往返时延值适当调整拥塞窗口的增长速度,在拥塞避免阶段利用当前的往返时延与往返时延的历史最小值的比值来控制拥塞窗口的增加与减小,不但能充分利用网络资源,并且在一定程度上可以有预见性地避免拥塞,当网络发生丢包后,通过比较当前的往返时延值与历史记录以及比较测量的带宽,从而区分丢包原因,对拥塞窗口和慢启动阈值采取不同调整策略。经过仿真验证,改进后的TCP算法性能优于传统的TCP Reno协议。下一步工作是要进一步改进该算法,使之适用于更复杂的网络环境。
参考文献
[1] 曲大鹏,黄东军. 一种新的适用于异构网络的TCP算法[J]. 计算机应用, 2007,27(10):2437.
[2] 葛鸽,张国清.一种适用于异构网络的TCP协议设计及其仿真[J].系统仿真学报,2004,16(12):2875.
[3] 叶进,王建新,龚皓. 无线/有线网络中基于自适应丢包区分的TCP改进[J].通信学报,2007,28(5):15-16.
[4] BAL K H, SASHA S, KATE R H. Improving reliable transport and handoff performance in cellular wireless networks[J]. ACM,Wireless Networks, 1995,1(4):469-481.
[5] BAKER A, BADRINATH B R. I-TCP: Indirect TCP for mobile hosts[A]. In the Proceedings of the 15th International Conference on Distributed Computing Systems,1995:136-143.
[6] CASETTI C, GERLA M, MASCOLO S, et al. TCP Westwood: Bandwidth estimation for enhanced transport over wireless links[A]. In Proceedings of ACM Modicums, 2001:287-297.
[7] The network simulator - ns-2 [EB/OL]. http://www.isi.edu/nsnam/ns/