[互联网面试笔试汇总C/C++-28] TCP拥塞控制,慢启动算法

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


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


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


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


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


  如果不再发生超时的话,则拥塞窗口将继续线性增长,知道达到接收方准许窗口的大小。在这个点上,它将停止增长,而且,只要不再发生超时并且接收方的窗口大小不改变大小,则拥塞窗口保持不变。顺便提一下,如果一个ICMP SOURCE QUENCH分组到来并且被传递给TCP,则这个时间将被当作超时一样来对待。
[互联网面试笔试汇总C/C++-28] TCP拥塞控制,慢启动算法_第1张图片

你可能感兴趣的:(互联网,拥塞窗口,tcp慢启动)