Modbus TCP 与 502 端口
502 是 Modbus TCP 的端口,属于工业控制领域使用最广的现场协议。报文结构极简:事务号、功能码与数据区,好处是各类设备都能互通,代价是协议本身没有认证也没有加密。任何能连上 502 的人都可以读取寄存器,具备写功能码时还能直接改写 PLC 的输出状态。因此它的安全边界不来自协议,而来自网络分区与工业防火墙的白名单策略。
基本信息
| 服务 | Modbus TCP(mbap 端口) |
|---|---|
| 协议 | TCP(UDP 亦有实现) |
| 规范 | Modbus Application Protocol 系列规范 |
| 适用领域 | 工业自动化、电力、楼宇与能源监控 |
| 常见设备 | PLC、电表、变频器、采集网关 |
| 安全等级 | OT 网络内,与 IT 网络隔离 |
典型使用场景
- 上位机采集:组态软件周期性读取 PLC 与仪表的实时数据
- SCADA 联调:控制器之间按约定寄存器地址交换状态
- 能源计量:电表与水表数据经网关汇聚到能源管理平台
- 设备调试:现场用采集工具核对寄存器数值与设备手册是否对应
- 数据上云:由采集网关把现场数据转换为上层协议再上传
读取寄存器验证连通
读取寄存器验证连通
modpoll -m tcp -a 1 -r 0 -c 4 192.0.2.10 # 从机地址 1,从偏移 0 起读 4 个保持寄存器
modpoll -m tcp -a 1 -r 0 -c 4 -t 1 192.0.2.10 # 换用其他寄存器类型读取
nc -vz 192.0.2.10 502 # 网络层连通性
sudo tcpdump -ni eth0 'tcp port 502' -c 20 # 抓包观察请求与响应常用功能码
| 功能码 | 作用 | 性质 |
|---|---|---|
| 1 与 2 | 读线圈与读离散输入 | 只读状态量 |
| 3 与 4 | 读保持寄存器与读输入寄存器 | 读数值量 |
| 5 与 6 | 写单个线圈或单个寄存器 | 可改变设备状态 |
| 15 与 16 | 批量写多个线圈或寄存器 | 影响范围更大,需重点管控 |
常见故障与定位
| 现象 | 可能原因 | 处置方向 |
|---|---|---|
| 读不到值 | 从机地址或寄存器偏移与手册不符 | 对照设备手册核对地址基准 |
| 时通时断 | 现场链路或网关负载过高 | 检查链路质量与采集周期 |
| 写操作无效果 | 设备侧写保护或权限限制 | 确认设备是否允许远程写入 |
| 整个网段受影响 | 把 OT 端口暴露给了不受控来源 | 按区域做白名单策略 |
把 502 直接暴露到公网等于把 PLC 控制权悬在网上;OT 网络必须与办公网隔离,跨区访问走工业防火墙按地址与功能码白名单放行。
地址基准容易出错:不同设备与工具对寄存器地址采用从零计数或从一计数,读到的数值与手册不一致时先核对基准,再怀疑设备故障。
IT 思维迁移要谨慎:传统防火墙按端口放行在 OT 环境远远不够,应根据功能码与寄存器范围限制可写操作,并保留完整的采集与写入审计记录。