[计算机网络/局域网] ARP 协议 = IPv4的地址解析协议(Address Resolution Protocol)

0 序

  • 在最佳部署 K8s 集群的过程中,遇到了有关局域网网络的相关问题,在排查解决过程中有个别环节需要基于 arp 命令 和 traceroute来分析问题。索性系统性总结下ARP协议。

1 概述:ARP 协议 = 地址解析协议(Address Resolution Protocol)

协议介绍

  • ARP协议,全称为地址解析协议(Address Resolution Protocol),是一种用于将网络层的地址转换为数据链路层地址的重要网络协议。在TCP/IP网络中,ARP的主要作用是将IP地址转换为MAC地址,这一过程对于网络中的数据传输至关重要。

工作原理

  • 当一台主机需要向另一台主机发送数据时,它必须知道接收方的MAC地址。如果发送方主机已经知道目标IP地址,它会使用ARP来获取对应的MAC地址。ARP协议的工作流程通常包括以下几个步骤:
    • 发送方主机首先检查自己的ARP缓存表,查看是否已经有目标IP地址对应的MAC地址
    • 如果ARP缓存表中没有相应的条目,发送方主机会构造一个ARP请求报文,并将其【广播】到局域网中的所有主机
    • 网络中的所有主机接收到ARP请求后,检查请求中的目标IP地址是否与自己的IP地址匹配。
    • 如果有主机发现IP地址匹配,它会发送一个ARP响应报文请求方主机,报文中包含了其MAC地址。
    • 发送方主机收到ARP响应后,会更新自己的ARP缓存表,并使用获得的MAC地址来发送数据。

ARP缓存表

  • ARP缓存表是主机用来存储IP地址和MAC地址映射关系的表格。这个表格可以包含动态和静态两种类型的条目:
    • 动态ARP条目,由ARP协议通过网络通信自动创建和更新的。这些条目会随着时间推移而过期,如果在一定时间内没有被使用,就会从表中删除。
    • 静态ARP条目,由网络管理员手动配置的,不会自动过期,通常用于增强网络的安全性。

ARP协议在以太网中传输的帧结构

  • ARPAddress Resolution Protocol)是一种用于将IP地址解析为物理MAC地址的协议,它在【数据链路层】上操作。

image

  • ARP帧结构的字段说明
  • 目的MAC地址(6字节):指示ARP请求或响应的目标设备的物理MAC地址。在ARP请求中,这个字段通常被设置为全0,表示请求的目标MAC地址未知。在ARP响应中,这个字段包含目标设备的真实MAC地址。
  • 源MAC地址(6字节):指示ARP请求或响应的发送设备的物理MAC地址。
  • 帧类型(2字节):指示数据帧中所携带的上层协议类型,对于ARP数据帧,该字段的值为0x0806。
  • 硬件类型(2字节):指示硬件地址的类型,如以太网的硬件类型为1。
  • 协议类型(2字节):指示上层协议类型,如IPv4的协议类型为0x0800。
  • 硬件地址长度(1字节):指示硬件地址的长度,以字节为单位,如以太网的地址长度为6。
  • 协议地址长度(1字节):指示协议地址的长度,以字节为单位,如IPv4地址的长度为4。
  • 操作码(2字节):指示ARP请求或响应的类型,如请求为1,响应为2。
  • 发送方硬件地址(6字节):指示ARP请求或响应的发送设备的物理MAC地址。
  • 发送方协议地址(4字节):指示ARP请求或响应的发送设备的协议地址,如IPv4地址。
  • 目标硬件地址(6字节):指示ARP请求或响应的目标设备的物理MAC地址。在ARP请求中,该字段通常被设置为全0,表示请求的目标MAC地址未知。在ARP响应中,该字段包含目标设备的真实MAC地址。
  • 目标协议地址(4字节):指示ARP请求或响应的目标设备的协议地址,如IPv4地址。
  • 【ARP请求】和【ARP响应】的帧结构差别
ARP请求和ARP响应的帧结构在某些字段上是不同的;尽管它们都使用ARP协议,但是在一些关键字段中有所区别。
下面是ARP请求和ARP响应帧结构的差异:

1. 操作码(Opcode)字段:
    在ARP请求帧中,操作码字段的值为1,表示【请求】。
    而在ARP响应帧中,操作码字段的值为2,表示【响应】。
2. 目标MAC地址(Target MAC Address)字段:
    在ARP请求帧中,目标MAC地址字段被设置为【全0】,表示请求的目标MAC地址未知。
    而在ARP响应帧中,这个字段包含了目标设备的真实MAC地址。

ARP请求示例

image

ARP响应示例

image

ARP攻击

  • 由于ARP协议的设计基于网络中主机之间的互信,因此它容易受到ARP欺骗攻击
  • 在ARP攻击中,攻击者会发送伪造的ARP响应报文,使得其他主机错误地将攻击者的MAC地址与合法的IP地址关联起来,从而导致数据被错误地发送到攻击者的设备上。

防御ARP攻击

为了防御ARP攻击,可以采取以下措施:

  • 使用静态ARP条目,限制IP地址和MAC地址的映射关系。
  • 定期检查和更新ARP缓存表,确保其准确性。
  • 使用网络安全工具和防火墙来监控和防范ARP攻击。

ARP协议的重要性

  • ARP协议在网络通信中扮演着至关重要的角色。它确保了网络层的IP地址能够正确地映射到数据链路层的MAC地址,从而使得网络设备能够顺利地进行数据传输。在网络的日常运行中,ARP协议的作用不可或缺。

  • 在了解ARP协议的基本概念和工作原理后,网络管理员和用户可以更好地理解网络数据传输的过程,以及如何保护网络不受ARP攻击的威胁。通过合理配置和维护ARP缓存表,可以有效提高网络的稳定性和安全性。

2 实践指南: arp 命令

  • Linux 中 ARP 命令的常见用法及其功能:

查看ARP缓存

  • 使用arp -aarp -g可以查看当前设备的ARP缓存表,显示IP地址与MAC地址的对应关系。
# arp -a
xxxx9c8ae134 (192.168.xx.21) at 5c:87:9c:xx:xx:34 [ether] on ens33  | 局域网的另一设备
XiaoQiang (192.168.xx.1) at 3c:cd:57:xx:xx:22 [ether] on ens33      | 家庭/企业的路由器
  • 如果指定了inet_addr,则只显示该IP地址的记录。例如:
arp 192.168.21.23
192.168.21.23 (192.168.21.23) -- no entry

此命令会列出所有ARP缓存项,帮助快速定位网络设备的MAC地址。

添加静态ARP记录

  • 使用arp -s可以手动添加一条静态ARP记录,将指定的IP地址与MAC地址绑定。此功能常用于防止IP地址冲突用户随意更改IP地址。例如:
arp -s 192.168.1.1 3c-22-3f-5d-f6-77
  • 添加后,可通过arp -a验证记录是否成功。

删除ARP记录

  • 使用arp -d可以删除指定IP地址的ARP记录。如果需要清空所有ARP记录,可以使用通配符*。例如:
arp -d 192.168.1.1
arp -d *

此命令在解决IP地址冲突或MAC地址错误时非常有用。

参数说明

  • -a或-g:显示当前ARP缓存表。
  • -s:添加静态ARP记录,格式为arp -s inet_addr eth_addr。
  • -d:删除指定的ARP记录,支持通配符*。

注意事项

  • ARP缓存中的动态记录会在一定时间后失效。
    • 因此,在查看缓存前,建议可先通过ping命令与目标设备通信以刷新记录。
  • 此外,ARP协议仅适用于IPv4网络,在IPv6中已被NDP邻居发现协议)替代。

通过灵活运用ARP命令,可以快速定位网络问题,如IP冲突、MAC地址错误等,提升网络维护效率。

Z FAQ for ARP 协议

Q: ARP 协议是仅工作在本层局域网的吗?

  • ARP 协议确实只能在同一个局域网(同一广播域)内工作,跨网段/跨路由器就无效了。

ARP 只在本局域网有效,跨网段必须靠【网关】转发,不能直接 ARP。

  1. ARP 依赖广播
    ARP 请求是以二层广播帧发送的(目的 MAC 全为 FF:FF:FF:FF:FF:FF)。
    路由器默认会隔离广播域,不会转发广播包,所以 ARP 包无法跨路由器、跨网段传播。

  2. ARP 的设计用途
    只用来在同一网段内,把目标 IP 地址 → 解析成 MAC 地址,用于直连设备间的二层通信。

  3. 跨网段时怎么通信?
    不在同一局域网时,主机不会直接 ARP 目标主机,而是:

    • ARP 查询网关(路由器)的 MAC
    • 把数据包发给网关,由网关在另一个网段再做转发

Y 推荐文献

X 参考文献

posted @ 2026-04-06 11:56  千千寰宇  阅读(9)  评论(0)    收藏  举报