【学习总结】网络-TCP拥塞控制
tcp拥塞控制
-
出现拥塞的条件:
-
后果
- 网络中许多资源同时呈现供应不足 -- 网络性能变坏 -- 网络吞吐量将随着输入负荷增大而降低。
-
定义:
- 拥塞控制,能够防止过多数据注入网络,以使网络中的路由器或链路不致过载。
为何有了滑动窗口还须要有拥塞窗口?
- 滑动窗口是对发送接收双方的流量控制,若是中间的网络设备的转发性能达到极限是没法感知到的,而tcp除了针对自身的收发能力作调整,还根据总体的网络状况作调整,因此有了拥塞窗口。
tcp拥塞控制与流量控制的区别
-
概述:
-
详述:
- 拥塞控制是让网络可以承受现有的网络负荷,是一个全局性的过程,涉及全部的主机、全部的路由器,以及与下降网络传输性能有关的全部因素。
- 流量控制是指点对点的通讯量的控制,即接收端控制发送端,它所要作的是抑制发送端发送数据的速率,以便使得接收端来得及接收。
tcp拥塞控制的算法
-
拥塞控制的算法:慢开始、拥塞避免,快重传,快恢复。
慢开始和拥塞控制
-
图示:慢开始 -- 拥塞避免算法 -- 网络拥塞的处理 -- 慢开始 -- 拥塞避免算法 -- ...

-
慢开始详述:
- 以最大报文段长度MSS为拥塞窗口cwnd的增加单位。
- 初始零拥塞窗口cwnd=1,而后每通过一个传输轮次(往返时延RTT),拥塞窗口都呈指数增大。
- 规定一个慢开始门限ssthread-slow start thread
- 一直增大拥塞窗口cwnd,直到慢开始门限ssthread,而后改用拥塞避免算法。
-
拥塞避免算法详述:
- 加法增大:发送端的拥塞窗口cwnd每次通过一个传输轮次,就只增大一个MSS大小,即按照线性规律缓慢增大。
- 乘法减少:当出现网络拥塞(即一次超时)时,令慢开始门限ssthread减少为当前cwnd的一半,但不小于2
- 注意:更新慢开始门限,参考值是当前cwnd的一半,不是当前门限的一半!
- cwnd不一样大小时,执行不一样算法:
- cwnd<ssthread:慢开始
- cwnd=ssthread:能够慢开始,也能够拥塞避免(一般作法)
- cwnd>ssthread:拥塞避免
-
网络拥塞的处理
- 更新ssthread值
- 拥塞窗口从新设置为1,并从新开始执行慢开始算法。
- 目的:迅速减小主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完。
快重传和快恢复
-
图示:在慢开始和拥塞避免基础上改进,慢开始 -- 快重传 -- (跳过慢开始)快恢复 -- 拥塞避免 --

-
快重传
- 快重传:使用了冗余ACK来检查丢包的发生。
- 当发送方连续收到三个重复的ACK报文时,直接重传对方还没有收到的报文段,而没必要等待重传计时器超时。
- 注:快重传并不是取消重传计时器,而是在某些状况下,可更早地重传丢失的报文段。
-
快恢复
- 当发送端收到连续三个冗余ACK(即重复确认)时,先乘法减少,把慢开始门限ssthread减少为出现拥塞时发送方cwnd的一半。
- 不一样之处:跳过了cwnd=1起始的慢开始过程,而是将cwnd的值设置为慢开始门限ssthread改变后的值,而后开始执行拥塞避免算法(加法增大)
- 跳过了cwnd=1起始的慢开始过程,所以称为快恢复。
综述
- 拥塞控制中,发送方发送窗口的大小 = min(接收端窗口rwnd, 拥塞窗口cwnd)
- 慢开始、拥塞避免、快重传、快恢复是同时应用在拥塞控制机制之中的
- 当发送方检测到超时:慢开始和拥塞避免;
- 当发送方接受到冗余ACK时:快重传和快恢复。
END
欢迎关注本站公众号,获取更多信息