# MAC 与 ARP ## MAC MAC 一般指 **MAC 地址**,不是我们平时说的一种独立协议。 MAC 地址的主要作用是: - 在二层网络中唯一标识网卡或接口 - 让交换机能够根据目的 MAC 地址进行转发 常见特点: - MAC 地址长度为 48 位,通常写成 12 个十六进制数 - 前 24 位一般表示厂商标识,后 24 位一般由厂商分配 - 二层交换机维护 **MAC 地址表**,记录“某个 MAC 地址对应哪个接口” 交换机转发数据帧时的大致过程: 1. 先学习源 MAC 地址,并记录进入接口 2. 查看目的 MAC 地址是否在 MAC 地址表中 3. 如果表中有记录,就从对应接口转发 4. 如果表中没有记录,就进行泛洪 ## ARP ARP 是 **地址解析协议**,作用是把 **IP 地址解析为 MAC 地址**。 ARP 的核心用途: - 主机已知目标 IP 地址,但不知道目标 MAC 地址时,先通过 ARP 查询 - 查询到 MAC 地址后,再封装二层帧并发送数据 要注意: - ARP 不是“基于 MAC 的协议”,而是“根据 IP 找 MAC 的协议” - ARP 不是用来路由的 - 二层交换机转发主要看 **MAC 地址表** - 主机或三层设备在发送数据前,往往先通过 **ARP 表** 找到下一跳或目标主机的 MAC 地址 ARP 工作过程大致如下: 1. 主机先查看本地 ARP 表中有没有目标 IP 对应的 MAC 2. 如果没有,就发送 ARP Request 广播 3. 目标主机收到后,返回 ARP Reply 单播 4. 发送方学到对方的 MAC 地址,并写入 ARP 表 5. 后续数据通信就可以正常封装并发送 ## MAC 地址表与 ARP 表的区别 MAC 地址表: - 维护设备:二层交换机 - 作用:记录 MAC 地址与接口的对应关系 - 用途:决定二层帧从哪个端口转发 ARP 表: - 维护设备:主机、路由器、三层交换机 - 作用:记录 IP 地址与 MAC 地址的对应关系 - 用途:发送数据前完成二层封装 ## 一句话理解 - **MAC 地址表解决“帧往哪一个接口走”** - **ARP 表解决“这个 IP 对应哪个 MAC”** ## 常见问题 ### 1. 为什么同网段通信需要 ARP 因为发送方虽然知道对方 IP,但真正发二层数据帧时,还需要知道对方的 MAC 地址。 ### 2. 为什么跨网段通信也会用到 ARP 因为主机把数据交给网关时,实际封装的是 **网关接口的 MAC 地址**,所以仍然要先解析网关的 MAC。 ### 3. ARP 广播会不会很多 会。ARP 请求是广播报文,所以网络里主机很多时,ARP 广播也会增多。 ## 常见厂商命令 ### 华为 查看 MAC 地址表: ```bash display mac-address ``` 查看 ARP 表: ```bash display arp ``` 查看接口简要信息: ```bash display interface brief ``` 查看某个 VLAN 的 MAC 学习情况: ```bash display mac-address vlan 10 ``` ### 思科 Cisco 查看 MAC 地址表: ```bash show mac address-table ``` 查看 ARP 表: ```bash show arp ``` 或: ```bash show ip arp ``` 查看接口状态: ```bash show ip interface brief ``` ## 复习时容易写错的点 - MAC 地址不是“身份协议”,更准确地说是二层地址 - ARP 不是“绑定设备 IP 与 MAC 方便二层交换时的路由”,更准确地说是“把 IP 解析为 MAC,方便后续二层封装与转发” - 交换机转发数据帧主要依据 MAC 地址表,不是 ARP 表