地址解析协议ARP和逆地址解析协议RARP

                                                  作者:方晓华

        实际应用中我们经常会遇到这样的问题:已经知道了一台机器(主机或路由器)的IP地址,需要知道找出起相应的物理地址,或反过来,已经知道了物理地址,需要找出起相应的IP地址。

        地址解析协议ARP和逆地址解析协议RARP就是用来解决这样问题的。

   图4-1说明了两种 协议的作用

 

 

 

                                             图4-1 ARP和RARP协议的作用

          逆地址解析协议RARP在过去曾起到重要的作用,但现在的DHCP协议已经包含了RARP协议的功能。因此,现已经没有人再单独的使用RARP协议了。这里我们就随便的了解一下RARP协议的作用:逆地址解析协议RARP的作用是只知道自己的硬件地址的主机能够通过RARP协议找出起相应的IP地址。

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

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

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

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

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

 

                                                                    图4-2(a)主机A广播发送ARP请求分组

 

                                                       图4-2(b)主机B响A发送ARP响应分组

                                              图4-2地址解析协议ARP的工作原理

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

         (3)主机B在ARP请求分组中见到自己的IP地址,就向主机A返送ARP响应分组,并写如自己的硬件地址,其它主机都不理睬这个ARP请求分组。见图4-2(b)ARP响应分组的主要内容是:“我的IP地址是209.0.0.6我的硬件地址是08-00-2B-00-EE-0A”请注意虽然ARP请求分组是广播方式发送的但是ARP响应分组是普通的单播,即从一个源地址发送到一目的地址。

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

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

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

      生存时间

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

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

                        图4-3