外观
知道对方的 IP,怎么查出对方的 MAC 地址?
阶段 2 · 数据链路层 · 第 11 课
在第 10 课中,我们知道了交换机是靠 MAC 地址来转发帧的。当你坐在电脑前,在浏览器里输入 http://192.168.1.2 试图打开同事共享的文档时,操作系统网络栈准备将数据打包成一个以太网帧。
可当它封装到数据链路层时,它突然卡住了:“目的 IP 是 192.168.1.2,但以太网帧头非要我填一个 6 字节的目的 MAC!我该填谁的 MAC?” 如果填不对,网线上的交换机根本不知道该把这一帧转给谁。
网络世界里,IP 地址是逻辑层面的“门牌号”,而 MAC 地址是硬件层面的“身份证号”。今天的主角——地址解析协议(ARP)(Address Resolution Protocol,地址解析协议),就是穿梭在局域网里的专职地址翻译官。
学完本课后,你将能够:
- 画出并叙述 ARP 协议的工作时序:广播请求(Request)
单播应答(Reply)。 - 读懂本机 ARP 缓存表(
arp -a或display arp),解释 IP 与 MAC 的绑定与老化。 - 解释广播(Broadcast)为什么不能穿透三层路由器,以及免费 ARP(Gratuitous ARP)如何用来检测 IP 冲突。
1. 先看图:大喇叭广播与悄悄话单播
假设主机 A(192.168.1.1,MAC-A)要向同一局域网内的主机 B(192.168.1.2,MAC-B)发送数据,但 A 的内存里完全不知道 B 的 MAC 地址。请跟着上图看两步经典的交互:
第一步:ARP 请求(ARP Request)——大喇叭广播
- 主机 A 制作了一个 ARP 请求报文,在报文里写下四个要素:
- “我是
192.168.1.1,我的 MAC 是MAC-A。” - “请问谁的 IP 是
192.168.1.2?请把你的 MAC 地址告诉我!”
- “我是
- 主机 A 把这个 ARP 报文交给网卡。因为此时根本不知道 B 的 MAC,网卡把以太网帧头的目的 MAC 填为全网广播地址:
FF-FF-FF-FF-FF-FF!帧的 Type 字段填0x0806(代表承载的是 ARP 协议)。 - 交换机收到这个全 F 广播帧后,根据上一课学过的泛洪规则,将它复制分发给局域网内的所有电脑(主机 B、主机 C、主机 D...)。
第二步:各主机的反应与 ARP 单播应答(ARP Reply)
- 主机 C 和 D:网卡收到广播帧后解开看,发现报文里问的是“谁是
192.168.1.2”。C 和 D 一看自己并不是这个 IP,直接静默把报文扔掉。 - 主机 B:解开看发现“问的正是我”!主机 B 做了两件事:
- 顺手牵羊:B 看到 A 的请求报文里带了 A 的 IP 和 MAC,立刻顺便在自己的 ARP 表里记下一条:
192.168.1.1 对应 MAC-A,白赚一条记录! - 悄悄话应答:B 制作一个 ARP 应答报文,写下:“我是
192.168.1.2,我的 MAC 是MAC-B”。
- 划重点:B 回复 A 时,B 已经知道 A 的 MAC 就是
MAC-A,因此 ARP 应答帧是以单播(Unicast)形式直接发送给 A 的(目的 MAC 为MAC-A),绝不会在局域网里引起二次广播打扰别人!
- 顺手牵羊:B 看到 A 的请求报文里带了 A 的 IP 和 MAC,立刻顺便在自己的 ARP 表里记下一条:
2. 终端的记事本:ARP 缓存表
如果主机 A 之后每发一个字节都要在局域网里广播大喊一次“谁是 192.168.1.2”,整个局域网的带宽马上会被广播报文挤爆。
因此,所有电脑和网络设备在收到 ARP 应答后,都会在本地内存中保留一张 ARP 缓存表(ARP Cache Table):
在 Windows 电脑的 CMD 终端输入 arp -a,即可查看这张表:
text
C:\> arp -a
接口: 192.168.1.1 --- 0xb
Internet 地址 物理地址 类型
192.168.1.2 54-89-98-1a-2b-3d 动态
192.168.1.254 54-89-98-1a-2b-01 动态
192.168.1.255 ff-ff-ff-ff-ff-ff 静态- 动态条目(Dynamic):通过刚才的 ARP 交互自动学习到的。它具备老化机制(Windows 通常为 2~20 分钟,华为交换机通常为 20 分钟)。如果在老化时间内没有通信,条目就会被删除;一旦再次需要通信,重新发起一次 ARP 解析即可。
- 静态条目(Static):由网络管理员手工绑定写入,永不老化。在要求高安全性的企业环境中,管理员常用静态绑定来防御 ARP 欺骗攻击。
3. 两个极高频考点辨析
考点 1:ARP 广播能穿透路由器吗?
答案是:绝对不能!
- 路由器工作在网络层(三层),它的根本天职之一就是切断和隔离二层广播域。
- 路由器收到目的 MAC 为
FF-FF-FF-FF-FF-FF的 ARP 请求帧后,只会在自己的这个接口上判断处理,绝不会把它转播到其他接口或对端的另一个网段。 - 如果你要访问百度或另一栋大楼的远程服务器,主机通过子网掩码判断出对方属于外网,此时主机发起的 ARP 解析目标不是百度服务器的 IP,而是你本地默认网关(默认网关路由器接口)的 IP!
考点 2:免费 ARP(Gratuitous ARP)有什么用?
有时候电脑并没有主动去 ping 任何人,刚插上网线时网卡就会自己发出一个特殊的 ARP 请求——它的源 IP 和目的 IP 全填自己的 IP(如目的 IP 写 192.168.1.1,源 IP 也写 192.168.1.1)。
这种“自己问自己”的奇特报文叫作免费 ARP(免费并非指不花钱,而是指未经别人索取、主动赠送),它有两个无可替代的妙用:
- IP 地址冲突检测:电脑刚开机或刚拿到 IP 时发一个免费 ARP,如果局域网里突然有人回了 ARP 应答,说明有人已经偷偷用了同一个 IP!系统屏幕会立即弹出警告:“检测到 IP 地址冲突!”
- 通告 MAC 变更与双机切换:当网卡更换、或者企业核心防火墙做主备倒换时,备机接管业务的瞬间发一个免费 ARP,全网交换机的 MAC 表和所有主机的 ARP 表就会在 1 微秒内瞬间刷新绑定到备机的 MAC 上,业务毫不中断!
4. 小结与下一步
- ARP 的使命:解决“已知 IPv4 地址,动态查询对应 MAC 地址”的二三层衔接问题。
- 交互方式:请求是广播(目的 MAC 全 F),应答是单播(精准回复请求者)。
- 作用边界:ARP 广播严格受限在同一个二层广播域内,无法跨越路由器。
但如果一家大公司有 500 台电脑都连在互通的交换机上,一旦有人发广播或中毒,500 台电脑就会同时被广播淹没。我们如何在同一个物理网络里,把财务部、研发部和访客在二层层面上彻底切开、互相隔离呢?下一课我们学习数据链路层最核心的划分技术——虚拟局域网(VLAN)。