MENU

网络层(七)地址解析协议ARP

November 20, 2018 • Read: 4115 • 计算机网络阅读设置

地址解析协议ARP需求

我们知道,在网络层使用的是IP地址,但在实际网络的链路中传送数据帧时,最终还是必须使用该网络的硬件地址。IP地址和硬件地址之间由于格式不同而不存在简单的映射关系,(例如IP地址有32位,而局域网的硬件地址有48位)。我们需要已知一个机器(主机或者路由器)的IP地址,找到其对应的硬件地址的方法

址解析协议ARP(Address Resolve Protocal)就是用来解决这样的问题 的,下图说明了ARP协议的作用

由于是IP协议使用了ARP协议,因此通常就把ARP协议划归网络层,但ARP协议的用途是为了从网络层使用的IP协议解析出在数据链路层使用的硬件地址

地址解析协议ARP的实现

地址解析协议的用途是完成IP协议至硬件地址的解析,ARP解决这个问题的办法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或者超时删除)

主机获取缓存的例子

使用ARP的需求

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

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

若查不到主机B的IP地址的项目,这可能主机B刚入网,也可能主机A刚加电,其高速缓存还是空的。在这种情况下,主机A就自动运行ARP,按以下步骤获取主机B的硬件地址

步骤

(1)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请求分组是广播发送的,但是ARP响应分组是普通的单播,即从一个源地址发向一个目的地址

其余所有主机的IP地址与ARP请求分组中要查询的不一致,不理睬这个请求

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

高速缓存作用及生存时间

高速缓存的作用

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

例如,在上面的例子中,当主机B收到A的ARP请求分组时,就把主机A的这一地址映射(IP->硬件地址)写入自己的ARP高速缓存中。以后主机B可以不再发起ARP请求,而直接向A发送数据

高速缓存中映射的生存时间

我们讲高速缓存可以降低网络的通信量,便于不同主机间通信,但是IP至硬件地址的映射不是恒定的,是需要动态更新的。ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间(例如10 ~ 20分钟)。凡是超过生存时间的项目就要从高速缓存中删除掉,这样动态更新,保证了IP至硬件地址的可靠性

设想这样一种情况,主机A和主机B通信,A的ARP高速缓存中有B的硬件地址,但是B的网络适配器突然坏了,B立即换了一块,因此B的硬件地址发生了改变。A使用其ARP高速缓存B原先的硬件地址,向B发送数据帧,此时A无法找到B。但过了一段不长的生存时间,A的ARP高速缓存里面已经删除了B原先的硬件地址,A重新广播发送ARP请求分组,又找到了B

ARP使用的典型情况

ARP解决同一个局域网上IP至硬件地址的映射问题

请注意,ARP是解决同一个局域网上的主机或者路由器的IP地址和硬件地址的映射,如果所要找的目的主机H2和源主机H1不在一个局域网上,则主机H1需要将发送给H2的IP数据报,交同一局域网内的R1转发。此时,H1需要把路由器R1的IP地址IP3解析为硬件地址HA3。此后,R1从转发表中找到下一跳路由器R2,同时使用ARP解析出R2的硬件地址HA5.路由器R2在转发这个IP数据报时,使用类似的方法解析出目的主机H2的硬件地址HA2,使IP数据报最终交付给主机H2

使用ARP的四种典型情况

面介绍了ARP协议适用于同一局域网上IP至硬件地址的映射问题,下面我们归纳出使用ARP的四种典型情况。在其他情况下,也是以上几种情况的反复使用而已

(1)(H1 ->H2,不需中转)发送方是主机(如H1),要把IP数据报发送到同一个网络上的另一个主机(如H2).这时H1发送ARP请求分组(局域网1上广播),找到目的主机H2的硬件地址

(2)(H1 ->H3,需R1中转)发送方是主机(如H1),要把IP数据报发送到另外一个网络(H3或H4)。这时H1发送ARP请求分组(局域网1上广播),找到网1上的一个路由器R1的硬件地址。剩下的工作由路由器R1来完成

(3)(R1->H3,不需中转)发送方是路由器(如R1),要把IP数据报发送到同一个网络上的主机(如H3).这时R1发送ARP请求分组(局域网2上广播),找到目的主机H3的硬件地址

(4)(R1->H4,需中转)发送方是路由器(如R1),要把IP数据报发送到另外一个网络上的主机(如H4).这时R1发送ARP请求分组(局域网2上广播),找到网2上的一个路由器R2的硬件地址。剩下的工作由路由器R2来完成

问题

既然在网络链路层上传送的帧最终按照硬件地址找到目的主机的,那么我们为什么不直接使用硬件地址进行通信,而是使用抽象的IP地址并调用ARP来寻找相应的硬件地址呢?

由于全世界存在各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,但是统一的IP地址把这个复杂的问题解决了,连接到因特网上的主机只需拥有统一的IP地址,它们之间的通信就像连接在一个网络上那样方便

因此,在虚拟的IP网络上,用IP地址进行通信为广大用户带来了方便。这就好像不同国家货币兑换,价值并不变化,IP地址将所有设备构建在一个虚拟互联的网络里面,但是在单一局域网内,依旧使用本局域网特定的硬件地址进行寻址,进行数据交付

Archives Tip
QR Code for this page
Tipping QR Code