ARP 地址解析与 VLAN

假设电脑 A(192.168.12.170/26)要给同子网的电脑 B(192.168.12.180)发数据。路由表告诉电脑 A 可以直接发,但要把 IP 包封成以太网帧发出去,帧头里还得填目的网卡的 MAC 地址。在局域网里根据下一跳 IPv4 地址查对应 MAC 地址的协议就是 ARP(Address Resolution Protocol,地址解析协议)。

ARP 请求与应答

  1. 广播 ARP 请求:电脑 A 不知道电脑 B 的 MAC 地址,就在局域网里发一条广播询问:“谁是 192.168.12.180?请把你的 MAC 地址告诉 192.168.12.170。”以太网帧头的目的 MAC 填广播地址 ff:ff:ff:ff:ff:ff。
  2. 交换机泛洪广播:交换机把广播帧发给同一广播域里的所有端口,局域网里的每台设备都能收到。
  3. 单播 ARP 应答:电脑 B 发现问的是自己,就单独给电脑 A 回一条单播应答:“我是 192.168.12.180,我的 MAC 是 02:00:00:00:01:20。”其他设备发现问的不是自己,直接丢弃。
  4. 写入缓存并发送数据:电脑 A 把 192.168.12.180 → 02:00:00:00:01:20 记进本地 ARP 缓存表,然后再把业务数据封成目的 MAC 为 02:00:00:00:01:20 的以太网帧发出去。

A 广播查询 B 的 MAC,B 回复后 A 向 B 发送数据

在 Linux 里可以用 ip neigh 查看当前的 ARP 缓存表(lladdr 就是对方的 MAC 地址):

crow@laptop:~$ ip neigh
192.168.12.180 dev enp1s0 lladdr 02:00:00:00:01:20 REACHABLE

跨网段通信时 ARP 查的是谁?

如果电脑 A 要访问的是另一个网段的服务器 192.168.20.10,路由表会告诉它下一跳是默认网关 192.168.12.129。这时候,电脑 A 发起 ARP 请求查的是默认网关 192.168.12.129 的 MAC 地址,而不是远端服务器 192.168.20.10 的 MAC 地址。

封出来的以太网帧里:

  • IP 头部:源 IP 是本机 A,目的 IP 是最终服务器 192.168.20.10(表示包最终要去哪)。
  • 以太网帧头:源 MAC 是本机 A,目的 MAC 是默认网关 .129 的 MAC(表示当前这一跳交给谁)。

网关收到帧后拆掉二层帧头,拿出里面的 IP 包,再查自己的路由表往下一跳发。ARP 广播出不了本地局域网(路由器不转发 ARP 广播)。另外,ARP 只用于 IPv4;IPv6 改用基于 ICMPv6 的邻居发现协议(NDP)来查二层地址。

ARP 缓存表与交换机 MAC 表

主机的 ARP 缓存表和交换机的 MAC 地址表名字很像,但存的东西和用途完全不同:

表名保存在哪映射关系解决什么问题
ARP 缓存表主机、路由器IPv4 地址 → MAC 地址封装以太网帧时,目的 MAC 该填谁
MAC 地址表交换机MAC 地址 → 交换机端口交换机收到以太网帧后,该从几号网口发出去

找到正确的地址记录

练习

主机已经确定下一跳 IP,现在还需要填写以太网目的 MAC 地址。下列说法中哪一项正确?

A. 主机查询自己的 ARP 缓存,就能得知目的设备插在交换机的几号端口。 B. 交换机的 MAC 地址表保存域名对应的 IP 地址。 C. 主机的 ARP 缓存帮助确定下一跳 MAC 地址,交换机的 MAC 表帮助选择转发端口。 D. 每发送一个以太网帧,都必须先重新广播一次 ARP 请求。

提交选项字母。

提交答案

题解 Hint

VLAN 划分广播域

默认情况下,插在同一台交换机上的设备都在同一个广播域里,一台机器发 ARP 广播,所有网口都会收到。在公司或学校网里,为了不让访客 Wi-Fi 的广播流量和扫描包窜进财务或服务器网段,可以在交换机上配置 VLAN(Virtual LAN,虚拟局域网)。

比如把交换机的 1、2 号口划进 VLAN 10,3、4 号口划进 VLAN 20。VLAN 10 里的广播帧只会在 VLAN 10 的端口之间转发,不会传到 VLAN 20,相当于把一台物理交换机在逻辑上劈成了几台独立的交换机。

同一交换机上两个 VLAN 的广播范围分开

不同 VLAN 之间要想通信,必须走路由器或三层交换机,由路由和防火墙策略决定放不放行。