地址解析协议 ARP

4.2.4 的最后一步是”把下一跳的 IP 地址变成 MAC 地址”,这一步由 ARP 完成。ARP 只在一个局域网内部解析:目的主机不在本局域网时,解析的是本局域网上那台路由器的 MAC 地址。

真题考 ARP 的功能(2011、2012、2021)、ARP 请求帧的目的 MAC 地址(2011、2015)和跨局域网时帧的目的 MAC 地址(2015)。答题的关键是分清哪些东西端到端不变、哪些逐跳改变。与 DHCP 放在一起考广播与单播的题见 4.2.6。

机制

IP 地址与硬件地址

IP 地址是网络层及网络层之上使用的地址,它是分层式的;硬件地址(MAC 地址)是数据链路层使用的地址,它是平面式的。IP 地址放在 IP 数据报的首部,而 MAC 地址放在 MAC 帧的首部。把 IP 数据报封装为 MAC 帧后,数据链路层看不见 IP 数据报中的 IP 地址。

因为路由器的隔离,IP 网络中无法通过广播 MAC 地址来完成跨网络的寻址,所以在网络层只使用 IP 地址来完成寻址。寻址时,每个路由器依据其路由表(依靠路由协议生成)选择到目标网络(主机号全为 0 的网络地址)需要转发到的下一跳(路由器的物理端口号或下一网络地址),而 IP 数据报通过多次路由转发到达目标网络后,改为在目标局域网中通过数据链路层的 MAC 地址以广播方式寻址。这样可以提高路由选择的效率。

王道强调下列几个性质是计算机网络的精髓:

  1. 在 IP 层抽象的互联网上只能看到 IP 数据报。
  2. 虽然在 IP 数据报首部中有源 IP 地址,但路由器只根据目的 IP 地址进行转发。
  3. 在局域网的链路层,只能看见 MAC 帧,IP 数据报被封装在 MAC 帧中。通过路由器转发时,IP 数据报在每个网络中都被路由器解封装和重新封装,其 MAC 帧首部中的源地址和目的地址会不断改变。这也决定了无法使用 MAC 地址跨网络通信。
  4. 尽管互连在一起的网络的硬件地址体系各不相同,但 IP 层抽象的互联网屏蔽了下层这些复杂的细节。只要在网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机与主机或路由器之间的通信。

路由器因为互连多个网络,所以它不仅有多个 IP 地址,还有多个硬件地址——每个接口各有一对。

ARP 的工作原理

无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终必须使用硬件地址。所以需要一种方法来完成 IP 地址到 MAC 地址的映射,这就是地址解析协议(Address Resolution Protocol,ARP)。每台主机都设有一个 ARP 高速缓存,用来存放本局域网上各主机和路由器的 IP 地址到 MAC 地址的映射表,称为 ARP 表,使用 ARP 来动态维护。ARP 对高速缓存中的每个映射表项都设置了生存时间(如 20min),超时的项目会从高速缓存中删除(ARP 的功能和应用 2011、2012、2021 年考过)。

主机 A 欲向本局域网上的某台主机 B 发送 IP 数据报时:

  1. 先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。若有,则可以查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
  2. 若没有,则通过使用目的 MAC 地址为 FF-FF-FF-FF-FF-FF 的帧来封装并广播 ARP 请求分组,使同一个局域网里的所有主机都收到此 ARP 请求(ARP 请求帧的目的 MAC 地址 2011、2015 年考过)。
  3. 主机 B 收到该 ARP 请求后,向主机 A 发出 ARP 响应分组(单播发送),分组中包含主机 B 的 IP 地址与 MAC 地址的映射关系。
  4. 主机 A 收到 ARP 响应分组后就将此映射写入 ARP 缓存,然后按查询到的硬件地址发送 MAC 帧。

王道对 ARP 所在层次的判断方法是看它”看到了”什么:ARP 因为看到了 IP 地址,所以工作在网络层;NAT 路由器因为看到了端口,所以工作在传输层。对某个协议工作在哪个层次,可以通过协议的工作原理进行推测。

使用 ARP 的 4 种典型情况

flowchart LR
  H1["H1"] --- N1(("网 1"))
  H2["H2"] --- N1
  N1 ---|L1| R1{{"R1"}}
  R1 ---|L2| N2(("网 2"))
  H3["H3"] --- N2
  N2 ---|L3| R2{{"R2"}}
  R2 ---|L4| N3(("网 3"))
  N3 --- H4["H4"]
情况发送方目的在哪个网上用 ARP 找谁的硬件地址
1主机 H1本网络上的 H2在网 1 找目的主机 H2
2主机 H1其他网络上的 H4在网 1 找路由器 R1(默认网关,接口 L1),剩下的工作由 R1 完成
3路由器 R1与 R1 相连的网 2 上的 H3在网 2 找目的主机 H3
4路由器 R1网 3 上的 H4在网 2 找路由器 R2(接口 L3),剩下的工作由 R2 完成

H1 发往 H4 的分组,在三段网络上的帧首部依次是(跨局域网的帧的目的 MAC 地址 2015 年考过):

所在网络帧的源 MAC 地址帧的目的 MAC 地址IP 源地址 → 目的地址
网 1H1L1H1 → H4
网 2L2L3H1 → H4
网 3L4H4H1 → H4

路由器 R1 收到 MAC 帧后,在数据链路层要丢弃原 MAC 帧的首部和尾部,重新封装;R2 再次更换。MAC 帧首部的这种变化,在上面的 IP 层中是看不见的。

从 IP 地址到硬件地址的解析是自动进行的,主机的用户并不知道这种地址解析过程。只要主机或路由器和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 就自动地将这个 IP 地址解析为数据链路层所需的硬件地址,然后插入 MAC 帧。

边界

ARP 只解决同一局域网上的映射。 若目的主机和源主机不在同一个局域网上,就要通过 ARP 找到本局域网上某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络,剩下的工作由下一个网络来做。所以不存在”用 ARP 求出远方主机的 MAC 地址”这回事。

ARP 请求广播,ARP 响应单播。 请求时不知道对方的 MAC 地址,只能广播;响应时对方的 MAC 地址已写在请求里,直接单播回去。

ARP 请求是”MAC 广播、IP 单播”。 ARP 报文不封装在 IP 数据报里,但它自身的字段中带有要解析的那个 IP 地址。王道把它称作 ARP 请求的目的 IP 地址:请求报文的目的 IP 地址是目的主机的 IP 地址,目的 MAC 地址是广播地址;响应报文的目的 IP 地址和目的 MAC 地址都是发起请求的那台主机的。DHCP 的提供、确认报文恰好相反,是”IP 广播、MAC 单播”(4.2.6)。

口径差异:ARP 属于哪一层

教材口径:ARP 用到了 IP 地址,工作在网络层(王道、谢希仁均如此归类)。

工程口径:ARP 报文不经过 IP,而是直接放在以太网帧的数据部分,帧的类型字段为 0x0806(IP 为 0x0800)。按封装位置,它更像介于链路层与网络层之间的辅助协议,不少英文教材把它放在链路层讲。

考试按教材:ARP 是网络层协议。

对照速查

说法对错
ARP 的作用是由 IP 地址求 MAC 地址✅
ARP 请求帧的目的 MAC 地址是 FF-FF-FF-FF-FF-FF✅
ARP 响应也是广播发送的❌(单播)
目的主机在另一个网络时,ARP 解析的是目的主机的 MAC 地址❌(默认网关的)
路由器每个接口都有自己的 IP 地址和 MAC 地址✅
ARP 表项永久有效❌(有生存时间)
分组经过路由器后,帧的源 MAC 地址变为路由器出接口的 MAC 地址✅
路由器根据源 IP 地址和目的 IP 地址共同决定转发❌(只看目的 IP)

考点

  • IP 地址分层式、网络层;MAC 地址平面式、链路层
  • ARP 请求广播(FF-FF-FF-FF-FF-FF,2011、2015),响应单播
  • ARP 高速缓存有生存时间
  • 4 种典型情况;跨网时解析的是默认网关的 MAC 地址
  • 帧的源、目的 MAC 地址逐跳改变(2015)

链接