故障点找出来了,那么到底是什么原因造成的呢?网卡损坏?网线损坏?服务器感染了病毒?我经验告诉我,服务器感染病毒的可能性比较大。于是,我找来了这个服务器的管理员,询问他服务器上安装了什么?他告诉我安装了sql server &cc。我问题sql server是否安装过补丁,他告诉我没有。我还清晰的记得2004年1月份那场由于sqlserver病毒造成的网络灾难。难道它又回来了吗?我要求他安装sql server的补丁才允许接入公司网络。
然而,正在这个时候,部长跑上来告诉我,现在有个特别奇怪的现象。很多人ping 不通服务器,需要使用tracert命令跟踪路由,在很多跳失效后,才会到达目的地址。然后其他人再ping服务器就会没有问题了。我在故障刚刚恢复的时候,也发现了这个问题,因为,我总是ping不通二号楼&一号楼的楼层交换机。但是,只要我通过三层交换机内部ping通一次,那么在客户机上也就可以ping通目标交换机。交换机的转发原理我是懂得一些的。当我们通过交换机交换数据的时候,交换机先到自己的mac地址表中查找下一跳主机对应的mac地址在那个端口,然后把它转发过去。通过这个现象看,三层交换机学习mac地址有问题。我打电话给华为,他们的工程师告诉我,应该在网络上抓包看看,是不是有arp攻击。
这个时候,我想到了那个sql服务器。
如果真是sqlserver病毒的话,公司有很多开发人员都安装了sql或者msde,会不会有其他人感染病毒呢。我决定使用sniffer 监控公司的网络。当我启动sniffer后,立即就找到一台计算机在不停的发送异常的广播。正好是中午就餐时间,我通过网络强制这台计算机关机。就在这台计算机关机的一瞬间,三层交换机的学习mac的能力就恢复了。就是它的原因。
吃过午饭,我们检查了那台计算机,发现他也安装了sql Server,并且没有安装补丁。更新完补丁后,故障没有再次出现。