第14周:邻居子系统与 ARP
目标:理解 ARP 缓存管理、邻居状态机,以及 L2 与 L3 如何协作完成地址解析。
1. 邻居子系统概览
1.1 L2 与 L3 的关系
1 | 三层(IP 层):只知道目的 IP 地址 |
1.2 邻居子系统的角色
1 | 邻居子系统不只是 ARP(IPv4): |
2. ARP 协议详解
2.1 ARP 报文格式
1 | ARP 报文(28 字节): |
2.2 ARP 工作流程
1 | 1. 主机 A(192.168.1.1)要给 B(192.168.1.2)发包 |
2.3 ARP 内核数据结构
1 | // include/net/neighbour.h |
3. 邻居状态机
3.1 状态转换图
1 | ARP Request |
3.2 超时参数
1 | # 查看参数 |
4. 邻居表操作
4.1 查看 ARP 缓存
1 | # === ip 命令(推荐)=== |
4.2 添加/删除 ARP 条目
1 | # 添加静态 ARP |
5. ARP 攻击
5.1 ARP 欺骗原理
1 | 正常情况: |
5.2 防护措施
1 | # === 内核级防护 === |
6. 邻居子系统内核 API
6.1 查找邻居
1 |
|
6.2 邻居表实现
1 | // include/net/neighbour.h |
6.3 邻居表初始化
1 | // net/ipv4/arp.c |
7. 实践:用 arping 和 tcpdump 观察 ARP
7.1 ARP 交互观察
1 | # === arping 工具 === |
7.2 观察 ARP 表变化
1 |
|
7.3 检测 ARP 欺骗
1 |
|
8. IPv6 邻居发现(NDP)
1 | IPv6 不需要 ARP,使用 Neighbor Discovery Protocol (NDP): |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/07/10/第14周:邻居子系统与 ARP/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!