一、 故障描述

1.1 网络节点描述

1.1.1 PLC网络节点描述

某电厂本次辅网整合包括,脱硫控制系统,除灰控制系统,电除尘控制系统,烟气调质控制系统和水网控制系统,水网由三期凝结水,中水,三期补水,二期凝结水,二期补水,二期循环水加药,二期凝结水加药,制氢站和工业废水,水网PI网,水网服务器等系统组成,水网部分PLC为冗余单网控制系统(中水,三期补水),部分为单机双网控制系统(二期补水,工业废水,制氢站,二期凝结水加药,二期循环水加药),部分为单机单网控制系统(二期精处理),三期精处理为冗余双网控制系统;剩余的三期精处理为双机双网冗余控制系统。

1.1.2 上位机网络节点描述

目前上位机包括化学水控制室1台(192.168.0.16),工业废水1台(192.168.0.25),制氢站2台(192.168.0.40 / 41),中水控制室1台(192.168.0.213/214 双网卡配置)二期精处理1台(192.168.0.28)三期精处理1台(192.168.0.150)报警服务器2台(192.168.0.1/3)虚拟操作员站4台(192.168.0.130/134/132/133)二期PI网Server 1台(192.168.0.6)三期PI网Server 1台(192.168.0.131)PI网Client (192.168.0.100)820B虚拟工程师站(192.168.0.8)840B虚拟工程师站(192.168.0.7);为了实现水网整个系统全双网备用,部分上位机设置有静态路由。

1.2 网络故障描述

网络整合完毕发现水网莫名奇妙丢数据,画面有时候会停顿1分钟甚至更长,最初发现是在中水,最后发现整个网络里都有丢包,不光水网画面中断,甚至连数据库同步有时也会失败。经检查,各网络节点到交换机连接均正常。

192.168.0.11 ping 1062数据包,丢包23

192.168.0.210 ping 1062数据包,丢包 14

192.168.0.160 ping 1062数据包,丢包 11

192.168.0.21 ping 1500数据包,丢包23

1.3 目前ping包结果

网络丢包测试方法(拆解工业网络神秘丢包事件)(1)

二、 原因分析

2.1 外部原因

2.1.1 物理链路

最初分析是否光纤熔接不好,衰减大造成,但是如果光纤质量不好或者使用过程中受损造成衰减过大,这样虽然发光端发送信号正常,但在接收端会因衰减过大造成收不到对端的信号或者受到信号太弱,无法正常通信,造成丢包严重甚至中断通信。对于本系统没有发生很严重的丢包,只是偶尔丢包,因此光纤衰减物理链路排除了。

网线的问题,如果是网线的问题,则有问题的节点应该直接是不通,不会偶尔中断,因此网线故障排除。

2.1.2 网络病毒

网络是否中毒,但是考虑到生产网和外部网络连接唯一的通道是PI网,但是和PI网之间是网闸隔离,因此中病毒的可能性不大;

2.2 内部网络干扰

主要考虑网络中是否有大量广播数据包,其他非工业网络数据包,以及是否有拒绝服务等大量数据请求。另外网络中是否有IP冲突,带着这些问题我们准备了Wireshark和NPM网络分析软件对整个网络进行分析。

三、 网络抓包分析

3.1 Wireshark 工具介绍

Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

3.2 Wireshark 位置确定

经过讨论大家选定在840B的工程师站内安装WireShark,因为工程师站可以运行iFix,RsLinx,也和网络中每一个节点可以互通。在这里可以捕获到工程师站和PLC交换的正常数据包,也可以捕获到整个网络中的广播数据包。

3.3 部分Wireshark截图

3.3.1 iFix和PLC正常通讯的数据包

网络丢包测试方法(拆解工业网络神秘丢包事件)(2)

图中192.168.1.10 和 192.168.1.11属于正常的Modbus TCP通讯,但是由于iFix设置了两个PLC驱动,所以一直在网络中发送广播数据包查找谁是192.168.1.12.如果没有192.168.1.12做出响应则iFix就会一直发广播包查询,因此我们首先按着这个思路去寻找网络中的广播数据包。

网络丢包测试方法(拆解工业网络神秘丢包事件)(3)

上图为iFix和AB PLC的正常通讯数据包,可以看到192.168.0.151和192.168.0.201,192.168.0.210均为AB PLC,192.168.0.232为iFix上位机。

3.3.2 部分异常数据包

1. 广播数据包

网络丢包测试方法(拆解工业网络神秘丢包事件)(4)

正常来讲网络里不会有这么多的广播数据包,这是不到1分钟的数据流,因此我们对这些ARP逐项分析;

网络丢包测试方法(拆解工业网络神秘丢包事件)(5)

192.168.0.213从192.168.0.64开始查找,64-65-66-67-68-……

为什么会挨个查找,我们首先想到了RSLinx。

192.168.0.213 一直在查找192.168.0.22(中水一直在找废水PLC)

中水为什么会访问废水?

网络丢包测试方法(拆解工业网络神秘丢包事件)(6)

192.168.1.133从 192.168.0.215开始查找,215-216-217-218-….

同样是挨个查询,是否也有Rslinx?

网络丢包测试方法(拆解工业网络神秘丢包事件)(7)

192.168.0.16(A网) 一直在查找 192.168.0.200(B网)

A网的上位机为什么会去访问B网的PLC?

网络丢包测试方法(拆解工业网络神秘丢包事件)(8)

192.168.0.6(原840B WiSCADA1) 一直在访问192.168.0.234(原820B工程师站)

报警服务器为什么会访问820工程师站?

2.非工业数据包

网络丢包测试方法(拆解工业网络神秘丢包事件)(9)

上位机为什么会有baidu.com? 163.com?xunlei.com?

四、 故障排除

4.1 中水上位机异常数据包处理(192.168.0.213)

1. 第三节获取到的信息我们首先去检查192.168.0.213这台上位机,确实发现RSLinx下面有一个ETH_1驱动,而且下面挂着三个AB PLC分别是192.168.0.201,192.168.0.151,192.168.0.210,由于RsLinx如果某个驱动有中断,会从子网的第1个地址逐渐扫描到254,因此我们把驱动分成了ETH-1,ETH-2,ETH-3,每个驱动下面连接一个PLC,扫描地址固定为本IP地址。

2. 本机iFix的MBE驱动确实有192.168.0.22,但是192.168.0.22属于水网B网,因此192.168.0.213(A网)是任何时候都不会访问到192.168.0.22的,所以一直在网A网网络里发送广播数据包;因为A、B网是完全独立的,但是经过和运行人员沟通,中水确实要看工业废水相关数据,所以我们把iFix MBE驱动修改为192.168.0.21(A网)。

3、中水一个上位机安装两块网卡,IP地址分别是192.168.0.213和192.168.0.214,而且两块网卡同时连在一个非网管交换机上;交换机上同时有AB的冗余PLC;这样的架构极易形成环网,而非网管交换机没有处理环网的能力,因此此结构肯定有问题,由于就地中水的工控机仅仅用于巡检,所以把192.168.0.214网卡禁用。由于操作系统是Windows 2000 SP4,因此没有启用网卡Team。

网络丢包测试方法(拆解工业网络神秘丢包事件)(10)

系统里如果形成环网是网络丢包发生的主要原因,建议如果一个单机PLC两块网卡,或者一台上位机两块网卡,这种情况下,两块网卡一定要在不同的子网。

4.2 三期2号操作员站异常数据包处理(192.168.0.133)

经过检查,发现确实本机有RsLinx,因此也将驱动改为三个独立驱动,同时将192.168.0.130/134/132其他三台操作员站按同样方法处理,另外所有类似操作员站做同样的处理。

4.3 化学水控制室异常数据包处理(192.168.0.16)

经过和工程师沟通,让工程师画出的化学水控制室结构图如下:

经过分析192.168.0.16这台上位机是永远访问不到192.168.0.200这个PLC网卡的,但是为什么会发送针对192.168.0.200的ARP广播包,我们打开iFix 发现iFix和192.168.0.200设计的是OPC,OPC Server由Rslinx来完成,打开RSLinx发现驱动里由192.168.0.200,由于192.168.0.16永远访问不到192.168.0.200,因此将该驱动从RSLinx里删除。

网络丢包测试方法(拆解工业网络神秘丢包事件)(11)

4.4 840B WiSCADA-1异常数据包处理(192.168.0.6)

经过数据报文分析,WiSCADA-1一直在访问820B私有云内的工程师站,回到控制室执行arp –a命令发现192.168.0.6对应的MAC地址和WireShark捕获到的报文里的MAC地址不一致

Wireshark里的MAC地址为MicroSoft_01_14_B9, 但是WiSCADA-1里通过arp -a 指令获取到的MAC地址为00-15-5d-01-1e-f1;

网络丢包测试方法(拆解工业网络神秘丢包事件)(12)

由此我们怀疑网络里有IP地址冲突发生了,我们把WiSCADA-1的192.168.0.6网卡禁用,继续ping 192.168.0.6,发现网络还是通的,经查找该网卡为水网PI网服务器的A网IP地址。由此我们把WiSCADA和工程师站IP地址更新如下:

上位名称

A网

B网

WiSCADA-1

192.168.0.1

192.168.0.2

WiSCADA-4

192.168.0.3

192.168.0.4

1:1 NAT网关

192.168.0.5

PI网服务器

192.168.0.6

840B私有云工程师站

192.168.0.7

820B私有云工程师站

192.168.0.8

4.5 制氢站异常数据包处理(192.168.0.40)

根据报文分析本机经常性发出一些非工控异常数据包,捕获到的有baidu.com,163.com,QQ.com和xunlei.com; 进到制氢站操作员站发现系统内安装了手机助手,豌豆荚,百度安全防护,金山毒霸,金山词典,QQ,迅雷,腾讯下载等非工业用软件,挨个将其卸载。

通过以上5个步骤处理完,截至目前ping一万个数据包结果如下:

网络丢包测试方法(拆解工业网络神秘丢包事件)(13)

五、 经验总结

1、网络设计之初IP地址要统一规划,易于查询。

2、如果设计双网,两个网络必须属于不同子网

3、工业控制系统操作系统禁止采用网络上的Ghost系统恢复,因为内部含有很多插件;务必使用正版操作系统。

4、上位机设计如果网络中没有的IP地址,尽量在驱动中删除。

5、一台计算机如果配置两块网卡,一定设计为两个子网,或者将两块网卡成组合设计。

6、一套单独PLC控制系统如果配置两块网卡,网卡设计为不同子网。

7、如果实在没办法修改现场设备IP地址,通过交换机VLAN进行划分,VLAN也不能完全解决问题,考虑增加1:1 NAT网络地址转换设备。

附一、处理后网络性能分析结果:

网络丢包测试方法(拆解工业网络神秘丢包事件)(14)

附二、处理后PLC网络性能分析结果

网络丢包测试方法(拆解工业网络神秘丢包事件)(15)

,