[不吐不快]关于一次离奇的网络故障。

2016-12-17 02:32:05 +08:00
 falseen

这件事呢,本来是不想发到网上的,因为我是个特立独行的人,不到万不得已我是绝不会到网上求助的。但这一次,我是真的没办法了,虽然事情已经过去了很久,并且故障已经得到了解决。但是对于故障的根本原因,我仍然是百思不得其解。所以思来想去还是决定发到这里,看看大家有没有什么高见。

事情是这样的:我是做网络维护的,前一段时间接到了一个单。有个客户的网络出了点故障,让我过去看看。我去到了以后发现他们整个局域网都瘫痪了。网络结构也不是很复杂,都是一些傻瓜型的二层交换机。我注意到交换机的灯闪的非常慢,说明此时的数据量是比较小的。稍微了解了一下情况之后我开始接上电脑 ping 网关,不通, ping 同网段的其他设备,也不通。于是接上电脑开始抓包,这时令我震惊的一幕出现了---我惊奇的发现我竟然收到了网关的回应包( ICMP ),但是为什么之前 ping 的时候却显示超时呢 ?我又 ping 了一次,还是显示超时。这时我真的有点不敢相信自己的眼睛了,难道我见鬼了吗?我盯着网关返回来的包看了很久很久,然后突然想到会不会是 IP 包的校验码不对?因为之前就一直怀疑可能存在 ARP 攻击,所以 IP 包校验码错误也不是没有可能的。正当我准备用 python 重新计算校验码之际,我突然瞥到了 wirshark 中 ICMP 的一个值:[Response time: 4018.850 ms]。靠,搞了半天原来是这个原因。原来真的是“超时”了啊!

但是,为什么会超时呢?同一个局域网内怎么会超时呢 ?为什么网关过了那么久才回应?是网关的问题?还是交换机的问题?抑或是真如我所料出现了 ARP 欺骗?于是我开始慢慢排查原因,在检查了 MAC 地址和分析了大量的数据包之后,我基本上排除了 ARP 欺骗。数据包看起来没有任何异常。在用尽了各种办法之后,我开始用最原始的排除法来找原因---分别拔下交换机上的网线,从而找到是哪台设备出了问题。他们大概有四台二层交换机,每台交换机上都接了很多设备。于是我开始拔掉这些二层交换机上的主网线,在拔掉一台交换机上的主网线之后,网络立马恢复了正常,插上,网络又立马瘫痪。反复多次之后基本上确定了就是这台设备的问题。为了节省时间,我直接换了一台新的交换机。但是换上之后问题还是存在,说明不是交换机的问题。于是开始依次拔掉这台交换机上的网线,可能是我的运气不太好,在拔掉最后一根网线的时候,网络才恢复了正常。然后我反复的拔掉网线又插上网线,最终找到了两台有问题的 PC 。只要把这两台 PC 的网线一插上,网络就整个瘫痪。一拔掉,网络立马就恢复。

我以为找到了原因,剩下的就好办了。但事实完全相反,真正麻烦的才刚刚开始。我一开始怀疑是病毒,所以首先是在故障 PC 进行了抓包,没有发现任何异常。然后用 U 盘进入 PE ,把 IP 设置成原来的,发现一切正常,网络没有出现问题。于是开始在 PE 下杀毒,花了很长时间,终于杀完了,但重启之后问题依旧。这时候我开始头疼了,杀毒无效,那就只能重装系统了。但此时我发现了一个更加令人震惊的事实,我在另外一台故障 PC 上进入 win7 PE 之后问题竟然又出现了(之前那台进的是 03PE ,故障 PC 也是 win7 系统)!!这个时候我是有点懵逼的,不知道该怎么办。我不敢相信在 PE 中也会出现这种情况,难道是 PE 的问题?虽然心中有疑惑,但此时我已经没有别的选择了,只能硬着头皮重装系统。祈祷重装之后一切都恢复正常。但结果总是事与愿违。。。

花了很长时间把两台 PC 都重装了系统之后,我以为问题会得到解决,但结果却是。。。。问题依旧!!还是只要接上网线,整个网络就瘫痪。这个时候我是崩溃的,习惯性的打开 wireshark 抓包,依旧没有任何异常!这该如何是好啊,我看了一下时间,已经下午五点多了,人家也快到下班时间了。从上午 10 点多到下午五点多,搞了这么久也没搞好。我一直认为是在网络方面的经验还是挺丰富的,没想到竟然被这个问题给难倒了。唉。想了一下,时间也不早了,我要尽快做出决定。思索了一番之后,我决定做最后一次尝试---更新网卡驱动。说实话,在试之前我是没有抱太大希望的,纯粹是死马当活马医。正所谓“有心栽花花不开,无心插柳柳成荫”,我万万没想到的是,在更新了网卡驱动之后奇迹出现了---网络竟然不再瘫痪了!问题解决了!我做梦也没想到竟然是网卡驱动的问题!这让我有点欣喜若狂,总算是可以交差了。于是就这样问题得到了圆满的解决,在跟客户说明了问题和解决过程之后我就走了。

本来这件事到这里基本上就结束了,但偏偏我是个喜欢刨根问底的人。虽然那天的问题解决了,但对于问题的根本原因,我仍然是百思不得其解。我想不明白一张网卡是如何影响整个网络的,更想不明白如何在数据包没有任何异常的情况下影响整个网络。即便是网卡有问题,也不可能说影响整个网络,更何况网卡本身没有太大问题,只是驱动可能存在一些 BUG 。但是一个有问题的网卡驱动又是如何影响整个网络的呢?那天晚上回去之后,我开始分析白天保存的数据包,上网查了很多资料,也问了很多朋友。但始终没有得到满意的答案。有朋友说,可能是在物理层影响的,所以抓不到异常的包。但是在我看来,如果是物理上的影响的话,应该只会影响当前的交换机,不会影响跟它相连的其它交换机才对。但实际情况却是,出现问题的时候,其他相邻的交换机也瘫痪了。真是百思不得其解啊。

以上就是这次离奇的网络故障的全部经过,为了各位能完全明白当时的情况,写的稍微有点啰嗦,请大家见谅。我本身很少在网上发帖,这次发帖主要是想听听大家的意见,毕竟一个人的思维是有限的。希望大家能帮我分析一下导致这次网络故障的根本原因,感激不尽!

补充:暂时不知道怎么发图,稍后再把图补上吧。

9107 次点击
所在节点    DevOps
55 条回复
xmh51
2016-12-17 10:18:05 +08:00
目测广播风暴 好多人都是这样,一台电脑瘫痪整个局域网。
http://www.clxp.net.cn/thread-1993-1-1.html
a87150
2016-12-17 10:44:19 +08:00
勉強になります
liyvhg
2016-12-17 11:12:09 +08:00
@xmh51 但是交换机灯闪烁不频繁
zjqzxc
2016-12-17 11:17:06 +08:00
在学校的时候处理过一次广播风暴,因为二层交换机有管理功能,直接看端口流量发现异常了,封端口问题解决。(后续我没再跟进);
当时连入网络的机器有 10MB/s 的下行流量(百兆网),抓包后发现大量广播包,很容易判定。如果说楼主抓包未见异常,交换机灯闪烁比较慢,估计不是广播风暴。
不知道楼主有没有保存当时抓包的结果呢

想了半天,认为可能的(非根本)原因是路由上的交换机芯片超载或者是路由器超载了,诱因可能是那两台电脑向网关发送了异常的包导致交换机(指的是路由器上的交换机芯片或者路由器本身)死循环了。
根本原因猜不到,对数据链路层没研究过,不知道有没有一些特殊的包可以骗交换机进入死循环。。如果楼主抓包时间足够的话,可能已经抓到了可能是罪魁祸首的包。
wemore
2016-12-17 12:04:30 +08:00
借楼主帖问个问题,我的腾讯云 centos6 ping 显示 unknown host 。 ping ip 没问题, dns 也没改过,网卡服务重启,机子重启也不行。在安全组也是全放行的,防火墙啥的应该没有开,各位有啥解决方法吗_(:з」∠)_
redsonic
2016-12-17 12:46:53 +08:00
我怎么感觉是那些傻瓜型的二层交换机的锅。 回想上大学的那会儿,宿舍两个网口,有 SB 把两个口直接连起来了,先后导致楼栋里的两台华为交换机烧了,后来换思科的就没事了。难道华为的连防风暴的功能都没有,现在想想那会儿华为还是皮包公司也就说的通。
redsonic
2016-12-17 12:59:26 +08:00
关于网络设备的缺陷我又想到一个, intel ping of death ,就是发一些 icmp 包就能让 intel 网卡内部重启:
http://www.kriskinc.com/intel-pod
这个我经历过,从此认识到硬件开源的重要性。
ndd200
2016-12-17 13:15:54 +08:00
十几年前。我碰到过和楼主类似的经历。
某一批板载网卡,会乱发包导致整个交换机断网。
每次只要重启交换机就能好,而且那批机器数量很大。当时也很难想到是一整批网卡的问题,单台拿出来用怎么都是正常的。
所以问题最终定位花了一个多月。最后,换了更好的交换机再没故障过。
500miles
2016-12-17 13:40:36 +08:00
@longear 确实是这样.. 像看惊悚恐怖小说一样
MasterMonkey
2016-12-17 15:15:34 +08:00
看楼主这么难过,我分享下我的经历吧,大概十年前我们机房的电脑总是启动不了,搞不明白,后来发现不联网线就可以,启动后联网就可以。

后来不服气,接上网络软件分析下,果然有奇怪的包,再后来,没继续关注。

我对开机之前电脑基于网络进行的操作只局限于 Wake on lan ,但是,显然还有更多可能,应该有规范说明,或者网卡自己的特殊指令,这也说明了商业的产品里面有多少后门你根本不知道。
iCyMind
2016-12-17 15:54:56 +08:00
文笔真棒,各种疑问句抛出悬念,引人入胜,楼主没少看走进科学吧
guanaco
2016-12-17 16:24:39 +08:00
mac 问题
falseen
2016-12-17 16:35:33 +08:00
@zjqzxc 你说的也有道理。确实有可能是故障 PC 向交换机发了一个特殊的包,导致交换机进入死循环。如果是这样的话,那这种发包频率肯定很频繁。因为实际情况是只要插上网线网络就瘫痪,拔掉,网络就恢复。我结合这个情况查找了故障 PC 的发包记录,发现最频繁的是 DNS 请求,其次是一些软件的请求。但是,这其中并没有异常包。

另外需要说明的是,故障出现的时候,不止是网关 ping 不同,其他同网段的 PC 也 ping 不通。

通过抓包来看,故障 PC 偶尔是可以正常通信的(其他是 PC 完全无法通信,当然 UDP 包是可以收到的,因为 UDP 不存在超时),但无法 ping 通网关,也无法打开网页(当然,所有对外的通信都是经过网关的, MAC 地址是一致的)。如图:

falseen
2016-12-17 17:10:20 +08:00
@iCyMind 嘿嘿,我是悬疑爱好者,看过很多悬疑电影和悬疑小说。
yekailee
2016-12-17 17:30:52 +08:00
检查 mac 地址没有,是不是网卡 mac 地址和网关一样的?
D3EP
2016-12-17 17:40:40 +08:00
可能和 mac 地址有关?
datocp
2016-12-17 18:55:50 +08:00
遇到过 2 次广播风暴,
一次是人家不懂,一根网络接在交换机 2 个口上。
第二次是教学软件 netop school 产生的广播包冲击主路由,
最终解决方法,由于 vlan5 里所有的设备都是用静态网关就直接把所有的广播,多播全部丢弃
insmod ebtables
insmod ebtable_filter
insmod ebt_pkttype
iptables -I INPUT -i vlan5 -m pkttype --pkt-type broadcast -j DROP
iptables -I INPUT -i vlan5 -m pkttype --pkt-type multicast -j DROP
#iptables -I INPUT -i vlan5 -m pkttype --pkt-type unicast -j DROP 该包不能丢弃,不然网络访问有问题。
如果知道是哪个端口的话也可以这样 1900 是 windows 的 upnp 1971 netop school 10001uap 广播包
iptables -I INPUT -p udp -m multiport --dport 1900,1971,10001 -d 255.255.255.255 -j REJECT --reject-with icmp-proto-unreachable
raptor
2016-12-17 19:24:03 +08:00
这种问题我的经验一般是硬件问题,可能是因为网卡发生了某种硬件故障,而原来的驱动无法处理,换了驱动只是暂时解决,可能未来某个时候这种故障还会扩大。
alect
2016-12-17 21:12:56 +08:00
我之前的一个台式机也是出现过这个问题,插上网线后发现网卡的流量包突增,新装系统也不行,网络几分钟就瘫痪了,然后插上无线网卡上网没问题
cat9life
2016-12-17 21:20:58 +08:00
交换机要是有 snmp 的话 建议监控交换机的 cpu 内存使用率。细节分析估计就麻烦了,真得去反编调试分析驱动了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/328213

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX