有刚出差50天同事找来说他第一天上班,pc无法上网,让给看看哪的问题?问他网络物理状态,说没问题,就是网卡标志那里有黄色的感叹号。
无法上网可能的原因:
1、网卡连接存在物理故障
2、无法获得网关mac地址,arp -a查询不到网关mac地址,上网包无法发出。可能是dhcp获取ip失败,或者存在ip冲突,或者网卡的广播域不对,和网关不在同一广播域里。
3、dns失败,无法解析目的域名。
说他是设置的固定ip,让arp -a查一下网关192.168.209.1的mac地址,反馈没有查到,怀疑核心交换机没有响应pc的arp请求,公司交换机出过这样的问题,询问pc的mac地址,回答是下图:
决定去交换机上查一下mac地址和arp表。已知组网如下:
组网中209交换机是当二层接入交换机用,起vlan209,核心光交换机3048上起vlan209的svi子接口地址192.168.209.1作为209交换机下设备的网关。
发现在交换机的22口有这个mac地址,清一下mac地址,然后在核心网交换机去查找对应mac地址。
发现核心交换机的10G口上有这个mac地址,证明二层广播通道是正常的,排除pc的网线和网关不在同一广播域里的可能性。但却在arp缓存里找不到这个mac地址,如下图:
确定交换机的6口是209交换机的对接接口,为了确定问题,镜像一下1/1/6口的消息看看:
wireshark做预过滤,过滤ether hw D8CB.8A29.26FC。
发现这个mac地址用169.254.163.76的ip地址发出获取网关192.168.205.1的mac地址的arp消息,但没有应答消息。明显这属于网关mac地址获取失败导致的故障。
169.254.0.0/16是链路本地地址是互联网协议地址仅用于本地网络(链接)或主机连接到的点对点连接的段内的通信。路由器不转发与链路本地地址的数据包。链路本地地址可以由管理员手动或由操作系统程序来分配。它们大多使用无状态地址自动分配。在IPv4中,它们通常仅出现在当地址配置的没有外部,状态机制存在,如动态主机配置协议(DHCP失败),或者当另一个初级配置方法未能实现(ip冲突)。
网卡ip变成169.254.x.x,一种情况是是pc的网卡启动或者dhcp续租成功时,检测到环境中存在ip冲突,操作系统为保护起见分配的保留ip地址。此地址不是合法的地址,因此无法获取的网关的mac地址,无法实现上网等操作。路由器不响应这类消息的arp请求,这个地址无法通过路由器。
用169.254.xxx.xxx的地址发起的arp请求,网关是不处理的,所以pc无法获取网关192.168.209.1的mac地址,网关的arp表里也没有对应mac地址的arp缓存出现。他设置的是固定ip才这样的,应该是ip冲突所致,让他改成自动获取试试?
看抓包如下:
发现,dhcp过程正常通过,获得ip是192.168.209.97,核心交换机响应arp请求:
问题解决。
pc设置固定ip或者dhcp时,网卡激活i,或者dhcp获得ip后,会发三次arp探查消息,看广播域里是否有同样的ip,来检测ip冲突。特征是arp的源ip和目的mac为0。没有应答情况下,发出免费的arp消息,在这个抓包里查找一下,如下图:
免费arp的特征如下图:
免费arp的特征是源和目的ip是一样的,目的mac地址为0。
用自己的pc192.168.205.201的固定ip验证一下:
查看系统中有192.168.205.5,mac地址是 0030.18CC.7B40的ip在线,设置成这个ip抓包看一下。
设置后发现,系统托盘的网卡标志变成:
查看网络状态:
抓包里的查看过滤自身mac地址 eth.addr== 44:37:e6:8d:95:27 && arp
发现第一次进行arp探查时,就有 0030.18CC.7B40的设备发出响应。确定冲突了,此ip不能用,系统分配了169.254.57.43的ip地址,用这个ip发出同样的arp探查消息。
现在想来,一开始同事的截图里就有169.254.163.76的ip地址,而且他说的配置的固定ip192.168.209.78在核心交换机查询是其他mac地址,这样就能直接判断出是ip冲突问题,抓包走了弯路。
模拟网卡设置为自动获取的处理方式
已知,本机mac地址 44-37-E6-8D-95-27自动获取的ip地址是192.168.205.57,就把广播域里另一台笔记本设置此ip地址,本机改成自动获取后抓包如下:
dhcp后获得192.168.205.27,arp探查后,发现环境中有冲突,这是临时使用169.254.57.45的本地链路地址,pc发出dhcp的decline消息,告诉服务器此ip不可用,然后重新发起dhcp,获得192.168.205.55的ip地址。同样,三次探查没有发现冲突,使用此地址。
总结:1、无法获取网关的arp,可能是pc采用本地链路地址169.254.xx.xx,可能环境中存在ip冲突或者dhcp获得到的地址环境中有冲突。
2、对dhcp服务器,有的在offer前,会向广播域里发出arp查找消息,看是否有冲突,不冲突才给出,有的直接在ip池里找一个没使用的发出offer。pc收到这个ip,发起检查发现冲突了,客户端会发decline消息拒绝此ip,然后重新发起dhcp流程,直到获得可用ip地址。
3、pc获得网卡上电,会用自己的ip地址发出三次arp探查消息,没有冲突发出免费arp消息。有冲突,使用本地链路地址169.254.xx.xx,继续同样的流程。
4、网关不处理169.254.xx.xx的ip地址的arp消息。
5、若网卡本地连接详细信息出现两个自动配置ipv4地址,而且其中一项是169.254打头,说明ip冲突了。
6、若设备发起dhcp消息,而环境中无应答,dhcp超时失败,系统也会分配一个169.254打头的ip地址,同样发起最多三次冲突检测,但无法获取到网关mac地址。
7、dhcp服务器分配一个ip地址给一个mac地址后,会建立一个ip和mac地址的自动绑定关系,在租期内用户关机或者掉线后,没有超过租期再次接入网络,服务器会若检查到此ip没有被占用,会再次分配这个ip给这个mac地址设备使用。这个对应关系在服务器重启或服务终止后失效。当服务器收到该mac发出release消息或者再次discover消息后,绑定关系取消。超过租期没有续租的,绑定关系取消。