# 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 表
