上一篇我们区分了 IP 地址与 MAC 地址IP 地址负责跨网络寻址MAC 地址负责当前链路交付。但真正发送帧时主机往往先知道目标 IP而帧首部需要的是目的 MAC 地址。ARPAddress Resolution Protocol地址解析协议解决的正是这个转换问题。ARP 的工作方式可以先记成一句话先查缓存缓存没有就在本地网络广播询问目标设备单播回答。一、ARP 解决什么问题ARP 用于在当前链路或当前广播域内将一个已知 IP 地址映射为对应的 MAC 地址已知下一跳 IP 地址 ↓ ARP 解析 ↓ 得到下一跳 MAC 地址 ↓ 写入当前链路层帧的目的 MAC 字段ARP 不是全网目录服务。它不能通过广播找遍互联网也不负责把域名解析为 IP 地址。后者由 DNS 完成。协议已知什么得到什么作用范围DNS域名IP 地址互联网名称解析体系ARP本地链路上的 IP 地址MAC 地址当前局域网或广播域ARP 同时涉及 IP 与 MAC因此教材中有时将它归到网络层附近有时认为它位于网络层与数据链路层之间。更重要的是它的实际作用它为当前帧填出目的 MAC 地址。二、ARP 缓存先查本地避免反复广播每台主机都设有一个ARP高速缓存用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表称ARP 表。使用 ARP来动态维护 ARP 表。ARP对高速缓存中的每个映射表项都设置了生存时间如20min超时的项目会从高速缓存中删除。IP 地址 MAC 地址 状态/生存时间 本地网关 IP 网关接口 MAC 动态 本地主机 IP 本地主机 MAC 动态发送数据前设备会先查询缓存缓存命中直接取得 MAC 地址封装帧并发送缓存未命中发起 ARP 请求获得映射后写入缓存再发送数据帧。如果没有 ARP 缓存设备每发送一个帧都要广播询问 MAC局域网会产生大量无意义的控制流量。缓存让一次解析结果可以被后续通信复用。三、ARP 的基本流程广播请求单播响应假设主机 A 与主机 B 位于同一局域网A 已知 B 的 IP 地址却不知道 B 的 MAC 地址。1. A 先检查 ARP 缓存若 A 的 ARP 表中已有 B 的映射ARP 流程到此结束A 直接按缓存中的 MAC 构造数据帧。若没有对应记录A 无法构造发给 B 的单播帧于是开始请求。2. A 广播 ARP 请求A 发送 ARP 请求含义可以理解为谁拥有目标 IP请把你的 MAC 地址告诉我。该请求封装在广播帧中目的 MAC 地址为FF:FF:FF:FF:FF:FF同一广播域中的设备都能收到这帧并检查其中被询问的目标 IP。不是目标的设备不响应只有 IP 匹配的 B 会继续处理。3. B 单播 ARP 响应B 发现目标 IP 属于自己后向 A 单播 ARP 响应其中携带B 的 IP 地址 - B 的 MAC 地址响应通常使用单播因为 B 已经从请求中知道 A 的 MAC 地址无需再广播给所有设备。4. A 更新缓存并发送数据A 收到响应后将 B 的 IP-MAC 映射写入缓存。现在 A 可以把目的 MAC 设置为 B 的 MAC将 IP 数据报封装进帧中并发送。四、为什么请求中还要带上发送方的映射ARP 请求不仅询问目标地址还会包含发送方自己的 IP 与 MAC 映射。B 收到请求时可以顺便把 A 的映射写入自己的 ARP 缓存。这样B 之后若需要向 A 回传数据就不用立即再广播一次 ARP 请求。这种“顺手学习”降低了局域网中的广播量。五、ARP 缓存为什么会过期动态 ARP 记录通常带有生存时间到期后会被删除或重新验证。原因是 IP-MAC 映射可能变化设备更换网卡虚拟机迁移或接口重建设备启用随机 MACIP 地址重新分配给另一台设备。如果旧映射永久保留主机可能持续把帧发往已失效的 MAC 地址。缓存老化后下次通信会重新触发 ARP得到新的映射。这也是常见排障现象更换网卡或迁移虚拟机后部分主机可能暂时因旧 ARP 记录访问失败等待缓存刷新或主动清理 ARP 表后通信才恢复。六、目标不在同一局域网时ARP 查谁这是 ARP 最容易混淆的地方。假设主机 A 访问远端服务器 C主机 A ── 本地局域网 ── 默认网关/路由器 ── 其他网络 ── 服务器 CA 根据目的 IP 和子网掩码判断 C 不在本地网络。因为 ARP 广播不能穿过路由器A 不可能直接解析 C 的 MAC。A 需要解析的是默认网关在本地网络接口的 MAC 地址A 查询网关 IP 对应的 ARP 缓存未命中时在本地网络广播 ARP 请求默认网关接口单播回复自己的 MACA 保持 IP 数据报的目的 IP 为 C却把当前帧的目的 MAC 写为网关 MAC网关解封装 IP 数据报、查询路由表并在下一条本地链路上再次解析下一跳的 MAC。因此ARP 始终服务于当前链路上的下一跳而不是一次性解析端到端目的主机的 MAC。如果所要找的主机和源主机不在同一个局域网上就得通过路由器的转发具体有以下四种情况本网络发送方是主机H1要把IP 数据报发送到同一个网络上的另一台主机H2。这时H1在自己的ARP 高速缓存中查询H2的MAC地址如果找不到则发送 ARP 请求分组在网1上广播找到目的主机H2的硬件地址。跨网络发送方是主机H1要把 IP 数据报发送到另一个网络上的一台主机如H3或H4。这时H1先通过IP地址的网络号判断不在同一网络。H1就会知道要通过默认网关的转发找默认网关的ip地址对应的mac地址这时H1在自己的ARP 高速缓存中查询R1的MAC地址如果找不到则发送 ARP 请求分组在网1上广播找到网1上的路由器R1的硬件地址。剩下的工作由路由器 R1来完成。R1要做的事情是下面的3或4发送方是路由器如R1要把IP 数据报转发到与R1连接在同一个网络网2上的主机如H3。这时R1在自己的ARP 高速缓存中查询H3的MAC地址如果找不到则发送 ARP 请求分组在网2上广播找到目的主机 H3的硬件地址。发送方是路由器如R1要把IP 数据报转发到网3上的一台主机如H4。H4与R1不是连接在同一个网络上。这时 R1会根据转发表查找下一跳路由器的IP地址(R2)这时R1在自己的ARP 高速缓存中查询R2的MAC地址如果找不到则发送 ARP 请求分组在网2上广播找到路由器R2的硬件地址。剩下的工作由这个路由器R2来完成。发送者目的 IP 是否在当前直连网络ARP 查询对象当前帧的目的 MAC主机 H1是目的主机目的主机 MAC主机 H1否默认网关网关接口 MAC路由器 R1是目的主机目的主机 MAC路由器 R1否下一跳路由器下一跳接口 MAC七、ARP 与安全为什么会有 ARP 欺骗ARP 追求的是局域网内快速、自动建立映射传统协议本身没有为每条响应提供强认证。如果恶意设备伪造 ARP 响应声称“网关 IP 对应我的 MAC”其他设备可能错误更新缓存流量就会被引向攻击者。这是 ARP 欺骗或 ARP 投毒的基本思路。企业网络可通过静态绑定关键映射、DHCP Snooping、动态 ARP 检测等手段缓解风险。更根本的原则是ARP 的便利来自本地广播和自动缓存而这些机制也带来了信任边界。八、结合网页访问理解 ARP笔记本访问远端网站时可能经历DNS 将域名解析为服务器 IP笔记本发现服务器 IP 不在本地子网笔记本查询默认网关 MAC 的 ARP 缓存缓存没有时本地广播 ARP 请求网关单播响应笔记本以网关 MAC 为目的 MAC、以服务器 IP 为目的 IP 发送帧后续路由器逐跳转发并在各自的本地链路上完成下一跳 ARP 解析最后一跳路由器解析服务器 MAC完成本地交付。浏览器看来只是打开页面在链路层看来ARP 把“知道下一跳 IP”转换成“能正确填写当前帧的目的 MAC”。九、常见误区1. ARP 可以通过广播找遍互联网不对。ARP 请求是二层广播只在当前广播域有效路由器通常不会转发。2. 访问远端服务器时ARP 获取的是远端服务器 MAC不对。源主机通常解析本地默认网关接口的 MAC远端网络中的 MAC 解析由沿途路由器逐跳完成。3. ARP 请求与响应都是广播不对。请求通常广播因为发送方不知道目标 MAC响应通常单播因为目标已知请求方 MAC。4. ARP 缓存永久保存更高效不对。动态映射会变化长期使用旧 MAC 会造成通信失败因此需要老化机制。5. ARP 成功一次后就永远不再需要不对。缓存会过期与新的下一跳通信时也可能需要新的解析。十、总结ARP 负责在本地网络中把 IP 地址映射为 MAC 地址。缓存命中时可直接发帧缓存未命中时主机广播 ARP 请求目标设备单播响应发送方再缓存结果。ARP 的范围仅限当前链路和当前广播域。访问远端网络时源主机解析的是默认网关 MAC而不是远端服务器 MAC每台路由器在自己的出接口所在网络中重复这个“下一跳 IP 到下一跳 MAC”的过程。理解 ARP 后下一篇将进入局域网中最常见的链路层协议以太网看看一帧数据如何在本地网络中真正转发。如果这篇文章对你有帮助欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力