Recent Posts
-
2021-10-08
TCP拥塞控制之Hybla
Hybla是为了改善大RTT的连接的传输性能所设计出的拥塞控制算法。经典拥塞控制算法与RTT的关系经典的拥塞控制算法包含慢启动(Slow Start)和拥塞避免(Congestion Avoidance)两个阶段。两个阶段更新拥塞窗口时采用不同的规则:\[W_{i+1} =\begin{cases}W_i + 1& \text{SS}\\\\W_i + \frac{1}{W_i}& \text{CA}\end{cases}\]上式中$W_i$表示收到第$i$个ACK后的拥塞...
-
2021-09-15
理解内核TCP定时器实现
为什么内核TCP需要定时器TCP协议中的一些过程是需要在一段特定时间间隔后被处罚, 包括基本的报文 retransmit、delay ACK、timewait 等等.另外, 定时器触发后的响应函数都是在 bottom half 上下文运行, 整个过程无需用户程序参与.定时器分类站在一个tcp连接的视角,内核为其准备了以下几个定时器: reqsk、retransmit、delack、keepalive、timewait、pacing.接下来分别进行解释reqsk timer这是一个仅用于服务...
-
2021-07-07
TCP BBR 实现原理--Probe BW
本系列使用内核代码版本均为 4.9.1 , 也就是 BBR 刚进入内核的版本 特别注意: 本文贴出代码是经过了简化, 以方便理解主要流程.本文的中心是 Probe BW. BBR 在绝大部分时间都是处于这个状态. 这个状态下, BBR 会不断探测带宽是否变大. 如果变大, BBR 就可以设置更高的 pacing rate, 加速发包bw 的输入和输出与 Probe Rtt 时一致, 计算 bw 的数据来源是 TCP 提供的 rate sample, 它提供了过去 xx 时间段内, ...
-
2021-06-30
tcp_tw_reuse 的原理和实现
历史与现状这是一个从 2.4 版本就存在的内核选项. tcp_tw_reuse - BOOLEAN Allow to reuse TIME-WAIT sockets for new connections when it is safe from protocol viewpoint. Default value is 0.使能后, tcp 可以复用正处于 TIME-WAIT 状态的 socket 的四元组 (前提是 safe)最初它只有 0 和 1 两个选择, 2018 年的一个 ...
-
2021-06-30
TCP BBR 实现原理--Probe RTT
本系列使用内核代码版本均为 4.9.1 , 也就是 BBR 刚进入内核的版本 特别注意: 本文贴出代码是经过了简化, 以方便理解主要流程.本文的中心是 Probe RTT.BBR 每 10s 中就有 200ms 处于的这个过程中.输入与输出BBR 从 TCP 拿到 rate sample 信息, 其中就包含了 TCP 测量的 RTT 数据,BBR 处理后,通过设置拥塞窗口影响 TCP 的报文发送RTT 的来源BBR 始终保存当前连接最小的 rtt, 而 rtt 的原始数据由 TCP...