转:ARP 协议

原文:http://blog.chinaunix.net/uid-20846214-id-3443038.html

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

    每一个主机都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。那么主机怎样知道这些地址呢?
    当主机A要向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件 地址,再把这个硬件地址写入MAC帧,然后通过局域网把这个MAC帧发往此硬件地址。也有可能查不到主机B的IP地址的项目,这可能是主机B才入网,也可 能是主机A刚开机,其高速缓存还是空的。这种情况下,主机A就自动运行ARP,然后按以下步骤找出主机B的硬件地址。
1:ARP进程在本局域网上广播发送一个ARP请求分组。ARP请求分组的主要内容是表明:我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。
2:在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
3: 主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址。其余的所有主机都不理睬这个ARP请求分组。ARP 响应分组的主要内容:我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A。注意,虽然ARP请求分组是广播发送的,但 ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
4:主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
 
 
可 见ARP高速缓存非常有用。如果不适用ARP高速缓存,那么任何一个主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,这就使网络上的 通信量大大增加。ARP把已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有同样目的地址的主机通信时,可以直接从高速缓存中找到所需的 硬件地址而不必再用广播方式发送ARP请求分组。
    ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。
 
归纳下使用ARP的4种情况:
1:发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。
2:发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作交给这个路由器来完成。
3:发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到目的的主机的硬件地址。
4:发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作交给这个路由器来完成。
posted @ 2013-02-16 17:08  lc_cnblog  阅读(183)  评论(0编辑  收藏  举报