TCP的拥塞控制——慢启动 拥塞避免 快重传 快恢复

tcp的拥塞控制

1. 拥塞

即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随负荷的增大而下降。

   拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。(拥塞窗口 cwnd)

    流量控制:指点对点通信量的控制,是端到端正的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。(流量窗口 rwnd)

    发送窗口=min(cwnd,rwnd)

    拥塞控制代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享。

2. 几种拥塞控制方法

a、慢启动( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )。

b、为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:

    当 cwnd < ssthresh 时,使用上述的慢开始算法。

    当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。

    当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。

    i、慢启动:所发送报文段数量从1开始指数式增长,每次报文段被确认,cwnd增加1个MSS

    ii、拥塞避免:当超过慢启动门限(ssthresh)时,则改为当所有报文被确认后,cwnd才增加1个MSS;

c、TCP确认网络进入拥塞依据:重传报文没有被确认且RTO超时,重传且判定出现网络拥塞。(每个报文对应一个RTO(Tetransmission Timeout))

3. 当出现网络拥塞时,tcp的反应

正常反应:i、ssthresh门限降至一半;ii、cwnd设置为1;iii、重新进入慢启动阶段;

快速重传的条件是收到3个相同ACK。因为tcp收到乱序到达包时就会立即发送ACK,3个相同ACK判定数据包的丢失。快速重传的操作:i、把ssthresh设置为cwnd的一半;ii、cwnd再设置为ssthresh+3;iii、重新进入拥塞避免阶段。

快速恢复(与快速重传结合使用)的条件同上,其步骤:i、将最初ssthresh的值设为cwnd的一半,cwnd设为ssthresh(减半后的值)+3;ii、再收到重复ACK时,cwnd增加1;iii、当收到新的ACK时,把cwnd恢复到最初ssthresh值。因为新ACK确认了新报文,说明重复的ACK数据都已收到,判定恢复过程结束,重新进入拥塞避免状态。

上述内容略显粗糙,日后再更

参考博文:https://blog.csdn.net/yusiguyuan/article/details/22847787

猜你喜欢

转载自blog.csdn.net/tt_love9527/article/details/80873497
今日推荐