首页 理论教育 地址解析协议-计算机网络

地址解析协议-计算机网络

时间:2023-11-09 理论教育 版权反馈
【摘要】:地址解析协议就是用来解决这样的问题的。图4-13ARP的作用由于IP使用了ARP,因此通常把ARP划归网络层,但ARP的用途是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。还有一个旧的协议叫作逆地址解析协议,它的作用是使只知道自己硬件地址的主机能够通过RARP找出其IP地址。ARP请求分组的主要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。”

地址解析协议-计算机网络

在实际应用中,经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的IP地址,需要找出其相应的硬件地址。地址解析协议(ARP)就是用来解决这样的问题的。图4-13说明了ARP的作用。

图4-13 ARP的作用

由于IP使用了ARP,因此通常把ARP划归网络层,但ARP的用途是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。因此,有的教材就按照调用关系,把ARP划归在数据链路层。这样做当然也是可以的。

还有一个旧的协议叫作逆地址解析协议(RARP),它的作用是使只知道自己硬件地址的主机能够通过RARP找出其IP地址。现在的DHCP已经包含了RARP的功能,因此本书不再介绍RARP。

我们知道,网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。但IP地址和下面的网络硬件地址由于格式不同而不存在简单的映射关系(例如,IP地址有32位,而局域网的硬件地址是48位)。此外,在一个网络上可能经常会有新的主机加入或撤走一些主机。更换网络适配器也会使主机的硬件地址改变。ARP解决这个问题的方法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。

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

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

也有可能查不到主机B的IP地址的项目。其原因可能是主机B才入网,也可能是主机A刚启动,ARP高速缓存初始时是空的。在这种情况下,主机A就自动运行ARP,然后按以下步骤找出主机B的硬件地址:

(1)ARP进程在本局域网上广播发送一个ARP请求分组。图4-14(a)所示是主机A广播发送ARP请求分组的示意。ARP请求分组的主要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。”

(2)在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。

(3)若主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时,在这个ARP响应分组中写入自己的硬件地址。由于其他所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组,如图4-14(b)所示。ARP响应分组的主要内容是:“我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A。”请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。

图4-14 ARP的工作原理

(a)主机A广播发送ARP请求分组;(b)主机B单播发送ARP响应分组

(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。(www.xing528.com)

当主机A向主机B发送数据报时,很可能以后不久主机B还要向主机A发送数据报,因此主机B也可能要向主机A发送ARP请求分组。为了减少网络上的通信量,主机A在发送其ARP请求分组时,就把自己的IP地址到硬件地址的映射写入ARP请求分组。当主机B收到主机A的ARP请求分组时,就把主机A的这一地址映射写入主机B自己的ARP高速缓存中。以后主机B向主机A发送数据报时就很方便了。

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

ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间(如10~20 min)。凡超过生存时间的项目就从高速缓存中删除。设置这种地址映射项目的生存时间是很重要的。设想有一种情况:主机A和主机B通信。A的ARP高速缓存里保存有主机B的硬件地址,但主机B的网络适配器突然坏了,主机B立即更换了一块,因此主机B的硬件地址就改变了。假定A还要和主机B继续通信。主机A在其ARP高速缓存中查找到主机B原先的硬件地址,并使用该硬件地址向B发送数据帧,但主机B原先的硬件地址已经失效了,因此主机A无法找到主机B,但是过了段不长的生存时间,A的ARP高速缓存中已经删除了主机B原先的硬件地址,于是主机A重新广播发送ARP请求分组,又找到了主机B。

ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上。例如,在图4-12中,主机H1就无法解析出另一个局域网上主机H2的硬件地址(实际上,主机H1也不需要知道远程主机H2的硬件地址)。主机H1发送给H2的IP数据报首先需要通过与主机H1连接在同一个局域网上的路由器R1来转发,因此,主机H1此时需要把路由器R1的IP地址IP3解析为硬件地址HA3,以便能够把IP数据报传送到路由器R1。以后,R1从转发表找出了下一跳路由器R2,同时,使用ARP解析出R2的硬件地址HA5。于是IP数据报按照硬件地址HA5转发到路由器R2。路由器R2在转发这个IP数据报时用类似方法解析出目的主机H2的硬件地址HA2,使IP数据报最终交付主机H2。

从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器即将与本网络上的另一个已知IP地址的主机或路由器进行通信,ARP就会自动地把这个IP地址解析为链路层所需要的硬件地址。

下面是使用ARP的4种典型情况,如图4-15所示。

图4-15 使用ARP的4种典型情况

(1)发送方是主机(如H1),要把IP数据报发送到同一个网络上的另一台主机(如H2上)。这时,H1发送ARP请求分组(在网络1上广播),找到目的主机H2的硬件地址。

(2)发送方是主机(如H1),要把IP数据报发送到另一个网络上的一台主机(如H3或H4)。这时,H1发送ARP请求分组(在网络1上广播),找到网络1上的一个路由器R1的硬件地址。剩下的工作由路由器R1来完成。R1要做的事情是下面的(3)或(4)。

(3)发送方是路由器(如R1),要把IP数据报转发到与R1连接在同一个网络(网络2)上的主机(如H3)。这时R1发送ARP请求分组(在网络2上广播),找到目的主机H3的硬件地址。

(4)发送方是路由器(如R1),要把IP数据报转发到网3上的一台主机(如H4)。H4与R1不是连接在同一个网络上。这时R1发送ARP请求分组(在网络2上广播),找到连接在网2上的一个路由器R2的硬件地址。剩下的工作由这个路由器R2来完成。

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

有的读者可能会产生这样的问题:既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么还要使用抽象的IP地址,而不直接使用硬件地址进行通信?这样似乎可以免除使用ARP。

由于全世界存在着各式各样的网络,所以使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事,但IP编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。因此,在虚拟的IP网络上用IP地址进行通信给广大计算机用户带来很多方便。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈