了解ARP协议

来源:互联网 发布:淘宝扣48分无法购物 编辑:程序博客网 时间:2024/06/06 19:49

ARP协议:地址解析协议

所属层:ARP是介于网络层和数据链路层中间的一种协议。
ARP作用:已知一台主机或者路由器的IP地址,如何知道它的硬件地址?這个时候就需要ARP完成一定的工作

一、ARP数据报的格式:看看下面這张图

这里写图片描述

其中的几个字段:
帧类型能够表示在MAC帧中的数据是ARP还是RARP
硬件类型:1为以太网
协议类型:要将什么样的协议转化为ARP数据报。
op表示是发送帧还是响应帧。
注意:接收端接收到ARP的MAC帧,然后将MAC帧进行解包校核发现是ARP,然后上交给ARP层了,然后接收主机通过ARP层,封装了自己的MAC地址,向下传输到MAC层单播回请求主机。在数据报中,以太网目的地址和以太网源地址出现了两次,冗余吗? 不冗余,因为是不同的层用的。前面是给MAC层用的。而且,ARP层的上层是没有协议的。为什么? 因为在ARP数据报中没有相应字段标识我需要将我的数据交给上层的谁。

二、ARP的工作步骤:

1.先在ARP高速缓存(在计算机里面)中有没有目的地的硬件地址,如果有就直接按地址发送。
2.如果查不到,ARP进程在本局域网广播(mac帧的目标地址是全F(12个F))一个ARP请求分组,主要内容是:“我的IP地址是209.0.0.5,我的硬件地址是00-00-C0-15-AD-18,我要找IP地址为209.0.0.7的主机硬件地址”。
3.局域网中的所有的主机都能收到这个ARP请求,如果一个主机发现ARP要查的硬件地址与本机一致,就接受然后把自己的硬件写入ARP分组然后给请求的主机发送回去,这叫响应分组,内容是“我的IP地址是209.0.0.7 ,我的硬件地址是08-00-2B-00-EE-0A”那么其他主机在收到这个消息之后都不予以理睬。
4.发送方收到回应之后,就在发送主机的ARP高速缓存中写入B主机的IP地址和硬件地址的一份映射。

这里写图片描述

重点:
ARP请求分组是在局域网中以广播形式发送的,ARP响应分组是在局域网中普通的单播回复(一对一)
为什么要有ARP高速缓存? AB主机之间在一次通信之后可能多次通信,這样每次通信之前可节省广播所耗费的资源,不然每次ARP一次都需要广播一次。
为什么ARP高速缓存中的映射是有生存时间的? AB通信一段时间之后,有可能B主机的网卡换了,那么A查表发送就有可能找不到那个地址了,所以需要定期的删除映射。
重点记住:ARP只能解决同一个局域网上的主机或者路由器的IP地址和硬件地址的映射问题。(路由器可以隔绝广播)

疑问:在本局域网上是可以使用ARP解析MAC地址的,如果目的主机不在本局域网上,就要通过路由器,也就是要解析路由器MAC地址,但是如果说我这局域网上多个路由,我怎么知道要先发送到哪个路由上去(我虽然知道是靠IP但是具体细节不知道) ,而且不一定只跨一个路由,有可能跨好多个路由,那么数据怎么知道這个路由下来之后去哪一个路由?实际上這里就涉及到了路由选择和路由表的知识,這快的知识是非常重要的,后面可能写一篇很大篇幅的博客来整理讲述。

三、实践:编写一个ARP脚本

目的:抓取链接在局域网中的主机的MAC地址:

代码如下:
这里写图片描述

這段代码的功能即每获取20次MAC地址就停歇一次然后再次获取20次。不停的尝试获取到链接同一个局域网中的主机的MAC地址。

运行结果:
这里写图片描述

我们从结果中看到一些获取到的同局域网中的主机MAC地址,如上图中画红线所示。