p冲突导致无法上网问题复现
目录
2.1. pc插拔网线后情况: 2
2.2. 环境中存在pc的ip冲突的情况: 4
2.3. 虚拟机的模拟 5
2.4. 交换机的arp模式修改为learn all后的模拟 8
某天下午,接同事反馈,自己的pc192.168.205.66无法上网,要求解决。
在路由器上进行抓包发现,该ip不停的收到syn+ack,而没有响应消息ack和syn消息发出?
核心交换机上查看该ip对应的mac地址如下:
感觉公司的pc里没有以000C打头的mac地址,这一般都安装vmware虚拟机的地址?下去到她工位上查看。
发现她的pc的mac是4CCC6AC85003,采用的dhcp获取ip地址,查看arp缓存中的网关mac正常存在,奇怪为什么不能上网,执行arp –d后,ping网关,ping www.sina.com发现上网正常。
判断存在ip冲突,导致交换机把回包发给了错误的mac地址上,正常测pc收不到syn+ack,导致不停的发出syn消息,路由器删就能看到不停的收到外网的syn+ack消息(看不到syn和ack可能是路由器的跟踪没有做好,没有跟踪出来对应的包)。arp –d后,pc重新去获取网关的mac地址,交换机的arp缓存会被更新,回包正常了,上网就正常了。
查看00oc2998002e在哪个交换机的端口上?结果如下:
发现是另外一位同事的ip地址,去他的pc上验证,发现这个另个mac都是他的设备上的,一个是pc,一个是虚拟机。
把女同事的ip改成192.168.206.33的固定ip后,反馈上网没有问题。
问题解决后,考虑到pc有根据arp广播消息来避免ip冲突的机制,决定复现一下问题,一种情况是pc和pc的ip冲突的情况。一种是pc和虚拟机发生ip冲突的情况。
2.1. pc插拔网线后情况:
第一种情况下,先看网线插拔后,pc的arp发出情况?
综上所述:当发生dhcp获取ip或者插拔网线后,windows操作系统会用确定的ip进行ip冲突的检测,发出三次广播的arp包,询问环境中是否存在相同的ip地址?没有收到reply,再次发出免费的arp包(源ip和目的ip相同)的arp请求包,声明自己使用这个ip地址。没有冲突后,会发出确定网关mac地址的arp广播包,获取到网关mac后,就周期性进入网关是否在线的arp单播探查消息,来确定网关在线。
三次检测ip冲突的包的特征:
特征是源ip为空,表示自身ip还没有确定使用。
免费arp包的特征:
2.2. 环境中存在pc的ip冲突的情况:
已知环境中一台pc的ip为192.168.205.240,把另一台pc的ip由192.168.205.201改成205.240,抓包查看arp的情况和pc的动作?
可以看到,询问是否存在冲突,已有ip主机回复自己mac地址,得到存在冲突后,网卡ip被置为169.254.xx.xx的无效ip地址,要求网关mac,网关不响应,此时,系统托盘的网卡标志位受限。
此时,pc会用169.254的ip请求网关的mac地址,由于不是正常的mac地址,网关交换机不响应,pc此时无法获取网关mac,导致无法组包发出,因此无法上网。
2.3. 虚拟机的模拟
首先模拟虚拟机启动后,arp的发送情况,已知pc为192.168.207.246,虚拟机vm安装的centos7.0的eth0虚拟ip为192.168.207.245。
发现虚拟机没有windows系统的三次探查是否有ip冲突,并将ip置为169.154网段的操作,仅仅发一个免费arp消息,已用的pc收到此消息,会报ip冲突,但不会改变ip为不可用ip,交换机收到此免费的arp消息,会改写arp缓存表。如下图:
查发现此时pc弹出ip冲突的提示框,网卡标志变成internet标志,看抓包发现pc不停的发出单播arp请求包,见下图:
但交换机的arp表项始终不变?
查询arp的模式,如下图:
查询资料得知:learn reply only是严格的学习arp表项设置,arp表项的更新只在交换机自身发出arp的request消息得到响应后,而不响应更改收到arp请求消息,查看在交换机的镜像包里,没有交换机发出的arp查询消息,但虚拟机发出的免费arp消息,交换机默认是学习enable态的,就是说,交换机收到虚拟机发出的免费arp包后,会把arp表项更改为虚拟机的mac地址,而不理睬pc发出单播或者广播arp消息(当arp表里存在于对应的ip地址时)。
此时pc的发出的业务消息,交换机的回包均发给了虚拟机,导致pc收不到回包,所以无法上网。
模拟执行arp -d,仍然不能改变arp缓存表里的数据。那天同事的pc执行arp -d后能够上网,可能是arp缓冲时间到了,交换机给pc发来arp请求消息,pc应答了,或者此时虚拟机被关掉了才出现这样的现象。当时没有找到问题机子,所以没有确认。
免费arp包的特征见下图:
2.4. 交换机的arp模式修改为learn all后的模拟
把交换机的arp模式修改为learn-all后,发现pc的网口标志没有受限,镜像交换机对应端口的包,过滤arp消息,发现随着pc和虚拟机发出的arp请求和免费arp,交换机的arp随着改变。
镜像抓包中看到pc发出的单播探查arp请求
交换机里查询arp表项,发现是pc的mac地址
虚拟机发出arp消息
交换机里更新arp表项
生存时间被改写
3. 知识点:
A. windows系统插拔网线,dhcp获取到ip后或者网卡设置了静态ip,都会发三次arp广播消息,用于探查环境中是否存在ip冲突?不存在的,发出免费arp消息,存在,系统会把ip置为169.254网段的不可用ip,避免ip冲突。
B. 虚拟机之类的linux操作系统,网卡激活后,只发免费的arp通知自己使用了这个ip地址,而没有防止ip冲突的机制。
C. Pc网卡激活后,先广播arp请求来获取网关的mac地址,然后启动单播arp请求消息进行主动探查相邻网关是否在线,而不是等待arp的老化时间到后,再发arp广播消息。当两次探查失败,就会清除网关的arp表项,重新获取。
D. 交换机的arp mode设置为arp learn reply,就是严格的学习arp表项,只创建和更新自己发出的arp请求得到的应答消息里的mac地址和ip对照关系。而对pc发出的arp请求不予理睬,但收到免费的arp消息会更新arp表项,导致arp表发生变化。
Learn all模式是学习所有的arp消息,即受到arp广播,单播,免费的arp消息均生成或更新arp表项。