Recent Posts
-
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...
-
2021-06-24
理解 TCP rate sample
内核中的 TCP rate sample 被 bbr 这样的拥塞控制算法使用,它总共也就不到200行代码,其中一半还是注释,但理解起来可能还是需要花点力气。本文将尝试解释它的实现原理. 本文使用的内核代码版本是 4.9.1一句话概括, rate sample 的结果是一条流在** interval **时间内发送的报文被网络成功 delivered (成功送达)的数目。比如, 5s 内, 成功送达了 10个报文、10s 内成功送达了 15 个报文 …. 等等.内核的相关实现一共就3个函数...
-
2021-05-30
理解 BBR 拥塞控制算法--理论篇
简介BBR (Bottleneck Bandwidth and Round-trip propagation time)是 Google 在 2016 年发布的一套拥塞控制算法。它尤其适合在存在一定丢包率的弱网环境下使用,在这类环境下,BBR 的性能远超 CUBIC 等传统的拥塞控制算法。以下是 Google 公开的的一些资料papervideoslidesgithub本文将帮助你理解 BBR。使用 BBR没有比展示效果更适合作为开篇的了。这里使用 iperf 来测试两个主机之间的 TCP...