TCP拥塞控制原理
如何控制拥塞
TCP采用基于拥塞窗口的方法进行拥塞控制,该方法属于闭环控制方法
开环控制:在设计网络时,事先将所有可能的发生拥塞的情况都考虑到,力求不产生拥塞 闭环控制:动态监测网络系统,检测拥塞并进行反馈、调整,以解决问题
拥塞窗口可以简单理解为一个窗口,每次发送数据的大小都限制在这个窗口的范围之内
控制拥塞窗口的原则
只要网络没有出现拥塞,拥塞窗口就可以再增大一些 只要网络出现拥塞或有可能出现拥塞,就将拥塞窗口减小一些
如何判断出现了拥塞?
重传定时器超时 收到三个重复的ACK
TCP拥塞控制算法
慢开始
由小到大逐渐增大拥塞窗口数值
拥塞窗口cwnd初始值:1 每经过一个传输轮次(往返时间),拥塞窗口cwnd就加倍(指数增长) 当增加到慢开始门限ssthresh时(cwnd > ssthresh),改为拥塞避免算法 (当cwnd = ssthresh时,既可以用慢开始算法,也可疑用拥塞避免算法)
拥塞避免
让拥塞窗口按线性规律缓慢的增大
每经过一个传输轮次,拥塞窗口cwnd加 1(慢开始算法是加倍) 直到网络出现拥塞,当拥塞原因为
超时:使 ssthresh = max(cwnd/2, 2)(在两者之间取最大值),cwnd = 1,执行慢开始算法 收到三个重复的ACK:ssthresh = 当前拥塞窗口cwnd / 2,新拥塞窗口cwnd = 慢开始门限 ssthresh,执行拥塞避免算法
快重传
当发送方收到连续三个重复的ACK时,就知道接收方确实没有收到报文段,应立即进行快重传算法,这样就不会出现超时,发送方也就不会误认为出现了网络拥塞
快恢复
当发送方收到连续三个重复的ACK时,执行快恢复算法
将慢开始门限ssthresh = 当前拥塞窗口cwnd / 2 新拥塞窗口cwnd = 慢开始门限ssthresh 然后执行拥塞避免算法
|