ARP 与 DHCP
ARP 负责 IP→MAC 地址解析,DHCP 负责自动分配 IP 地址,两者是局域网中最重要的基础协议。
ARP 原理
工作过程
主机 A(192.168.1.1)要发送数据给同网段主机 B(192.168.1.2):
- 查询本机 ARP 缓存表,若无 B 的 MAC
- 发送 ARP 请求广播:谁是 192.168.1.2?请告诉 192.168.1.1
- 主机 B 收到后回复 ARP 应答单播:192.168.1.2 的 MAC 是 xx:xx:xx:xx:xx:xx
- 双方更新 ARP 缓存,开始通信
ARP 报文
| 字段 | 说明 |
|---|---|
| 硬件类型 | 1 = 以太网 |
| 协议类型 | 0x0800 = IPv4 |
| 操作码 | 1 请求 / 2 应答 |
| 发送方 MAC/IP | 源地址信息 |
| 目标 MAC/IP | 请求时目标 MAC 为全 0 |
特殊 ARP
- 免费 ARP(Gratuitous ARP):发送方 IP 与自己 IP 相同的 ARP 请求,用于地址冲突检测、网关通告、VRRP 主备切换通告
- 代理 ARP(Proxy ARP):路由器代答跨网段 ARP 请求,实现”伪装网关”(已较少用)
- RARP:MAC→IP 的反向解析,已被 BOOTP/DHCP 取代
ARP 安全威胁与防御
| 威胁 | 现象 | 防御 |
|---|---|---|
| ARP 欺骗 | 网关 MAC 被篡改,流量被中间人截获 | DAI(动态 ARP 检测) |
| ARP 泛洪 | 大量伪造 ARP 报文耗尽设备 CPU | ARP 限速、源 MAC 检查 |
防御配置见 04.06_网络攻击与防护。
以太网与 MAC 地址
- MAC 地址 48 位,前 24 位为厂商 OUI,后 24 位为设备序列
- 单播 MAC:目的地址最低位为 0
- 组播 MAC:目的地址最低位为 1
- 广播 MAC:
FF-FF-FF-FF-FF-FF - 交换机根据 MAC 地址表 转发帧;未知单播 → 泛洪
以太网帧格式(Ethernet II)
目的MAC(6) | 源MAC(6) | 类型(2) | 数据(46-1500) | FCS(4)
- 类型 0x0800 = IPv4,0x0806 = ARP,0x86DD = IPv6
- 带 VLAN 时插入 802.1Q Tag(4 字节),见 03.01_VLAN与VLAN间路由
DHCP 深入
报文类型
| 报文 | 方向 | 作用 |
|---|---|---|
| DHCPDISCOVER | 客户端→广播 | 寻找服务器 |
| DHCPOFFER | 服务器→广播/单播 | 提供地址 |
| DHCPREQUEST | 客户端→广播 | 请求地址/续租/确认 |
| DHCPACK | 服务器→广播/单播 | 确认分配 |
| DHCPNAK | 服务器→客户端 | 拒绝请求 |
| DHCPRELEASE | 客户端→服务器 | 释放地址 |
| DHCPDECLINE | 客户端→服务器 | 地址冲突,拒绝使用 |
华为设备配置 DHCP
[Huawei] dhcp enable // 全局使能
[Huawei] ip pool vlan10
[Huawei-ip-pool-vlan10] network 192.168.10.0 mask 255.255.255.0
[Huawei-ip-pool-vlan10] gateway-list 192.168.10.1
[Huawei-ip-pool-vlan10] dns-list 223.5.5.5 114.114.114.114
[Huawei-ip-pool-vlan10] excluded-ip-address 192.168.10.1 192.168.10.20
[Huawei-ip-pool-vlan10] lease day 1
[Huawei-ip-pool-vlan10] quit
[Huawei] interface Vlanif10
[Huawei-Vlanif10] dhcp select global // 接口使用全局地址池DHCP Snooping(安全)
- 信任端口:连接 DHCP 服务器的端口
- 非信任端口:仅允许 DISCOVER/REQUEST,丢弃 OFFER/ACK
- 建立 IP-MAC 绑定表,供 DAI/IPSG 使用
- 防 DHCP 饿死攻击:限制非信任端口 DHCP 报文速率
常见故障
- 获取不到地址:检查 DHCP 服务是否开启、地址池是否耗尽、VLANIF 是否 up
- 获取慢:检查广播域是否过大、是否有环路
- 部分终端获取失败:检查 DHCP Snooping 信任口配置