Recent Posts
-
2021-05-30
理解 BBR 拥塞控制算法--理论篇
简介BBR (Bottleneck Bandwidth and Round-trip propagation time)是 Google 在 2016 年发布的一套拥塞控制算法。它尤其适合在存在一定丢包率的弱网环境下使用,在这类环境下,BBR 的性能远超 CUBIC 等传统的拥塞控制算法。以下是 Google 公开的的一些资料papervideoslidesgithub本文将帮助你理解 BBR。使用 BBR没有比展示效果更适合作为开篇的了。这里使用 iperf 来测试两个主机之间的 TCP...
-
2021-04-11
理解 VPP -- FIB
FIB 介绍维基百科是这样描述 FIB 的: A forwarding information base (FIB), also known as a forwarding table or MAC table, is most commonly used in network bridging, routing, and similar functions to find the proper output network interface to which the input in...
-
2021-04-05
TCP timestamp 选项那点事
TCP 最早在 RFC1323 [] 中引入了 timestamp 选项, 并在后来的 RFC7323 中进行了更新。引入 timestamp 最初有两个目的:1.更精确地估算报文往返时间(round-trip-time, RTT) 2. 防止陈旧的报文干扰正常的连接.本文将以 RFC7323 为基础,介绍 timestamp 选项的应用场景和当前业界对其的一些讨论。介绍Timestamp 是作为一个 TCP 选项存在于 TCP 首部。如下图所示,一个 timestamp 选项需要占据首部...
-
2021-01-30
lock_sock()与bh_lock_sock()
在内核网络系统代码中,我们可以见到很多地方都有 lock_sock() 这类对 socket 结构的加锁操作,而也有少数地方是使用 bh_lock_sock()那么什么时候该用 lock_sock(),什么时候又该用 bh_lock_sock() ?本文结合实际内核代码稍加解释。(本文使用内核代码版本是 4.19.75,不过这个部分变化不大,其他版本内核也ok)0x0. process context 与 interrupt context我们通常将内核代码执行的上下文分为 proces...
-
2020-07-25
内核 strparser 是如何工作的
strparser 是怎么工作的strparser是 Linux 内核在 4.9 版本引入的 feature (https://lwn.net/Articles/703116/)。它允许用户在内核层面拦截送往 TCP 套接字的报文并做自定义的处理。处理的地方可以是内核模块,也可以是 eBPF 程序。 内核模块处理截获报文的例子:KTLS(https://github.com/ktls/af_ktls)KTLS 这个 feature 已经进入内核代码主线了,它的设计思想是让 TLS 需要的...