拥塞(se)控制
分类
- 开环控制:设计网络时预先考虑所有情况,力求运行时不会发生拥塞
- 闭环控制:网络系统检测拥塞,把拥塞信息传递到可采取行动的地方,调整行为
公平性和收敛性问题
TCP——为什么是AIMD?-henrystark-ChinaUnix博客
出发点:如果不进行控制,会造成网络负担过重
目的:让每个TCP发送端尽可能均分带宽,减少丢包,减轻网络设备的压力
实现:AIDM策略
AI(additive increase):加性增窗,拥塞避免阶段线性增加
MD(multiplicative decrease):乘性减窗,超时或者冗余ACK时减小为当前一半
拥塞判断方法
- 超时
- 收到三个重复的ACK(冗余ACK)
拥塞控制算法
- CWND:TCP的拥塞窗口CWND(congestion window)=min(接收方窗口值,拥塞窗口值)
- RWND:TCP接收方窗口大小
慢开始slow start
- 初始拥塞窗口为1~2个发送方的最大报文段SMSS的数值
- 慢开始门限ssthresh
- 每收到一个新的报文段确认后,可以把拥塞窗口增加1,收到两个就加2,即每经过一个传输轮次(一个RTT),拥塞窗口加倍
- 拥塞窗口每次增加量=min(N, SMSS),N为原先未被确认但现在被确认报文段所确认的字节数(接收方量力而行,发送方不浪费流量)
- cwnd<ssthresh:慢开始算法;cwnd>ssthresh:拥塞避免算法;相等两个均可
拥塞避免congestion avoidance
- 每一个轮次加一而不是翻倍,加法增大AI(additive increase)
快重传fast retransmission
- 快重传没有取消重传计时器
- 即使收到失序报文也要立即发出对已收到报文段的重复确认
快恢复fast recover
- ssthresh=cwnd/2,cwnd=ssthresh,执行拥塞避免算法
网络拥堵后,ssthresh设置为max(cwnd/2,2),cwnd设置为1,执行慢启动