when tcp Friendliness becomes Harmful,a research direction now I am interested in.....

 

当TCP Friendliness成为有害
短的TCP流在发生网络拥塞时会遇到严重的响应时间的降低。这就成为一些客户端品行不端的激励:在没有数据发送时,他们会发送一些虚假的包;这样当有数据发送时,他们的性能就有一个提升。这就与互联网的基本原则:统计复用相矛盾。

TCP拥塞控制包括两个方面。一方面,AIMD。另一方面,当发生拥塞时,TCP operates on longer timescales of Retransmission time out.(RTO). 它提供两种丢包监测机制:Fast Retransmit及timeout。

TCP 解析器收到3个重复的ack时,认为是丢包。它立刻重传丢失的包。或者另外一种方式,TCP每发送出去一个包,就启动一个定时器。如果时间一旦超时,就立即重传数据包。RTO的初始值设为3秒。It has been experimentally shown that TCP achieves near-maximal throughput if there exists a lower bound for RTO of one second.

下面有几个可以用来提升应用性能的方法:

1)方法一

交互应用程序发生丢包后,需要1个RTO的时间来重传丢失的分组。长流发生丢包后,只需要等待3个重复ACK的时间,就可以恢复丢包。

需要关注RTO这个参数。这个参数的选择主要在两个极端中的平衡。如果设的太低,当数据或者ACK被延迟了的话,就会被错误的认为是丢包,并且导致频繁的重传。如果设得太高,也不合适。

所以方法为:
允许交互应用使用一个较小的minRTO参数。当应用层要发送的数据分组数小于拥塞窗口的1/4时,使用这个新的minRTO参数。Allman与Paxson的研究表明,TCP会取得一个近乎最大的吞吐率,如果RTO有一个为1的最小值。或者说,所有的flow都应该有一个time out的值,这个值至少是1秒,来保证拥塞被清除,从而达到最好的性能。

超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。

当数据正常传输的情况下,我们就会更新各个数据,并重开定时器,来保证下一个数据被顺利传输。要注意的是:重传的情况下,RTO不用公式计算,而采用一种叫做“指数退避”的方式。例如:当RTO为1S的情况下,发生了数据重传,我们就用RTO=2S的定时器来重新传输数据,下一次用4S。一直增加到64S为止。

一个阻止性能下降的方法是降低它的min-RTO参数。比如,让TCP发送方式用一个小的minRTO,当它过去使用的拥塞控制窗口比当前的拥塞控制窗口的fraction还小。这样做对互联网的影响是很小的,它会产生一些重传,但不会对互联网的流量造成很大的影响。

第二种方法:

提升性能的途径是通过增加包丢失被发现的可能性。做法就是在应用数据包后增加三个小的假包。(每个20Bytes)。RFC 3390设置tcp初始拥塞窗口的大小为4个包,当TCP开始一个新的连接或者重起一个连接时。因此,这三个额外的小假包会帮助终端监测出数据的丢包率(通过三次重复的ACK)。

这一独特的方法可以在TCP层被实施。同样也可以在应用层部署。这样交互的应用就可以直接采用这个方法而不用在tcp协议层做变化。

 

第三种方法:

修改tcp发送者,使他对一个包的发送重复k次。tcp发送k个重复的包并不会触犯tcp的拥塞控制机制。这就使得对方接受到的几率大大增加。除非这k个包全丢了,这才会触发拥塞窗口减半。这是一个只适用于tcp的方法。它不能被部署在应用层。

 

 

 

 

posted on 2009-02-27 09:11  甜甜  阅读(435)  评论(2编辑  收藏  举报