Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

地址解析协议(ARP)

Address Resolution Protocol 用于动态发现第 3 层(协议)地址与第 2 层(硬件)地址之间的映射。一个典型用途是将 IP 地址(例如 192.168.0.10)映射到底层 Ethernet 地址(例如 01:02:03:04:05:06)。你通常会在一次通信开始时看到 ARP 数据包,因为 ARP 正是发现这些地址的方式。

ARP 可用于 Ethernet 和其他 LAN、ATM,以及许多其他底层物理地址(IANA 网站上的 ADDRESS RESOLUTION PROTOCOL PARAMETERS 文档中的硬件类型列表至少包含 33 种硬件类型)。

ARP 用于在链路本地第 2 层地址和第 3 层地址之间动态构建和维护映射数据库。在常见情况下,此表用于将 Ethernet 映射到 IP 地址。该数据库称为 ARP_Table。此表中的动态条目通常会被缓存,并带有最长 15 分钟的超时,这意味着一旦主机为某个 IP 地址执行过 ARP,它会在接下来的 15 分钟内记住该映射,直到需要再次对该地址执行 ARP。

ARP 的一个特殊之处在于,由于它试图减少/限制用于 ARP 的网络流量,主机必须使用接收到的任何 ARP 数据包中的所有可用信息来更新其 ARP_Table。因此,有时主机发送 ARP 数据包并不是为了发现映射,而是为了利用 ARP 的这个副作用,向另一台主机的 ARP 表中预加载一个条目。这些特殊的 ARP 数据包称为 Gratuitous_ARPs,Wireshark 会检测此类 ARP 中最常见的版本,并在数据包摘要窗格中标记出来。

在分析捕获时,Gratuitous_ARPs 比通常想象的更重要。因此,不要一开始就忽略它们,或者立即从捕获中过滤掉 ARP。请考虑这样一点:普通主机在链路恢复或接口被启用后,做的第一件事通常就是发送 Gratuitous_ARP,这意味着几乎每当我们在网络上看到 Gratuitous_ARP 时,发送它的那台主机刚刚经历过链路抖动,或者其接口刚被禁用/启用。这在排查网络问题时是非常有用的信息。但请记住,只有当你的捕获设备与发出 ARP 数据包的主机处于同一个 Broadcast Domain 中时,你才能看到这些 Gratuitous_ARPs(或任何其他 ARP)。

一些病毒会发送大量 ARP 流量,试图发现可感染的主机;请参阅 ArpFlooding 页面。

历史

RFC 826 "An Ethernet Address Resolution Protocol" 于 1982 年 11 月发布。

协议依赖

第 2 层协议:

  • ATM:ARP 可以使用 ATM 作为其传输机制。

  • Ethernet:ARP 可以使用 Ethernet 作为其传输机制。分配给 ARP 流量的 Ethernet 类型是 0x0806。

  • 其他 LAN:ARP 也可以用于 Token Ring、FDDI 和 IEEE 802.11;使用相同的分配类型。

  • ……以及更多!

第 3 层协议:

  • IP:ARP 可以将 IP 地址映射到第 2 层地址。

  • IPv6:ARP 被 Neighbor Discovery 取代(参见 RFC4861)XXX - 添加/重定向到更多信息

(幻灯片由 Jeff Carrell - @JeffCarrell_v6 提供)

示例流量

Wireshark

ARP dissector 功能完整。

首选项设置

  • Detect ARP request storms: 尝试检测 ARP 请求的过高速率(默认:FALSE)

  • Number of requests to detect during period: 在周期内需要达到多少请求数才表示发生风暴(默认:30)

  • Detection period (in ms): 可检测数据包风暴的时间周期,单位为毫秒(默认:100)

  • Detect duplicate IP address configuration: 尝试检测 IP 地址的重复使用(默认:TRUE)

  • Register network address mappings: 尝试根据 ARP 请求/响应将物理地址解析为主机名(默认:TRUE)

Expert Information 消息

 static ei_register_info ei[] = { { &ei_seq_arp_dup_ip, { "arp.duplicate-address-detected", PI_SEQUENCE, PI_WARN, "Duplicate IP address configured", EXPFILL }}, { &ei_seq_arp_storm, { "arp.packet-storm-detected", PI_SEQUENCE, PI_NOTE, "ARP packet storm detected", EXPFILL }}, { &ei_atmarp_src_atm_unknown_afi, { "arp.src.atm_afi.unknown", PI_PROTOCOL, PI_WARN, "Unknown AFI", EXPFILL }}, };

示例捕获文件

SampleCaptures/arp-storm.pcap 示例捕获文件存在问题。未包含响应。 (启用 Detect ARP request storms,并将 Detection Period 增加到 1000 ms)

显示过滤器

完整的 ARP 显示过滤字段列表可在显示过滤器参考中找到

只显示基于 ARP 的流量:

 arp

仅按 ARP 数据包过滤很少使用,因为这样看不到任何 IP 或其他数据包。不过,它可以作为更大过滤字符串的一部分使用。

捕获过滤器

捕获时可以过滤 ARP 协议。

只捕获基于 ARP 的流量:

 arp

或:

 ether proto \arp

只捕获 ARP 数据包很少使用,因为这样不会捕获任何 IP 或其他数据包。不过,它可以作为更大过滤字符串的一部分使用。

生成字段

  • arp.isannouncement - ARP Announcement
  • arp.isgratuitous - reply/gratuitous ARP 或 request/gratuitous ARP
  • arp.isprobe - ARP Probe

说明请参阅 RFC5227 "IPv4 Address Conflict Detection" (示例流量截图 - 在较旧版本的 Wireshark 中,生成字段在为 false 时也会显示)

外部链接

  • RFC 826 "An Ethernet Address Resolution Protocol"

讨论

如果主机检测到向某个条目对应主机发送数据包时出现问题,那么 ARP 表中的条目会在什么事件下被移除/替换?我认为在这种情况下不需要等 15 分钟。- Ulf Lamping

能否有人解释 ARP flooding 以及针对 ARP 层的其他攻击如何捕获并非发往捕获主机的数据包?- Ulf Lamping

Imported from https://wiki.wireshark.org/AddressResolutionProtocol on 2020-08-11 23:11:04 UTC

原始页面图片

200328_IPv6_neighbor_discovery
200328_IPv6_neighbor_discovery
arp.png
arp.png
201114_ARP_prefs
201114_ARP_prefs
201114_ARP_storm
201114_ARP_storm
201114_ARP_flags
201114_ARP_flags

相关 Wireshark Wiki 页面

网络分析技术档案