Linux Wlan L3~L2封包逻辑详解

拓扑及配置

分析流程

  • PC1去ping 外网的server,发送数据包的L2地址(MAC地址)及L3地址(IP地址) 应该如何变化?

组包结果

  • PC发送封包
  • PC接收封包

抓包验证

  1. PC1 发送ping包
  2. SERVER端接收包
  3. SERVER reply 包
  4. PC接收reply包

上面我们分发送和接收简单介绍了L2和L3的封包逻辑,是按照什么依据呢?

  1. IP地址是端到端的
    源IP :电脑发出时是 192.168.10.2,经过路由器NAT后变成公网IP 10.0.0.1
    目的IP:始终不变(发送包情况)
  2. MAC地址是逐跳的
    每经过一个路由器,源、目的MAC地址完全重写,拆开外层MAC → 查路由表 → 包装新MAC → 转发

流程梳理

  1. ping触发后,如果是域名,则触发DNS --> IP地址
  2. 主机判定ip地址是否属于本机,若不属于,查询路由表确定下一跳IP
  3. 查询ARP缓存,确定吓一跳MAC
  4. 填入目的MAC,
  5. 接口转发
我们深入代码,主要关注负责获取邻居的MAC地址并通过邻居子系统发送数据包

在这里我们就不加入路由模块参与讨论了

  1. IP层到链路层转换的关键桥梁
  2. 确定用于查找邻居缓存的目标IP地址

    rt_gw4为网关地址,192.168.10.1

  3. 查询内核的ARP哈希表

    哈希值计算

在这里,我们不讨论创建邻居项的分路:

什么是邻居子系统?

邻居子系统是Linux内核网络协议栈中的一个核心组件,它负责管理同一局域网中相邻设备之间的地址映射关系。换句话说,它的主要工作就是:把IP地址(三层)转换成MAC地址(二层)

相关推荐
OnlineProxy7 小时前
企业级代理服务器架构:合规性、NDA 诚信与灰色 P2P 网络风险防范
网络·架构·p2p
Ivanqhz15 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
FPGA小徐15 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
殷色玫瑰17 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
꯭自꯭闭꯭18 小时前
DM7主备升级方案
linux·服务器·数据库
用户41071920132518 小时前
VMware 虚拟机Ubuntu 环境linux远程连接失败
linux
lisanmengmeng19 小时前
Nagios邮件报警的配置
linux·运维·服务器
Ruiery19 小时前
Linux 6.6内核 CPU 深度解析(六):cpufreq
linux·运维·服务器
倔强的石头10619 小时前
【Linux指南】动静态库系列(十一):PLT 与延迟绑定:第一次调用动态库函数时发生了什么
linux·人工智能·python
硅基手札20 小时前
【linux内核专栏 08】时间与定时器
linux·运维·服务器