第12周:IP 层与路由子系统
目标:理解 IP 分片重组、路由查找(FIB)机制,能基于源 IP 选择路由。
1. IP 层核心数据结构
1.1 iphdr(IP 头)
1 | struct iphdr { |
1.2 标志位操作
1 |
|
2. IP 分片与重组
2.1 为什么需要分片?
1 | MTU(最大传输单元): |
2.2 分片过程
1 | // 内核中的分片逻辑(简化) |
2.3 重组过程
1 | // 重组在 ip_defrag() 中完成 |
3. 路由子系统(FIB)
3.1 路由表结构
1 | 路由表(Forwarding Information Base): |
3.2 路由查找流程
1 | // 简化版路由查找 |
3.3 策略路由(Policy Routing)
1 | 默认路由:所有包按一个路由表处理 |
1 | # === 策略路由配置 === |
3.4 内核模块读取路由
1 |
|
4. 实践:基于源 IP 的路由选择
1 | // src_routing.c |
5. fib_trie(路由查找树)
1 | Linux 使用 LC-trie(Level Compressed Trie)存储路由: |
5.1 查看内核路由表
1 | // 读取 /proc/net/route |
6. 网络命名空间与路由
1 | # === 网络命名空间 === |
1 | // 内核中操作网络命名空间 |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/07/14/第12周:IP 层与路由子系统/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!