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

很多时候,我们知道了目的主机的IP地址,然而在数据链路层运输的时候我们还需要知道目的主机的MAC地址。那么本文的标题,地址解析协议或者是ARP就能够帮我们解决这个问题。

因为是IP协议使用了ARP协议,因此也常把ARP协议划到网络层。然而ARP协议是为了把网络层的IP地址解析成数据链路层的MAC地址,所以将ARP协议划归数据链路层也是可以的。

从IP地址解析出MAC地址存在一些问题,比如说IP地址跟MAC地址因为格式不同而不存在简单的映射关系。再比如说,网络中随时可能有新的主机加入,也可能有主机撤出,或者是更换网卡(网络适配器)也会改变主机的硬件地址。ARP通过在主机的ARP高速缓存中存放一个从IP地址到MAC地址的映射表来解决这些问题,并且还动态更新这个表。

每一个主机都设有一个ARP高速缓存(ARP cache),里面存有本局域网内各主机和路由器的IP地址到MAC地址的映射。那么问题就来了,主机是怎么知道这些地址的呢?这里举个例子加以说明。

当主机A向同一局域网上的主机B发送IP数据报时,就会先在自己的ARP缓存中查找有误主机B的IP地址,如果有就直接把主机B的MAC地址写入MAC帧,然后通过局域网直接发出。

但是也有可能查不到有B的IP地址的表项,在这种情况下就需要ARP协议出马了。

  1. 首先ARP进程在局域网上广播一个ARP请求分组,具体内容如下图所示。
  2. 本局域网上所有主机上运行的ARP进程都收到此ARP请求分组。
  3. 主机B的IP地址与ARP请求分组中的IP地址一致,所以B就收下这个ARP请求,并向主机A发送ARP响应分组,同时在这个响应分组里写入自己的MAC地址。其余的主机由于IP地址与ARP请求分组中查询的IP地址不同,于是都不会响应这个请求。
  4. 主机A收到主机B的ARP响应分组之后,就在其ARP高速缓存中写入主机B的IP地址到MAC地址的映射。主机B也会将主机A的IP地址到MAC地址的映射写入自己的ARP缓存。

在这里插入图片描述

在这里插入图片描述

对于保存进APR高速缓存的表项,保存时间也不是没有上限的,一般来说是10~20分钟。这个存储有效时间也称为生存时间。但凡超过生存时间的表项一律会被删除。

需要注意的是,ARP是解决同一个局域网内的主机或者路由器的IP地址和MAC地址的映射关系。如果所要查找的主机和源主机不在同一个局域网上,那么通过ARP协议是无法解析出主机MAC地址的。源主机在这个时候会将数据发给局域网的路由器,路由器根据路由表跳转,最终到达主机所在网络。

最后,可能各位看官脑海中一直存在一个疑问,那就是为什么不直接使用MAC地址?。这样的话似乎就可以不使用ARP了。
其实是因为世界范围内存在着许许多多的网络,它们使用不同的硬件地址,要使这些异构网络互相通信就必须进行非常复杂的硬件地址转换工作。IP地址将这个复杂问题解决了,所有主机都有一个唯一的IP地址,它们之间的通信就像连接在同一个网络一样。

猜你喜欢

转载自blog.csdn.net/hjc256/article/details/84068542