从零玩转IEC104协议Wireshark抓包实战全解析在电力自动化系统中IEC104协议扮演着至关重要的角色但枯燥的协议文档往往让初学者望而生畏。本文将带你通过Wireshark抓包实战以可视化方式深入理解IEC104协议的核心机制。不同于传统理论讲解我们将通过真实报文分析揭示平衡传输与遥控过程的奥秘让抽象协议变得触手可及。1. 环境准备与Wireshark配置1.1 搭建实验环境要开始IEC104协议分析之旅首先需要准备以下环境组件Wireshark 3.6推荐使用最新稳定版确保完整支持IEC104协议解析IEC104模拟器可选择开源工具如qtscada或商业模拟软件网络环境建议使用虚拟网络适配器隔离测试环境# 在Linux环境下安装Wireshark sudo apt update sudo apt install wireshark sudo usermod -aG wireshark $USER提示生产环境抓包需谨慎建议在隔离的测试网络中进行避免影响实际业务1.2 Wireshark关键配置Wireshark默认已包含IEC104协议解析器但需要优化配置以获得最佳分析体验进入Edit → Preferences → Protocols搜索IEC 60870-5-104协议设置关键参数TCP端口默认2404根据实际环境调整解析选项启用所有ASDU类型解析显示过滤器预设iec60870_104基础过滤器表Wireshark IEC104解析器关键配置项配置项推荐值说明TCP Port2404协议默认端口ReassemblyEnabled确保TCP流重组Validate ChecksumDisabled测试环境可关闭Heuristic解析Enabled增强协议识别2. 平衡传输与非平衡传输实战对比2.1 报文交互模式解析通过Wireshark抓包可以清晰观察到两种传输模式的本质差异非平衡传输控制站(Client)单方面发起请求受控站(Server)仅作响应报文序列呈现严格的一问一答模式平衡传输双方均可主动发起通信受控站可主动上报变化数据报文交互呈现网状结构# 平衡传输典型过滤表达式 (iec60870_104.cot 3) || (iec60870_104.cot 5)2.2 关键字段深度解读在Wireshark中IEC104报文的关键字段以树形结构展示需要特别关注TypeID标识ASDU类型决定报文功能COT(传输原因)揭示报文发起的根本原因IOA(信息对象地址)定位具体的数据点表常见COT值及其含义值含义典型场景3自发传输数据变化上报5请求响应控制站查询结果6激活确认命令执行确认20总召唤响应初始化数据同步3. 总召唤(GI)流程全解析3.1 总召唤交互过程总召唤是IEC104协议中最核心的初始化过程通过Wireshark可清晰观察到完整交互控制站发送C_IC_NA_1报文(TypeID100)受控站返回M_EI_NA_1报文(TypeID70)确认受控站开始分批上传所有数据控制站接收完毕后发送确认帧# 总召唤过程过滤表达式 iec60870_104.type_id 100 || iec60870_104.type_id 703.2 报文序列图还原通过Wireshark的Follow TCP Stream功能可以导出完整的交互时序控制站 - 受控站: [C_IC_NA_1] 总召唤启动(QOI20) 受控站 - 控制站: [M_EI_NA_1] 初始化确认 受控站 - 控制站: [M_ME_NA_1] 测量值1 受控站 - 控制站: [M_ME_NA_1] 测量值2 ... 控制站 - 受控站: [S-Frame] 确认接收注意实际报文交互可能因设备实现差异而略有不同4. 遥控命令的报文级实现4.1 选控命令双阶段解析选控命令(Select and Execute)的安全机制在报文中体现得淋漓尽致选择阶段控制站发送C_SC_NA_1(TypeID45)报文SCO字段的S/E位置1表示选择受控站返回肯定/否定确认执行阶段控制站再次发送C_SC_NA_1SCO字段的S/E位置0表示执行受控站返回最终操作结果表选控命令报文关键字段变化阶段TypeIDS/E位COT说明选择4516预操作请求确认45-7受控站响应执行4506实际执行命令终确认45-7最终结果4.2 直控命令单步实现直控命令的报文交互更为简洁控制站直接发送执行命令受控站返回操作结果整个过程仅需两个报文交互# 直控命令过滤表达式 iec60870_104.type_id 45 iec60870_104.cot 65. 高级分析与故障排查5.1 常见异常报文解析通过Wireshark可以快速识别各类通信异常序列号不连续可能丢包或乱序长时间无响应TCP连接或设备故障异常COT值协议实现不符合规范表典型异常及解决方案异常现象可能原因解决方案重复I帧确认超时调整t1参数连接频繁中断KeepAlive失效检查TESTFR交互数据不更新非平衡模式配置错误改为平衡模式5.2 自定义Wireshark显示列优化Wireshark显示界面可大幅提升分析效率右键点击报文列表标题栏选择Column Preferences添加关键字段为显示列TypeIDCOTIOA值(如SCO、DCO)# 保存显示配置命令 tshark -G column-formats iec104.columns6. 实战案例时钟同步过程分析IEC104的时钟同步机制保证了全系统时间统一其报文交互特别值得关注控制站发送C_CS_NA_1(TypeID103)报文包含CP56Time2a时间格式受控站返回带时标的确认报文整个过程通常在3个报文内完成# 时钟同步过滤表达式 iec60870_104.type_id 103在分析某变电站项目时曾发现由于时钟同步间隔设置过长(默认24小时)导致事件顺序记录(SOE)时间偏差。通过Wireshark抓包确认后将同步间隔调整为1小时问题得到彻底解决。7. 性能优化与最佳实践基于大量抓包分析经验总结出以下IEC104优化建议平衡模式始终优先使用平衡传输模式合理设置t0-t3参数根据网络延迟调整过滤策略受控站应合理配置变化阈值缓冲区管理控制站需优化接收缓冲区表推荐通信参数设置参数推荐值说明t030s连接建立超时t115s发送超时t210s确认超时t320s测试帧间隔k12未确认I帧最大数w8接收窗口大小通过持续分析真实网络流量发现当k值设置为w的1.5倍时能在吞吐量和可靠性间取得最佳平衡。这一发现已在实际项目中得到验证显著提升了通信效率。