TCP拥塞控制,慢启动算法

当一个网络面对的负载超过了它的处理能力时,拥塞就会发生。Internet也不例外。
理论上,经过使用一条从物理学中套用过来的法则:分组守恒法则,拥塞现象就能够获得控制。它的基本思想是,只有当一个老的分组离开以后才容许向网络注入一个新的分组。TCP企图经过动态的维护窗口的大小来实现这个目标。
管理拥塞的第一步是检测用色。在过去,检测拥塞是很是困难的。因为丢失分组而引发的超时可能有两种状况:(1)传输线路有噪声;(2)在一台用色的路由器上分组被丢弃。要区分这两种情形是很困难的。可是如今因为线路传输可靠性增长,咱们认为Internet上大部分的传输超时都是因为拥塞引发的。
算法


 Internet的方案,首先意识到存在的两个潜在的问题:网络容量和接收方的容量,而后单独处理每个问题。为此,每一个发送方维护两个窗口:第一个是接收方的准许窗口,第二个是拥塞窗口(congestion window) 。每一个窗口反映了发送方能够传递的字节数量。最终容许发送的字节数量是两个窗口的最小值。
网络


当一个链接创建起来的时候,发送方将拥塞窗口初始化为该链接上当前使用的最大数据段长度。而后,它发送一个最大的数据段。若是该数据段在定时器过时以前被确认,则它将拥塞窗口增长一个数据段的字节数,从而使拥塞窗口变成两倍的最大数据段长度,而后发送两个数据段。若是这两个数据段中的每个都被确认了,则拥塞窗口再增长两个最大数据段长度。当拥塞窗口达到n个数据段的时候,若是有n个数据段都被及时确认的话,拥塞窗口增长这n个数据段对应的字节数。实际上,每一批被确认的突发数据段都会使拥塞窗口加倍。
数据结构


拥塞窗口一直呈指数增加,知道发生超时,或者到达接收方窗口的大小。这里的思想是,若是必定大小的突发数据,好比说1024, 2048和4096字节,都被正常地传送过去,可是,8192字节的突发数据却发生超时,则拥塞窗口应该被设置为4096以免拥塞。可是拥塞窗口保持在4096上,则不管接收方准许窗口有多大,发送方都不会发送超过4096字节的突发数据。这个算法被称为慢启动算法(slow start),可是它实际上一点也不慢(Jacobson, 1988)。它是指数量级的,全部的TCP实现都要求支持该算法。
oop


 除了接收方准许窗口和拥塞窗口之外,它还使用了第三个参数: 一个阀值(threshold),初始时该参数为64KB。当一次超时发生的时候,阀值被设置为当前拥塞窗口的一半,而拥塞窗口被重置为一个最大数据段。而后使用慢启动算法来决定网络的处理能力,不过当增加到阀值的时候便中止。从这个点开始,每一此成功的传输都会使拥塞窗口线性地增加(即每次突发数据仅增加一个最大数据段),而不是成倍地增加。实际上,这个算法是在猜想,将拥塞窗口减少一半多是能够接受的,而后再从这点开始慢慢地往上增加。
大数据


  若是再也不发生超时的话,则拥塞窗口将继续线性增加,知道达到接收方准许窗口的大小。在这个点上,它将中止增加,并且,只要再也不发生超时而且接收方的窗口大小不改变大小,则拥塞窗口保持不变。顺便提一下,若是一个ICMP SOURCE QUENCH分组到来而且被传递给TCP,则这个时间将被看成超时同样来对待。
spa