5.2.6 地址解析协议ARP
我们知道要想实现全球范围内主机之间的通信,必须要有两个统一,一个是地址,另一个是数据格式,我们使用IP地址来实现统一的地址,使用IP分组实现统一的数据格式,在前面局域网的学习中我们知道在实际的物理网络中,真正用来通信的是物理地址,所以就需要把全球统一的IP地址映射为它在某个物理网络中所使用到的物理地址,我们在前面已经学过TCP/IP协议栈,在它的网际层有一个和IP配套的ARP协议,这个协议就是用来**把全球统一的IP地址映射为它在某个物理网络中所使用到的物理地址。**这就是我们这里要学习的主要内容即ARP地址解析协议。
ARP的作用
地址解析ARP为网络层(IP)地址和数据链路层(MAC)地址提供动态映射。即ARP协议是把一台主机的IP地址转换为它在一个屋里网络中使用的MAC地址,世界上有许多不同类型的计算机网络,进行地址转换的方法也是各不相同,这里我们就以最为广泛使用的以太网为例来介绍一下在以太网中是如何实现这种地址转换的。
如图是一个总线型的以太网,假设A主机想要和B主机通信,根据以太网的帧结构,第一个字段是目的MAC地址,占6个字节48个比特位,也就是A发送给B的数据帧首部中第一个字段是B的MAC地址,因此A主机必须要知道B主机的MAC地址,此时A主机就会发送一个ARP请求分组,在这个请求分组里包含有A主机的IP地址,A主机的物理地址,以及B主机的IP地址,该分组是如何发送出去的呢?在以太网中首先想到的是成为广播的方法,所以当A主机发出ARP请求之后,所有的主机都能收到。
这里的关键是谁会来应答这个请求,在ARP协议中规定,问谁谁回答,因为刚才这个请求分组中询问的是B的MAC地址,又因为B主机也知道A的MAC地址,所以如图
B主机就会以单播的形式向A主机返回一个ARP相应分组。在相应分组中包含有B主机的IP地址,以及B主机的物理地址,这里需要注意的是,虽然说X、Y、Z三个主机没有给A主机相应,但他们会不约而同的做一件事情,具体做什么事情呢?这个在后面说,总之通过这种方式A主机最终获得了B主机的物理地址,表面上看问题已经得到了解决,但我们也发现了这里面存在着一个问题,如果所有的主机都采用广播的方式去得到其他主机MAC地址的话,对于网络来说由于这种广播所造成的通信量就会使得网络负担过重,为了减轻网络的负担改进的方法就是在以太网中采用了一种**ARP Cache(高速缓存)**在每台主机都会存在着一个ARP高速缓存,在高速缓存中存放的是最近获得的本网络中某些主机IP地址和物理地址的映射,在实际的应用中我们可以使用DOC命令行输入命令
arp -a
查看本机ARP缓存的内容。如图
IP地址是224.0.0.2在高速缓存中对应的MAC地址。所以说源主机和目的主机进行通信的时候,源主机首先会查看本机的ARP缓存中有没有目的主机的MAC地址,如果有就无需广播,这样就很好的减轻了网络的负担。
我们回到刚才的问题,在刚才的示例中X、Y、Z三台主机虽然说收到请求分组以后不会给出相应,但是他们会不约而同的做一件事情,包括B主机在内都会把A主机的IP地址和物理地址写入到自己的ARP Cache(高速缓存)中,同样道理当A主机收到B主机单播的相应分组以后也会更新自己的ARP高速缓存,但是我们还要考虑可能出现的一种情况,比如说刚才示例中的B主机网卡坏掉了,换了一个新的网卡,或者B主机关机之后它的IP地址换了主人,给了一台网络中新加入的主机,此时该IP地址对应的物理地址就改变了,也就是说针对着ARP高速缓存中的信息有可能会失效的问题,在以太网的ARP协议软件中采用了一种超时的方法,它规定了当一条信息被写入到它的ARP Cache中的有效时间是20分钟,20分钟后这条信息会自动删除。
我们刚才举的示例是A主机和B主机在同一个物理网络中,如果两个主机不在同一个物理网络中,通过ARP协议获取的是什么信息呢?即获取的是谁的物理地址呢?这时我们要思考一个问题,当我们使用自己的计算机去访问某一个网站时,这时通过本机的ARP协议软件获取的是该网站对应的WWW服务器的物理地址么?要回答这个问题我们首先要了解一下从源主机到网站的WWW服务器之间是怎么样进行连接的。如图
数据从源主机出发经过了若干台路由器(这里我们假设为两台),即路由器R1和路由器R2的转发最终到达www服务器,从协议栈的角度来看整个数据的流向,对于源主机来说,数据是从最高层到最低层有一个层层封装的过程,最终从源主机发出去一个比特流,到了第一台路由器的输入接口,从接收到的比特流中剥离除了帧,从帧中又剥离出封装的IP分组,通过路由选择,为该分组找到下一跳后再把该IP分组封装到新的MAC帧中,通过路由器R1的输出接口,送交给路由器R2,在路由器R2中通过类似的过程,最终通过路由器R2送达给目的主机,也就是我们所要访问的目的网站的www服务器,到达目的主机后又从最低层向上层有一个层层剥离的过程,最终完成了这个web请求。
从网路层角度来看,在IP分组首部中的源IP地址和目的IP地址,始终是不变的,而从数据链路层来看传输的基本单位是帧,在帧的首部中源MAC地址和目的MAC地址每段都是改变的,那我们刚才通过ARP协议软件究竟获取的是谁的MAC地址呢?我们可以发现他其实得到的是路由器R1左边接口的MAC地址也就是HA3。
我们也可以通过数据报捕获软件来做一下这个实验,当然在捕获之前需要先通过
arp -d
命令清空我们的ARP Cache,通过实验我们可知,由于源主机高速缓存是空的,所以就先广播了一个ARP请求分组,因为目的MAC地址是全1的,当目的主机和源主机不在一个物理网络中的时候通过ARP协议软件得到的是和本主机相连的默认路由器的MAC地址。
这里我们还要知道ARP协议软件是什么时候工作的呢?它就像一个活雷锋一样,在需要的时候自动的去运行,所以说对于用来说是觉察不出来的。
以上就是我们学习的内容,我们主要学习了ARP的作用以及在以太网中ARP协议软件是如何实现地址转换的,通过学习我们也知道在以太网协议软件运行的时候有一个前提也就是说不管是发出ARP请求分组的主机还是发出ARP响应分组的主机,他们发出的分组里自己的地址信息都是可信的,但是目前的社会有一些居心叵测的人就会利用了ARP中彼此之间的信任进行**“”ARP诱骗和ARP攻击“**。