这个系列的目标是把 Linux 内核网络子系统拆开来讲清楚。不画概念图糊弄,而是深入到具体的内核函数、数据结构字段、调度时机。每篇文章都基于 Linux 6.6 LTS 源码,配合 bpftrace/perf 实测追踪。
读者定位:有 C 语言基础的高级网络工程师、内核开发者、SRE。 内核版本:Linux 6.6 LTS(如有 6.8 差异则标注)。
第一部分:基础设施
- sk_buff 全解:内核网络包的终极容器
- net_device 与网卡驱动模型:从硬件到内核的接口契约
- 收包路径全解:从 NIC 中断到 socket 接收队列
- 发包路径全解:从 send() 到网线
- 软中断与 ksoftirqd:网络包处理的调度引擎
第二部分:协议栈内核实现
- IP 层内核实现:路由查找、分片与转发
- TCP 内核实现(上):连接管理与状态机
- TCP 内核实现(下):数据传输与拥塞控制
- UDP 内核实现与 socket lookup 优化
- Socket 层内核实现:从 VFS 到协议栈的桥梁
- 邻居子系统与 ARP:L2 地址解析的内核实现
第三部分:核心子系统
- 路由子系统深度拆解:FIB、策略路由与路由缓存
- Netfilter 内核实现:钩子、conntrack 与 NAT
- Traffic Control 深度拆解:qdisc、class 与 filter
- 网络命名空间:内核级网络隔离的实现
- 虚拟网络设备内核实现:veth、bridge 与 macvlan
- 隧道协议内核实现:VXLAN、IPIP、GRE 与 WireGuard
第四部分:性能与扩展
- 多队列与流量分发:RSS/RPS/RFS/XPS
- 分段卸载:GRO/GSO/TSO 的内核实现与陷阱
- 网络子系统内存管理:sk_buff 分配、page pool 与 NUMA
- XDP 内核实现:在驱动层重编程网络栈
- eBPF 网络钩子全景:TC/XDP/socket/cgroup
第五部分:诊断与调优
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【Kubernetes 网络深度系列】Linux 网络栈全景:一个包从网卡到用户态的完整旅程
从 NIC 驱动到用户态 read(),一个网络包在 Linux 内核中到底经历了什么?本文拆解 sk_buff、NAPI、softirq、netfilter 的完整收包路径,并用 bpftrace 实测追踪每一跳的延迟。
【Linux 网络子系统深度拆解】IP 层内核实现:路由查找、分片与转发
IP 层是 Linux 网络栈的中枢——收包时决定本地投递还是转发,发包时查路由、过 Netfilter、做分片。本文从 Linux 6.6 内核源码出发,拆解 ip_rcv → 路由决策 → ip_local_deliver / ip_forward 的完整路径,深入 FIB 表的 LC-trie 实现、策略路由 ip rule 选表机制、IP 分片/重组状态机、PMTU 发现与 FNHE 缓存,以及 Netfilter 五个钩子点的实际调用时机。
【Linux 网络子系统深度拆解】sk_buff 全解:内核网络包的终极容器
sk_buff 是 Linux 内核网络栈的通用货币——每一个收到或发出的网络包,都必须装在这个容器里走完全程。本文从 Linux 6.6 内核源码出发,拆解 sk_buff 的内存布局、四大指针操作、clone 与 copy 的代价差异、skb_shared_info 的 fragment 机制,并用 bpftrace 实测 sk_buff 分配热点和生命周期。
【eBPF 系列】XDP:在网卡驱动层就把包丢掉
当 DDoS 洪水来袭,iptables 在协议栈里挣扎,而 XDP 在网卡驱动层就把垃圾包丢了。不进协议栈、不分配 skb、不走 netfilter——这才是丢包该有的样子。