王颖为
摘 要:随着网络不断发展,人类面临的入网环境越来越复杂,卫星接入上网的方案在很多情况下是个很好的选择。但是卫星链路本身与传统链路有所不同,有自己独特的特性,这样就需要改进TCP方案,使其适应卫星链路的环境,从而提高TCP的性能。本文初步探讨了NewReno、TCP Cubic、Hybla三种典型TCP版本在卫星链路上的性能表现,希望能够找出一种令TCP性能在卫星链路上表现得更加出色的方案。
关键词:卫星链路;TCP性能;拥塞算法
1 研究背景
随着互联网的不断发展,越来越多的人们加入网络,适应网络,依赖网络,期待着随时随地享受网络的便捷服务。然而,受到自然环境等因素的影响,一些地域缺乏或难以架设地面网络设施。另外,人们还想更加自由地接入网络,不受线路的牵绊。因此,卫星接入上网是一个不错的方案,地球同步卫星链路会为移动用户提供一个方便快捷的接入网络。
但是,由于接入技术的改变,硬件、软件、现实条件都发生了变化,过去常见的旧的TCP版本不能适应新应用的要求,显示出较差的性能。总结其中原因,有如下几点:
1.1 卫星链路特性对TCP性能的影响
1.1.1 传输距离长,导致严重的传输延迟
地球同步卫星的高度大约有36,000公里,信息在卫星与地面接收站之间传输大约要250毫秒。
1.1.2 误码率高
相对于地面链路,卫星链路的误码率较高,从而使数据包的错误率增高。
1.1.3 数据传输速率低
在卫星链路上,只有最大10Mbps的上传速率。
1.2 TCP机制和算法对TCP性能的影响
1.2.1 三次握手
首先,一个TCP连接是通过接收端和发送端之间的“三次握手”建立的。
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认(SYN:同步序列编号)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
在卫星链路上,即使是很短的数据交换,都需要至少几秒钟才能完成,降低了TCP的性能。
1.2.2 接收窗口rwnd的值
使用TCP发送数据时,前一个目的端发送来的数据包,会明确地规定好应用程序被允许的发送字节量,被称为“接收窗口”。这个值,通常被设置为8KB或16KB,这严重限制了TCP连接通过卫星可以达到的速度。
1.2.3 默认慢启动算法
TCP会以一个非常缓慢的速度开始发送,并缓慢增加,直到达到可用容量。这一过程需要几个RTT,而卫星链路本身有严重的传播延迟,因此,会花费很长的时间才能达到可用容量。当发生拥塞或其他原因的数据包丢失时,TCP的拥塞窗口值cwnd迅速减小,这个慢启动的过程又会重新开始。
1.2.4 包丢失导致乘法减小
TCP假定任何丟包都是由拥塞造成的。每当一个数据包丢失,TCP就减小拥塞窗口,从而减小传输速率。例如,每当检测到丢包事件,TCP NewReno将其传输速率降低为原来的50%。但是,卫星链路本身的误码率就很高,封包错误率就是在不发生拥塞的情况下观察到的。此外,卫星和地面链路容量之间的差异也会导致TCP性能较差,大量的包丢失可能会由于这种拓扑结构的改变而发生。
2 研究方案
从前面的研究来看,我们发现卫星链路有着自己的特性,但TCP方案没有很好地适应这些特性。有时候网络并未发生拥塞,只是本身的传输时间长或者有丢包等事件发生,却被误认为是拥塞,导致发送端的拥塞窗口值cwnd骤减,信道没有被充分利用,从而影响了TCP的性能。因而,想办法避免拥塞,及其导致的cwnd值骤减。下面是一些TCP的新版本,用来解决这些问题。
2.1 NewReno
这一版本采用快速重传技术和快速恢复技术。
超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器,在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,直到发送成功为止。这是数据丢包的情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接收到3个以上的重复ACK,就应该意识到,数据丢了,需要重新传递。这个机制不需要等到重传定时器溢出,所以叫做快速重传,而快速重传以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速恢复算法。
快速重传和快速恢复旨在快速恢复丢失的数据包。没有快速重传和快速恢复,TCP将会使用定时器来要求传输暂停。在暂停这段时间内,没有新的数据包被发送。
2.2 TCP Cubic
目前,Cubic是Linux中TCP协议的默认拥塞控制算法。它是TCP BIC的优化版本。TCP BIC的主要思想是确保对于往返时间RTT不同的各个流,能够公平地分享卫星链路上提供的容量。Cubic在设计上简化了BIC-TCP的窗口调整算法,在BIC-TCP的窗口调整中会出现一个有凹有凸的增长曲线(这里的凹和凸指的是数学意义上的凹和凸,即凹函数和凸函数),Cubic使用了一个三次函数(即一个立方函数),在三次函数曲线中同样存在一个凹和凸的部分,该曲线形状和BIC-TCP的曲线图十分相似,于是该部分取代BIC-TCP的增长曲线。
在Cubic的三次函数中由凹和凸两部分控制窗口的增长。第一部分是个凹函数,在这一阶段窗口快速增长到上一次拥塞事件发生之前的大小;第二部分是个凸函数,在这一阶段Cubic寻求更大的带宽,先慢后快。Cubic的大量时间都处在凹凸函数增长区之间的一个稳定状态上,这使得网络在开始寻求更大带宽之前,能够保持稳定。
另外,Cubic与标准TCP协议最主要的区别,在于它的窗口增长函数仅仅取决于连续的两次拥塞事件的时间间隔值,从而窗口增长完全独立于网络的时延RTT,Cubic的RTT独立性质使得Cubic能够在多条共享瓶颈链路的TCP连接之间保持良好的RTT公平性。
2.3 Hybla
可选择使用PEPSal方案(在发送端修改过的端到端协议,使用TCP分离概念的卫星中继传输协议)。把由卫星链路引发的长的RTT的影响降到最低;它加快了cwnd的增长速度,为不同RTT的连接提供相同传输速率。
TCP Hybla扫描窗口增量规则以确保RTT不同的流之间的公平性。当某个流的RTT的值比既定的参考RTT的值小时,Hybla的表現与NewReno一样,否则,Hybla增加拥塞窗口的值,更加积极地补偿由于RTT增加带来的吞吐量下降。
Hybla主要解决不同RTT的公平性问题。它采用基于时延补偿的方法。对于大时延网络来说,采用这种算法可以提高传输效率。
3 研究结论
上面围绕着防止发送端的拥塞窗口值cwnd骤减,充分利用信道的思路,研究了NewReno、TCP Cubic、Hybla三种典型TCP版本,我们发现它们有着各自的优势,和与之相适应的环境。
相对来说NewReno在算法上更易实现,它改进了Reno算法,考虑了一个发送窗口内多个报文丢失的情况。Cubic主要针对可能发生高延迟的高速网络,它的大量时间处在凹凸函数上一段较稳定的状态上,使网络在寻求更大带宽前能维持稳定;另外,Cubic的窗口增长完全独立于RTT,令RTT不同的流能公平地分享卫星链路上提供的容量。Hybla主要应对于含地面或卫星链路的异构网络,把由卫星链路引发的较长RTT的影响降到最低,为不同RTT的连接提供相同传输速率,确保RTT不同的流之间的公平性。
[参考文献]
[1]Alain Pirovano & Fabien Garcia.A New Survey on Improving TCP Performances over Geostationary.Network and Communication Technologies,Vol.2,No.1.2013.
[2]刘志军,陈继光.一种改进的高速TCP拥塞控制机制.河南科技大学学报(自然科学版),2009,30(4).
[3]高华峰.无线网络中TCP拥塞控制机制的研究.南京邮电大学,2008.
[4]薛建生,王光兴.一种基于网络带宽预测的TCP拥塞控制机制.小型微型计算机系统,2007,28(4).