拥塞控制的一般原理
    拥塞控制和流量控制的区别:
    ①拥塞控制:防止过多的数据注入到网络中,使网络中的路由器或链路不致过载
    是一个全局性的过程,涉及到与降低网络传输性能有关的所有因素
    ②流量控制:抑制发送端发送数据的速率,以使接收端来得及接受
    是点对点通信量的控制,是端到端的问题
    开环控制和闭环控制:
    (1)开环控制:在设计网络时,事先考虑周全,力求工作时不发生拥塞
    思想:力争避免发生拥塞
    (2)闭环控制:基于反馈环路的概念,根据网络当前的运行状态采取相应控制措施
    思想:在发生拥塞后,采取措施进行控制,消除拥塞
    ①监测网络系统,以便检测到拥塞在何时、何处发生
    ②将拥塞发生的信息传送到可采取行动的地方
    ③调整网络系统的运行以解决出现的问题

    TCP的拥塞控制方法
    TCP采用基于窗口的方法进行拥塞控制,该方法属于闭环控制方法。TCP发送方维持一个拥塞窗口cwnd(Congestion Window),发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量,发送窗口大小不仅取决于接收方窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:
    真正的发送窗口值= Min(接收方窗口值,拥塞窗口值)
    (1)控制拥塞窗口的原则:
    ①只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率
    ②只要网络出现拥塞或者有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞
    (2)拥塞的判断:
    ①重传定时器超时:网络已经发生了拥塞
    ②收到三个重复的ACK:预示网络可能出现拥塞(实际可能还未发生拥塞)
    (3)TCP拥塞控制方法
    ①慢开始(slow-start)
    目的:用来确定网络的负载能力或拥塞程度
    算法的思路:由小到大逐渐增大拥塞窗口数值
    两个变量:
    拥塞窗口:窗口值逐渐增大
    慢开始门限:防止拥塞窗口增长过大引起网络拥塞
    拥塞窗口cmnd控制方法:在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值
    拥塞窗口cwnd每次的增加量=min(N,SMSS)
    其中N是原先未被确认的、但现在被刚收到的确认报文所确认的字节数
    拥塞窗口cwnd.png
    ②拥塞避免(congestion avoidance)
    思路:让拥塞窗口cwnd缓慢的增大,避免出现拥塞,每经过一个传输轮次,拥塞窗口cwnd=cwnd+1,使拥塞窗口cwnd按线性规律缓慢增长(加法增大 Additive Increase)
    拥塞避免算法.JPEG

    ③快重传(fast retansmit)
    发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传,这样就不会出现超时,发送方也不会误认为出现了网络拥塞
    快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到报文段的重复确认
    快重传.png
    ④快恢复(fast recovery)
    当发送端收到连续三个重复确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复算法

    主动队列管理AQM(Active Queue Management)
    所谓“主动”就是不要等到路由器的队列长度已经到达最大值时才不得不丢弃后面达到的分组,而是在队列长度达到某个值得警惕的数值时(即当网络拥塞有了某些拥塞征兆时),就主动丢弃达到的分组