◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
地址解析协议ARP是用来将IP地址解析为MAC地址的协议。
在局域网中,当主机或其它三层网络设备有数据要发送给另一台主机或三层网络设备时,它需要知道对方的网络层地址(即IP地址)。但是仅有IP地址是不够的,因为IP报文必须封装成帧才能通过物理网络发送,因此发送方还需要知道接收方的物理地址(即MAC地址),因此需要一个从IP地址到MAC地址的映射。ARP即可以实现将IP地址解析为MAC地址。主机或三层网络设备上会维护一张ARP表,用于存储IP地址和MAC地址的关系。一般ARP表项包括动态ARP表项和静态ARP表项。
动态ARP表项由ARP协议通过ARP报文(广播ARP请求和单播ARP应答)自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。
动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。
1)同一网段时,源主机直接发送ARP广播,请求目的主机的MAC地址。目的主机收到后,单播回复自己IP地址对应的MAC地址的ARP应答报文给源主机,源主机收到ARP应答报文后,将数据报文封装二层帧并发送目的主机。
2)不同网段时,源主机已经配置缺省网关,则会发送ARP广播,请求网关的IP地址对应的MAC地址。网关收到后,单播回复自己该接口的IP地址对应的MAC地址的ARP应答报文给源主机,源主机收到ARP应答报文后,将数据报文封装二层帧并发给网关,再由网关将数据报文发送给目的主机。
二层帧中的目的MAC是全F(广播),ARP数据包里面的目的MAC是全0(未知用0表示)。
在eNSP模拟器中抓取的ARP请求ARP数据包里面的目的MAC可能是全F,与理论不符,抓取物理网卡数据包正常为全0。
免费ARP是一种特殊的ARP请求,所以二层帧的目的MAC也是全F,区别在于ARP数据包里面的源和IP目的IP是同一个IP地址。
---------------------------------------------------------------------------------------------------
静态ARP表项是由网络管理员手工建立的IP地址和MAC地址之间固定的映射关系。静态ARP表项不会被老化,不会被动态ARP表项覆盖。
手工建立IP地址和MAC地址之间固定的映射关系,未同时指定VLAN和出接口。
如果出接口是处于二层模式的以太网接口,短静态ARP表项不能直接用于报文转发。当需要发送报文时,设备会先发送ARP请求报文,如果收到的ARP应答报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将收到ARP应答报文的VLAN和接口加入该静态ARP表项中,后续设备可直接用该静态ARP表项转发报文。
手工建立IP地址和MAC地址之间固定的映射关系,并同时指定该ARP表项所在VLAN和出接口。
长静态ARP表项可以直接用于报文转发。建议用户采用长静态ARP表项。
正常情况下网络中设备可以通过ARP协议进行ARP表项的动态学习,生成的动态ARP表项可以被老化,可以被更新。
静态ARP表项不会被老化,也不会被动态ARP表项覆盖,可以保证网络通信的安全性。
静态ARP表项可以限制本端设备和指定IP地址的对端设备通信时只使用指定的MAC地址,此时攻击报文无法修改本端设备的ARP表中IP地址和MAC地址的映射关系,从而保护了本端设备和对端设备间的正常通信。一般在网关设备上配置静态ARP表项。
对于网络中的重要设备,如服务器等,可以在路由器上配置静态ARP表项。这样可以避免路由器上重要设备IP地址对应的ARP表项被ARP攻击报文错误更新,从而保证用户与重要设备之间正常通信。
当网络中用户设备的MAC地址为组播MAC地址时,可以在路由器上配置静态ARP表项。缺省情况下,设备收到源MAC地址为组播MAC地址的ARP报文时不会进行ARP学习。
当希望禁止某个IP地址访问设备时,可以在路由器上配置静态ARP表项,将该IP地址与一个不存在的MAC地址进行绑定。
IP地址冲突检测:当设备接口的协议状态变为Up时,设备主动对外发送免费ARP报文。正常情况下不会收到ARP应答,如果收到,则表明本网络中存在与自身IP地址重复的地址。如果检测到IP地址冲突,设备会周期性的广播发送免费ARP应答报文,直到冲突解除。
用于通告一个新的MAC地址:发送方更换了网卡,MAC地址变化了,为了能够在动态ARP表项老化前通告网络中其他设备,发送方可以发送一个免费ARP。
在VRRP备份组中用来通告主备发生变换:发生主备变换后,MASTER设备会广播发送一个免费ARP报文来通告发生了主备变换。
如果免费ARP报文中源IP地址和自己的IP地址相同,则周期性的广播发送免费ARP应答报文,告知此IP地址在网络中存在冲突,直到冲突解除。
如果免费ARP报文中源IP地址和自己的IP地址不同,免费ARP报文是在VLANIF接口收到的,并且设备上已经有免费ARP报文中源IP地址对应的动态ARP表项,则进行ARP学习,即根据收到的免费ARP报文更新该ARP表项。其余情况收到免费ARP报文后均不进行ARP学习。
一个网络的主机发往同一网段不同物理网络的另一台主机的ARP请求,连接这两个网络的设备回答该ARP请求的过程。
Proxy ARP部署在网关上,网络中的主机不必做任何改动。
Proxy ARP可以隐藏物理网络细节,使两个物理网络可以使用同一个网络号。
Proxy ARP只影响主机的ARP表,对网关的ARP表和路由表没有影响。
路由式ARP代理就是使那些在同一网段却不在同一物理网络上的网络设备能够相互通信的一种功能。
在实际应用中,如果连接设备的主机上没有配置缺省网关地址,此时将无法进行数据转发。
如图所示,Host_1的IP地址为172.16.1.10/16,Host_2的IP地址为172.16.2.20/16,Host_1与Host_2处于同一网段。Router通过VLAN10和VLAN20连接两个网络,VLANIF10和VLANIF20的IP地址不在同一个网段。
当Host_1需要与Host_2通信时,由于目的IP地址与本机的IP地址为同一网段,因此Host_1以广播形式发送ARP请求报文,请求Host_2的MAC地址。但是,由于两台主机处于不同的物理网络(不同广播域)中,Host_2无法收到Host_1的ARP请求报文,因此也就无法应答。
通过在Router上启用路由式Proxy ARP后,Router收到ARP请求报文后会查找路由表,由于Host_2与Router直连,因此Router上存在到Host_2的路由表项。Router使用自己的MAC地址给Host_1发送ARP应答报文。Host_1将以Router的MAC地址进行数据转发。此时,Router相当于Host_2的代理。如图所示,Host_1上的ARP表项中到目的地址Host_2的IP地址对应的MAC地址为Router的VLANIF10接口的MAC地址。
如果两个用户属于相同的VLAN,但VLAN内配置了端口隔离。此时用户间需要三层互通,可以在关联了VLAN的接口上启动VLAN内Proxy ARP功能。
如图所示,Host_1和Host_2是Router设备下的两个用户。连接Host_1和Host_2的两个接口在Router属于同一个VLAN10。
由于在Router上配置了VLAN内不同接口彼此隔离,因此Host_1和Host_2不能直接在二层互通。
若Router的接口使能了VLAN内Proxy ARP功能,可以使Host_1和Host_2实现三层互通。Router的接口在接收到目的地址不是自己的ARP请求报文后,Router并不立即丢弃该报文,而是查找该接口的ARP表项。如果存在Host_2的ARP表项,则将自己的MAC地址发送给Host_1,并将Host_1发送给Host_2的报文代为转发。实际上此时Router相当于Host_2的代理。
由于Host_1和Host_2属于不同的Sub-VLAN,Host_1和Host_2不能直接实现二层互通。
如果Router上使能了VLAN间Proxy ARP功能,可以使Host_1和Host_2实现三层互通。Router的接口在接收到目的地址不是自己的ARP请求报文后,并不立即丢弃该报文,而是查找ARP表项(包括动态学习的ARP表项和静态配置的ARP表项)。如果存在Host_2的ARP表项,则将自己的MAC地址发送给Host_1,并将Host_1发送给Host_2的报文代为转发。实际上此时Router相当于Host_2的代理。
ARP-Ping IP通过发送ARP请求报文确定特定的IP地址是否被网络中其他设备使用。
ARP-Ping MAC通过发送ICMP请求报文来确定特定的MAC地址是否被网络中其他设备使用。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。