【Linux网络】数据链路层协议(二):ARP协议

🎬 个人主页艾莉丝努力练剑
专栏传送门 :《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录
Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬 艾莉丝的简介:


文章目录

  • 前言
  • [1 ~> ARP 协议](#1 ~> ARP 协议)
    • [1.1 ~> ARP 协议分层定位](#1.1 ~> ARP 协议分层定位)
      • [1.1.1 ~> 层级归属细节](#1.1.1 ~> 层级归属细节)
      • [1.1.2 ~> 协议适用范围](#1.1.2 ~> 协议适用范围)
    • [1.2 ~> ARP 协议核心作用](#1.2 ~> ARP 协议核心作用)
    • [1.3 ~> ARP 基础工作原理](#1.3 ~> ARP 基础工作原理)
      • [1.3.1 ~> 生活化类比拆解原理](#1.3.1 ~> 生活化类比拆解原理)
      • [1.3.2 ~> 原理关键结论](#1.3.2 ~> 原理关键结论)
    • [1.4 ~> ARP + 以太网整体帧结构](#1.4 ~> ARP + 以太网整体帧结构)
      • [1.4.1 ~> 14 字节以太网首部(外层信封,数据链路层硬件解析)](#1.4.1 ~> 14 字节以太网首部(外层信封,数据链路层硬件解析))
      • [1.4.2 ~> 28 字节 ARP 载荷(内层信纸,操作系统 ARP 程序解析)](#1.4.2 ~> 28 字节 ARP 载荷(内层信纸,操作系统 ARP 程序解析))
      • [1.4.3 ~> 双层 MAC 地址重复的设计原因](#1.4.3 ~> 双层 MAC 地址重复的设计原因)
    • [1.5 ~> ARP 请求、应答全交互流程](#1.5 ~> ARP 请求、应答全交互流程)
      • [1.5.1 ~> ARP 请求报文封装与全网广播](#1.5.1 ~> ARP 请求报文封装与全网广播)
      • [1.5.2 ~> 局域网主机处理请求报文](#1.5.2 ~> 局域网主机处理请求报文)
      • [1.5.3 ~> ARP 应答报文封装与单播发送](#1.5.3 ~> ARP 应答报文封装与单播发送)
      • [1.5.4 ~> 应答报文局域网转发与源主机收尾](#1.5.4 ~> 应答报文局域网转发与源主机收尾)
      • [1.5.5 ~> 两种丢包层级核心区分](#1.5.5 ~> 两种丢包层级核心区分)
    • [1.6 ~> ARP 本地缓存机制](#1.6 ~> ARP 本地缓存机制)
      • [1.6.1 ~> 缓存设计目的](#1.6.1 ~> 缓存设计目的)
      • [1.6.2 ~> 全平台 ARP 缓存默认老化时间](#1.6.2 ~> 全平台 ARP 缓存默认老化时间)
      • [1.6.3 ~> ARP 缓存无法永久保存的原因](#1.6.3 ~> ARP 缓存无法永久保存的原因)
      • [1.6.4 ~> 缓存查看系统命令](#1.6.4 ~> 缓存查看系统命令)
    • [1.7 ~> 实操:批量获取局域网全部在线主机 MAC 地址](#1.7 ~> 实操:批量获取局域网全部在线主机 MAC 地址)
      • [1.7.1 ~> 实操原理](#1.7.1 ~> 实操原理)
      • [1.7.2 ~> 网段落地实操](#1.7.2 ~> 网段落地实操)
      • [1.7.3 ~> 云服务器网段差异化说明](#1.7.3 ~> 云服务器网段差异化说明)
      • [1.7.4 ~> ARP 跨网段触发拓展](#1.7.4 ~> ARP 跨网段触发拓展)
    • [1.8 ~> RARP 逆地址解析协议](#1.8 ~> RARP 逆地址解析协议)
      • [1.8.1 ~> 协议功能](#1.8.1 ~> 协议功能)
      • [1.8.2 ~> 应用场景与现状](#1.8.2 ~> 应用场景与现状)
    • [1.9 ~> ARP 欺骗(中间人网络攻击)](#1.9 ~> ARP 欺骗(中间人网络攻击))
      • [1.9.1 ~> 攻击底层漏洞根源](#1.9.1 ~> 攻击底层漏洞根源)
      • [1.9.2 ~> 单向欺骗:定向断网攻击](#1.9.2 ~> 单向欺骗:定向断网攻击)
      • [1.9.3 ~> 双向中间人流量劫持攻击](#1.9.3 ~> 双向中间人流量劫持攻击)
    • [1.10 ~> ARP协议知识图谱](#1.10 ~> ARP协议知识图谱)
  • [2 ~> 拓展](#2 ~> 拓展)
    • [2.1 浏览器输入www.baidu.com(https://www.baidu.com)访问百度首页全链路 ARP 协同逻辑](#2.1 浏览器输入www.baidu.com访问百度首页全链路 ARP 协同逻辑)
  • [3 ~> 总结](#3 ~> 总结)
  • 结尾


前言

导入语

本文围绕计算机网络数据链路层核心协议 ARP 展开系统性梳理,作为衔接网络层与数据链路层的过渡协议,摒弃生硬的协议条文罗列,依托教室点名寻址、日常邮寄信件、家庭宽带组网、ping 探测局域网终端等生活化实例,循序渐进拆解 ARP 分层定位、地址映射功能、以太网 + ARP 双层报文结构、请求应答完整交互流程、系统 ARP 缓存生命周期、主机命令实操查询局域网 MAC、RARP 逆地址解析补充知识、ARP 中间人欺骗攻击原理。日常在浏览器输入www.baidu.com打开百度首页,数据包从本机向外转发的首个环节就依赖 ARP 协议获取网关 MAC 地址,是全网跨主机数据互通不可或缺的底层支撑。全文完整收录以太网帧字节长度、协议固定字段参数、全平台 ARP 缓存老化时长、Windows/Linux 实操命令、攻击原理等全部复习要点,可作为面试备考、课程期末复习的权威参考资料。

思维导图


1 ~> ARP 协议

1.1 ~> ARP 协议分层定位

1.1.1 ~> 层级归属细节

ARP 无法被单一划分至网络层或数据链路层,从宏观协议归类角度属于数据链路层协议,在协议封装结构上处在 MAC 帧上层,和 MAC 帧构成同模块上下层级关系;协议运行全程不会和用户应用进程直接交互,IP 与 MAC 的地址映射管理工作由操作系统内核自主完成。

1.1.2 ~> 协议适用范围

ARP 是基于局域网广播机制设计的二层协议,原生依托以太网物理广播特性完成报文交互;跨广域网的数据传输过程中,每一台中转路由设备获取下一跳 IP 后,依旧会在对应接口所在局域网触发 ARP 解析,并非只在目标主机所处子网才发起 ARP。

1.2 ~> ARP 协议核心作用

网络通信场景中,上层应用程序仅能解析目标主机 IP 地址与应用端口号,无法识别网卡硬件 MAC 地址;网卡接收数据帧时会优先校验帧头部目的 MAC,MAC 和本机硬件地址不匹配的数据包会被网卡直接丢弃,ARP 的核心作用就是在正式数据传输前,建立IP 逻辑地址与 MAC 物理地址的映射对照表,补齐二层寻址必需的硬件地址信息。

1.3 ~> ARP 基础工作原理

1.3.1 ~> 生活化类比拆解原理

采用教室场景类比完整还原 ARP 逻辑:发起通信的主机类比讲课讲师,目标主机类比学生张三,IP 对应人名、MAC 对应学号。讲师只知道姓名(IP)不知道学号(MAC),在教室全范围广播喊话寻找张三,全班所有学生(局域网所有主机)全部收到广播报文;非张三的学生核对身份后忽略报文,仅张三以一对一私聊的形式回复自身学号;讲师拿到学号后即可点对点传输数据,完整流程对应 ARP:广播发送 ARP 请求→单播回复 ARP 应答→正常业务数据传输

1.3.2 ~> 原理关键结论

所有 ARP 报文不能裸包在局域网传输,必须整体封装进 MAC 帧载荷字段,依托数据链路层帧结构完成物理传输。

1.4 ~> ARP + 以太网整体帧结构

完整数据帧由三段组成:14 字节以太网首部、28 字节 ARP 请求 / 应答载荷、尾部 4 字节 CRC 帧校验序列,CRC 由网卡硬件自动生成与校验,用于检测传输过程中比特位损坏、数据失真问题。

1.4.1 ~> 14 字节以太网首部(外层信封,数据链路层硬件解析)

字段固定拆分:目的 MAC 地址 6 字节 + 源 MAC 地址 6 字节 + 帧类型 2 字节

  1. 目的 MAC:ARP 请求报文填写全 F 广播地址FF:FF:FF:FF:FF:FF;ARP 应答填写请求主机的真实单播 MAC;
  2. 源 MAC:固定填充当前发送主机自身网卡 MAC 地址;
  3. 帧类型:标识上层载荷协议,ARP 固定0x0806,普通 IP 报文固定0x0800

1.4.2 ~> 28 字节 ARP 载荷(内层信纸,操作系统 ARP 程序解析)

该部分是 ARP 协议本体,以太网 + IPv4 环境下所有字段长度、默认参数固定:

  1. 硬件类型 (2B):链路层硬件类型,以太网固定数值 1,更换令牌环、无线 LAN 后字段数值变更;
  2. 协议类型 (2B):待映射上层地址类型,IPv4 固定0x0800
  3. 硬件地址长度 (1B):MAC 地址字节数,以太网固定 6;
  4. 协议地址长度 (1B):IPv4 地址字节数,固定 4;
  5. op 操作码 (2B):报文类型标识,op=1 代表 ARP 请求报文,op=2 代表 ARP 应答报文,所有主机解析 ARP 报文优先读取 op 字段
  6. 发送端 MAC (6B)+ 发送端 IP (4B):始终填充发送主机本机的硬件地址与逻辑 IP;
  7. 目的 MAC (6B)+ 目的 IP (4B):请求报文目的 MAC 全填充 0,目的 IP 填写待查询目标 IP;应答报文目的 MAC 填写请求方真实 MAC,目的 IP 同步填充请求方 IP。

1.4.3 ~> 双层 MAC 地址重复的设计原因

以太网环境下以太网首部 MAC 和 ARP 载荷内部 MAC 数据重复看似冗余,本质是协议为兼容令牌环等非以太网异构网络,异构链路中两处 MAC 字段作用不一致无法省略;同时遵循计算机网络分层思想做拆分:

  1. 交换机、网卡等链路层硬件仅解析外层以太网首部,无法解析内部 ARP 载荷数据;
  2. 操作系统收到数据包后剥离以太网头部,仅提取内层 28 字节 ARP 数据用于更新本机 ARP 缓存。

1.5 ~> ARP 请求、应答全交互流程

以主机 R 访问同网段主机 E 为例,R 已知 E 的 IP、无 E 的 MAC 缓存条目,完整触发一次标准 ARP 交互。

1.5.1 ~> ARP 请求报文封装与全网广播

  1. 组装 ARP 载荷:硬件类型 1、协议0x0800、地址长度 6/4、op=1,发送端写入 MACR、IPR,目的 IP 填 IPE、目的 MAC 全 0 填充;
  2. 封装以太网帧:首部目的 MAC 为全 F 广播,源 MAC=MACR,帧类型0x0806,尾部附加硬件 CRC 校验;
  3. 整帧在局域网广播,网段内所有主机网卡接收该数据帧。

1.5.2 ~> 局域网主机处理请求报文

所有主机网卡匹配广播 MAC 收下帧,剥离以太网头部后把 ARP 数据交给本机 ARP 模块,优先读取 op 字段确认是请求报文:

  1. 同网段 B/C 等无关主机:对比 ARP 载荷内目的 IP 和本机 IP 不一致,在ARP 协议应用层丢弃报文
  2. 目标主机 E:目的 IP 与本机 IP 匹配,保留报文并构造应答数据包。

1.5.3 ~> ARP 应答报文封装与单播发送

  1. 组装 ARP 载荷:op 修改为 2 应答码,发送端填充 MACE、IPE,目的字段填写请求方 MACR、IPR;
  2. 外层以太网首部修改:目的 MAC 改为 MACR(单播地址),源 MAC=MACE,帧类型保持0x0806,追加 CRC 校验;
  3. 封装完成后以单播形式向局域网发送。

1.5.4 ~> 应答报文局域网转发与源主机收尾

  1. B/C 无关主机:网卡校验外层目的 MAC 和本机不匹配,在数据链路 MAC 层直接丢弃整帧
  2. 源主机 R 网卡匹配 MAC 收下数据,剥离帧头读取 ARP 载荷,提取 MACE 与 IPE 的映射关系写入本地 ARP 缓存。

1.5.5 ~> 两种丢包层级核心区分

ARP 请求阶段无关终端:在内层 ARP 应用层丢弃报文(依据载荷目的 IP 判断) ; ARP 应答阶段无关终端:在外层数据链路 MAC 层丢弃报文(依据帧头目的 MAC 判断)

1.6 ~> ARP 本地缓存机制

1.6.1 ~> 缓存设计目的

ARP 成功解析 IP-MAC 映射后存入系统 ARP 缓存表,后续同一 IP 发起通信时直接查表获取 MAC,不用反复发送 ARP 广播,减少局域网广播风暴、节约带宽资源。

1.6.2 ~> 全平台 ARP 缓存默认老化时间

  1. Windows (Vista 及以上版本):基准 30 秒,随机 0.5\1.5 倍浮动,实际生效区间 15\45s,过期条目标记 Stale,再次访问时重新触发 ARP 解析;
  2. Windows XP/Server2003:缓存时效由注册表ArpCachelife参数自定义配置;
  3. Linux 系统:基准 30 秒,随机扰动后时效 15~45 秒,过期 Stale 条目不会立刻从缓存删除;
  4. Cisco 交换机、路由器:默认老化 4 小时,附加 0~30 分钟随机抖动,大幅降低 ARP 广播频次;
  5. 锐捷等国产网络设备:默认缓存超时 1 小时 (3600s);
  6. RFC 官方标准文档:推荐缓存 20 分钟,目前商用操作系统基本不再遵循该标准。

1.6.3 ~> ARP 缓存无法永久保存的原因

  1. 局域网终端 IP 大多由 DHCP 动态分配,IP 地址会随租期到期、设备重连发生变更;
  2. 主机更换物理网卡、设备关机下线,原有 MAC 地址失效作废;
  3. 云主机、服务器场景域名固定,但公网出口 IP 存在动态切换场景,旧 IP-MAC 映射失效。

1.6.4 ~> 缓存查看系统命令

  • Windows CMD 终端:arp -a查看本机全量 ARP 缓存列表;
  • Linux 终端:arp -a查看缓存,ifconfig查看本机网卡 IP、子网掩码、硬件 MAC。

1.7 ~> 实操:批量获取局域网全部在线主机 MAC 地址

1.7.1 ~> 实操原理

ping指令发送 ICMP 探测包前,操作系统自动检索 ARP 缓存,无对应 MAC 条目则主动发送 ARP 请求,目标主机回复 ARP 应答后,IP-MAC 映射自动写入本地缓存,后续通过 arp 命令批量导出 MAC 数据。

1.7.2 ~> 网段落地实操

示例网段192.168.100.0/24,子网掩码255.255.255.0,可用主机 IP 范围 <192.168.100.1>~<192.168.100.254>;实操步骤:

  1. Linux 使用ping -c1 目标IP(-c1 代表仅发送 1 个探测包)、Windows 直接执行ping IP地址循环遍历网段 IP;
  2. ping 连通后执行arp -a,缓存自动写入在线主机 IP 与对应 MAC;
  3. 原笔记实操案例:ping192.168.100.239连通后,arp 缓存出现 MAC00-15-5d-62-be-09,即为目标教学服务器硬件地址。

1.7.3 ~> 云服务器网段差异化说明

云服务器普遍使用 / 16 大网段(子网掩码 <255.255.0.0>),可用 IP 数量远大于 / 24 网段,批量遍历探测需要覆盖更大 IP 区间。

1.7.4 ~> ARP 跨网段触发拓展

ARP 不只在目标主机子网触发,跨网段访问外网时,本机查询路由表得到网关 IP,会对网关 IP 发起 ARP;运营商骨干网路由转发数据包时,依据路由表下一跳 IP,在对应接口网段随时发起 ARP 解析。

1.8 ~> RARP 逆地址解析协议

1.8.1 ~> 协议功能

RARP 全称反向地址解析协议,功能和 ARP 完全反向:ARP = 已知 IP 查 MAC,RARP = 已知 MAC 查询对应 IP 地址。

1.8.2 ~> 应用场景与现状

RARP 诞生于早期无盘工作站时代,无盘主机无本地硬盘无法存储 IP 配置,开机携带本机 MAC 向局域网 RARP 服务器申请分配 IP;现代 DHCP 动态地址分配协议全面替代 RARP,现网环境基本淘汰,仅作为理论知识点记忆。

1.9 ~> ARP 欺骗(中间人网络攻击)

1.9.1 ~> 攻击底层漏洞根源

操作系统 ARP 缓存只会保留最新收到的 IP-MAC 映射记录,系统不会校验 ARP 报文来源合法性,收到伪造的非法 ARP 应答报文会无条件覆盖原有缓存条目,该缺陷是 ARP 欺骗能够实现的核心前提。

1.9.2 ~> 单向欺骗:定向断网攻击

攻击者主机 M 持续向终端 A 发送伪造 ARP 报文:声明网关 IP (IPR) 对应的 MAC 是攻击者 MAC (MACM),终端 A 收到报文后刷新 ARP 缓存,网关 IP 错误绑定攻击者 MAC;终端 A 访问外网的所有数据包全部转发至 M,攻击者直接丢弃数据包即可造成目标主机断网。

1.9.3 ~> 双向中间人流量劫持攻击

攻击者 M 同时向通信两端伪造两份虚假 ARP 报文:

  1. 向内网主机 A 发送:网关 IP (IPR)→攻击者 MAC (MACM);
  2. 向出口网关 R 发送:主机 A 的 IP (IPA)→攻击者 MAC (MACM); 主机 A、网关 R 双方 ARP 缓存全部被篡改,A 和网关之间上下行全部流量经过 M 中转,攻击者可静默抓取全部明文传输数据,实现中间人窃听。

1.10 ~> ARP协议知识图谱


2 ~> 拓展

2.1 浏览器输入www.baidu.com访问百度首页全链路 ARP 协同逻辑

  1. 浏览器提交域名请求,DNS 服务器完成域名解析,将域名www.baidu.com转换为百度服务器公网 IP 地址;
  2. 本机匹配本地路由表,确定外网数据需要转发至局域网网关 IP,检索 ARP 缓存,无网关 MAC 则发起 ARP 广播获取网关硬件地址;
  3. IP 数据包封装 MAC 帧转发至家用路由器,路由器剥离二层帧头、解封装 IP 报文,查询公网路由条目后从 WAN 口转发数据;
  4. 运营商骨干网跨省市路由转发,每一台中转路由设备查询路由表获取下一跳 IP,在对应接口网段按需触发 ARP 解析下一跳 MAC,逐跳转发至百度机房服务器;
  5. 百度服务器回包原路逐层路由转发,回程各路由节点同样按需执行 ARP 寻址,最终数据返回本机,浏览器接收数据渲染百度首页页面。

3 ~> 总结

本章节完整梳理数据链路层 ARP 全维度知识点,覆盖概念、帧结构、交互流程、缓存、实操、衍生 RARP、安全攻击七大核心板块,全部复习重难点汇总:

  1. 协议分层考点:ARP 宏观归属数据链路层,微观封装在 MAC 帧上层,处在二层与三层中间位置,任何 ARP 报文必须依托 MAC 帧完成局域网传输;
  2. 帧结构核心参数 :以太网首部固定 14 字节,ARP 帧类型标识0x0806,ARP 载荷 28 字节,以太网硬件类型 = 1、IPv4 协议字段0x0800,op=1 请求、op=2 应答;请求报文外层目的 MAC 全 F 广播、内层目的 MAC 全 0 占位,应答报文内外目的 MAC 统一填写请求方 MAC;双层 MAC 重复是为兼容令牌环等异构网络,分层架构区分硬件解析、系统解析两个使用主体;
  3. 收发流程易混点:ARP 请求全网广播,无关主机在内层 ARP 层丢弃报文;ARP 应答单播传输,无关主机在外层 MAC 链路层丢弃帧,丢包层级是考试高频易错考点;
  4. ARP 缓存考点 :分平台记忆各系统缓存老化时间,缓存不能永久保存三点诱因(DHCP 动态 IP、更换网卡、设备下线);实操牢记arp -aifconfigping三条命令,ping 触发 ARP 是局域网批量扫 MAC 的实现原理;ARP 跨网段随时触发,路由下一跳 IP 同样需要 ARP 解析;
  5. RARP 概念区分:反向 MAC 查 IP,仅用于早期无盘工作站,现网被 DHCP 淘汰;
  6. ARP 欺骗安全重点:漏洞根源是 ARP 缓存无合法性校验、自动刷新最新映射,单向伪造实现终端断网,双向伪造完成中间人流量劫持窃密,是网络安全经典攻击模型;
  7. 工程落地串联:访问百度全链路串联 DNS 域名解析、路由寻址、ARP 二层寻址三类协议,直观体现 ARP 在互联网数据传输里的底层支撑地位。

结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 艾莉丝努力练剑 C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日练剑达成!" "技术之路难免有困惑,但同行的人会让前进更有方向。" |

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!

往期回顾

【Linux网络】数据链路层协议(一):MAC 帧 + ARP

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关推荐
志栋智能23 分钟前
超自动化巡检剧本(Playbook):运维经验的数字化封装
运维·自动化
风味蘑菇干31 分钟前
WTomcat服务器
java·服务器
ElevenS_it18834 分钟前
Nginx日志监控告警实战:access_log解析+5xx突增+慢请求+异常IP自动告警完整方案(Filebeat+Zabbix)
运维·网络·tcp/ip·nginx·zabbix
weixin_3077791335 分钟前
Python写入Shell文件使用Linux系统的换行符
linux·开发语言·python·自动化
liulilittle1 小时前
Linux Swap 文件配置与持久化(虚拟内存)
linux·运维·服务器
未若君雅裁1 小时前
日志采集与ELK:从本地日志到集中检索分析
运维·elk·jenkins
青梅橘子皮1 小时前
Linux---进程控制(2)(进程程序替换)
linux·c++·算法
零陵上将军_xdr1 小时前
从沙子到CPU——计算机硬件基础入门
linux·运维·硬件架构
vortex51 小时前
Linux 命令工具箱:util-linux 与 GNU Coreutils
linux·运维·gnu
AIex-YH2 小时前
三域贯通11/12:生物制造的“死亡之谷“,CDMO 是桥还是船?
运维·制造·策略模式