地址解析协议(ARP)

简介

在IP协议能够把一个分组从源主机交付到目的主机之前,
它首先要知道的是如何将这个分组交付给下一跳。
如第6章 IP分组的交付和转发 所述,一个1P分组可以通过咨询路由表找出下一跳的IP地址。
但是,既然IP使用的是数据链路层的服务,
它就需要知道下一跳的物理地址。通过一个称为地址解析协议(ARP)的协议就可以做到这一点,这也正是我们要讨论的内容。

地址映射

为什么把一个分组交付到主机或路由器需要用到两级地址:逻辑地址和物理地址?
逻辑地址也称为IP地址,它的长度是32位:
在网络这一级,主机和路由器是通过它们的逻辑地址来识别的。逻辑地址就是互联网 地址。它的管辖范围是全局的。
逻辑地址在全局上是唯一的。之所以称为逻辑地址是因为 它通常在软件中实现。每一个与互联网打交道的协议都需要用到逻辑地址。
物理地址的一个例子是以太网协议中48位的MAC :
分组必须通过物理网络才能到达主机和路由器。在物理这一级,主机和路由器 是用它们的物理地址来识别的。物理地址是一个本地地址。它的管辖范围是本地网络的。 物理地址在本地范围内必须唯一,但在全局上没有此要求。之所以称为物理地址是因为物 理地址通常(并非总是)在硬件上实现。

ARP协议

在任何时候,只要一台主机或路由器有IP数据报要发送给另一台主机或路由器,它就要知道接收方的逻辑(IP)地址。
但是IP数据报必须封装成帧才能通过物理网络。这就意味若发送方还需要有接收方的物理地址,因而需要从逻辑
地址到物理地址的映射。
图8.1所示为ARP在TCP/IP协议族中的位置,ARP接受来自IP协议的逻辑地址,将其映
射为相应的物理地址,然后再把这个物理地址递交给数据链路层。
网络上的每一台主机或路由器都会接收并处理这个ARP查询分组,但只有期待的接收方才能认出是自己的IP地址
,并返回一个ARP响应分组。这个响应分组包含有接收方的IP地址和物理地址。这个分组利用收到的查询分组中
的物理地址以单播方式直接发送给查询者。

ARP的操作图解

在上图(a)中,左边的系统(A)有一个分组需要交付给IP地址为141.23.56.23的另一个系统(B)。系统A需要将分组传递给它的数据链路层进行实际的交付,但它却不知道接收方的物理地址。系统A使用ARP服务,请求ARP协议广播发送ARP请求分组,以查询IP地址为141.23.56.23的系统的物理地址。
在这个物理网络上的每一个系统都会收到这个分组,但只有系统B才会回答,如上图(b)所示。系统B发送一个包含了它的物理地址的ARP回答分组。现在系统A就可以用收到的物理地址来发送所有给系统B的分组。

ARP软件包

  • 高速缓存表
  • 队列
  • 输出模块
  • 输入模块
  • 高速缓存控制模块

高速缓存表

发送方往往有一个以上的IP数据报要发送到同一个终点。如果对发送到同一个主机或 路由器的每一个数据报都
使用一次ARP协议,显然效率很低· 解决方法就是高速缓存表。 当主机或路由器收到一个IP数据报相应的物理地
址时,就可以把这个物理地址存储在高速缓存表中。在之后的几分钟内,发往相同目的地的数据报都可以使用这
个地址。但是,由于高速缓存表的空间非常有限,表中的映射关系不能无时间限制地保存。

队列

我们的ARP软件包维持着一组队列,每个队列对应于一个终点,用来在ARP尝试解
析硬件地址时保留IP分组,输出模块把未解析的分组发送到相应的队列(queue),
输入模块从队列中取出分组,并连同解析出的物理地址一起发送给数据链路层传输。

输出模块

输入模块

高速缓存控制模块

参考资料

TCP/IP协议族 第8章 地址解析协议(ARP)

欢迎大家关注:huazi's微信公众号