赞
踩
ARP协议简介
ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。
OSI 模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层, MAC地址在第二层。协议在发生数据包时,首先要封装第三层 (IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务。
IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。因此,必须把IP目的地址转换成以太网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的,通过在局域网内发送ARP广播包,当目标主机的IP地址相同时,发送ARP单播响应包,获取目标主机的MAC地址。ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行。
ARP和RARP报头结构
以太网首部总共有14字节数据,arp请求报文总共有28字节。所以一个ARP请求分组或应答分组总共有46字节数据,如图1所示。
( 图1 ARP/RARP报头结构)
以太网目的地址:占6个字节,目的以太网地址。发送ARP请求时,为广播的MAC地址,0xFF.FF.FF.FF.FF.FF。
以太网原地址:占6个字节,表示源以太网地址。
帧类型:占2个字节,表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。
硬件类型:占2个字节,表示硬件地址的类型,表明ARP实现在何种类型的网络上。对于以太网,该类型的值为“1”。
协议类型:占2个字节,表示发送方要映射的协议地址类型。对于IP地址,该值为0x0800。
硬件地址长度:占1个字节,表示硬件地址的长度,单位是字节。对于ARP请求或应答来说,该值为6。
协议长度:占1个字节,表示ip地址的长度,单位是字节。对于ARP请求或应答来说,该值为4。
操作类型:占2个字节,表示ARP数据包类型,1表示ARP请求,2表示ARP应答,3表示RARP请求,4表示RARP应答
发送方的硬件地址:占6个字节特,发送方以太网地址。这个字段和ARP报文首部的源以太网地址字段是重复信息。
发送方的ip地址:占4个字节,表示发送方的IP地址。
目标硬件地址: 占6个字节,目标设备的MAC物理地址 接收方的以太网地址。发送ARP请求时,该处填充值为0x00.00.00.00.00.00。
目标ip地址:占4个字节,表示目标设备的IP地址。
注意:在ARP操作中,有效数据的长度为28个字节,不足以太网的最小长度46字节长度,需要填充字节,填充字节最小长度为18个字节
Wireshark抓包分析:
ARP请求包:
ARP响应包:
在以太网的数据帧报头中和ARP请求数据帧中都有发送端的MAC物理地址。
在发送ARP请求时,以太网帧头中的目的MAC物理地址为FF-FF-FF-FF-FF-FF,而在ARP帧中的目标MAC地址默认为全0,置空位,在响应包中填充MAC地址。
对一个ARP请求来说,除ARP中目的端MAC硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本地的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后发送出去。
一个路由器代表一个网段(局域网),广播包不能跨网段的(arp request无法发送到远端设备)。
路由器一个接口对应一个MAC地址。跨网段传输数据包,数据包data和路由器ip不会变,但MAC会变。
同网段通信过程中,IP和MAC信息不变,“跟谁通信用谁的mac”。
ARP和RARP的工作原理
ARP的工作原理如下:
RARP的工作原理如下:
ARP地址解析过程
假设主机A和B在同一个网段,主机A要向主机B发送信息。如图1-2所示,具体的地址解析过程如下:
(1)主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
(2)如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3) 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4) 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
图 2 ARP地址解析过程
当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。
ARP缓冲表
1>ARP协议的本质是完成网络地址到物理地址的映射。从概念上将就是找到一个映射方法f,使得“物理地址 = f(网络地址)“。物理地址有两种基本类型:以太网类型和令牌环网类型。网络地址特指IP地址,对映射方法的要求就是高效。具体到以太网,它使用的是动态绑定转换的方法。一般是设置ARP高速缓存,通过学习,老化,更新,溢出算法处理ARP映射表来解决这些问题。
学习指ARP收到任何指向本结点IP地址的ARP/IP包,从中提取出地址对,当ARP缓冲表中无对应项时,由ARP接收部分添加;
老化指为每项设置寿命域,以便代谢掉陈旧的地址映射项;
更新指ARP提取到新的地址对时,用其更新缓存里已有的对应项;
溢出算法指当缓存慢时,采取何种方法替代旧有的地址对。
2>ARP缓存表由状态,寿命,IP地址,MAC地址4个字段组成。状态字段指示地址对是否有效;寿命字段用于老化操作,初始存入最大值,以后由OS时间函数调用,每秒减1,直至为0清除;IP地址和MAC地址字段保存网络地址和物理地址的映射。围绕ARP缓存表,完成了4种操作:学习,老化,更新,表满处理。
3>当ARP被询问一个已只IP地址节点的MAC地址时,先在ARPcache 查看,若存在,就直接返回MAC地址,若不存在,才发送ARP request向局域网查询。
4>当主机A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因而主机B可能要向A发送ARP请求分组。
所以,为了减少网络上的通信量,主机A在发送其ARP请求分组时,就将自己的IP地址到硬件地址的写入主机B自己的ARP高速缓冲表中。这对主机B以后向A发送数据报时就更方便了。
ARP中的TTL
ARP将保存在高速缓冲表中的每一个映射地址表项都设置了TTL(生存时间),只要TTL小于0的项目就从高速缓冲表中删除掉。
ARP的超时值一般为20分钟,对不完整的表项设置为20分钟,而对不完整的表项设置为2分钟《不完整的表项:即在以太网上对一个不存在的主机发出ARP请求》,当这些表项再次使用时,这些实现一般都把超时值重新设为20分钟。
好处:主机A和B通信。A的ARP高速缓冲表里保存有B的物理地址。但B的网卡突然坏了,B立即就更换了一块,因此B的硬件地址就改变了。A还要和B继续通信。A在其ARP缓冲表中查找到B原先的硬件地址,并使用该硬件地址向B发送数据帧。但B原先的硬件地址已经失效了。因此A无法找到主机B。但是过了一段时间,A的ARP高速缓冲表中已经删除了B原先的硬件地址(因为它的生存时间到了),于是A重新光播发送ARP请求分组,又找到了B。
免费ARP
免费ARP报文是一种特殊的ARP报文,该报文中携带的发送端IP地址和目标IP地址都是本机IP地址,报文源MAC地址是本机MAC地址,报文的目的MAC地址是广播地址。
设备通过对外发送免费ARP报文使用场景:
确定其它设备的IP地址是否与本机的IP地址冲突。当其它设备收到免费ARP报文后,如果发现报文中的IP地址和自己的IP地址相同,则给发送免费ARP报文的设备返回一个ARP应答,告知该设备IP地址冲突。
设备改变了硬件地址,通过发送免费ARP报文通知其它设备更新ARP表项。
免费ARP报文学习功能的作用
使能了免费ARP报文学习功能后,设备会根据收到的免费ARP报文中携带的信息(源IP地址、源MAC地址)对自身维护的ARP表进行修改。设备先判断ARP表中是否存在与此免费ARP报文源IP地址对应的ARP表项:
如果没有对应的ARP表项,设备会根据该免费ARP报文中携带的信息新建ARP表项;
如果存在对应的ARP表项,设备会根据该免费ARP报文中携带的信息更新对应的ARP表项。
关闭免费ARP报文学习功能后,设备不会根据收到的免费ARP报文来新建ARP表项,但是会更新已存在的对应ARP表项。如果用户不希望通过免费ARP报文来新建ARP表项,可以关闭免费ARP报文学习功能,以节省ARP表项资源。
ARP命令:
1.使用arp-a命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。
2.使用arp –d来删除ARP高速缓存中的某一项内容
3.使用arp –s来增加高速缓冲表中的内容,这个命令需要主机名和以太网地址。新增加的内容是永久性的,除非在命令行的末尾加上关键字temp。
arp –s 157.55.85.212 00-aa-aa-562-c6-09
增加一个静态的ARP表项。
4. arppub –s:使系统起着主机ARP代理功能。系统将回答与主机名对应的IP地址的ARP请求。
5. Ping 10.1.20.109/64 测试网络连通性,触发wireshark抓包
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。