ARP 是 OSI 第 2 层之上的协议,它依赖于 ARP 数据包中的内容来做出决定。RFC 826,以太网地址解析协议解释了 ARP 的作用:
数据包接收:
当收到地址解析数据包时,接收以太网模块将数据包交给地址解析模块,该模块通过类似于以下的算法。否定条件表示处理结束并丢弃数据包。
?Do I have the hardware type in ar$hrd?
Yes: (almost definitely)
[optionally check the hardware length ar$hln]
?Do I speak the protocol in ar$pro?
Yes:
[optionally check the protocol length ar$pln]
Merge_flag := false
If the pair <protocol type, sender protocol address> is
already in my translation table, update the sender
hardware address field of the entry with the new
information in the packet and set Merge_flag to true.
?Am I the target protocol address?
Yes:
If Merge_flag is false, add the triplet <protocol type,
sender protocol address, sender hardware address> to
the translation table.
?Is the opcode ares_op$REQUEST? (NOW look at the opcode!!)
Yes:
Swap hardware and protocol fields, putting the local
hardware and protocol addresses in the sender fields.
Set the ar$op field to ares_op$REPLY
Send the packet to the (new) target hardware address on
the same hardware on which the request was received.
请注意,在查看操作码之前,<protocol type, sender protocol address, sender hardware address> 三元组已合并到表中。这是基于通信是双向的假设;如果 A 有一些理由与 B 交谈,那么 B 可能有一些理由与 A 交谈。 另请注意,如果 <protocol type, sender protocol address> 对已经存在一个条目,那么新的硬件地址将取代旧的一。相关问题为此提供了一些动力。
概括: ar$hrd 和 ar$hln 字段允许将此协议和数据包格式用于非 10Mbit 以太网。对于 10Mbit 以太网,<ar$hrd, ar$hln> 的值为 <1, 6>。对于其他硬件网络,ar$pro 字段可能不再对应于以太网类型字段,但它应该与正在寻求地址解析的协议相关联。
显然,ARP 会回复 ARP 数据包中的硬件地址,但这并不意味着存在或没有问题(见下文)。
ARP数据包是否实际包含原始MAC地址是未知的,因为伪装可能实际上将ARP数据包修改为包含修改后的MAC地址。MAC 地址转换没有 NAT 和 NAPT 那样的标准,NAT 和 NAPT 实际上为分配给数据包的新 IP 地址修正了传输协议(TCP、UDP 和 ICMP)。什么是说 MAC 地址转换对 ARP 不这样做?这将是包含在 MAC 地址转换中的一个明显部分。这就是实际交换机模型和配置出现问题的地方。没有它,我们就没有基础说 MAC 地址转换对 ARP 做了什么或不做什么,因为它不是标准协议。
还有一个问题是交换机对其 MAC 地址表做了什么。它实际上是将源主机 MAC 地址放入具有该接口的表中,是将修改后的地址放入具有该接口的 MAC 地址表中,还是两者都做?由于没有像 NAT 和 NAPT 那样的 MAC 地址转换标准,同样,除非您解释交换机型号和配置,否则我们无法知道。