卫星链路上比较三种典型版本TCP的性能

时间:2022-09-16 10:09:08

卫星链路上比较三种典型版本TCP的性能

摘 要:随着网络不断发展,人类面临的入网环境越来越复杂,卫星接入上网的方案在很多情况下是个很好的选择。但是卫星链路本身与传统链路有所不同,有自己独特的特性,这样就需要改进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的大量时间都处在凹凸函数增长区之间的一个稳定状态上,这使得网络在开始寻求更大带宽之前,能够保持稳定。

上一篇:发那科双刀库控制 下一篇:关于防雷技术创新思考