-10 +

linux network stack

linux network stack 介绍

网络子系统是 linux 中最大的一个子系统,在不包括网卡驱动的情况下,光是 C 语言的内核代码就超过了 15Mib。

linux network 在 kernel 中的组织

首先我们来看看一个 package 在 network 的流动路径:

从上图中可以看到 kernel 对于 network 子系统的实现主要是分为 3 层:

网卡和驱动通过 DMA(direct memory access) 维护着 ring buffer,我们可以看看 ring buffer 是如何工作的:

ring buffer 通过 tail,head 两个指针来表明数据的移动。

看完了 package 在 kernel 中的流动路径,我们来看看 kernel 是如何组织代码的:

清楚了代码的结构后,我们看看 package 数据在函数的流动

TCP:

ip:

Network device:

network in systemtap

这里主要讲解些 systemtap 中跟踪 network stack:

参考

关于我

85 后程序员, 比较熟悉 Java,JVM,Golang 相关技术栈, 关注 Liunx kernel,目前痴迷于分布式系统的设计和实践。 研究包括但不限于 Docker Kubernetes eBPF 等相关技术。

Blog

Code

Life

Archive