01 net/core 核心机制与实现详解

01 net/core 核心机制与实现详解

1. 地位

net/core/(约 57 文件)是 所有协议族的公共底座:没有它,ipv4bridgemac80211 无法共享 sk_buffnet_device 语义。

2. 数据面主干:sk_buff

skbuff.c 管理:

  • 分配/释放(alloc_skbkfree_skb);
  • skb_clone / pskb_copy(广播、转发、Netfilter);
  • 队列:skb_queue_tailsk_receive_queue
  • 头部推拉:skb_push/skb_pull(各层加解封装);
  • offload 标记:skb->ip_summedhw_features

RK3588 千兆/2.5G 驱动性能调优常看 GRO/LROskb 分配 NUMAnetdev_alloc_skb)。

3. 控制面:socket 与 sock

sock.c(core 部分)与顶层 socket.c 分工:

文件 职责
系统调用 net/socket.c SYSCALL_DEFINE、fd 与 struct socket
协议无关 net/core/sock.c 锁、队列、回调、diag

struct sock 通过 struct proto_ops 挂接 inet_stream_ops 等。

4. 网络设备:dev.c

dev.c 核心能力:

  • register_netdev / unregister_netdev
  • dev_queue_xmit 发送入口;
  • netif_receive_skb / __netif_receive_skb_core 接收入口;
  • NAPInetif_napi_addnapi_schedule(详见 09-NAPI收包轮询机制与实现详解.md);
  • netdev_rx_handler(bridge、vlan、macvlan);
  • 统计:dev->stats、RTNL 查询。

与驱动边界:ndo_open/stop/xmit 在驱动,队列调度与 qdisc 在 core/sched。

5. 路由与邻居

文件 作用
dst.c dst_entry 缓存、过期、回调到 neighbour
neighbour.c 通用邻居表;ARP/ND 在 ipv4/ipv6 子模块注册
fib_notifier.c FIB 变更通知(BPF、IOAM 等订阅)

rtnetlink.c 实现 NETLINK_ROUTE(建立在 net/netlink/ 框架上,详见 10-netlink内核用户通信机制与实现详解.md):

  • 链路增删(RTM_NEWLINK);
  • 地址(RTM_NEWADDR);
  • 路由(RTM_NEWROUTE);
  • iproute2ip link/ip route)一一对应。

网络命名空间:struct net 隔离 RTNL 表项。

7. 性能路径:GRO / XDP / flow_offload

机制 文件 说明
GRO gro.c 合并小包减中断开销
XDP xdp.c 驱动早丢弃/转发;与 net/xdp AF_XDP 配合
flow_offload flow_offload.c 硬件流表卸载(switchdev、DSA)
TSO tso.c TCP 分段 offload

8. BPF 挂钩(core 内)

CONFIG_BPF_SYSCALL 时:

  • sock_map.c — BPF map 与 socket 绑定;
  • bpf_sk_storage.c — per-socket BPF 存储;
  • filter.c — 经典 BPF socket filter。

完整 BPF 指令集在 kernel/bpf/ + net/bpf/ 测试桩。

9. 小结

net/core = skb + dev + dst + neighbour + rtnl + NAPI/GRO/XDP。RK3588 网络问题(丢包、延迟、软中断 CPU)多数需结合 core 统计与 驱动 NAPI 同看。

专文:rk3588-kernel-6.1-net-core分析_zh.md

文章互动

阅读 --

留言

0 条留言

正在加载留言…