1 引言
随着多媒体技术和网络技术的飞速发展,可视电话、远程教育、视频会议等流媒体应用逐渐发展成为Internet的主要业务。但面对流媒体应用的蓬勃发展,Internet并不能为其提供良好的传输环境,流媒体传输时数据包的延迟和丢失,导致流媒体播放时不清晰、不同步、播放停顿等质量问题。网络工作者研究发现,产生上述问题的主要原因是流媒体应用使用的传输协议缺乏比较有效的拥塞控制机制,使其传输时的数据流不能满足流媒体传输的要求。因此,自从上个世纪80年代出现第一次拥塞崩溃以来,TCP拥塞控制策略就在不断地进行完善和改进。TCP拥塞控制算法的目标是最大限度利用网络带宽,同时不产生数据流传输中的拥塞现象。
2 TCP拥塞控制过程
首先要意识到存在的两个潜在的问题:网络容量和接收方的容量,然后单独处理每一个问题。为此,每个发送方维护两个窗口:第一个是接收方的准许窗口,第二个是拥塞窗口。每个窗口反映了发送方可以传递的字节数量。
当一个连接建立起来的时候,发送方将拥塞窗口初始化为该连接上当前使用的最大数据段长度。然后,它发送一个最大的数据段。如果该数据段在定时器过期之前被确认,则它将拥塞窗口增加一个数据段的字节数,从而使拥塞窗口变成两倍的最大数据段长度,然后发送两个数据段。如果这两个数据段中的每一个都被确认了,则拥塞窗口再增加两个最大数据段长度。当拥塞窗口达到n个数据段的时候,如果有n个数据段都被及时确认的话,拥塞窗口增加这n个数据段对应的字节数。实际上,每一批被确认的突发数据段都会使拥塞窗口加倍。
拥塞窗口一直呈指数增长,直到发生超时,或者到达接收方窗口的大小。这里的思想是,如果一定大小的突发数据,比如说1024、2048和4096字节,都被正常地传送过去。但是,8192字节的突发数据却发生超时,则拥塞窗口应该被设置为4096以避免拥塞。但是拥塞窗口保持在4096上,则无论接收方准许窗口有多大,发送方都不会发送超过4096字节的突发数据。这个算法被称为慢启动算法,所有的TCP实现都要求支持该算法。
除了接收方准许窗口和拥塞窗口以外,它还使用了第三个参数: 一个阀值,初始时该参数为64KB。当一次超时发生的时候,阀值被设置为当前拥塞窗口的一半,而拥塞窗口被重置为一个最大数据段。然后使用慢启动算法来决定网络的处理能力,不过当增长到阀值的时候便停止。从这个点开始,每一次成功的传输都会使拥塞窗口线性地增长(即每次突发数据仅增长一个最大数据段),而不是成倍地增长。实际上,这个算法是在猜测,将拥塞窗口减小一半可能是可以接受的,然后再从这点开始慢慢地往上增长。
3 传统的TCP拥塞控制算法不适用的原因
(1)传统的TCP拥塞控制机制在高速网络中反应性比较差,这是因为TCP在高速网络中对分组丢失的反应要敏感得多。这主要是由于它的拥塞避免算法是基于AIMD的。所以一个分组的丢失在高速网络中所造成的后果是很严重的:一个分组丢失被检测出来之后,TCP连接就会将带宽减半(积式减少),这样就会不止花上几百毫秒或是多达几秒钟,甚至花上几分钟或是几个小时来恢复所有的可用带宽(和式增加),因此TCP连接会花费大多数时间在拥塞避免算法上。
(2)传统的TCP总是把分组丢失解释为拥塞,而假定链路错误造成的分组丢失是可以忽略的。但是当数据传输速率比较高时,链路错误是不能忽略的。由链路错误引起的分组丢失和由网络拥塞引起的分组丢失的可能性是相同的。因此,当一个TCP分组丢失后我们不应该认为就是出现了网络拥塞,拥塞的判断需要两个连续的分组丢失。
(3)传统的TCP不能使用网络链路的所有容量。这主要是由于在AIMD算法中,TCP从一个分组丢失到带宽的恢复所用的时间比较长。且高速远距离网络的造价是比较高的,所以对容量的浪费是不可原谅的。
4 对传统TCP拥塞控制机制的发展及改进
4.1 对慢启动的改进
慢启动(slow start)算法通过逐渐增加cwnd的大小来探测可用的网络容量,防止连接开始时采用不合适的发送量导致网络拥塞。但在网络实际容量大时,会造成浪费。为此可采用大的初始窗口,大的初始窗口避免了延迟ACK机制下单个报文段初始窗口的等待超时问题,缩短了小TCP流的传输时间和大延迟链路上的慢启动时间。
在慢启动阶段,在每个RTT时间内,cwnd增加一倍,这样当cwnd增加到一定的值时,就可能导致以网络能够处理的最大容量的2倍来发送数据,从而淹没网络,但这个方法的效果是有限的。而Smooth-start较为平滑地从慢启动过渡到拥塞避免阶段,减少了报文段丢失和突发通讯量,提高了TCP拥塞控制的性能。
4.2 对重传与恢复的改进
为了避免不必要的重传超时,有人提出了一种受限传输机制:如果接收方的广播窗口允许的话,发送方接收到一个或者两个重复的ACK后,继续传输新的数据报文段。受限的传输机制允许具有较小窗口的TCP连接进行错误恢复,而且避免了不必要的重传。
有很多情况下,TCP发送方可能会误判数据报文段丢失,然后调用拥塞控制规程减少拥塞窗口的大小。如果TCP的发送方在重传数据报文段一个RTT后,发现接收方接收到了重传数据报文段的两个拷贝,则可以推断重传是不必要的。这时,TCP的发送方可以撤销对拥塞窗口的减少。除了恢复拥塞窗口,TCP发送方还可以调整重复确认门限或者重传超时参数,来避免由于多次不必要的重传而浪费带宽。
4.3 对公平性的改进
在拥塞避免阶段,如果没有发生丢包事件,则TCP发送方的cwnd在每个RTT时间内大约可以增加一个报文段大小,但这样会造成具有不同RTT时间或窗口尺寸的多个连接在瓶颈处对带宽竞争的不公平性,RTT时间或窗口小的连接,相应的cwnd增长速度也相对缓慢,所以只能得到很小一部分带宽。要解决上述问题,可以通过在路由器处使用公平队列和TCP友好缓存管理来进行控制以增加公平性。然而如没有路由器的参与,要增加公平性,就要求TCP发送端的拥塞控制进行相应的改变,在拥塞避免阶段使共享同一资源的各个TCP连接以相同速度发送数据,从而确保了各个连接间的公平性。
5 结论
本文在研究和分析各种基于TCP的数据流拥塞控制算法和参考有关文档的基础上,对以TCP为核心的拥塞控制机制进行了发展,其中避免不必要的重传超时、撤销不必要的拥塞控制等是随着网络技术的发展而对TCP的改进,这些改进将使TCP的性能在不同的网络中取得更好的性能。
参考文献
[1] 庄卓.基于TCP的拥塞控制策略及改进[D]. 广西师范大学,2006.
[2] 谭连生,尹敏.计算机通信网络中基于速率的端对端拥塞控制.通信学报, 2003,24(8).
[3] 连云凯.高速网络的TCP拥塞控制策略及改进[D]. 广西师范大学,2007.