TCP拥塞控制机制Slow-Start浅析

2018-01-20 06:42尚建贞
电脑知识与技术 2018年31期

尚建贞

摘要:TCP协议在Internet中广泛使。但随着网络通信量的增加,网络拥塞不可避免。如何有效的处理网络拥塞,成为网络研究的热门问题,人们也提出了很多不同的解决方案。Slow-Start(慢开始)算法通过设置接收窗口、拥塞窗口两个变量和一套完整的控制机制,可以有效避免拥塞的发生,但网络中的数据流是动态变化的,任何一种拥塞控制算法都不可能完全避免拥塞的发生,Slow-Start算法也有其自身的局限性。

关键词: TCP; 拥塞控制; Slow-Start; 接收窗口; 拥塞窗口

中图分类号:TP393.04        文献标识码:A        文章编号:1009-3044(2018)31-0045-02

Slow-Start Analysis of TCP Congestion Control Mechanism

SHANG Jian-zhen

(Henan University of Animal Husbandry and Economy, Zhengzhou 450044, China)

Abstract:The TCP is widely used in Internet. But with the increase of network traffic, network congestion is inevitable. How to deal with network congestion effectively has become a hot issue in network research. People also put forward many different solutions. Slow-Start algorithm can effectively avoid congestion by setting two variables of receiving window, congestion window and a complete set of control mechanism. However, the data flow in the network is dynamic, and any congestion control algorithm can not completely avoid the occurrence of congestion. Slow-Start algorithm also has its own limitations.

Key words: TCP; congestion control; Slow-Start; receiving window; congestion window

1 引言

Internet具有资源共享的属性,所以从某种意义上来说他不能因为网络资源不足而限制用户的数量,拒绝提供服务。当网络资源有限的时候,只能降低服务质量继续为有需要的用户提供服务。拥塞的发生是由于网络资源的缺乏引起,但是单纯的增加网络资源并不能避免拥塞的发生。当数据包在网络中的转发结点中经过长期时间排队完成转发时,数据包本身可能早已超时;源结点因为未收到对这些数据包的确认,会误认为超时而重发这些数据包。但是这些数据包已经转发到了下一跳结点,这样就会浪费网络资源,进一步加重网络拥塞。实际上,转发结点因为缓存空间不足而丢包更多的由于网络拥塞引起的,它并不是引起网络拥塞的主要原因。另外,单纯提高数据链路的传输速率和提高转发结点的处理能力也不能从根本上解决拥塞问题。

当网络的负载超出了它的处理能力时,拥塞就会发生。为了防止出现网络拥塞,TCP设计了很多的拥塞控制机制。虽然网络层也试图处理拥塞问题,但大多数的拥塞控制是由传输层的TCP协议完成,因为解决网络拥塞问题的最根本的方法,是减慢数据发送的速率。

拥塞控制是一种用来调整TCP连接上发送数据包速率的算法,通过对发送数据包速率的调整,使之无限接近当前网络不断变化的吞吐量。

1999年发布的RFC2581中定義了三种算法:Slow-Start(慢开始),Congestion Avoidance(拥塞避免)和Fast Recovery(快速恢复)。本文仅讨论其中的Slow-Start算法。

2 Slow-Start(慢开始)算法

解决网络拥塞问题,要考虑两个方面:网络处理能力和接收方的处理能力。既要考虑发送端的发送速率不会拥塞网络也要考虑接收端的处理能力。为此,对于每一个TCP连接,都会维持以下两个状态变量:

(1)接收方窗口大小rwinsize(riceiver window size):接收方根据当前处理能力所允许的窗口大小,也就是TCP报文段头部中窗口大小字段,这是来自接收方的流量控制。

(2)拥塞窗口大小cwinsize(congestion window size):是发送方根据网络拥塞情况自己估算的发送窗口的大小,是来自发送端的流量控制。

发送方确定拥塞窗口的原则是:只要网络没有出现拥塞,就把cwinsize的值增大一些,以便把更多的报文段发送出去;如果网络出现了拥塞,就把cwinsize的值减小一些,以减少发送到网络中的数据量。发送端如何确定网络出现拥塞呢?当网络发生拥塞时,路由器就会把一些无法处理的数据包丢弃,所以发送端如果没有收到已发送报文的确认报文,就可以认为网络出现了拥塞。

以上两个变量中,当rwinsize<cwinsize时,说明网络的处理能力大于接收的数据处理能力,但是发送方也只能照顾接收端的处理能力,把发送窗口设置为rwinsize大小;  rwinsize>cwinsize时,说明接收端处理能力大于网络的处理能力,但为了避免网络拥塞,发送方也只能把发送窗口设置为cwinsize的大小。所以,发送方发送窗口的最大值,应当取cwinsize和rwinsize这两个变量中较小的一个。

所有的TCP实现中,都支持一种拥塞控制的算法——慢开始算法(slow start)。假定用报文段的个数作为窗口大小的单位,而且接收端的rwinsize足够大,所以发送窗口只受cwinsize的制约。慢开始算法的原理可以这样表述:

(1)发送端由小到大,逐渐增大cwinsize的值,而不是开始发送时就设置一个比较大的值。这样可以使发送端在开始发送时发送到网络中的数据量大大减少,对于避免网络拥塞非常有利。同时,每收到对一个报文的确认,就使cwinsize的值加1。

例如,开始时cwinsize=1,发送第一个报文段M1;收到确认后cwinsize加1,此时cwinsize=2;可以再发送2个报文,收到2个确认报文后cwinsize加2,此时cwinsize=4;可以再发送4个报文,收到4个确认报文后cwinsize加4,此时cwinsize=8。

可以看到,在这个过程中,cwinsize的数值呈指数级增长,速度很快。

(2)为防止cwinsize增长过快(无限制的增长,最终会拥塞网络),设置一个临界值tmp。当cwinsize>tmp时,每经过一段时间(一般是一个往返时延RTT)cwinsize值只加1,而不管这段时间内收到了几个确认报文。此时cwinsize的数值呈线性增长,速度大大慢了下来。

(3)不管在上述的任何一个阶段,只要网络发生了拥塞(发送方没有收到确认或者是收到了重复的确认信息),就把tmp的数值设置为发生拥塞时cwinsize数值的一半,同时把cwinsize重新设置为初始值,重新开始(1)的过程。

这样做可以迅速减少发送方发送到网络中的数据量,使发生拥塞的网络路由器有足够的时间处理队列中的数据分组。

图1说明了上述慢开始算法进行拥塞控制的过程。

(1)TCP连接进行初始化,设置拥塞窗口cwinsize=1,临界值tmp=16。

(2)开始执行慢开始算法,发送端每收到一个对已发送报文段的确认,cwinsize就加1,然后开始下一次传输,所以发送窗口随着传输次数的变化,呈现指数级的增长规律。当cwinsize的值增长到临界值tmp的时候,就改为线性增长,速率大大慢了下来。

(3)假定当cwinsize=24的时候,网络出现了拥塞(超时未收到确认报文),则拥塞窗口cwinsize重新设置为1,同时临界值设置为发生拥塞时发送窗口的一半即tmp=12,然后重新执行慢开始算法。

需要指出的是,任何一种拥塞算法都不能完全避免网络拥塞。拥塞控制的作用是在拥塞避免阶段把拥塞窗口控制为按照线性规律增长,使网络不太容易出现拥塞。RFC 2581,RFC 2309和RFC 3168提出了其他几种拥塞控制的方法,感兴趣的读者可以查阅相应的文档。

参考文献:

[1] RFC 793,Transmission Control Protocol[S].

[2] RFC 2581,TCP Congestion Control[S].

[3] RFC 2582,The NewReno Modification to TCP's Fast Recovery Algorithm[S].

[4] RFC 2309,Recommendations on Queue Management and Congestion  Avoidance in the Internet[S].

[5] 王碩. 计算机网络基础[M].北京:中国水利水电出版社,2014.

[6] 谢钧. 计算机网络教程[M].北京:人民邮电出版社,2018.