封装层次先分清
S7 通信通常承载于面向连接的传输之上,抓包时会看到两层封装:外层负责连接与分段,内层才是 S7 协议数据单元。解析的第一步是确认连接建立过程是否正常,因为连接异常会让后续所有分析失去意义。第二步识别 S7 报文类型:作业类报文由客户端发起、应答类由服务端返回、带数据应答承载读取结果,用户数据类报文常用于诊断与附加信息。第三步看具体操作对象:读区域还是写区域、访问的是输入输出还是数据块、以及错误类别与错误码。需要注意较新的设备可能使用带加密的协议变体,这类流量在抓包中只能看到连接与数据量,无法解析内容。
基本信息
| 承载与端口 | 通常建立在端口 102 之上,但同一端口也可能承载其他面向连接的协议,需结合封装结构判断 |
|---|---|
| 封装层次 | 外层负责连接建立与分段,内层为 S7 协议数据单元 |
| 报文类型 | 作业、应答、带数据应答、用户数据,分别对应请求、确认、读取结果与诊断信息 |
| 常见操作 | 读取区域、写入区域、诊断与状态查询、程序块相关操作 |
| 错误信息 | 错误类别与错误码字段用于判断失败原因 |
| 协议变体 | 较新设备可能使用加密变体,抓包可见性下降,需结合工程侧记录 |
异常识别要点
- 非工程客户端发起写操作:写类操作应当只来自工程师站或受控主站
- 异常时段的程序与配置操作:在非检修时段出现下载或参数修改需要解释
- 连接行为异常:短时间内大量连接建立与断开,可能是扫描或程序异常重试
- 异常响应聚集:同一设备大量错误应答,说明请求与设备状态不匹配
- 访问区域越界:读写范围超出设计约定,可能是配置错误也可能是异常指令
- 非常规功能请求:出现平时不存在的操作类型,需要与设备能力对照确认
- 与变更记录不符:把已批准的工程调试与真正的异常区分开
现象与排查方向
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 连接建立失败 | 地址、端口或网络可达性问题 | 核对连接参数与网络路径 |
| 大量错误应答 | 地址映射错误或设备侧状态异常 | 核对访问区域与设备诊断信息 |
| 出现写入操作 | 正常工程操作或异常访问 | 结合变更记录与操作留痕判断 |
| 连接频繁重建 | 程序重试、网络抖动或资源不足 | 检查网络质量与设备资源占用 |
| 无法解析内容 | 使用了加密的协议变体 | 从工程侧记录与设备配置侧分析 |
| 通信周期紊乱 | 负载增加或链路质量问题 | 结合链路丢包与设备资源一起看 |
判断写类操作是否异常,关键不在操作本身而在来源与时机:同一台工程师站在检修窗口内下载程序属于正常工作,来自清单外地址的写入才是需要追查的对象。因此做这类分析前,先把客户端清单、地址分配与变更记录准备好。