ARP协议解析

来源:互联网 发布:c语言返回值什么意思 编辑:程序博客网 时间:2024/05/17 22:50

一、ARP协议简介

在实际应用中,我们会遇到这样的问题:知道一个机器的IP地址,却不知道其物理地址。ARP协议就是用来解决这样的问题的。

由于IP协议使用了ARP协议,所以把ARP协议归于网络层,但ARP的作用是从网络层使用的IP地址解析出数据链路层使用的物理地址,因此把其归于数据链路层也是可以的。


二、ARP协议的工作原理

每个主机都设有一个ARP高速缓存,里面存的是本局域网上各主机和路由器的硬件地址到IP地址的映射,可以用arp -a命令查看。每个缓存表都设有10~20分钟的过期时间。设置过期时间的原因有两个:(1)映射一直累计,必定要有一定的空间来保存它(2)映射关系会变化,比如一台主机更换了一块网卡。

1、在同一局域网上通信

(1)A要给B发IP数据报,A先再本地的缓存表上查一下有没有B的映射,如果有把硬件地址写入Mac帧,然后就把该Mac帧发给该硬件地址;如果没有,主机A进行全网广播

(2)ARP进程在局域网内广播发一个ARP请求分组,内容是我的IP地址是xx,硬件地址是xx,请求IP地址是xx的硬件地址。

(3)局域网上的所有主机都会收到这条消息,但是只有主机B会回应主机A

(4)主机B的IP地址与请求的地址一致,就收下这个请求分组,并给A发送一个ARP响应分组。其余主机的IP与请求的IP不一致,因此都不理睬这个请求分组。发送响应分组的时候是普通的单播,同样的,其他主机还是可以看见这个分组。

(5)接收到响应分组后A将B的映射写到缓存表中,同样的,为了减少通信量,B也会把A的映射写到缓冲表中。


2、不在局域网上通信

(1)主机1要给主机2发送IP报文,主机1在网路1内广播寻找主机2的IP,找到路由器1的地址,剩下的就由路由器1来完成

(2) 路由器1要给主机2发送IP报文,路由器在网络2内广播,找到主机2的硬件地址

(3)主机1要发IP报文给主机3,这时主机1找到路由器2的硬件地址,剩下的由路由器2来完成


三、ARP数据报格式


注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op字段为2表示ARP应答。


四、为何要使用ARP协议

既然帧传输靠的是硬件地址,为何不直接用硬件地址来通信,而要用到ARP协议来解析IP地址呢?

首先用硬件地址进行通信需要进行十分复杂的硬件地址转换工作,用户或主要无法完成,只能借助于ARP协议,以及IP地址。

ARP的转换过程都是软件自动进行的,用户是看不见的。




1 0