书籍核心定位
全书围绕Linux内核网络协议栈完整实现 ,从数据包接收→协议层处理→转发→发送全链路拆解,覆盖网卡驱动、sk_buff、NAPI、TCP/IP四层协议、路由、Netfilter、套接字、拥塞控制等核心源码逻辑。
整体学习总纲
学习路线
网络硬件层 → 内核数据包载体(sk_buff) → 网卡收发包机制(NAPI/中断) → 链路层 → IP层 → 路由子系统 → 传输层(TCP/UDP) → 套接字层 → 防火墙Netfilter → 高级网络特性 → 性能调优 + 嵌入式工程落地
第一部分:Linux网络整体架构与基础环境
第1章:Linux网络体系整体架构
核心知识点
- Linux网络五层架构划分:硬件网卡→设备层→链路层→网络层→传输层→应用层
- 数据包完整流转路径:
网线物理帧 → 网卡DMA → sk_buff → NAPI收包 → 内核协议栈逐层解析 → 用户态Socket - 内核网络核心子系统划分
- 网络设备子系统
net/core/dev.c - 数据包管理子系统
skbuff.c - IPv4协议栈
net/ipv4/ - 路由子系统
fib - Netfilter过滤子系统
- 套接字管理子系统
- 网络设备子系统
配套实操命令Demo
bash
# 查看本机网络协议栈运行状态
cat /proc/net/sockstat
# 查看所有网络协议注册情况
cat /proc/net/protocols
# 查看本机路由表(内核路由)
route -n
ip route show
进阶实例
- 绘制RK3588平台千兆网卡数据包全流程时序图
- 区分协议栈接收路径 与转发路径底层差异
第二部分:网络设备层核心(书籍重点·底层根基)
第2章:网络设备net_device结构体详解
核心知识点
struct net_device完整成员解析:硬件信息、MAC、队列、操作集、状态标志- 网卡状态机:
DOWN→UP→RUNNING→NO-CARRIER - 网卡发送队列/接收队列原理
- 虚拟网卡与物理网卡内核统一抽象设计
基础Demo:自定义虚拟网卡(复用你已有工程)
c
#include <linux/module.h>
#include <linux/netdevice.h>
static struct net_device *vdev;
static netdev_tx_t demo_xmit(struct sk_buff *skb,struct net_device *dev)
{
pr_info("内核设备层发送数据包 长度:%d\n",skb->len);
dev_kfree_skb(skb);
return NETDEV_TX_OK;
}
static const struct net_device_ops dev_ops={
.ndo_start_xmit = demo_xmit,
};
static int __init dev_demo_init(void)
{
vdev = alloc_netdev(0,"testnic%d",NET_NAME_UNKNOWN,ether_setup);
vdev->netdev_ops = &dev_ops;
register_netdev(vdev);
return 0;
}
static void __exit dev_demo_exit(void)
{
unregister_netdev(vdev);free_netdev(vdev);
}
module_init(dev_demo_init);
module_exit(dev_demo_exit);
MODULE_LICENSE("GPL");
讲解 :所有物理网卡(GMAC)、虚拟网卡(tap/veth)在内核全部统一使用net_device抽象,上层协议栈无感知差异。
进阶实例
- 读取
net_device内部统计字段,实现内核态网卡流量统计 - 编写内核模块动态修改网卡MTU、MAC地址、速率模式
第3章:sk_buff数据包缓冲区(全书重中之重)
核心知识点
- sk_buff内存布局:head/data/tail/end 四区划分
- 头部预留、数据追加、数据剥离、线性化、分片重组
- skb内存池分配机制、预分配缓存优化
- 共享skb与独立skb拷贝区别:
skb_clone / skb_copy
基础Demo:skb标准操作(已配套工程)
实现预留协议头、填充数据、头部删减、释放流程
进阶实例
- 内核实现IP数据包自定义篡改(修改源IP/目的IP)
- 实现大报文
skb_segment分片与skb_coalesce合并 - 基于skb实现内核层抓包过滤系统
第4章:网卡收包机制:中断 + NAPI机制
核心知识点
- 传统中断收包弊端:中断风暴、CPU占用高
- NAPI混合收包完整状态机
- 收包预算budget、轮询权重、繁忙轮询机制
- RK3588 GMAC多队列RSS多核负载均衡原理
基础Demo
精简NAPI注册+轮询收包标准内核代码
进阶实例
- 手动关闭硬件中断,纯NAPI轮询收包压测
- 网络中断CPU亲和性绑定,把收包线程固定到大核A76
- 高并发场景下NAPI参数调优实战
第5章:MDIO总线与PHY芯片驱动
核心知识点
- MDIO总线读写PHY寄存器原理
- 以太网自动协商、速率双工协商底层流程
- 链路状态检测、断线重连内核实现
- RGMII/RMII时序延迟配置原理
实操Demo
bash
# 读取PHY寄存器
mdio-tool eth0 read 0 1
# 强制设置网卡千兆全双工
ethtool -s eth0 speed 1000 duplex full autoneg off
进阶实例
- 自定义非标工业PHY驱动开发
- 内核实时监听网线插拔事件并上报状态
第三部分:链路层与ARP协议
第6章:二层以太网帧处理
核心知识点
- 以太网帧头部格式解析
- 广播帧、组播帧、单播帧内核分发逻辑
- VLAN标签内核剥离与硬件加速原理
进阶实例
- 内核模块拦截二层以太网帧实现二层数据转发
- 基于VLAN实现嵌入式多网段隔离组网
第7章:ARP地址解析协议
核心知识点
- ARP请求/应答内核处理流程
- ARP缓存表老化、更新、失效机制
- 免费ARP、ARP代理底层实现
- ARP攻击内核防护原理
实操查看
bash
# 查看内核ARP缓存表
cat /proc/net/arp
进阶实例
- 编写内核模块伪造ARP应答实现内网ARP欺骗实验
- 内核态清理异常ARP缓存,解决静态IP不通故障
第四部分:网络层 IPv4 协议栈(书籍核心)
第8章:IP头部解析与数据包分片
核心知识点
- IPv4头部12个字段完整内核解析逻辑
- 入站IP校验和校验流程
- 大数据包IP分片、接收重组完整流程
- 不同协议号分发:ICMP/TCP/UDP/IGMP
基础Demo
内核模块解析skb内IP头部,打印源目IP、协议类型、TTL
进阶实例
- 内核修改IP报文TTL值实现路由跳数伪装
- 手动控制IP分片大小,优化嵌入式窄带宽传输
第9章:路由子系统FIB与路由查找
核心知识点
- 内核路由表结构:静态路由/动态路由
- 最长前缀匹配路由查找算法
- 路由缓存、路由策略、默认路由优先级
- 本机路由、直连路由、网关路由区分
实操命令
bash
# 查看内核路由缓存
cat /proc/net/route
# 追踪内核路由走向
ip route get 114.114.114.114
进阶实例
- 内核态动态添加/删除路由条目
- 实现双网卡多路由策略分流(内网走eth0,外网走eth1)
第10章:ICMP网络控制报文协议
核心知识点
- Ping请求/应答内核完整处理流程
- 超时、不可达、重定向ICMP报文处理
- ICMP限速、防洪水攻击内核机制
进阶实例
- 内核拦截禁止本机被ping通
- 自定义ICMP错误报文回复
第五部分:传输层 TCP/UDP 协议栈(全书最难)
第11章:UDP协议源码实现
核心知识点
- UDP无连接特性内核实现
- UDP头部校验、端口分发、队列缓冲
- UDP接收缓冲区/发送缓冲区内核参数原理
- UDP洪水攻击原理与内核防御
基础Demo
用户态UDP服务端+客户端通信Demo
进阶实例
- 内核态批量加速UDP报文收发
- 关闭UDP校验和实现高速数据透传
第12章:TCP协议完整内核实现(重中之重)
核心知识点
- TCP四次握手建立连接底层流程
- TCP滑动窗口、拥塞窗口、接收窗口原理
- 超时重传、快速重传、SACK选择确认
- TCP状态机全状态流转:LISTEN/SYN_SENT/ESTABLISHED/TIME_WAIT
- 内核拥塞控制算法:CUBIC / BBR / DCTCP源码逻辑
- TCP粘包、拆包内核底层成因
基础Demo
标准Socket TCP服务端客户端通信实例
进阶实例
- 内核开启/关闭TCP Fast Open快速连接
- 修改内核TCP参数优化高延迟嵌入式网络
- 实战切换BBR拥塞控制并压测对比吞吐
- 内核模块劫持TCP报文实现内容过滤
第13章:套接字Socket层实现
核心知识点
- Socket文件描述符在内核的抽象实现
- 阻塞/非阻塞Socket内核等待队列原理
- IO多路复用select/poll/epoll内核底层机制
- 原始套接字、数据报套接字、流式套接字差异
进阶实例
- 嵌入式高并发epoll服务端编写
- AF_PACKET原始套接字抓取二层三层裸数据包
第六部分:Netfilter 防火墙与网络安全
第14章:Netfilter五大钩子完整原理
核心知识点
PRE_ROUTING / LOCAL_IN / FORWARD / LOCAL_OUT / POST_ROUTING五大挂载点- 数据包在内核经过钩子的完整顺序
- iptables/nftables底层依托Netfilter实现原理
- 数据包丢弃、放行、修改、转发、地址转换原理
基础Demo
IP黑名单拦截内核模块(你已完成工程)
进阶实例
- 内核态端口流量限速模块
- 实现内核级端口映射NAT转发
- 恶意畸形数据包内核清洗过滤
第七部分:高级网络特性
第15章:虚拟网络技术
核心知识点
- tun/tap虚拟设备原理
- veth成对虚拟网卡通信机制
- macvlan/ipvlan物理网卡多IP虚拟化
- 内核网桥bridge转发原理
实操Demo
bash
# 创建macvlan虚拟网卡
ip link add link eth0 macv0 type macvlan mode bridge
ifconfig macv0 192.168.2.20 up
进阶实例
- 基于tun设备实现简易VPN隧道通信
- RK3588搭建嵌入式极简网桥局域网
第16章:网卡绑定Bonding与网络冗余
核心知识点
- Bonding七种工作模式内核实现差异
- 主备模式热切换、负载聚合模式带宽叠加原理
- 链路故障检测内核机制
进阶实例
工业设备双网口自动热备份工程实战
第17章:流量控制与QoS内核实现
核心知识点
- 内核TC流量调度队列原理
- 优先级队列、限流、整形、抖动消除
- 工业以太网QoS报文优先级映射
进阶实例
嵌入式网关按端口划分带宽优先级
第八部分:嵌入式Linux网络性能调优(工程落地)
第18章:内核网络全局参数调优
核心知识点
- 套接字缓冲区、连接数、超时时间全套参数原理
- 网络软中断调度优化
- 网卡队列、NAPI、RSS极限性能优化
- RK3588大小核网络任务调度优化策略
配套最优调优配置(可直接写入sysctl)
conf
shturl.cc/YjxvAKkw = 4096
shturl.cc/JgFKeFi = 16777216
shturl.cc/8hHfHki = 16777216
shturl.cc/vXBokHIGtd6 = 1
shturl.cc/iP6mhN06PtBQWp = 10
shturl.cc/HgSU0h8n9uwFe1xg7QTJd = bbr
进阶实战
- iperf3千兆满速压测+性能瓶颈定位
- 高并发短连接服务内核最优参数调优
第九部分:书籍学习配套实战项目(由浅入深)
入门级项目
- sk_buff数据包读写与拷贝实验
- 虚拟网卡驱动编写与通信测试
- 简易ARP状态查看工具
进阶级项目
- Netfilter内核防火墙黑白名单系统
- 内核态UDP/TCP流量限速系统
- 基于NAPI优化千兆网卡收包性能
企业级嵌入式实战项目
- RK3588工业多协议网关(TCP/UDP/ModbusTCP转发)
- 双网卡冗余热备份网络系统
- 嵌入式轻量级内核VPN隧道
- 基于原始套接字的网络抓包分析工具
- 千兆零拷贝高速数据转发服务
第十部分:书籍学习高效研读方法
- 先抓链路+设备层:搞定sk_buff、NAPI、net_device,打通底层
- 再啃IP路由层:理解数据包转发核心逻辑
- 攻坚TCP传输层:状态机、拥塞控制是全书最难重点
- 最后学习安全与虚拟化:Netfilter、虚拟网络做工程落地
- 源码对照 :看书同时对照 Linux7.0.3 内核对应
.c文件逐行研读 - 边学边写:每章节写完对应Demo内核模块/应用层代码
附赠:书籍对应内核源码快速索引
| 书籍章节内容 | 内核源码路径 |
|---|---|
| 网络设备 | net/core/dev.c |
| sk_buff管理 | net/core/skbuff.c |
| NAPI机制 | net/core/dev.c / include/linux/napi.h |
| IPv4协议 | net/ipv4/ip_input.c ip_output.c |
| 路由系统 | net/ipv4/fib_frontend.c |
| TCP协议 | net/ipv4/tcp_*.c |
| Netfilter | net/netfilter/ |
| 网桥 | net/bridge/ |
| Bonding | drivers/net/bonding/ |
后续可提供
- 本书每一章课后练习题+答案
- 全套配套Demo源码打包(应用层+内核层)
- TCP协议栈逐行源码深度解析文档
- 结合RK3588硬件的书本知识点硬件落地教程