Arp(adress resolution protocol—地址解析协议)是在传输IP包时,因不知道IP地址对应的MAC地址,无法传送数据引起的,通过arp,建立目的IP跟MAC地址的映射关系,从而获得目的IP的MAC地址。
Arp头部的数据结构如下:
typedefstruct arphdr {
unsignedshort arp_hrd;/*硬件类型,*/
unsignedshort arp_pro;/*协议类型*/
unsignedchar arp_hln;/*硬件地址长度*/
unsignedchar arp_pln;/*协议地址长度*/
unsignedshort arp_op;/*ARP操作类型*/
unsignedchar arp_sha[6];/*发送者的硬件地址*/
unsignedlong arp_spa;/*发送者的协议地址*/
unsignedchar arp_tha[6];/*目标的硬件地址*/
unsignedlong arp_tpa;/*目标的协议地址*/
}ARPHDR,*PARPHDR;
我们封装arp数据包格式如下:
目的地址,我们现在还不知道,需要向本子网广播,以获得目的地址(目的MAC),因此这里全填1,源基地即本地的MAC地址,我们从本地网卡的MAC地址即可取得,类型表示的是上层协议的类型,这里是arp,用0x0806表示,到这里就完整的帧封装。
arp头部数据填充,硬件类型有很多种,即有各种各样的硬件类型,比如以太网卡,令牌环网卡等,0x0001表示以太网卡,协议类型表示的是上层协议的类型,即需要通过arp获得对方MAC地址的协议,而不是arp 本身协议,0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,操作类型表示本arp所要操作的动作,1为ARP 请求,2为ARP应答,3为RARP请求,4为RARP应答,源主机MAC地址为本地MAC,从网卡驱动从即可获得,源主机IP地址为本地IP,这个也是 从网卡驱动中获得,当然也是我们人为设置的(或者DHCP),目的主机MAC地址就是我们发送arp需要获得的数据,此时还不知道,全0待填写,目的主机 IP地址为远端的IP地址。
由于路由器有拦截广播的功能,arp广播只能在本子网中广播,如果所要获取的MAC地址不是本子网的,则必须经过路由器网关获得。由于路由器的默认网关也是本子网的一个设备,因此也会收到本子网的arp广播,经过子网 匹配,发现目的IP的子网,跟路由器的另一个端口的子网一致,于是,把arp请求转发给路由器的另一个端口,此时,路由器的另一个端口跟目的IP在同一个 子网,因此,又可以进行arp广播,当目的IP获得了arp广播信息后,会把本机的MAC地址填充到arp包的目的地址MAC这栏中,同时修改arp的数 据包的操作类型为arp应答,接着把数据包发回源IP地址,此时的发送就不是以广播的形式发送了,因为目的地址MAC,本地地址MAC都知道,是需要单播 即可,此时,还需要修改以太网帧的目的MAC,本地MAC,从而得以发送数据包。
代理ARP
如果ARP请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理ARP功能的设备就可以回答该请求,这个过程称作代理ARP(Proxy ARP)。
代理ARP功能屏蔽了分离的物理网络这一事实,使用户使用起来,好像在同一个物理网络上。
代理ARP分为普通代理ARP和本地代理ARP,二者的应用场景有所区别:
l 普通代理ARP的应用环境为:想要互通的主机分别连接到设备的不同三层接口上,且这些主机不在同一个广播域中。
l 本地代理ARP的应用环境为:想要互通的主机连接到设备的同一个三层接口上,且这些主机不在同一个广播域中。
处于同一网段内的主机,当连接到设备的不同三层接口时,可以利用设备的代理ARP功能,通过三层转发实现互通。
代理ARP的典型应用环境如图3-1所示。设备Router通过两个三层接口Ethernet1/1和Ethernet1/2连接两个网络,两个三层接口的IP地址不在同一个网段,接口地址分别为192.168.10.99/24、192.168.20.99/24。但是两个网络内的主机Host A和Host B的地址通过掩码的控制,既与相连设备的接口地址在同一网段,同时二者也处于同一个网段。
图 3 普通代理ARP的应用环境
在这种组网情况下,当Host A需要与Host B通信时,由于目的IP地址与本机的IP地址为同一网段,因此Host A会直接发出请求Host B硬件地址的ARP请求。但是,此时的两台主机处于不同的广播域中,Host B无法收到Host A的ARP请求报文,当然也就无法应答。
通过在Router上启用代理ARP功能,可以解决此问题。启用代理ARP后,Router可以应答Host A的ARP请求。同时,Router相当于Host B的代理,把从其他主机发送过来的报文转发给它。
代理ARP的优点是,它可以只被应用在一个设备上(此时该设备的作用相当于网关),不会影响到网络中其他设备的路由表。
代理ARP功能可以在IP主机没有配置缺省网关或者IP主机没有任何路由能力的情况下使用。
本地代理ARP的应用场景如图3-2所示。Host A和Host B属于同一个VLAN 2,但它们分别连接到被二层隔离的端口Ethernet1/3和Ethernet1/1上,通过在Router上启用本地代理ARP功能,可以实现Host A和Host B的三层互通。
图 4 本地代理ARP的应用环境
本地代理ARP可以在下列三种情况下实现主机之间的三层互通:
l 想要互通的主机分别连接到同一个VLAN中的不同二层隔离端口下;
l 使能Super VLAN功能后,想要互通的主机属于不同的Sub VLAN;
l 使能Isolate-user-vlan功能后,想要互通的主机属于不同的Secondary VLAN。
ARP Snooping
ARP Snooping作用
ARP Snooping功能是一个用于二层交换网络环境的特性,通过侦听ARP报文建立ARP Snooping表项,从而提供给ARP快速应答和MFF手动方式等使用。
ARP Snooping工作机制
设备上的一个VLAN使能ARP Snooping后,该VLAN内所有端口接收的ARP报文会被重定向到CPU。CPU对重定向上送的ARP报文进行分析,获取ARP报文的源IP地址、源MAC地址、源VLAN和入端口信息,建立记录用户信息的ARP Snooping表项。
ARP Snooping表项的老化时间为25分钟,有效时间为15分钟。如果一个ARP Snooping表项自最后一次更新后15分钟内没有收到ARP更新报文,则此表项开始进入失效状态,不再对外提供服务,其他特性查找此表项将会失败。当收到源IP地址和源MAC与已存在的ARP Snooping表项IP地址和MAC均相同的ARP报文时,此ARP Snooping表项进行更新,重新开始生效,并重新老化计时。当ARP Snooping表项达到老化时间后,则将此ARP Snooping表项删除。
如果ARP Snooping收到ARP报文时检查到相同IP的ARP Snooping表项已经存在,但是MAC地址发生了变化,则认为发生了攻击,此时ARP Snooping表项处于冲突状态,表项失效,不再对外提供服务,并在25分钟后删除此表项。