TCP/IP(十五)拥塞控制

拥塞控制

① 拥塞控制必要性

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'?