以下内容来自于小码哥"网络协议从入门到底层原理"
image.png-
拥塞控制
-- 防止过多的数据注入到网络中
-- 避免网络中的路由器或链路过载 -
拥塞控制是一个全局性的过程
-- 涉及到所有主机, 路由器
-- 以及与降低网络传输性能有关的所有因素
-- 是大家共同努力的结果 -
相比而言, 流量控制是点对点通信的控制
TCP
-拥塞控制-方法
-
慢开始(
slow start
, 慢启动) -
拥塞避免(
congestion avoidance
) -
快速重传(
fast retransmit
) -
快速恢复(
fast recovery
) -
几个缩写
--MSS(Max Segment Size)
: 每个段最大的数据部分大小
✅在建立连接时确定
-- rwnd(receive window)
: 接收窗口
-- cwnd(congestion window)
: 拥塞窗口
-- swnd(send window)
: 发送窗口
✅swnd = min(cwnd, rwnd)
TCP
-拥塞控制-慢开始
image.png
image.png
-
cwnd
的初始值比较小, 然后随着数据包被接收方确认(收到一个ACK
)
--cwnd
就成倍增长
TCP
-拥塞控制-拥塞避免
image.png
-
ssthresh(slow start threshold)
: 慢开始阈值,cwnd
达到阈值后, 以线性的方式增加 - 拥塞避免(加法增大): 拥塞窗口缓慢增大, 以防止网络过早出现拥塞
- 乘法减小: 只要网络出现拥塞, 把
ssthresh
减半, 于此同时, 执行慢开始算法(cwnd
又恢复到初始值)
TCP
-拥塞控制-快重传
- 接收方
-- 每收到一个失序的分组后就立即发出重复确认
-- 使发送方及时知道分组没有到达
-- 而不是等待自己发送数据时才进行确认
- 发送方
-- 只要连续收到三个重复确认(总共4
个相同的确认), 就应当立即重传对方尚未收到的报文段
-- 而不必继续等待重传计时器到期后再重传
TCP
-拥塞控制-快重传 + 快恢复
image.png
TCP
-拥塞控制-快恢复
- 当发送方连续收到三个重复确认, 就执行"乘法减小"算法, 把
ssthresh
减半
-- 与慢开始不同之处是现在不执行慢开始算法, 即cwnd
现在不恢复到初始值
-- 而是把cwnd
值设置为ssthresh
减半后的数值
-- 然后开始执行拥塞避免算法("加法增大"), 使拥塞窗口缓慢地线性增大
TCP
-拥塞控制-发送窗口的最大值
- 发送窗口的最大值:
swnd = min(cwnd, rwnd)
- 当
rwnd < cwnd
时, 是接收方的接收能力限制发送窗口的最大值 - 当
cwnd < rwnd
时, 是网络的拥塞限制发送窗口的最大值
网友评论