图解ARP协议(五)免费ARP:地址冲突了肿么办?

1、免费ARP概述html

网络世界纷繁复杂,除了各类******行为对网络能形成实际破坏以外,还有一类安全问题或泛安全问题,看上去问题不大,但其实仍然能够形成极大的杀伤力。今天跟你们探讨的,也是技术原理比较简单,但实际防范比较头疼的一个问题:地址冲突ios


wKiom1mrpLfTVub_AAGdYo6gzBk232.png


这个局域网中,你们所在IP网段是192.168.1.0/24,PC1的地址是192.168.1.1,而PC2和PC3的地址发生冲突,都是192.168.1.2。那么,若是PC1须要将数据包发送给192.168.1.2,数据包最终到了PC2仍是PC3手里?仍是负载均衡?无论结果如何,这里的地址冲突确定会对正常通讯形成麻烦。windows


上面这个电脑/手机之间的地址冲突,你们可能以为没什么太大的问题,那么接下来再看下面这个图片=>缓存

wKioL1mrpKyhCzuvAAIcF-nxOoM646.png


这里的Server1和Server2处在 [服务集群]中,提供着企业的某种服务,例如Web网站、邮箱系统、FTP文件服务器等,此时服务器的地址发生了冲突,都是10.1.1.1。这种地址冲突则会影响大规模的用户没法访问这个服务器,若服务器承载的是核心业务,对于企业则会形成极大的影响安全

 

因此,地址冲突问题可大可小,可能网络运维人员部署上的疏忽,也多是普通电脑小白无心致使的,更有多是主动的***行为,例如***者制造地址冲突场景,扰乱正常业务,致使业务服务中断。服务器

 

所以,如何在IP地址冲突的时候及时检测,而且作出解决方案呢?微信




2、免费ARP原理网络

Gratuitous ARP,被翻译为『免费ARP』也被称为『无端ARP』,用于检测局域网内的IP地址冲突,在必定程度上可以给用户和网络运维人员提供帮助。相比『免费』这个翻译,『无端』这个词其实会更加好理解:"在没有人问本身的状况下,平白无故自问自答"。负载均衡


wKioL1mrpMXxjeiKAAHvcwaqcOQ798.png


这项技术不须要电脑和服务器安装什么安全软件或产品例如防火墙之类的,也不须要交换机和路由器购买什么license,只要设备具有联网功能(有网卡)就内置了这项功能,因为免费ARP本质是ARP协议的实现,因此只要有TCP/IP协议栈的网卡,就能支持。相比其余安全防护技术,免费ARP是一项轻量级的"用户无感知"的技术。运维

 

接下来,咱们来回顾下以前的图片=>


wKiom1mrpPvgPXptAAIWOVbDqSA027.png


当用户发送数据包给192.168.1.2的时候,交换机会将数据包转发给谁呢?

①根据咱们以前学过的ARP原理,交换机会拆开这个数据包,而且根据目的MAC进行转发


②那么PC1在数据封装的时候,目的MAC是封装PC2仍是PC3的MAC


目标MAC则取决于电脑本地的ARP缓存表,因此PC1最终把数据包给PC2仍是PC3,则取决于收到的ARP回应,而且根据"后到优先"原则做出选择。

 

因此,若PC2提早回应ARP,则PC1一直发给PC3;若PC3提早回应ARP,则PC1一直发送给PC2。还有一种状况,PC2和PC3交替回应ARP,PC1有可能将部分数据给PC2,部分数据给PC3(而PC1则处于懵逼状态,由于关于192.168.1.2的MAC映射一直在变更)。这个更可能是理论推导,实际状况不一样设备测试出来的效果有些差别,后面章节我会带你们作真实和虚拟网络的实验

 

咱们来看看免费ARP是如何工做的并介入这场冲突的?

wKioL1mrpPGj1tnRAAKYpR743I0987.png


当电脑检测到本身的IP地址跟其余电脑冲突时,它们会相互发送免费ARP("互怼"),用来提醒对方:你的IP地址跟个人冲突啦! 这里要注意一点:免费ARP是以ARP Request或Reply广播形式发送,将IP和MAC地址信息绑定,并宣告到整个局域网。若是在宣告的过程当中,其余电脑监听到,而且地址跟本身同样,也会直接参与这个"互怼"过程。

 

上面PC2和PC3一直不停地对外发送免费ARP:个人地址是192.168.1.2,MAC是xxx。与此同时,同一局域网的其余主机,则根据这两个免费ARP信息不断的修改本地ARP表,192.168.1.2一会映射到MAC2,一会映射到MAC3。

 

那么,这个混乱的争抢过程,会不会停下来呢?

可能会持续一段时间,也可能一直持续下去(后面有实验验证)。冲突方之间可能会一直发送,直到有一边作出让步并修改IP地址。(不一样系统解决方法不一样)

 

不少人在这里开始有疑惑,即使免费ARP帮咱们检测到了地址冲突,可是也是在协议底层在"互怼",咱们做为"主人",如何收到地址冲突提示,而且作出修改和让步呢?由于不管是普通用户仍是专业工程师,也不可能每天挂在wireshark这种抓包软件,时时刻刻盯着免费ARP包,判断是否有人跟咱们地址冲突了。因此,这又涉及到电脑(操做系统)如何根据免费ARP的地址冲突检测,更好的提示或帮助用户了。

 

目前行业的解决方案是这样的:若是是图形化操做系统,例如Windows或者MacOS,是经过系统弹框的方式提示用户;而若是是命令行操做系统(交换机/路由器/防火墙),则经过日志报错信息提示用户。

 

也就是说,不管普通电脑仍是专业的防火墙设备,经过免费ARP检测到地址冲突以后,设备都会弹出来跟他说:喂,主人,你地址跟人家冲突了,该改改了!


这是Windows和MacOS的地址冲突弹框告警,引导用户修改本机IP地址=>


wKiom1mrpSOBz3hiAAhuP7E9LPg620.png


这是思科路由器IOS(网际操做系统)的地址冲突日志信息,引导网络运维人员修改IP地址=>

%IP-4-DUPADDR: Duplicate address 192.168.1.2 on FastEthernet0/0, sourced by cc02.394f.0000


因此,当地址发生冲突时,根据免费ARP引发的弹框和日志告警,用户或者管理员即可以对IP地址进行修改,从而解决通讯问题。例如,下面的PC2和PC3,只要一方修改了地址便可 =>


wKioL1mrpSOTf-p6AAGqsuPLgp0860.png




3、免费ARP实战指南

免费ARP出现的场景很是多,例如地址冲突时、地址修改或变动时、DHCP分发地址时、网关冗余协议交互时(例如HSRP)、TFTP传输数据时……

 

不一样的场景,抓到的免费ARP数据包,底层结构都会有所差别,多是基于ARP请求广播发送的,也多是基于ARP回应广播发送的(没看错!ARP回应这里是广播方式)

 

为了让你们"亲眼所见",同时可跟着我一块儿实践,更好吸取这块的知识,这里我设计了真实和虚拟网络来进行实战,并抓取免费ARP数据包,经过数据包解构原理。



(一)真实网络下 免费ARP实战

① 跟上一篇文章中代理ARP的真实网络同样,个人网络拓扑是这样的:


wKiom1mrpWiBXh6VAAIh9QO2IRU863.png


为了让这个实验更有通用性,我加入了一台Windows电脑。此时登陆无线路由器(极路由)查看局域网主机列表:


wKiom1mrpXuD1IFPAAXgr42xxz4942.png


仍是原来的配方.... 苹果全家桶和一台Windows电脑。实物图大概是这样的:



wKioL1mrpZLDf4J3AAJ9X8FOnU4682.jpg


② 接下来,为了看到地址冲突时,免费ARP的数据包交互,咱们在Windows和MacOS同时开启Wireshark并抓包本机电脑的数据包,设置arp过滤。

macbook端截图以下:


wKioL1mrpaajJ1cTAADU2xezwL4653.png


Windows端截图以下:(Windows 10跟无线路由器一直在交互)

wKioL1mrpbrhKaRyAAgZ4qsyPe0412.png



③在Mac端,将IP地址设置为跟Windows地址同样从192.168.199.177改成192.168.199.152


wKiom1mrpevxicFRAAJcTKcyK_k059.png

wKioL1mrpd-QMGShAAHPyScYQ2s474.png


点击应用以后,开始观察两边电脑弹框和wireshark的ARP包交互过程=>


wKiom1mrpg6ThwyaAAcV2TCW7Hk105.png


上图能够看到macbook的弹框告警了,接下来咱们来分析下此时Mac和windows抓到的数据交互过程=>



wKiom1mrpjTRuApHAAkxuKCn2rY526.pngwKiom1mrpkjg9oi0AAcUXe51ago968.png



个人windows电脑很明确的回应Mac电脑:这个地址199.152,已经被我用了。这个过程重复了3次。根据抓包,这个过程后面还在不断的持续中,无论在win仍是mac,都能抓到相似的问答过程


wKioL1mrpnKh6imSAAuJz21EBCA852.png


因为macbook电脑此刻不能上网,因此还"不屈不挠"的询问着,它在想:没准windows下线了,没有回应了呢?(若是windows没有回应,则说明它下线了或改成其余地址了,那么macbook就可使用)

wKioL1mrpo2RA5hPAAF0Qbc0fvQ559.png




④ 接下来,咱们将windows的网络断开,而后在macbook这端观察arp交互和网络链接状态:


wKiom1mrps-CBD-UAAiQEQHC6BA239.png


此时,macbook跟往常同样发生三个arp请求,询问152这个地址是否有人使用,因为windows已经下线,因此三次都没有应答。紧接着有三个gratuitous arp数据包,跟上面三个请求包几乎是同样的,只有一个区别,就是发送者的IP地址此时从0.0.0.0修改成192.168.199.152。这意味着mac确认了152没有其余人使用,而且认为此刻本身有资格用上152这个地址了

 

从wireshark抓包来看,以前的arp请求好像没有标记"gratuitous"这个关键词,那么算不是是免费arp或者无端arp呢?这个其实也是比较多讨论和争议。若是从"本身问本身的角度"出发,这两种arp都算是免费arp,由于都是在问本身配置的这个新地址192.168.199.152,并且目的都是一致的,都是为了检测是否地址可用是否存在冲突

 

固然,更严谨的的免费arp包,则是须要"发送方ip"和"接收者ip"是一致的,就是下面这种arp请求包,都有192.168.199.152这个地址。因此,这一小知识点的话,我我的以为不用太纠结,经过数据包结构还原整个免费arp工做原理才是最重要的。

 

从wireshark截图能够看到,通过了上面这些免费ARP的请求以后,因为一直没有其余设备回应152这个地址,因此macbook电脑再次询问网关192.168.199.1的物理地址,拿到网关的ARP回应以后,个人macbook即可以正常通讯了。


wKiom1mrpu2Q1PUyAAGHXuuu334517.png


⑤【接下来是拓展内容,涉及dhcp协议,新手的话可暂时忽略这一小段...】

这个实验还能够继续深挖下来,此时让windows电脑从新接入这个wifi网络,以后一样会出现免费arp的交互过程,只不过多了一个dhcp协议交互,而且最终windows使用了192.168.199.153这个地址接入wifi网络。先整理下流程再截核心数据包=>

  1. 当windows从新接入网络以后,会经过dhcp从新获取192.168.199.152这个地址(因为macbook的152这个地址是由我手工静态指定的而不是路由器分配,全部路由器仍然经过dhcp地址池分配);

  2. windows收到这个地址以后,第一时间便发送免费arp包进行地址检测,可是发现这个地址已经被macbook占用了!所以,经过dhcp decline数据包向无线路由器取消这个地址;

  3. windows从新获取192.168.199.153这个地址,经过免费arp从新检测,发现没有人回应了,说明这个地址可用,后续用这个地址接入wifi网络。



windows从新接入网络的dhcp交互包=>


wKioL1mrpvWh8fHKAAgiPmlFaco242.png

windows获取地址后经过免费arp检测到macbook=>


wKiom1mrpzPCI_J-AAe299t9Azg683.png

windows经过dhcp decline放弃152,并从新获取153这个地址=>


wKiom1mrp1iSo5DXAAkust40ow8419.png



windows经过免费arp检测,发现153地址没其余人用,因此接入了网络=>

wKiom1mrp27i_gEAAAmD7RwWXF8452.png



总结:经过这个真实网络,咱们构造了windows和macbook地址冲突的环境,经过wireshark抓取免费arp数据包,学习了免费arp的地址检测功能以及数据包结构。

①当电脑(手工)修改的地址跟局域网其余主机地址同样的时候,经过免费arp协议,电脑会弹框提醒并没有法上网;

②当相同地址的电脑其中一台下线时,经过免费arp能够证实此地址可以使用(没人争抢/回应),此时即可接入网络;

③当电脑经过DHCP获取地址时,会经过免费arp检测这个地址是否可用,若已经被使用,则从新经过dhcp获取新的地址,再接入互联网。

④这里抓取的免费ARP包是请求广播包,而且特征是"本身问本身"。("本身答本身"的回应广播包,在下面的实验有)



(二)虚拟网络下 免费ARP实战

网络拓扑采用GNS3搭建,采用C3640操做系统镜像=>

wKioL1mrp3GgKShBAAGFjg-ju6Q037.png


①为每一个路由器配置IP地址,所在网段为192.168.1.0/24=>

R1(config)#int f0/0

R1(config-if)#no sh

R1(config-if)#ip add 192.168.1.1 255.255.255.0

R2(config)#int f0/0

R2(config-if)#no sh

R2(config-if)#ip add 192.168.1.2 255.255.255.0

R3(config)#int f0/0

R3(config-if)#no sh

R3(config-if)#ip add 192.168.1.3 255.255.255.0


②在路由器相连链路上抓包,路由器相互PING通,并查看ARP表=>

(这里用R1举例,其余相似)


R1#ping 192.168.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 64/64/64 ms


R1#ping 192.168.1.3

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 192.168.1.3, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 64/64/68 ms


R1#show arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  192.168.1.1             -   cc00.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.3             0   cc02.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.2             0   cc01.394f.0000  ARPA   FastEthernet0/0

 

③让R3和R2的地址冲突,例如将R3的地址从192.168.1.3配置为192.168.1.2,在R2和R3上面开启arp调试"debug arp",在R1上面查看ARP表,经过wireshark观察底层免费ARP包交互过程=>


R3(config)#int f0/0

R3(config-if)#ip add 192.168.1.2 255.255.255.0


一旦R3设置了上面的地址,跟R2冲突以后,此时R2和R3的命令行界面开始不停断"刷屏"=>


wKioL1mrp46QzDlZABEw70XY_tY669.png


核心日志信息:

R2#

*Mar  1 00:13:25.519: %IP-4-DUPADDR: Duplicate address 192.168.1.2 on FastEthernet0/0, sourced by cc02.394f.0000

R2#

*Mar  1 00:13:56.259: %IP-4-DUPADDR: Duplicate address 192.168.1.2 on FastEthernet0/0, sourced by cc02.394f.0000

R2#

*Mar  1 00:14:27.167: %IP-4-DUPADDR: Duplicate address 192.168.1.2 on FastEthernet0/0, sourced by cc02.394f.0000


虽然网络设备无法像Windows或者Macos弹框告警,可是经过日志提示一样能够达到一样的目的,让网络运维人员做出修改。


Cisco IOS经过免费ARP检测到地址冲突以后,解决的方法相对"暴力",例如,R2和R3直接会持续发送免费ARP(reply广播包),直到地址冲突问题被解决掉。能够经过wireshark数据包观察=>


wKiom1mrp-vRbJ4BAAvWpSTDdDs906.png


此时再观察R1上面的ARP表,关于192.168.1.2这个地址的映射信息:

R1#show arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  192.168.1.1             -   cc00.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.3             6   cc02.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.2             0   cc02.394f.0000  ARPA   FastEthernet0/0

R1#show arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  192.168.1.1             -   cc00.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.3             6   cc02.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.2             0   cc01.394f.0000  ARPA   FastEthernet0/0

R1#show arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  192.168.1.1             -   cc00.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.3             6   cc02.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.2             0   cc02.394f.0000  ARPA   FastEthernet0/0

R1#show arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  192.168.1.1             -   cc00.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.3             6   cc02.394f.0000  ARPA   FastEthernet0/0

Internet  192.168.1.2             0   cc01.394f.0000  ARPA   FastEthernet0/0

……

 

能够看到,因为免费ARP是一种广播的形式,因此R1同处一个局域网能够收到,而且ARP信息被不断修改,一会将192.168.1.2指向R2的MAC地址,一会指向R3的MAC地址

 

这个过程会一种持续下去,直到地址作了修改,这里咱们将R3的IP地址从新修改成192.168.1.3,以后网络便恢复了平静。


总结:经过这个虚拟网络,咱们构造了路由器地址冲突的环境,一样验证了免费ARP可以检测IP地址冲突的功能,固然,这里跟Windows和Macos的处理方式有一些差异,例如Cisco路由器检测到免费ARP以后,会保持很是高频率的"互怼"过程,而后不断报出错日志,督促管理员感受修改地址。除此以外,数据包结构也有差别,Windows和Macos是"本身问本身"的arp request包,而cisco ios是"本身答本身"的arp reply包




4、总结:地址冲突了怎么办?

①对于普通用户而言,当看到电脑弹框告警说明地址有冲突时,在不懂技术的状况下,能够尝试重启家里的路由器,这样能够从新为局域网的电脑分配地址;


②路由器不是本身的,接入的是租房网络、校园网络等第三方网络,当看到电脑弹框告警说明地址有冲突时而且没法管理路由器的时候,能够尝试手工修改本机电脑的IP地址,不管是Windows仍是Macos,直接进入网卡设置修改便可,怎么作手工修改呢?例如电脑地址是192.168.1.1,提示冲突的话,那么能够在原有数字的基础上递增1或者10,直到显示不冲突,例如修改成192.168.1.二、192.168.1.3或者192.168.1.十一、192.168.1.21,以此类推..... (这种方法未必能保证解决,可是在管理员介入以前,至少算是一种解决方案);


③对于专业的网络和安全运维人员而言,当看到网络地址冲突,则须要考虑本身的DHCP部署、IP地址规划有没有问题,或者找出网络中是否有"捣蛋鬼"本身私设IP之类的;


 ④经过本章节的学习,咱们掌握了免费ARP不一样网络环境下的实现,例如"本身问本身"和"本身答本身"两种广播包方式,也了解了电脑和网络设备的不一样机制。




【相关推荐】

《GNS3从入门到精通》(精品免费视频教程)

《TCP/IP协议栈视频教程》(精品免费视频教程)

《Wireshark协议分析从入门到精通》(精品免费视频教程,20万人都在看)

新浪微博:@拼客学院陈鑫杰

微信公众号:拼客院长陈鑫杰(搜索"pingsec"便可关注,大牛们都在看)

相关文章
相关标签/搜索