第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缓存保存解析结果。


缓存的作用

缓存的作用:

  1. 提高效率

    • 不用每次都发请求
    • 直接用缓存的
  2. 减少网络流量

    • 减少ARP广播
    • 节省带宽
  3. 快速响应

    • 直接查表
    • 不用等

缓存提高效率。


缓存的过期时间

过期时间:

  • 缓存不是永久的
  • 过一段时间就过期
  • 过期了重新解析

为什么要过期:

  • 主机可能换网卡
  • 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

  1. A查ARP缓存

    • 有没有B的IP对应的MAC?
    • 有:直接用,结束
    • 没有:继续
  2. A发ARP请求(广播)

    • 目的MAC:全F(广播)
    • 内容:谁是B的IP?请告诉我你的MAC
    • 网络上所有主机都收到
  3. 其他主机收到请求

    • 不是我的IP,忽略
    • 可以顺便学习A的IP-MAC映射
  4. B收到请求

    • 是我的IP!
    • 发ARP应答(单播)
    • 内容:我是B的IP,我的MAC是xxx
    • 顺便把A的映射存到缓存
  5. A收到应答

    • 把B的IP-MAC映射存到缓存
    • 现在可以通信了

ARP请求广播,应答单播。


ARP请求是广播的

为什么请求是广播的:

  • 不知道目标MAC
  • 只能广播
  • 让所有人都收到
  • 目标自己会回应

请求必须广播。


ARP应答是单播的

为什么应答是单播的:

  • 知道请求者的MAC了
  • 直接发给请求者
  • 不用广播
  • 节省带宽

应答可以单播。


免费ARP

免费ARP(Gratuitous ARP):

  • 自己查自己的IP
  • 发ARP请求,查自己的IP
  • 看看有没有人用同样的IP
  • 检测IP冲突

用途:

  1. 检测IP冲突

    • 有没有其他主机用同一个IP
    • 有就会收到应答
  2. 更新其他主机的缓存

    • 自己换了MAC
    • 发免费ARP更新别人的缓存
  3. 虚拟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在同一个网络

过程:

  1. A要找B的MAC,发ARP请求
  2. 路由器收到,知道B在另一边
  3. 路由器发ARP应答,说B的MAC是路由器自己的
  4. A把数据发给路由器
  5. 路由器转发给B

路由器代理ARP。


ARP代理的用途

ARP代理的用途:

  1. 不支持默认网关的主机

    • 老系统
    • 不知道怎么设网关
    • 用ARP代理
  2. 特殊的网络配置

    • 某些特殊拓扑
    • 需要透明转发

注意:

  • 现在用得不多了
  • 一般都用默认网关
  • ARP代理有点hack

现在用得不多了。


4.6 ARP的问题

ARP欺骗

ARP欺骗(ARP Spoofing):

  • 发送伪造的ARP应答
  • 让别人的缓存出错
  • 把流量引到自己这里
  • 可以中间人攻击

危害:

  • 窃听
  • 篡改
  • 拒绝服务

防范:

  • 静态ARP
  • ARP检测
  • 端口安全

ARP有安全问题。


ARP风暴

ARP风暴(ARP Storm):

  • 大量ARP请求
  • 网络拥塞
  • 主机处理不过来
  • 影响正常通信

原因:

  • 网络太大
  • 病毒
  • 配置错误

防范:

  • 划分子网
  • 减少广播域
  • 限速

ARP风暴会影响网络。


4.7 小结

ARP的作用

  1. 地址解析

    • IP地址 → MAC地址
    • 同一网络内用
  2. 为什么需要

    • 链路层需要MAC地址
    • 知道IP不知道MAC

ARP缓存

  1. 作用

    • 保存解析结果
    • 提高效率
    • 减少网络流量
  2. 过期时间

    • 不是永久的
    • 过一段时间过期
    • 保证正确性
  3. 查看

    • arp -a
    • arp -n

ARP分组格式

  1. 格式

    • 硬件类型、协议类型
    • 地址长度
    • 操作类型
    • 发送端地址
    • 目标端地址
  2. 操作类型

    • 1=请求
    • 2=应答

ARP的工作过程

  1. 基本过程

    • 查缓存
    • 发请求(广播)
    • 回应答(单播)
    • 存缓存
  2. 请求广播

    • 不知道目标MAC
    • 只能广播
  3. 应答单播

    • 知道请求者MAC
    • 直接发过去

特殊的ARP

  1. 免费ARP

    • 查自己的IP
    • 检测冲突
    • 更新缓存
  2. ARP代理

    • 路由器代理回应
    • 透明转发
    • 现在用得少

ARP的问题

  1. ARP欺骗

    • 伪造应答
    • 中间人攻击
    • 安全问题
  2. ARP风暴

    • 大量请求
    • 网络拥塞

关键概念

  1. ARP

    • 地址解析协议
    • IP→MAC
  2. ARP缓存

    • 保存映射
    • 提高效率
  3. 广播请求,单播应答

    • 请求广播
    • 应答单播
  4. 免费ARP

    • 查自己
    • 检测冲突
  5. ARP代理

    • 路由器代理
    • 透明转发

ARP地址解析