ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

IEC61850 通信栈拆解:MMS、GOOSE、SMV 与 SMB 的联系与区别

IEC61850 通信栈拆解:MMS、GOOSE、SMV 与 SMB 的联系与区别 1. 从一次站控层抓包说起MMS、GOOSE、SMV 到底谁在说话如果你在变电站自动化现场抓过一次包大概率会看到这样的画面同一个网口上既有跑在 TCP 之上的 MMS 报文又有直接压在以太网帧上的 GOOSE 和 SMV还有零星几个 SMB 文件传输会话。它们都叫 IEC61850但行为完全不一样。IEC61850 通信栈拆解的核心就是搞清楚 MMS、GOOSE、SMV 与 SMB 的联系与区别MMS 负责站控层的读写、报告、控制等核心 ACSI 服务走 TCP/IP可靠但实时性一般GOOSE 负责快速事件与跳闸类报文跳过 TCP/IP 直接映射到 MAC 层靠组播和重传保证实时SMV 负责采样值同样是链路层组播周期固定、流量大SMB 则是站控层文件传输的载体用来搬录波、配置这类大块数据。这篇文章面向电力自动化工程师从通信栈分层视角把四者的报文类型、传输机制和典型场景讲清楚并给出一份协议对照表、Wireshark 抓包过滤配置以及一个可跟做的 GOOSE 订阅验证动作帮你快速区分三类报文的触发条件与实时性差异。我试过在 61850 站里用一台普通笔记本镜像口抓包最容易踩的坑就是只过滤 tcp.port102结果 GOOSE 和 SMV 一条都看不到因为它们根本不在 TCP/IP 栈里。所以第一步不是写代码而是先建立分层认知。2. 通信栈分层为什么 GOOSE 和 SMV 不走 TCP/IP2.1 IEC61850 的报文分类与映射关系IEC61850 把站内通信报文按实时性和数据量分成几类不同类别映射到不同的协议栈。理解这张映射表比死记协议名有用得多。报文类型典型协议传输层/网络层实时性典型场景类型1/1A 快速与跳闸GOOSE直接映射 MAC无 TCP/IP毫秒级保护跳闸、联闭锁类型4 原始数据SMVIEC61850-9-2直接映射 MAC组播微秒到毫秒级采样值传输类型2/3 中低速MMSTCP/IP十毫秒到秒级遥测遥信、控制、报告类型5 文件传输SMB / FTPTCP/IP秒级不敏感录波、配置下装类型6 时间同步SNTPUDP/IP毫秒级对时可以看到MMS 和 SMB 都跑在 TCP/IP 之上属于普通报文GOOSE 和 SMV 则跳过 TCP/IP直接映射到以太网链路层属于快速报文。这就是它们最本质的区别。2.2 MMS 与 ASCI 的两层结构MMS 位于 ISO 七层模型的应用层为了便于理解可以拆成两层ASCI 层定义系统有哪些逻辑设备、逻辑节点、数据属性和可调用的服务它不关心怎么通信MMS 层负责把 ASCI 映射到具体网络通信规定通信帧包含什么内容、代表什么意义但不规定具体数据格式和网络类型。所以 MMS 是服务接口 映射的组合客户端和服务器只要用同样的数据格式和网络类型就能互通。2.3 GOOSE 与 SMV 的链路层直连GOOSE 和 SMV 不走 TCP/IP直接封装在以太网帧里用 EtherType 区分GOOSE 通常是 0x88B8SMV 是 0x88BA。它们用组播 MAC 地址发送订阅方一直在监听。GOOSE 的特点是事件触发后提高发送频率平时用较慢的心跳维持在线检测SMV 则是固定周期持续发送流量稳定但很大。两者都不依赖连接所以没有 TCP 的三次握手和重传实时性靠链路层和冗余机制保证。3. 前置准备用 TaoToken 打通模型侧辅助分析抓包和协议分析过程中经常需要让模型帮忙解读一段十六进制报文、生成过滤表达式或者把抓到的 GOOSE 数据集结构翻译成可读字段。这时候一个稳定的模型调用入口会省很多事。TaoToken 提供统一的 API 入口兼容常见模型调用方式适合把报文解读过滤表达式生成这类重复动作交给模型处理。你可以先到模型对话页面体验一下报文解读效果确认可用后再进入接入环节模型对话入口https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite如果只是临时验证用对话页面即可如果要把它嵌进自己的抓包分析脚本就需要 API Key。进入控制台创建 Key控制台https://taotoken.net/api/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI Keys 管理https://taotoken.net/api/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite创建后把 Key 存到环境变量不要硬编码进脚本。接入文档在这里包含请求格式和示例接入文档https://taotoken.net/api/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite如果你长期做编码和 Agent 类工作比如批量解析抓包文件、自动生成测试用例可以了解 Coding PlanCoding Planhttps://taotoken.net/api/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite4. 可复制配置Wireshark 抓包过滤与 GOOSE 订阅验证4.1 Wireshark 显示过滤表达式抓包时先用捕获过滤器减少无关流量再用显示过滤器精确定位。下面这些表达式可以直接复制到 Wireshark 的显示过滤栏。只看 GOOSEeth.type 0x88b8只看 SMVeth.type 0x88ba只看 MMSMMS 通常跑在 ISO over TCP 的 102 端口tcp.port 102只看 SMB 文件传输tcp.port 445组合查看 GOOSE 和 SMV排除 MMS 干扰eth.type 0x88b8 || eth.type 0x88ba按 GOOSE 的 goID 或数据集过滤需要 Wireshark 能解析 GOOSE通常新版自带goose.goID IED1/LLN0$GO$gcb1按 SMV 的 svID 过滤sv.svID MU01捕获过滤器在抓包前设置性能更好ether proto 0x88b8 or ether proto 0x88ba or tcp port 102 or tcp port 4454.2 用 tshark 命令行抓 GOOSE 并统计如果现场没有图形界面用 tshark 也能干活。下面这条命令抓 30 秒 GOOSE 报文并统计每个 goID 的帧数tshark -i eth0 -a duration:30 -Y eth.type 0x88b8 \ -T fields -e goose.goID -e frame.time_relative \ | sort | uniq -c | sort -rn输出里帧数明显偏高的 goID通常就是当前有事件在触发的 GOOSE 控制块。正常心跳频率一般在秒级事件触发时会短时间密集发送这就是判断触发条件的直接依据。4.3 GOOSE 订阅验证动作要验证订阅是否正常可以按下面步骤操作第一步确认订阅方网卡的组播过滤没有把 GOOSE 组播地址挡掉。GOOSE 常用组播地址范围是 01-0C-CD-01-00-00 到 01-0C-CD-01-01-FF。第二步在订阅方用 tshark 持续监听观察是否有稳定心跳tshark -i eth0 -Y eth.type 0x88b8 -T fields \ -e eth.src -e goose.goID -e goose.stNum -e goose.timeAllowedtoLive第三步在发布方制造一次事件比如模拟一个开关量变位观察 stNum 是否递增、帧间隔是否明显缩短。stNum 递增说明状态变化被正确发布订阅方收到后应触发对应逻辑。第四步如果超过 timeAllowedtoLive 时间还没收到下一帧订阅方应判定发布方离线。你可以临时断开发布方网线验证订阅方是否在预期时间内报离线。4.4 用模型辅助解读报文把 tshark 导出的字段或一段十六进制贴给模型让它帮你翻译成可读结构可以省去查手册的时间。调用示例以兼容接口为例curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: your-model-name, messages: [ {role: user, content: 这是一段 GOOSE 报文字段goIDIED1/LLN0$GO$gcb1, stNum5, sqNum0, timeAllowedtoLive4000。请解释各字段含义并判断当前是否处于事件触发状态。} ] }返回结果会给出字段解释和状态判断适合快速核对。注意模型输出只作参考最终以现场报文和装置手册为准。5. 验证请求与成功结果三类报文的触发条件与实时性差异5.1 MMS 请求验证MMS 是请求-应答模式。用客户端工具如 IEC61850 客户端或自己写的脚本读取一个遥测值观察抓包tcp.port 102 mms成功时你会看到一次请求对应一次响应confirm 类服务有明确应答。MMS 的实时性取决于网络和服务器处理能力通常在十毫秒到秒级适合遥测遥信、定值读写、报告上送。5.2 GOOSE 触发条件验证GOOSE 的触发条件是数据集成员发生变化。验证方法持续抓包记录 stNum 和 sqNum。稳定状态下 sqNum 递增、stNum 不变一旦数据集变化stNum 递增、sqNum 归零并且发送间隔从心跳周期缩短为毫秒级连续几帧。这就是事件触发提高频率的直接证据。5.3 SMV 周期验证SMV 是固定周期发送没有事件触发概念。验证方法统计相邻帧时间差应该基本恒定比如 250 微秒对应 4kHz 采样。如果时间差抖动大说明网络或发布方有问题。SMV 流量大抓包时注意磁盘和 CPU 占用。5.4 成功结果对照协议触发条件发送模式实时性成功判据MMS客户端请求请求-应答十毫秒到秒级收到对应响应GOOSE数据集变化事件加速 心跳毫秒级stNum 递增、间隔缩短SMV固定周期周期组播微秒到毫秒级帧间隔恒定SMB文件操作请求-应答秒级文件读写完成6. 本篇常见错排查6.1 抓不到 GOOSE 或 SMV最常见原因是过滤表达式写错或者网卡/镜像口没有放行组播。先确认用的是 eth.type 过滤而不是 tcp.port。如果还是抓不到检查交换机镜像配置和网卡是否开启了组播过滤。6.2 MMS 连不上先确认 102 端口是否可达再确认客户端和服务器使用的数据格式、模型文件是否匹配。MMS 高度抽象模型不匹配时表现为服务调用失败而不是网络不通。6.3 GOOSE 订阅方报离线检查 timeAllowedtoLive 设置是否过小网络是否有丢包发布方是否真的在发。用 tshark 在订阅方网卡上确认能收到帧如果收不到就是链路或组播问题不是订阅逻辑问题。6.4 SMB 传输慢或失败SMB 用于站控层文件传输实时性要求不高但容易受网络拥塞影响。确认 445 端口可达、共享权限正确大文件传输时避免和 SMV 抢带宽。6.5 模型解读结果和现场不符模型只根据你给的字段推断缺少上下文时可能误判。把完整的 GOOSE 控制块配置和抓包时间序列一起给它结论会更可靠。涉及跳闸等安全相关判断必须以装置和现场为准。如果你在接入或排障过程中遇到 API 调用问题可以先查接入文档再到 API Keys 页面确认 Key 状态接入文档https://taotoken.net/api/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI Keyshttps://taotoken.net/api/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite需要长期做抓包解析和自动化测试的可以看 Coding PlanCoding Planhttps://taotoken.net/api/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite最后留一个实用习惯每次现场抓包前先把捕获过滤器设成ether proto 0x88b8 or ether proto 0x88ba or tcp port 102 or tcp port 445这样 MMS、GOOSE、SMV、SMB 四类流量一次抓全回头再按显示过滤器拆分比反复重抓省事得多。
返回列表