地址解析协议(Address Resolution Protocl--ARP)学习(一)

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

ARP协议的报文格式

地址解析协议(Address Resolution Protocl--ARP)学习(一)


同一局域网中的一台主机与另外一台主机进行通信,必须知道目标主机的MAC地址。每个主机都设有一个ARP高速缓存,里面存有本局域网上的各主机和路由器的ip地址到硬件地址的映射表。

当主机A要向本局域网的主机B发送ip数据报时,就先在ARP高速缓存中查看有无主机B的ip地址,如有,就在高速缓存中查找出对应的硬件地址,再把硬件地址写入MAC帧,然后通过局域网将该MAC帧发往次硬件地址。如果本地缓存没有主机B的ip地址,主机A就要运行ARP找出主机B的硬件地址。

以ping为例,在本机192.168.1.6 上ping arp缓存中不存在的ip地址192.168.1.3;在wireshark抓包如下

地址解析协议(Address Resolution Protocl--ARP)学习(一)

1、192.168.1.6上的ARP进程在本局域网上广播发送一个ARP请求分组:目标硬件地址为ff:ff:ff:ff:ff:ff的广播地址,源硬件地址为本机的mac地址,协议类型为ARP协议;

地址解析协议(Address Resolution Protocl--ARP)学习(一)

2、本局域网上的所有主机上运行的ARP进程都会收到ARP请求分组;

3、192.168.1.3与ARP请求分组中的要查询的ip一致,所以就收下了这个ARP请求分组,其余主机根本不理睬该ARP请求分组。192.168.1.3先将192.168.1.6和对应的mac地址写入自己的ARP高速缓存中,方便后续给192.168.1.6发送数据包,然后向192.168.1.6发送ARP响应分组,响应分组中有写入自己的mac地址。

地址解析协议(Address Resolution Protocl--ARP)学习(一)

4、192.168.1.6收到ARP的响应分组后,在自己的ARP高速缓存中写入192.168.1.3与其mac地址的映射。

地址解析协议(Address Resolution Protocl--ARP)学习(一)



使用ARP的四种典型情况

1、发送方是主机,将ip数据包发送到本局域网的另一台主机。用ARP找到目标主机的mac地址。如上。主机

2、发送方是主机,将ip数据包发送到另一个网络上的主机。这时主机用ARP找到本网的路由器(网关)mac地址,剩下的工作交给路由器完成。

3、发送方是路由器,将ip数据包转发到与路由器相连接在同一网络的主机上。这时通过发送ARP请求分组(广播)找到主机的mac地址。

4、发送方是路由器,将ip数据包转发到其他网络(相邻网络)的主机上。这时路由器发送ARP请求分组(广播)找到相邻路由器的mac地址,剩下的工作交给相邻的路由器。即情况3。


1、保存在ARP高速缓存中的映射地址项目都有设置生存时间?

凡超过生存时间的项目都会从高速缓存中删除。如果某一局域网的某一台主机A的网络适配器突然坏了,换了之后mac地址就会发生变化。而在坏之前主机B的ARP高速缓存中已经记录了主机A的旧mac地址,这时主机B根本找不到主机A。设置了生存时间之后,主机B就会自动删除主机A旧的mac地址,然后重新广播发送ARP请求分组,获取A的mac地址。

2、发送数据包的过程中,帧中的mac地址会发生变化吗?

如果在同一局域网,源mac地址、目标mac地址不会发生变化。源、目标ip地址不会发生变换;

如果在不同的子网,源目ip地址不会发生变化,源目mac地址会一直变化。