简介
前面的文章中,我们介绍了 MAC Frame 的帧格式。我们知道,在每个 Ethernet Frame 中都分别包含一个 48 bit 的源物理地址和目的物理地址. 对于源地址很容易理解,该地址可以直接从硬件上读取. 但是对于一个网络节点,他怎么知道一个 Frame 的目的物理地址呢? 本文我们将学习 ARP 协议来解答这个问题.
ARP 协议主要用来完成将网络层协议的地址(比如,IP 地址)解析为物理地址的工作.
为什么需要将网络层协议的地址转换为物理地址呢?
对于物理层来说,他仅仅能处理 48 bit 的物理地址,而网络层协议往往有自己协议中定义的协议地址,而这些协议的地址往往都不一样. 比如, IP 地址的长度为 32 bit,CHAOS 地址的长度为 16 bit, Xerox PUP 地址的长度为 8 bit.
反过来说,ARP 协议的存在也是必须的. 因为如果一个物理层想要同时支持上述的这些协议,他就不应该依赖于这些协议的实现,而是定义自己的地址格式,再通过一种方式将网络层协议的地址转化为物理地址. 这个方式就是 ARP 协议要实现的功能.
说明一点,接下来的描述将倾向于网络层协议是 IP 来进行描述.
ARP 包格式
ARP 协议的包结构比较简单,我们直接看一个例子. 通过这个例子来解析每个字段的含义:
首先,我们注意到 ARP 包中 ar$op 字段可能的值有两个 REQUEST 和 REPL