超级详细的ARP协议工作原理(全)

这是我参与更文挑战的第4天,活动详情查看: 更文挑战

ARP的工作过程

我们可以看到,PC1第一次去pingPC2的时候会出现一个丢包,这是因为PC1的ARP表中没有关于PC2的映射,现在仅仅知道了IP地址,不知道这个IP地址对应的MAC地址是多少,所以这一个丢包表示正在进行ARP的请求。

ARP代理

代理ARP(Proxy-arp)的原理就是当出现跨网段的ARP请求时,路由器将自己的MAC返回给发送ARP广播请求发送者,实现MAC地址代理(善意的欺骗),最终使得主机能够通信。

接下来给大家划重点:

第一,代理ARP仅仅是正常ARP的一个拓展使用,是可选项而不是必要项;

第二:代理ARP有特定的应用场景,与网关/路由的设置有直接关系:当电脑没有网关/路由功能时,并且需要跨网站通信时,则会触发代理ARP。换句话说,如果有网关/路由功能,则不需要代理ARP;

第三:正常环境下,当用户接入网络时,都会通过DHCP协议或手工配置的方式得到IP和网关信息(所以不需要代理ARP)

首先我们把PC的ip routing关闭去模拟一台没有网关的电脑,在没有默认网关的情况下,PC1会通过ARP去请求目的IP地址的MAC地址

路由器默认的ARP代理是开启的,所以路由器会把自己端口的MAC地址回应给PC1,让PC1将数据包发给自己去处理

在另外一边,PC2也需要通过ARP去获取目的IP地址的MAC地址,这个时候路由器同样进行了ARP的代理

假如路由器关闭了ARP的代理会怎么样呢?

R1(config)#int g0/0R1(config-if)#no ip proxy-arp
复制代码

这个时候就可以看到PC1一直发ARP去请求目的IP地址的MAC地址,但是苦苦等不到回应,因为是跨网段通信,所以这个广播域内没有主机去回应这个ARP请求,路由器也没有进行代理

这种情况实在没有网关的情况下,如果在有网关的情况下,PC1会直接请求网关的MAC 地址,然后把数据包发给网关去处理

PC1(config)#ip default-gateway 172.16.1.1
复制代码

免费ARP

Gratuitous ARP,被翻译为『免费ARP』也被称为『无故ARP』,用于检测局域网内的IP地址冲突,在一定程度上能够给用户和网络运维人员提供帮助。相比『免费』这个翻译,『无故』这个词其实会更加好理解:”在没有人问自己的情况下,无缘无故自问自答”。

在电脑设置完IP地址后都会在局域网中发送免费ARP的广播包,如果没有得到回应包则表示这个IP地址可用

如果我们把PC3的IP地址改成和PC2一样会发生什么呢?

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

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

PC2上的日志:

*Dec 11 14:14:35.275: %IP-4-DUPADDR: Duplicate address 172.16.1.2 on FastEthernet0/0, sourced by ca03.2e38.0000
复制代码

PC3上的日志:

*Dec 11 14:14:56.411: %IP-4-DUPADDR: Duplicate address 172.16.1.2 on FastEthernet0/0, sourced by ca02.2964.0000
复制代码

我们在PC1上去ping这个冲突的IP地址

我们可以看到了有两个ARP的回应包

可以看到ICMP包的目的MAC地址一直在变,

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

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

由于我们使用路由器模拟PC机,Cisco IOS通过免费ARP检测到地址冲突之后,解决的方法相对”暴力”,例如,PC2和PC3直接会持续发送免费ARP(reply广播包),直到地址冲突问题被解决掉。可以通过wireshark数据包观察

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享