• 全部
  • 经验案例
  • 典型配置
  • 技术公告
  • FAQ
  • 漏洞说明
  • 全部
  • 全部
  • 大数据引擎
  • 知了引擎
产品线
搜索
取消
案例类型
发布者
是否解决
是否官方
时间
搜索引擎
匹配模式
高级搜索

免费ARP实现IPv4地址冲突检测原理分析

2018-04-02 发表
  • 0关注
  • 17收藏 16562浏览
冯哲 四段
粉丝:2人 关注:0人

当网络中存在IP地址冲突时,会引发网络路由振荡、网络业务或者流量中断等故障,这些故障会对用户的业务造成很大的影响。为了尽量避免由于错误组网或者用户错误配置造成IP地址冲突的情况发生,用户往往希望设备能够通过一种简单的手段,自主检测网络中是否存在IP地址冲突,及时提示用户冲突的根源,以帮助用户尽快消除冲突配置,切实减少对业务的影响。

本文主要对免费ARP实现IPv4地址冲突检测的原理进行简单介绍,并通过测试抓包对PC终端(Windows 10系统)以及H3C网络设备(Comware V7平台交换机/路由器/防火墙)实现情况做进一步阐述。

免费ARP原理

 

Gratuitous ARP,被翻译为“免费ARP”,也被称为“无故ARP”。相比“免费”这个翻译,“无故”这个更易理解:“在没有人问自己的情况下,无缘无故自问自答”,即免费ARP是设备发送的一个发送端IP地址和目标IP地址都是本设备IP地址的ARP request/reply报文:

设备通过对外发送免费ARP报文来实现以下功能:

1、设备的硬件地址可能发生了变化(比如修改了MAC地址,或者换了网卡)。ARP request可以让LAN(或者VLAN)中所有设备更新ARP request发送者的IPMAC的映射关系。

2、确定当前网络中是否有其他设备的IP和自己的IP是一样的。如果这个ARP request发出后,没有收到ARP reply,说明LAN(或者VLAN)中没有设备和自己IP地址一样。如果收到了ARP reply,说明当前LAN(或者VLAN)有设备使用了和本机一样的IP;这个时候系统通常会提醒用户IP地址冲突,并且会周期性的广播发送免费ARP应答报文,直到冲突解除。

故将免费ARP用于检测局域网内的IP地址冲突,能够在一定程度上能够给用户和网络运维人员提供帮助。

但免费ARP检测IP地址冲突也会带来一些网络问题。如下图所示,局域网内有PC-1PC-2PC-3三台设备,PC-1的地址为192.168.1.1PC-2PC-3的地址均为192.168.1.2

按照免费ARP的实现机制,上面的PC-2PC-3检测到彼此的IP地址冲突后,会一直不停地对外发送免费ARP;与此同时,同一局域网的其他主机例如PC-1则会根据这两个免费ARP信息不断的修改本地ARP表,192.168.1.2一会映射到MAC-2,一会映射到MAC-3,直到一方修改了地址;免费ARP这种机制会对整个局域网中的设备造成持续的影响,不利于局域网的稳定性。因此RFC也提出了新的地址冲突检测机制。

 

地址冲突检测ACDAddress Conflict Detection)原理

针对局域网地址冲突问题以及免费ARP解决方案的缺陷,RFC 5227提出了一个新的机制:ACDAddress Conflict Detection)。ACD定义了ARP probeARP announcement两种ARP包(都是ARP request,只是填充内容不太一样)

ARP probe:用于检测IP地址冲突,发送端IP填充为0,填充为0是为了避免对其他设备的ARP cache造成污染(ARP probe报文不会使局域网中的其他设备刷新ARP映射关系,若已经有设备正在使用目标IP地址了,其通信不会受影响),目标IP是候选IP地址(即本设备想要使用的IP地址)。从“自己问自己”的角度看,ARP probe也算是免费ARP

 

ARP announcement:用于“昭示天下”(LAN/VLAN)本设备要使用某个IP地址了,它其实就是一个免费ARP request,即发送端IP地址和目标IP地址都是本设备IP地址的ARP request报文。它会让LAN(VLAN)中所有主机都更新自己的ARP映射关系,将IP地址映射到发送者的MAC地址。

ACD检测流程

1、网卡/端口启动时(或者从睡眠状态恢复,或者链接建立时)会发送一个ARP probe。(为了避免多个网卡/端口同时启动同时发ARP probe造成拥塞,有一个拥塞避免策略,不会立刻发送ARP probe,会等待一个随机时间再发送,单个网卡的多个probe也不会连续发送,会有间隔时间)。

2、发送设备可能收到ARP reply或者ARP probe,如果收到了ARP reply,说明候选IP地址已经有设备在用了。如果收到了一个目标IP地址为候选IPARP probe,说明另外一个设备也同时想要使用该候选IP地址。这两种情况下,两个设备都会提醒用户出现了IP地址冲突。然后进行地址冲突处理。

3 如果上述两种ARP包都没有收到,说明候选IP地址可用。设备发送一个ARP announcement,告诉其他设备这个候选IP已被使用了,这个免费ARP request报文会让LANVLAN)中其他设备更新ARP表项。

ACD地址冲突处理

当检测到IP地址冲突后,RFC5527提供了三种可选的解决机制:

1、直接放弃使用该IP地址;

2、发送一个ARP announcement来进行IP地址“守卫”,如果冲突仍然继续存在,放弃使用这个IP

3、无视冲突,继续使用这个IP

至此,我们简单了解了免费ARP检测地址冲突的原理,下面将通过实验,直观地了解下免费ARP如何实现IP地址冲突检测。

 

Windows系统主机的地址冲突检测实现情况

通过实验抓包,结合上文对地址冲突检测原理的说明,我们对Windows系统主机的地址冲突检测机制做进一步阐述,如下图组网,PC-1PC-2均连接至SW上,且两台PC机属于同一VLAN,初始时两台PC机均未配置IP地址:

1PC-1安装了Windows 10操作系统,手工给PC-1配置IP地址100.1.1.1/24,然后再SWPort-1接口上镜像抓包,通过Wireshark可以观察到如下ARP报文:

 

PC-1配置好地址后,发送了三个探测100.1.1.1地址的ARP probe报文(三个报文间隔1s),因均未收到网络中其他设备对该探测报文的ARP reply,故此时PC机确认100.1.1.1地址可用,向网络中发布了ARP announcement报文宣告对100.1.1.1地址的使用。

由此可以看出Windows系统ACD的实现与RFC5227中所规定的流程一致,下面继续观察当地址冲突时,Windows系统对地址冲突的处理机制。

2、将上述网络恢复初始状态后,先给PC-2手工配置地址100.1.1.1/24,然后再给PC-1手工配置地址100.1.1.1/24,同时在SW上的Port-1镜像抓包,通过Wireshark观察有如下ARP交互:

PC-1配置好地址后,同样发送了100.1.1.1地址的ARP probe报文,但因此时网络中PC-2已配置了地址100.1.1.1,故PC-2收到这个ARP probe后会给PC-1回应一个ARP reply,通知PC-1自己才是地址100.1.1.1的拥有者。

PC-1收到PC-2ARP reply后,因在PC-1上该地址非DHCP动态获取,PC-1直接放弃使用地址100.1.1.1,用Microsoft的保留网段169.254.X.X/16自动生成了一个地址169.254.162.184,然后对这个地址再次重复前文所述的探测过程:三个ARP probe无回应后发送免费ARP宣告占用地址。

由此可以看出Windows系统ACD检测到地址冲突后,对地址冲突处理机制的实现与RFC5227中所提供的“机制一”一致,即:直接放弃对冲突地址的使用。

 

H3C交换机/路由器/防火墙的地址冲突检测实现情况

通过实验抓包,结合上文对地址冲突检测原理的说明,我们对H3C交换机/路由器/防火墙的地址冲突检测机制做进一步阐述,如下图组网,SW-1SW-2互联,给SW-2Port-2配置地址100.1.1.1,然后给SW-1Port-1也配置地址100.1.1.1,在SW-1Port-1上镜像抓包,通过Wireshark观察有如下ARP交互:

SW-1配置地址100.1.1.1后,直接向网络中发送了一个免费ARP request,宣告自己使用了100.1.1.1这个地址,此时SW-2立即回应了一个ARP reply报文,宣告自己已经占用了地址100.1.1.1,与此同时SW-2也向网络中发送了一个免费ARP request,宣告自己使用了100.1.1.1,而SW-1也立即回应了一个ARP reply宣告自己是地址100.1.1.1的使用者,此时SW-1SW-2完成了一轮对地址100.1.1.1的“守卫”,并分别通过日志向用户告警地址冲突,然后继续下一轮“守卫”,直至用户修改一端的地址消除冲突。通过抓包及告警日志可以看出两轮“守卫”的时间间隔是6秒。

使用H3C的路由器/防火墙重复上述实验,实验结果一致;由此可以看出,H3C的交换机/路由器/防火墙直接使用免费ARP进行地址冲突检测,而不是RFC 5227中新的ACD机制;H3C的设备在检测地址冲突后,不会放弃对冲突地址的使用,并且周期性发送免费ARP进行地址守卫,直至人工消除地址冲突,这种处理机制与RFC 5227中提供的“机制三”是一致的,这种方式在网络设备与终端设备对接时,有利于网络整体稳定性。

 

H3C设备地址冲突告警机制

在上文中,我们对PC等终端设备、H3C网络设备地址冲突机制进行了实验及分析,在地址冲突检测过程中共涉及到3ARP报文:ARP probeARP announcement以及ARP reply(发送者IP与标记IP一致),那么H3C设备对这三种ARP报文是如何处理的呢?

通过以下的实验进行分析:

一、设备“不开启源IP地址冲突提示功能”(默认情况)

如下拓扑所示,将SW与测试仪器互联的地址配置为100.1.1.1/24,然后用测试仪器向SW分别持续打入3种报文。

1、 打入ARP probe

 

可以观察到当SW持续收到地址100.1.1.1ARP probe报文后,会不断以地址100.1.1.1的免费ARP进行回应,但不会产生地址冲突的告警日志。

2、 打入ARP announcement(免费ARP request

 

可以观察到当SW持续收到地址100.1.1.1的免费ARP request报文后,会不断以地址100.1.1.1的免费ARP进行回应,但不会产生地址冲突的告警日志。

3、打入ARP reply(发送者IP与标记IP均为100.1.1.1

 

 

可以观察到当SW持续收到地址100.1.1.1的免费ARP reply报文后,每隔6s会回应一个免费ARP request报文,检测冲突是否消除,而且会生成地址冲突的告警日志。

二、设备“开启源IP地址冲突提示功能”

重复上述三个打流过程,此时设备收到地址100.1.1.1的三种免费ARP报文后,每隔6s都会回应一个免费ARP request报文,检测冲突是否消除,而且会生成地址的冲突的告警日志。

1PC/服务器等终端设备通常采用RFC 5227中新的ACD检测流程,当检测到地址冲突后,其处理方式与RFC 5227中提供的“机制一”一致,即直接放弃对冲突地址的使用。在修改终端地址、新终端接入局域网等应用场景下,如果产生地址冲突,该方式最有利于网络的稳定性。

2H3C网络设备直接采用免费ARP实现地址冲突检测,而非RFC 5227中新的ACD检测流程。当检测到地址冲突时,其处理方式与RFC 5227中提供的“机制三”一致,即继续占用冲突地址。在修改终端地址、新终端接入局域网等应用场景下,如果产生地址冲突,网络设备比终端设备更“强势”,终端设备更容易放弃对冲突地址的使用,这样有利于网络的整体稳定性。但在网络设备间地址冲突的情况下,该机制对整网稳定性会造成持续影响。

3、当H3C网络设备关闭源IP地址冲突提示功能时(默认情况),仅在收到免费ARP reply后,每隔6s会回应一个免费ARP request报文,检测冲突是否消除,而且会生成地址冲突的告警日志;当开启源IP地址冲突提示功能时,只要收到ARP报文的目标IP与本地地址一致,每隔6s会回应一个免费ARP request报文,检测冲突是否消除,而且会生成地址冲突的告警日志。

该案例对您是否有帮助:

您的评价:1

若您有关于案例的建议,请反馈:

作者在2019-06-10对此案例进行了修订
4 个评论
安然 知了小白
粉丝:0人 关注:0人

有个小疑惑,ARP announcement 和 普通 Gratuitous ARP 有什么不同呢?

Wireshark 软件是如何区分出这两种帧?

粉丝:10人 关注:7人

学习了


粉丝:0人 关注:0人

这个不错

编辑评论

举报

×

侵犯我的权益 >
对根叔知了社区有害的内容 >
辱骂、歧视、挑衅等(不友善)

侵犯我的权益

×

泄露了我的隐私 >
侵犯了我企业的权益 >
抄袭了我的内容 >
诽谤我 >
辱骂、歧视、挑衅等(不友善)
骚扰我

泄露了我的隐私

×

您好,当您发现根叔知了上有泄漏您隐私的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您认为哪些内容泄露了您的隐私?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)

侵犯了我企业的权益

×

您好,当您发现根叔知了上有关于您企业的造谣与诽谤、商业侵权等内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到 pub.zhiliao@h3c.com 邮箱,我们会在审核后尽快给您答复。
  • 1. 您举报的内容是什么?(请在邮件中列出您举报的内容和链接地址)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
  • 3. 是哪家企业?(营业执照,单位登记证明等证件)
  • 4. 您与该企业的关系是?(您是企业法人或被授权人,需提供企业委托授权书)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

抄袭了我的内容

×

原文链接或出处

诽谤我

×

您好,当您发现根叔知了上有诽谤您的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您举报的内容以及侵犯了您什么权益?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

对根叔知了社区有害的内容

×

垃圾广告信息
色情、暴力、血腥等违反法律法规的内容
政治敏感
不规范转载 >
辱骂、歧视、挑衅等(不友善)
骚扰我
诱导投票

不规范转载

×

举报说明

提出建议

    +

亲~登录后才可以操作哦!

确定

亲~检测到您登陆的账号未在http://hclhub.h3c.com进行注册

注册后可访问此模块

跳转hclhub

你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作