这是我参与更文挑战的第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数据包观察