【计算机网络系列】网络层③:地址解析协议ARP

地址解析协议ARP

地址解析协议ARP的作用:已知一个主机或路由器的IP地址,需要找出其相应的MAC地址

下图说明了协议ARP的作用:
image.png

逆地址解析协议RARP的作用:使只知道自己MAC地址的主机能够通过协议RARP找出其IP地址。DHCP协议已经包含了协议RARP的功能,所以不讨论这个协议了。

网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用链路层的MAC地址。IP地址和下面链路层的MAC地址之间由于格式不同不存在简单的映射关系

例如,IP地址有32位,而链路层的MAC地址是48位。

此外,在一个网络上可能经常会有新的主机加入进来,或撤走一些主机。更换网络适配器也会使主机的MAC地址改变。地址解析协议ARP解决这个问题的方法是在主机的ARP高速缓存中存放一个从IP地址到MAC地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)

注意,主机的MAC地址实际上就是其网络适配器的MAC地址。

每一台主机都设有一个ARP高速缓存(ARP cache),里面存有本局域网上的各主机和路由器的IP地址到MAC地址的映射表,这些都是该主机目前知道的一些MAC地址。那么主机怎样知道这些MAC地址呢?我们可以通过下面的例子来说明。

当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的MAC地址,再把这个MAC地址写入MAC帧,然后通过局域网把该MAC帧发往此MAC地址。

也有可能查不到主机B的IP地址。这可能是主机B才入网,也可能是主机A刚刚加电,其高速缓存还是空的。在这种情况下,主机A就自动运行ARP,然后按以下步骤找出主机B的MAC地址。

  1. ARP进程在本局域网上广播发送一个ARP请求分组
  2. 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
  3. 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的MAC地址。由于其余所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。
  4. 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到MAC地址的映射。

请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。

image.png
ARP高速缓存是非常有用的,如果不使用ARP高速缓存,那么任何一台主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,这就会使网络上的通信量大大增加。ARP把已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有同样目的地址的主机通信时,可以直接从高速缓存中找到所需的MAC地址而不必再用广播方式发送ARP请求分组。

ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间(例如,10~20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。

请注意,ARP用于解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射问题。

从IP地址到MAC地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个己知IP地址的主机或路由器进行通信,协议ARP就会自动地把这个IP地址解析为链路层所需要的MAC地址,然后插入到MAC帧中。

下面我们归纳出使用ARP的四种典型情况:

  1. 发送方是主机(如 H 1 H_1 H1),要把IP数据报发送到同一个网络上的另一台主机(如 H 2 H_2 H2)。这时 H 1 H_1 H1发送ARP请求分组(在网络 N 1 N_1 N1上广播),找到目的主机 H 2 H_2 H2的MAC地址。
  2. 发送方是主机(如 H 1 H_1 H1),要把IP数据报发送到另一个网络上的一台主机(如 H 3 H_3 H3 H 4 H_4 H4)。这时 H 1 H_1 H1发送ARP请求分组(在网络 N 1 N_1 N1上广播),找到 N 1 N_1 N1上的一个路由器 R 1 R_1 R1的MAC地址。剩下的工作由路由器 R 1 R_1 R1来完成。 R 1 R_1 R1要做的事情是下面的3或4。
  3. 发送方是路由器(如 R 1 R_1 R1),要把IP数据报转发到与 R 1 R_1 R1连接在同一个网络 N 2 N_2 N2上的主机(如 H 3 H_3 H3)。这时 R 1 R_1 R1发送ARP请求分组(在 N 2 N_2 N2上广播),找到目的主机 H 3 H_3 H3的MAC地址。
  4. 发送方是路由器(如 R 1 R_1 R1),要把IP数据报转发到网络 N 3 N_3 N3上的一台主机(如 H 4 H_4 H4)。 H 4 H_4 H4 R 1 R_1 R1不是连接在同一个网络上的。这时 R 1 R_1 R1发送ARP请求分组(在 N 2 N_2 N2上广播),找到连接在 N 2 N_2 N2上的一个路由器 R 2 R_2 R2的MAC地址。剩下的工作由这个路由器 R 2 R_2 R2来完成。

在许多情况下需要多次使用ARP,但这只是以上几种情况的反复使用而已。

image.png
问题:既然在网络链路上传送的帧最终是按照MAC地址找到目的主机的,那么为什么我们还要使用两种地址(IP地址和MAC地址),而不直接使用MAC地址进行通信?

由于全世界存在着各式各样的网络,它们使用不同的MAC地址。要使这些异构网络能够互相通信就必须进行非常复杂的MAC地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。即使是对分布在全世界的以太网MAC地址进行寻址,也是极其困难的。然而IP编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,即使必须多次调用ARP来找到MAC地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的。

因此,在虚拟的IP网络上用IP地址进行通信给广大的计算机用户带来了很大的方便。

猜你喜欢

转载自blog.csdn.net/qq_37085158/article/details/128393242