一 拥塞控制
① 拥塞控制必要性
bash
思考: 为什么要有'拥塞控制'呀,不是有'流量控制'了吗?
② 拥赛窗口 cwnd
bash
'什么是'拥塞窗口? 和发送窗口有'什么关系'呢?
明白: cwnd、swnd、rwnd '缩写' 含义
③ 如何知道当前网络是否出现了拥塞呢?
bash
1、其实只要'发送方' 没有在'规定时间内'接收到 ACK '应答'报文
2、也就是发生了'超时'重传,就会认为网络'出现了拥塞'
④ 拥塞控制有哪些控制算法?
bash
拥塞控制'主要'是'四个'算法:
1、慢启动
2、拥塞避免
3、拥塞发生
4、快速恢复
⑤ 慢启动
bash
慢启动的算法的'规则':当 发送方 '每收到一个 ACK',拥塞窗口 cwnd 的大小就会'加 1'
小结: 看出'慢启动'算法,'发包的个数'是'指数性'的增长
MSS '大小'
⑥ 那慢启动涨到什么时候是个头呢?
⑦ 拥塞避免算法
bash
假定 ssthresh 为 '8','拥塞避免算法'的'变化过程'如下图:
⑧ 拥塞发生
bash
1、发生'超时重传'的'拥塞发生算法'
bash
2、怎么'查看'系统的 cwnd '初始化值'?
1) Linux 针对'每一个 TCP 连接'的 cwnd 初始化值是 '10', 也就是 10 个 MSS
2) 我们可以用 'ss -nli' 命令查看每一个 TCP 连接的 cwnd '初始化值',如下图:
bash
3、拥塞发生算法的'变化如下图':
cwnd --> 初始为'1'
bash
4、 发生'快速重传'的'拥塞发生算法'
⑨ 快速恢复
bash
演示: '快速恢复算法'的'变化过程'如下图:
bash
思考: 快速恢复算法过程中,'为什么'收到新的数据后,'cwnd' 设置回了 'ssthresh'?