admin 管理员组

文章数量: 887021

【计算机网络】

TCP的拥塞控制及拥塞控制方法

    • TCP的拥塞控制
    • TCP的拥塞判断
    • TCP拥塞控制的方法
      • 基于窗口的拥塞控制
        • 拥塞窗口
        • 慢开始
        • 拥塞避免
      • 快重传
      • 快恢复
      • TCP拥塞控制总体流程图
      • TCP拥塞控制综合例子

TCP的拥塞控制

TCP的拥塞控制与流量控制不同,前者是全局性的控制,而后者是针对点对点通信量的控制。

网络上有很多计算机,可能当前的网络状态已经比较拥堵了。此时贸然发送大量数据,会造成大量丢包。

若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。

TCP的拥塞控制便是用于防止网络出现拥塞的。

TCP的拥塞判断

TCP的判断网络是否发生拥塞有两种方法:

1、是否发生超时
如果过了超时重传时间发送方仍未收到确认报文,那么TCP就会认为当前网络已经发生拥塞。采用慢开始算法进行处理。

2、收到连续3个重复的ACK报文
如果发送方收到了连续3个重复的ACK报文,那么TCP也会认为当前网络发生了拥塞。采用快恢复算法进行处理。

TCP拥塞控制的方法

TCP的拥塞控制方法一共有4种:

1、慢开始
2、拥塞避免
3、快重传
4、快恢复

基于窗口的拥塞控制

拥塞窗口

TCP连接中发送方会维护一个叫拥塞窗口(cwnd)的状态变量。

拥塞窗口的大小取决于网络的拥塞程度,并动态地变化着,发送方会使自己的发送窗口等于拥塞窗口。

慢开始

慢开始算法的思路是先发送少量数据探探路,然后慢慢地增大拥塞窗口的大小。

假如拥塞窗口cwnd初始值为1,之后每收到1个ACK,拥塞窗口+1。

慢启动只是初始时发送速度慢,但实际上慢启动的数据发送速度增长是非常地快的。

在慢启动算法中,每经过一个传播轮次,拥塞窗口就会加倍。

为了不让拥塞窗口增长过快,TCP引入了慢启动门限(ssthresh),当拥塞窗口大小超过这个门限时,就不再按慢开始的算法增大拥塞窗口的大小了,而是改用拥塞避免算法

拥塞避免

每经过一个往返时间RTT,就把发送方的拥塞窗口+1。

即拥塞窗口按线性规律缓慢增大,这要比慢开始算法的拥塞窗口增长速率缓慢很多。

快重传

快重传算法可以让发送方尽早知道发生了个别数据段的丢失。

按照快重传算法,假如接收方收到了M1数据段和M2数据段,然后没有收到M3数据段就收到了M4数据段,那么接收方会重复发送M2确认报文,提醒发送方M3数据段已丢失。

在快重传算法中,发送方一旦收到连续3个重复的确认报文,就会立即重新发送丢失数据段。

快恢复

当发送方连续收到3个重复的确认报文时,发送方就知道当前发生了个别数据段的丢失,但网络很可能还没有发生拥塞,若采用慢开始算法速率下降过于严重,因此采用快恢复算法以缓解当前网络状态。

快恢复算法具体流程:
1、慢开始门限值改为当前拥塞窗口/2。

2、新拥塞窗口=慢开始门限。

3、开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。

TCP拥塞控制总体流程图

TCP拥塞控制综合例子

下图是非常经典的TCP拥塞控制例子,运用到了4种拥塞控制算法,可以说掌握了下图,就基本掌握了TCP的4种拥塞控制方法。

一开始时,TCP采用慢开始算法逐渐增大拥塞窗口的大小。

到第1个点时,拥塞窗口达到慢开始门限值,开始采用拥塞避免算法继续增大拥塞窗口的大小。

到第2个点时,发生了超时,此时TCP认为网络已经发生了拥塞,开始采用慢开始算法重新缓慢增大拥塞窗口。

到第3个点时,拥塞窗口达到慢开始门限值,开始采用拥塞避免算法继续增大拥塞窗口的大小。

到第4个点时,发送方收到了连续3个重复的ACK确认报文,TCP采用快恢复算法进行处理。

本文标签: 计算机网络