ARP 运行机制

与 DNS 类似,ARP(Address Resolution Protocol,地址解析协议)提供了将 IP 地址转换为链路层地址的机制。这两种解析器之间的一个重要区别是,DNS 为在因特网中任何地方的主机解析主机名,而 ARP 只为在同一个子网上的主机和路由器接口解析 IP 地址。

MAC 地址

事实上,并不是主机或路由器具有链路层地址,而是它们的适配器(即网络接口)具有链路层地址。因此,具有多个网络接口的主机或路由器将具有与之相关联的多个链路层地址,就像它也具有与之相关联的多个 IP 地址一样。

链路层地址有各种不同的称呼:LAN 地址(LAN address)、物理地址(physical address)或 MAC 地址(MAC address)。我们一般将链路层地址称为 MAC 地址。

对于大多数局域网(包括以太网和 802.11 无线局域网)而言,MAC 地址长度为 6 字节,共有 $2^{48}$ 个可能的 MAC 地址。这些 6 个字节地址通常用十六进制表示法,地址的每个字节被表示为一对十六进制数。如 1A-23-F9-CD-06-9B。尽管 MAC 地址被设计为永久的,但用软件改变一块适配器的 MAC 地址现在是可能的。

没有两块适配器具有相同的 MAC 地址。IEEE 在管理着 MAC 地址空间。特别是,当一个公司要生产适配器时,它支付象征性的费用购买组成 $2^{24}$ 个地址的一块地址空间。IEEE 分配这块 $2^{24}$ 个地址的方式是:固定一个 MAC 地址的前 24 比特,让公司自己为每个适配器生成后 24 比特的唯一组合。具体的分配列表可参考其官网

适配器的 MAC 地址具有扁平结构(这与层次结构相反),而且不论适配器到哪里用都不会变化。与之形成对照的是,IP 地址具有层次结构(即一个网络部分和一个主机部分),而且当主机移动时,主机的 IP 地址需要改变,即改变它所连接到的网络。可以将适配器的 MAC 地址比喻成一个人的身份证号,而将 IP 地址比喻成一个人的住址。

当某适配器要向某些目的适配器发送一个帧时,发送适配器将目的适配器的 MAC 地址插入到该帧中,并将该帧发送到局域网上。对于使用 6 字节地址的局域网(例如以太网和 802.11)来说,MAC 广播地址(broadcast address)是 48 个连续的 1 组成的字符串(即以十六进制表示法表示的 FF-FF-FF-FF-FF-FF)。

ARP 工作过程

每台主机或路由器在其内存中具有一个 ARP 表(ARP table),这张表包含 IP 地址到 MAC 地址的映射关系。例如:

IP 地址 MAC 地址 TTL
222.222.222.221 88-B2-2F-54-1A-0F 13:45:00
222.222.222.223 5C-66-AB-90-75-B1 13:52:00

该 ARP 表也包含一个寿命(TTL)值,它指示了从表中删除每个映射的时间。注意到这张表不必为该子网中的每台主机和路由器都包含一个表项;某些可能从来没有进入到该表中,某些可能已经过期。从一个表项放置到某 ARP 表中开始,一个表项通常的过期时间是 20 分钟。

如果 ARP 表中当前没有目的主机的表项,在这种情况下,发送方用 ARP 协议来解析这个地址。首先,发送方构造一个称为 ARP 分组(ARP packet)的特殊分组。一个 ARP 分组有几个字段,包括发送和接收 IP 地址及 MAC 地址。ARP 查询分组和响应分组都具有相同的格式。ARP 查询分组的目的是询问子网上所有其他主机和路由器,以确定对应于要解析的 IP 地址的那个 MAC 地址。

查询 ARP 报文是在广播帧中发送的,而响应 ARP 报文在一个标准帧中发送。

ARP 表是即插即用的,这就是说,一个 ARP 表是自动建立的,即它不需要系统管理员来配置。并且如果某主机与子网断开连接,它的表项最终会从留在子网中的节点的表中删除。

其他

ARP 是一个链路层协议还是一个网络层协议?一个 ARP 分组封装在链路层帧中,因而在体系结构上位于链路层之上。然而,一个 ARP 分组具有包含链路层地址的字段,因而可认为是链路层协议,但它也包含网络层地址,因而也可认为是网络层协议。所以,可能最好把 ARP 看成是跨越链路层和网络层边界两边的协议,即不完全符合简单的分层协议栈。现实世界协议就是这样复杂!

参考

  1. James F. Kurose,Keith W. Ross.计算机网络:自顶向下方法[M].北京:机械工业出版社,2018:303-308.