3. 工业协议概览

工业协议是工业控制系统中设备之间交换数据的“语言”。在流量识别与异常检测中,协议决定了报文结构、通信模式、端口特征、功能码语义以及可观测的异常边界。本节从协议的基本特征与差异出发,建立一张可用于后续识别与检测的“协议地图”。

一、核心原理:工业协议的三层差异

理解工业协议,不能只记端口号。真正影响流量识别与异常检测的差异,主要体现在三个层面:

  • 通信模型:是主从轮询、生产者/消费者,还是客户端/服务器?这决定了流量是否具有周期性、请求响应配对是否严格。
  • 承载方式:是串行链路、现场总线,还是直接跑在以太网/TCP/IP之上?这决定了能否用抓包工具直接分析。
  • 数据语义:是面向寄存器地址、面向对象,还是面向信息模型?这决定了异常检测能否理解“读的是什么、写的是什么”。

下面这张图把七种协议按“承载方式—通信模型—典型端口/链路”放在同一张关系图中,便于快速定位它们的差异。

工业协议承载与通信模型关系图 串行 / 现场总线 Modbus RTU/ASCII RS-485 / RS-232,主从轮询 Profibus DP/PA RS-485,主站/从站令牌+轮询 DNP3 串行 主站/从站,支持主动上报 IEC 60870-5-101 串行,远动通信 工业以太网 / TCP-IP Modbus TCP TCP 502,MBAP 头 + PDU Profinet 以太网实时,RT/IRT,IO 控制器/设备 EtherNet/IP TCP 44818 + UDP 2222,CIP 对象模型 IEC 60870-5-104 TCP 2404,APCI + ASDU 跨平台 / 信息模型 OPC UA TCP 4840,二进制/HTTPS,发布订阅 地址空间 + 信息模型 + 安全通道 DNP3 TCP/UDP TCP/UDP 20000,主站/从站 支持事件缓冲、时间同步、主动上报 共同关注点 功能码/对象/信息模型语义 轮询周期、超时、重传、广播 读写操作与状态变化

二、七种协议的基本特征与差异

下表从承载、端口/链路、通信模型、数据语义和典型场景五个维度进行对比,是后续流量识别规则设计的基础。

协议 承载/端口 通信模型 数据语义 典型场景
Modbus RTU/TCP RS-485 / TCP 502 主从轮询,请求-响应 线圈、离散输入、保持寄存器、输入寄存器 PLC、仪表、变频器
Profibus DP RS-485,现场总线 主站/从站,令牌+轮询 输入/输出字节、诊断报文 工厂自动化、远程 IO
Profinet 工业以太网,RT/IRT IO 控制器/设备,周期实时 IO 数据、报警、诊断 运动控制、产线实时通信
EtherNet/IP TCP 44818 / UDP 2222 客户端/服务器 + 生产者/消费者 CIP 对象、类/实例/属性 罗克韦尔 PLC、离散制造
OPC UA TCP 4840 / HTTPS 客户端/服务器 + 发布订阅 地址空间、信息模型、方法调用 跨厂商数据集成、MES/SCADA
DNP3 TCP/UDP 20000 / 串行 主站/从站,支持主动上报 二进制输入、模拟量、事件、时间同步 电力配网、水利、油气
IEC 60870-5-104 TCP 2404 主站/从站,平衡/非平衡 ASDU 类型标识、信息对象地址 电网调度、变电站远动

三、方法流程:从协议特征到识别规则

在流量识别中,建议按以下流程把协议知识转化为可执行的检测规则:

  1. 端口初筛:先按 TCP/UDP 端口建立候选集,如 502、44818、2222、4840、20000、2404。
  2. 报文结构确认:检查协议头特征,例如 Modbus TCP 的 MBAP 头、EtherNet/IP 的 encapsulation header、IEC 104 的 APCI 起始字节 0x68。
  3. 通信模式建模:统计请求-响应配对、轮询周期、广播比例、主从角色分布。
  4. 语义级检测:结合功能码、对象地址、信息对象地址,识别异常读写、越权访问和非法功能码。

识别要点:端口只是入口,协议头才是身份,通信模式才是行为。三者结合才能降低误报。

四、案例/场景:一次 Modbus 异常写操作排查

某产线监控系统发现 PLC 保持寄存器被批量改写。流量侧观察到以下特征:

源 IP: 10.10.20.55
目的 IP: 10.10.20.10
目的端口: 502
功能码: 0x10 (写多个保持寄存器)
起始地址: 40001
寄存器数量: 120
轮询周期: 原为 1000ms,突变为 50ms

分析:正常 HMI 轮询周期稳定在 1s,且写操作极少。该流量在短时间内高频写入大量寄存器,且源 IP 不属于已知工程师站。结合 Modbus 主从模型,可判定为异常写操作。若仅按端口 502 识别,会把它当作正常 Modbus 流量;只有结合功能码、地址范围和周期变化,才能触发告警。

五、误区与复盘

  • 误区一:端口等于协议。Modbus 可跑在 502,也可跑在非标端口;Profinet 不依赖固定 TCP 端口,而是以太网类型 0x8892。
  • 误区二:所有协议都是请求-响应。Profinet RT、EtherNet/IP 的 UDP 隐式报文、OPC UA 发布订阅、DNP3 主动上报都不严格遵循一问一答。
  • 误区三:忽略串行协议。Profibus、Modbus RTU、IEC 101 不经过 TCP/IP,需要串行抓包或协议网关镜像,不能只依赖交换机流量。
  • 误区四:只看协议头,不看语义。功能码 0x10 本身合法,但“谁在什么时间写多少寄存器”才是异常检测的关键。

复盘建议:为每种协议建立“端口/链路—报文头—通信模式—语义字段”四元组清单,并持续用真实流量校准。协议概览不是背诵,而是为后续识别与检测提供可落地的特征字典。