Skip to content

协议栈

sk_buff:Linux 网络的核心载体

所有网络数据在内核中都封装为 struct sk_buff(skb)。

skb 是一个高度优化的包描述符:

头部指针分层推进(mac_header / network_header / transport_header)

支持 clone(零拷贝)

支持 scatter-gather

支持 GSO/GRO

理解 skb 的生命周期,是理解 Linux 网络性能的关键。

数据路径本质上是 skb 在不同子系统之间移动。

防火墙

netfilter 框架

路由子系统

邻居子系统

路由与邻居子系统

Linux 路由查找基于 FIB(Forwarding Information Base)。

最长前缀匹配

支持多表

支持策略路由(RPDB)

ARP 属于邻居子系统(neigh)。

ARP 表并不是简单缓存,而是状态机:

INCOMPLETE → REACHABLE → STALE → DELAY → PROBE

理解这个状态机,才能理解 ARP 抖动和丢包现象。

Netfilter 与 nftables

Netfilter 在五个关键 hook 点插入逻辑:

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

iptables 是历史接口。 现代系统推荐使用 nftables。

NAT 本质是连接跟踪(conntrack)驱动的地址重写。

没有 conntrack,就没有状态 NAT。

性能瓶颈往往出现在 conntrack 表。