第4章 ARP:地址解析协议
所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议
本章介绍ARP协议,包括ARP的作用、缓存、分组格式、工作过程和特殊的ARP等。
4.1 引言
ARP的作用
ARP(Address Resolution Protocol):
- 地址解析协议
- 把IP地址转换成MAC地址
- 网络层地址 → 链路层地址
- 同一网络内用
ARP把IP地址解析成MAC地址。
为什么需要ARP
为什么需要ARP:
- IP地址是网络层的
- MAC地址是链路层的
- 同一网络内通信需要MAC地址
- 知道IP,不知道MAC怎么办?
- 用ARP来解析
同一网络内通信需要MAC地址。
本章讨论的内容
本章讨论的内容:
- ARP缓存
- ARP分组格式
- ARP的工作过程
- 免费ARP
- ARP代理
- RARP(下一章讲)
本章介绍ARP协议。
4.2 ARP缓存
什么是ARP缓存
ARP缓存(ARP Cache):
- 保存IP到MAC的映射
- 不用每次都发ARP请求
- 提高效率
- 有过期时间
ARP缓存保存解析结果。
缓存的作用
缓存的作用:
-
提高效率
- 不用每次都发请求
- 直接用缓存的
-
减少网络流量
- 减少ARP广播
- 节省带宽
-
快速响应
- 直接查表
- 不用等
缓存提高效率。
缓存的过期时间
过期时间:
- 缓存不是永久的
- 过一段时间就过期
- 过期了重新解析
为什么要过期:
- 主机可能换网卡
- IP可能换主机
- 要保证正确性
典型时间:
- 20分钟左右
- 不同系统不同
缓存有过期时间。
查看ARP缓存
查看ARP缓存的命令:
arp -a
arp -n输出例子:
? (192.168.1.1) at aa:bb:cc:dd:ee:ff [ether] on eth0
? (192.168.1.2) at 11:22:33:44:55:66 [ether] on eth0
可以用arp命令查看缓存。
4.3 ARP分组格式
ARP分组格式
ARP分组格式(以太网):
+-------------------+-------------------+------+------+------+------+
| 硬件类型 | 协议类型 |硬件地址|协议地址| 操作 |
| 2字节 | 2字节 |长度1B |长度1B | 2字节 |
+-------------------+-------------------+------+------+------+------+
| 发送端硬件地址(6字节) | 发送端IP地址(4字节) |
+---------------------------------------+-----------------------+
| 目标端硬件地址(6字节) | 目标端IP地址(4字节) |
+---------------------------------------+-----------------------+
ARP分组有固定的格式。
各字段说明
ARP各字段:
| 字段 | 长度 | 说明 |
|---|---|---|
| 硬件类型 | 2字节 | 硬件类型,以太网是1 |
| 协议类型 | 2字节 | 协议类型,IP是0x0800 |
| 硬件地址长度 | 1字节 | MAC地址长度,6 |
| 协议地址长度 | 1字节 | IP地址长度,4 |
| 操作 | 2字节 | 1=请求, 2=应答 |
| 发送端硬件地址 | 6字节 | 发送方MAC |
| 发送端IP地址 | 4字节 | 发送方IP |
| 目标端硬件地址 | 6字节 | 目标MAC(请求时全0) |
| 目标端IP地址 | 4字节 | 目标IP |
ARP有很多字段。
操作类型
操作类型:
- 1:ARP请求(ARP Request)
- 2:ARP应答(ARP Reply)
- 3:RARP请求(RARP Request)
- 4:RARP应答(RARP Reply)
请求和应答用操作字段区分。
4.4 ARP的工作过程
基本过程
ARP的工作过程:
场景:A要和B通信,知道B的IP,不知道B的MAC
-
A查ARP缓存
- 有没有B的IP对应的MAC?
- 有:直接用,结束
- 没有:继续
-
A发ARP请求(广播)
- 目的MAC:全F(广播)
- 内容:谁是B的IP?请告诉我你的MAC
- 网络上所有主机都收到
-
其他主机收到请求
- 不是我的IP,忽略
- 可以顺便学习A的IP-MAC映射
-
B收到请求
- 是我的IP!
- 发ARP应答(单播)
- 内容:我是B的IP,我的MAC是xxx
- 顺便把A的映射存到缓存
-
A收到应答
- 把B的IP-MAC映射存到缓存
- 现在可以通信了
ARP请求广播,应答单播。
ARP请求是广播的
为什么请求是广播的:
- 不知道目标MAC
- 只能广播
- 让所有人都收到
- 目标自己会回应
请求必须广播。
ARP应答是单播的
为什么应答是单播的:
- 知道请求者的MAC了
- 直接发给请求者
- 不用广播
- 节省带宽
应答可以单播。
免费ARP
免费ARP(Gratuitous ARP):
- 自己查自己的IP
- 发ARP请求,查自己的IP
- 看看有没有人用同样的IP
- 检测IP冲突
用途:
-
检测IP冲突
- 有没有其他主机用同一个IP
- 有就会收到应答
-
更新其他主机的缓存
- 自己换了MAC
- 发免费ARP更新别人的缓存
-
虚拟IP
- 高可用集群
- VIP漂移
- 发免费ARP通知
免费ARP有很多用途。
4.5 ARP代理
什么是ARP代理
ARP代理(Proxy ARP):
- 路由器代替其他主机回应ARP
- 主机以为目标在同一网络
- 实际上在另一个网络
- 路由器帮着转发
ARP代理让不同网络看起来像同一个。
ARP代理的场景
场景:
- 主机A:192.168.1.10/24
- 主机B:192.168.2.20/24
- 中间有个路由器
- 但A以为B在同一个网络
过程:
- A要找B的MAC,发ARP请求
- 路由器收到,知道B在另一边
- 路由器发ARP应答,说B的MAC是路由器自己的
- A把数据发给路由器
- 路由器转发给B
路由器代理ARP。
ARP代理的用途
ARP代理的用途:
-
不支持默认网关的主机
- 老系统
- 不知道怎么设网关
- 用ARP代理
-
特殊的网络配置
- 某些特殊拓扑
- 需要透明转发
注意:
- 现在用得不多了
- 一般都用默认网关
- ARP代理有点hack
现在用得不多了。
4.6 ARP的问题
ARP欺骗
ARP欺骗(ARP Spoofing):
- 发送伪造的ARP应答
- 让别人的缓存出错
- 把流量引到自己这里
- 可以中间人攻击
危害:
- 窃听
- 篡改
- 拒绝服务
防范:
- 静态ARP
- ARP检测
- 端口安全
ARP有安全问题。
ARP风暴
ARP风暴(ARP Storm):
- 大量ARP请求
- 网络拥塞
- 主机处理不过来
- 影响正常通信
原因:
- 网络太大
- 病毒
- 配置错误
防范:
- 划分子网
- 减少广播域
- 限速
ARP风暴会影响网络。
4.7 小结
ARP的作用
-
地址解析
- IP地址 → MAC地址
- 同一网络内用
-
为什么需要
- 链路层需要MAC地址
- 知道IP不知道MAC
ARP缓存
-
作用
- 保存解析结果
- 提高效率
- 减少网络流量
-
过期时间
- 不是永久的
- 过一段时间过期
- 保证正确性
-
查看
- arp -a
- arp -n
ARP分组格式
-
格式
- 硬件类型、协议类型
- 地址长度
- 操作类型
- 发送端地址
- 目标端地址
-
操作类型
- 1=请求
- 2=应答
ARP的工作过程
-
基本过程
- 查缓存
- 发请求(广播)
- 回应答(单播)
- 存缓存
-
请求广播
- 不知道目标MAC
- 只能广播
-
应答单播
- 知道请求者MAC
- 直接发过去
特殊的ARP
-
免费ARP
- 查自己的IP
- 检测冲突
- 更新缓存
-
ARP代理
- 路由器代理回应
- 透明转发
- 现在用得少
ARP的问题
-
ARP欺骗
- 伪造应答
- 中间人攻击
- 安全问题
-
ARP风暴
- 大量请求
- 网络拥塞
关键概念
-
ARP
- 地址解析协议
- IP→MAC
-
ARP缓存
- 保存映射
- 提高效率
-
广播请求,单播应答
- 请求广播
- 应答单播
-
免费ARP
- 查自己
- 检测冲突
-
ARP代理
- 路由器代理
- 透明转发