核心目标:将抽象的 GOOSE 控制块(GoCB)属性映射到具体的以太网字节序列,掌握从物理帧到应用数据的逐层解码方法。

前置依赖:已阅读本系列第一篇《GOOSE 机制与模型》,理解 GoCB、DataSet、APPID 等基本概念。

本篇定位:深入报文层面,以 Wireshark 为解剖台,逐字节拆解 GOOSE 报文,涵盖 ASN.1 定义、BER 编码规则、VLAN 标签及异常报文识别。


2.1 GOOSE 在 OSI 模型中的位置

GOOSE(Generic Object Oriented Substation Event,通用面向对象变电站事件)是 IEC 61850 体系中一种直接映射到以太网数据链路层的实时通信协议。与传统变电站通信协议(如 IEC 61850 MMS)走完整的 OSI 七层协议栈不同,GOOSE 仅占用 OSI 模型的第 1 层(物理层)和第 2 层(数据链路层)。

2.1.1 GOOSE 与 MMS 的协议栈对比

MMS 协议栈(完整 OSI 7 层)

7 应用层
MMS

6 表示层
ASN.1/BER

5 会话层

4 传输层
TCP

3 网络层
IP

2 数据链路层

1 物理层

GOOSE 协议栈

7 应用层
GOOSE APDU

6 表示层
BER 编码

2 数据链路层
MAC + VLAN + EtherType

1 物理层
以太网

从上述对比可见,GOOSE 的协议栈极其精简——省略了网络层(IP)和传输层(TCP/UDP),应用层 APDU 经过 BER 编码后直接封装进以太网帧。这一设计带来了以下关键优势:

特性 GOOSE MMS(TCP/IP)
协议栈深度 3 层(应用→表示→链路) 7 层(全栈)
网络层 无 IP 头部 IPv4/IPv6
传输层 TCP
端到端延迟 < 3 ms(典型值) 10~100 ms
组播支持 原生(二层组播 MAC) 需 IGMP/三层组播
配置复杂度 低(无 IP 地址管理) 高(IP 路由)

设计考量:GOOSE 舍弃 IP/TCP/UDP 的核心原因是确定性延迟要求。TCP 的重传机制和拥塞控制会引入不可预测的时延抖动,而变电站跳闸信号需要在 3 ms(三毫秒) 内完成端到端传输。二层直接封装跳过了所有中间层处理,实现了"零拷贝"直达硬件。


2.2 以太网帧封装结构

一个完整的 GOOSE 报文在以太网链路上呈现为以下帧结构:

MAC 帧头 (14 B)
目的MAC(6)+源MAC(6)+EtherType(2)

VLAN Tag (4 B)
可选,802.1Q

GOOSE APDU
变长,BER 编码

FCS (4 B)
帧校验序列

2.2.1 MAC 帧头(14 字节)

字段 长度(字节) 说明
目的 MAC 地址(Destination MAC) 6 组播 MAC,格式 01-0C-CD-01-xx-xx,后两字节由 APPID 映射
源 MAC 地址(Source MAC) 6 发送设备物理地址(唯一标识 IED)
EtherType 2 固定为 0x88B8(GOOSE 专属 EtherType)

注意:当存在 VLAN Tag 时,EtherType 字段的位置会偏移到 VLAN Tag 之后。详见 2.2.2。

2.2.2 VLAN Tag(可选,4 字节)

VLAN Tag 是 IEEE 802.1Q 定义的可选字段,插入在源 MAC 地址和 EtherType 之间。当包含 VLAN Tag 时,帧格式变为:

目的MAC(6) + 源MAC(6) + VLAN Tag(4) + EtherType(2) + APDU(变长) + FCS(4)

此时第一个 EtherType 被替换为 0x8100(标识后续为 VLAN Tag),真正的 GOOSE EtherType 0x88B8 出现在 VLAN Tag 之后。VLAN Tag 的具体编码将在 2.6 节 展开。

2.2.3 GOOSE APDU(变长)

GOOSE APDU(Application Protocol Data Unit,应用协议数据单元)是整个报文的核心载荷,使用 ASN.1 语法定义并经 BER 编码。编码后的长度从几十字节到数千字节不等,取决于 allData 中包含的数据条目数量。详见 2.3 节

2.2.4 FCS(4 字节)

FCS(Frame Check Sequence,帧校验序列)使用 CRC-32 算法对整个帧(不含前导码和帧起始定界符)进行循环冗余校验。由发送端计算并填充,接收端校验后丢弃损坏帧。


2.3 GOOSE APDU 的 ASN.1 定义

GOOSE APDU 的结构由 IEC 61850-8-1 标准明确定义,采用 ASN.1(Abstract Syntax Notation One,抽象语法标记一)描述。

2.3.1 完整的 ASN.1 定义

IEC61850-8-1-GOOSE-PDU DEFINITIONS ::= BEGIN

    GOOSEPdu ::= SEQUENCE
    {
        gocbRef           [0] IMPLICIT VisibleString,
        timeAllowedToLive [1] IMPLICIT INTEGER,
        datSet            [2] IMPLICIT VisibleString,
        goID              [3] IMPLICIT VisibleString OPTIONAL,
        t                 [4] IMPLICIT UtcTime,
        stNum             [5] IMPLICIT INTEGER,
        sqNum             [6] IMPLICIT INTEGER,
        test              [7] IMPLICIT BOOLEAN DEFAULT FALSE,
        confRev           [8] IMPLICIT INTEGER,
        ndsCom            [9] IMPLICIT BOOLEAN DEFAULT FALSE,
        numDatSetEntries  [10] IMPLICIT INTEGER,
        allData           [11] IMPLICIT SEQUENCE OF Data,
    }

-- 其他类型定义省略
END

2.3.2 字段总览

字段名 序号 ASN.1 类型 OPTIONAL DEFAULT 含义
gocbRef [0] VisibleString GOOSE 控制块引用,唯一标识
timeAllowedToLive [1] INTEGER 最大存活时间,单位 ms
datSet [2] VisibleString 数据集引用名
goID [3] VisibleString GOOSE 标识(可选)
t [4] UtcTime 事件时间戳
stNum [5] INTEGER 状态变化计数(事件序列号)
sqNum [6] INTEGER 序列号(同一状态下的重传计数)
test [7] BOOLEAN FALSE 是否为测试报文
confRev [8] INTEGER 配置版本号
ndsCom [9] BOOLEAN FALSE 是否需要继续通信
numDatSetEntries [10] INTEGER allData 中数据条目数
allData [11] SEQUENCE OF Data 实际数据值列表

2.3.3 OPTIONAL / DEFAULT 语义

  • OPTIONAL:该字段可以省略。在编码中表现为该字段的 Tag 完全不出现在 APDU 中。接收端应使用默认值(若有 DEFAULT)或将其视为缺失。
  • DEFAULT:当字段省略时,接收端自动使用指定的默认值。例如 test 字段默认为 FALSE,若发送端未编码此字段,接收端应视为 test = FALSE
  • IMPLICIT:编码时省略外层 Tag,直接使用上下文特定标签(Context-specific Tag)标记字段。这使得编码更紧凑。

2.4 一个真实 GOOSE 报文的十六进制标注

以下是一个真实 GOOSE 心跳报文的完整以太网帧十六进制 dump。该报文包含 VLAN Tag,目标为变电站过程总线上的所有智能电子设备(IED)。

2.4.1 完整十六进制 dump

偏移  字节序列                                              ASCII
0000  01 0c cd 01 00 01  → 目的 MAC(组播:01-0C-CD-01-00-01)
0006  00 50 64 12 34 56  → 源 MAC(发送 IED 物理地址)
000c  81 00              → TPID(802.1Q 标记,0x8100)
000e  40 03              → TCI(PCP=4, DEI=0, VID=3)
0010  88 b8              → EtherType(GOOSE 专属,0x88B8)
0012  61 81 9a           → 外层 Tag [APPLICATION 1],Length=0x9A=154
------------------------ ← GOOSE APDU 起始 ------------------------
0015  80 1c              → gocbRef [0],Length=28字节
0017  44 49 53 54 00 50 52 4f 54 45 43 54 49 4f 4e 5f
0027  52 45 4c 41 59 2f 4c 4c 4e 30 2e 47 4f 43 42 30
0037  31                → "DIST_PROTECTION_RELAY/LLN0.GOCB01"
0038  81 01 32           → timeAllowedToLive [1],Length=1,值=0x32=50ms
003b  82 1d              → datSet [2],Length=29字节
003d  44 49 53 54 00 50 52 4f 54 45 43 54 49 4f 4e 5f
004d  52 45 4c 41 59 2f 4c 4c 4e 30 2e 44 53 5f 47 4f
005d  4f 53 45 5f 30 31  → "DIST_PROTECTION_RELAY/LLN0.DS_GOOSE_01"
005f  83 0d              → goID [3] OPTIONAL,Length=13字节
0061  47 4f 43 42 30 31 5f 56 45 52 5f 31 2e 30
                       → "GOCB01_VER_1.0"
006f  84 08              → t [4] UtcTime,Length=8字节
0071  0e 42 0f 36 00 00 00 00  → 时间戳(BER 编码的 UtcTime)
0079  85 01 01           → stNum [5],Length=1,值=1(首帧/心跳)
007c  86 01 64           → sqNum [6],Length=1,值=0x64=100
007f  87 01 00           → test [7],Length=1,BOOLEAN=FALSE(0x00)
0082  88 01 01           → confRev [8],Length=1,值=1
0085  89 01 00           → ndsCom [9],Length=1,BOOLEAN=FALSE(0x00)
0088  8a 01 04           → numDatSetEntries [10],Length=1,值=4
008b  8b 04              → allData [11] 外层 SEQUENCE,Length=4
008d  83 02 01 02        → Data 1:BIT STRING Tag 0x83,值=0x0102
0091  84 02 00 01        → Data 2:INTEGER Tag 0x84,值=1
0095  85 04 3f 80 00 00  → Data 3:FLOATING-POINT Tag 0x85,值=1.0
0099  86 01 01           → Data 4:BOOLEAN Tag 0x86,值=TRUE(0x01)
009c  XX XX XX XX        → FCS(4字节,CRC-32,由硬件填充)

2.4.2 BER 编码要点

GOOSE APDU 采用 BER(Basic Encoding Rules,基本编码规则) 进行编码。BER 编码的基本单元是 TLV 三元组

Tag(标记) + Length(长度) + Value(值)
Tag(标记)编码

GOOSE 使用 Context-specific Tag(上下文特定标记),即 ASN.1 定义中的 [n] 序号。BER 编码时:

  • Tag 值 = 0x80 | [n](当 n < 31 时)
  • 例如:gocbRef[0],Tag = 0x80timeAllowedToLive[1],Tag = 0x81
Length(长度)编码

BER 长度编码有短形式和长形式两种:

形式 条件 编码方式 示例
短形式 Length < 128 单字节,直接表示长度 0x1C = 28 字节
长形式 Length ≥ 128 首字节高位=1,低7位表示后续长度字节数 0x81 0x9A = 154 字节

在 GOOSE 中,大部分字段的值小于 128 字节,因此普遍使用短形式。仅当 allData 包含大量数据条目时,外层 SEQUENCE 的 Length 可能使用长形式。

BOOLEAN 编码
逻辑值 BER 编码值
TRUE 0xFF(非零值,IEC 61850 使用全 1)
FALSE 0x00

注意:标准的 BER 编码中,任何非零值都表示 TRUE。但 IEC 61850 推荐在 GOOSE 中使用 0xFF 表示 TRUE,以与其他协议保持一致。不过实践中,部分 IED 使用 0x01 表示 TRUE,也视为合法。

INTEGER 编码
  • 使用二进制补码表示
  • 最小字节数(首字节最高位为符号位,若为 0x00 或 0xFF 则压缩)
  • 正数:0x01010x010001 00
  • 负数(极少在 GOOSE 中使用):-1FF

2.5 各字段编码详解

以下表格逐一描述 GOOSE APDU 中所有 12 个字段的编码细节。

字段 Context Tag ASN.1 类型 编码示例 长度(字节) 常见问题
gocbRef [0]0x80 VisibleString 80 1C "DIST_PROTECTION_RELAY/LLN0.GOCB01" 1~128+ 引用路径分隔符错误;名称不匹配 SCL 配置
timeAllowedToLive [1]0x81 INTEGER 81 01 32(值=50ms) 1~4 值过小导致接收端频繁判定超时;值过大导致故障响应延迟
datSet [2]0x82 VisibleString 82 1D "DIST_PROTECTION_RELAY/LLN0.DS_GOOSE_01" 1~128+ 名称与 SCL 中 DataSet 定义不一致
goID [3]0x83 VisibleString 83 0D "GOCB01_VER_1.0" 0~128+(OPTIONAL) 省略后影响调试定位;同一网络中 goID 不唯一
t [4]0x84 UtcTime 84 08 0E 42 0F 36 00 00 00 00 固定 8 时区不统一(应用 UTC);时间同步未启用导致误差
stNum [5]0x85 INTEGER 85 01 01(stNum=1) 1~4 溢出不归零(达到最大值 2³¹-1 后回绕);跳变丢失
sqNum [6]0x86 INTEGER 86 01 64(sqNum=100) 1~4 切换到新事件时未归零;重传时未递增
test [7]0x87 BOOLEAN 87 01 FF(TRUE);87 01 00(FALSE) 固定 3(含 Tag+Len) 测试 IED 未设置 test=TRUE 导致误跳闸;生产系统收到 test=TRUE 误认为正常
confRev [8]0x88 INTEGER 88 01 01(版本=1) 1~4 配置更新后未递增 confRev,导致接收端拒绝新配置
ndsCom [9] → 0x89` BOOLEAN 89 01 00(FALSE) 固定 3 忽略此字段导致通信状态误判
numDatSetEntries [10]0x8A INTEGER 8A 01 04(4 个条目) 1~4 值与 allData 实际条目数不一致
allData [11]0x8B SEQUENCE OF Data 8B 04 ...(TLV 列表) 变长 数据顺序与 DataSet 定义不匹配;数据类型与模板不兼容

2.5.1 stNum 与 sqNum 的动态关系

IED 上电

间隔 T1(<4ms)

间隔 T2~TN(指数增长)

回到心跳间隔 T0

发送心跳 sqNum+1

数据变化

发送 stNum+1, sqNum=0

稳态

事件发生

stNum += 1

sqNum = 0

重传1

重传2

重传N

stNum 不变
sqNum 持续递增

stNum += 1
sqNum 归零

2.5.2 时间戳 t 字段详解

t 字段的类型是 UtcTime,使用 BER 编码的 8 字节绝对时间

84 08 0E 42 0F 36 00 00 00 00
↑     ↑                    ↑
Tag   Length(8)        BER UtcTime 值

BER UtcTime 的 8 字节含义:

字节偏移 含义 示例值 说明
0 年(二进制编码) 0x0E = 14 → 2000+14 = 2014
1 0x42 = 66(BCD)→ 不会出现,应为 0x07 此处仅为示意
2 0x0F = 15
3 0x36 = 54(无效)→ 实际不会出现
4 0x00
5 0x00
6 毫秒高字节 0x00
7 毫秒低字节 0x00

注意:上述示例值是编码示意,实际 GOOSE 时间戳使用 BCD(Binary-Coded Decimal)编码的 UTC 时间,上例中 0x0E 0x42 应是有效的年/月组合。建议实际抓包时依赖 Wireshark 解析结果。


2.6 VLAN 标签编码详解

GOOSE 报文通常承载于交换式以太网的过程总线(Process Bus)上,VLAN(Virtual Local Area Network)标签是确保 GOOSE 流量被正确处理的关键机制。

2.6.1 802.1Q VLAN Tag 结构

VLAN Tag 占用 4 字节,插入在源 MAC 地址和 EtherType 之间:

  字节 0-1           字节 2-3
┌──────────────┐ ┌──────────────────┐
│    TPID      │ │       TCI        │
│   0x8100     │ │ PCP|DEI|   VID   │
│   (2 字节)   │ │ 3b | 1b | 12 bit │
└──────────────┘ └──────────────────┘
子字段 长度(位) 说明
TPID(Tag Protocol Identifier) 16 固定 0x8100,标识此为 802.1Q 帧
PCP(Priority Code Point) 3 优先级代码点,GOOSE 推荐 4~7(通常用 4
DEI(Drop Eligible Indicator) 1 丢弃合格指示,0=不丢弃
VID(VLAN Identifier) 12 VLAN ID,范围 1~4094(0 和 4095 保留)

2.6.2 GOOSE 推荐的 PCP 值

IEC 61850-8-1 和 IEEE 802.1Q 针对变电站自动化推荐如下优先级映射:

报文类型 推荐 PCP 含义
GOOSE 跳闸(Trip) 7 最高优先级
GOOSE 合闸/其他命令 5~6 高优先级
GOOSE 心跳/状态信息 4 中等优先级
采样值(SV) 4~6
普通后台流量 0~1 低优先级

2.6.3 示例编码解析

来自 2.4 节的示例:

81 00  → TPID = 0x8100(802.1Q 标记)
40 03  → TCI
        二进制:0100  0000  0000  0011
                ↑↑↑   ↑     ↑↑↑↑↑↑↑↑↑↑↑↑
               PCP=4  DEI=0     VID=3

2.6.4 VLAN 规划的重要性

  • 流量隔离:不同电压等级(如 220kV 和 110kV)的过程总线应分属不同 VLAN,避免 GOOSE 泛滥影响无关间隔。
  • 优先级保障:关键 GOOSE 跳闸报文应设置 PCP=7,确保在交换机拥塞时优先转发。
  • VLAN 修剪:交换机应配置 VLAN 修剪(VLAN Pruning),确保 GOOSE 组播帧仅在订阅端口所属的 VLAN 内传播。
  • 与 APPID 的关系:许多变电站使用 VLAN ID 作为 APPID 的高 12 位,或直接令 VLAN ID = APPID,便于定位和过滤。

2.7 Wireshark 实战:抓取并分析 GOOSE

Wireshark 是目前最常用的网络协议分析工具,对 IEC 61850 GOOSE 提供了完整的协议解析支持。

2.7.1 Wireshark 过滤器速查表

过滤目的 显示过滤器(Display Filter) 捕获过滤器(Capture Filter)
捕获所有 GOOSE 报文 goose ether proto 0x88b8
按 APPID 过滤 goose.appid == 0x0001 —(需用 BPF 复杂写法)
按组播 MAC 过滤 eth.dst == 01:0c:cd:01:00:01 ether dst 01:0c:cd:01:00:01
按 VLAN ID 过滤 vlan.id == 3 vlan 3
按 stNum 过滤 goose.stnum == 1
心跳帧(stNum 不变) goose.stnum == 1 && goose.sqnum < 5
事件首帧(sqNum==0) goose.sqnum == 0
测试报文 goose.test == 1
按 GO ID 过滤 goose.goID contains "TRIP"

技巧:在 Wireshark 的显示过滤器中输入 goose 并按 TAB 键可自动补全所有 goose 子字段。

2.7.2 抓包实验流程

以下实验假设您有一台连接了变电站过程总线网络(或 GOOSE 仿真工具)的 PC。

步骤 1:确认网卡与抓包权限

  • 使用管理员权限启动 Wireshark(Windows)或使用 sudo wireshark(Linux)
  • 选择连接过程总线的网卡(通常为 Intel I210Intel I350 等工业级网卡)

步骤 2:设置捕获过滤器

在 Wireshark 的捕获选项(Capture Options)→ 捕获过滤器(Capture Filter)中输入:

ether proto 0x88b8

此过滤器仅保留 GOOSE 帧,丢弃所有非 GOOSE 流量,大幅降低捕获数据量。

步骤 3:开始捕获与仿真

启动捕获后,使用 GOOSE 仿真工具(如 IEDScoutGOOSE Testerlibiec61850 工具集)发送 GOOSE 报文。

步骤 4:应用显示过滤器

针对已捕获的报文,在显示过滤器中输入:

goose.appid == 0x0001

步骤 5:查看协议解析树

在 Wireshark 的 Packet Details 面板展开 GOOSE 协议树,逐一对比 2.4 节的十六进制标注与 Wireshark 的解析字段。

2.7.3 实验环境拓扑图

过程总线(VLAN 3)

管理型交换机
802.1Q 支持

间隔 1 IED
保护装置
GOOSE 发布者

间隔 2 IED
智能终端
GOOSE 订阅者

抓包 PC
Wireshark

GOOSE 仿真工具
IEDScout/libiec61850

提示:如果现场无法接入真实过程总线,可使用 libiec61850 开源库在本地搭建仿真环境:一台 PC 运行发布者程序,另一台运行 Wireshark 抓包即可。


2.8 四类报文的 Wireshark 对比分析

GOOSE 通信中存在四种典型的报文序列,可以通过 stNum 和 sqNum 的变化模式来区分。

2.8.1 详细对比表格

报文类型 stNum sqNum 发送间隔 数据是否变化 接收端行为
心跳帧(Heartbeat) 不变 递增 T0(通常 1~5 s) 维持接收超时计时器,不做动作
事件首帧(Event First Frame) +1 =0 立即发送(< 1 ms) 立即处理新数据,重置重传计时器
重传帧 1(Retransmission 1) 不变 =1 T1(< 4 ms) 确认收到,丢弃重复数据
重传帧 N(Retransmission N) 不变 =N T2~TN(指数增长至 T0) 丢弃重复数据,仅用于可靠性

2.8.2 发送间隔的动态变化

数据变化事件发生

发送首帧
stNum+1, sqNum=0

发送重传帧 1
sqNum=1, 间隔 T1=2ms

发送重传帧 2
sqNum=2, 间隔 T2=4ms

发送重传帧 3
sqNum=3, 间隔 T3=8ms

... 指数增长至 T0 ...

进入稳态心跳
间隔 T0=5000ms

2.8.3 典型的发送时间序列

时间点 报文类型 stNum sqNum 间隔 说明
t=0 ms 心跳帧 5 1000 稳态心跳
t=5000 ms 心跳帧 5 1001 T0=5s 稳态心跳
t=10000 ms 心跳帧 5 1002 T0=5s 稳态心跳
t=10005 ms 事件首帧 6 0 < 1 ms CB 分闸,数据变化
t=10007 ms 重传帧 1 6 1 T1=2 ms 确认重传
t=10011 ms 重传帧 2 6 2 T2=4 ms 重传
t=10019 ms 重传帧 3 6 3 T3=8 ms 重传
t=10035 ms 重传帧 4 6 4 T4=16 ms 重传
t=15035 ms 心跳帧 6 5 T0=5s 回到稳态

关键观察:事件发生后,GOOSE 在极短时间内连发多帧(stNum 不变、sqNum 递增、间隔指数增长),确保在最恶劣的网络条件下接收端至少收到一帧。这就是 GOOSE 高可靠性的核心机制。


2.9 异常报文识别

智能变电站运维中,GOOSE 异常是导致保护误动或拒动的主要原因之一。以下归纳了六类常见报文异常及其诊断方法。

2.9.1 异常类型汇总

GOOSE 报文异常检测

stNum 跳变丢失

stNum 回退

sqNum 不归零

TAL 超时

allData 长度不一致

组播 MAC 与 APPID 不匹配

数据变化帧未收到
订阅者漏掉事件

IED 重启或配置变更
stNum 从 1 重新计数

发送端逻辑错误
sqNum 在 stNum 递增后未清零

网络拥塞或 IED 故障
收不到任何 GOOSE 帧

IED 重配置后 allData 模板变化
但 confRev 未更新

配置错误或 MAC 冲突
接收端无法匹配

2.9.2 各异常详解

① stNum 跳变丢失

诊断项 内容
现象 Wireshark 中观察到 stNum 从 N 直接跳到 N+2,未出现 N+1
原因 数据变化速度过快,或网络中间节点丢弃了一帧事件首帧
影响 订阅者 IED 可能未收到变化事件,导致保护逻辑失步
定位方法 使用 goose.stnum 显示过滤器检查 stNum 序列连续性

② stNum 回退

诊断项 内容
现象 stNum 从较高的值突然回到较低值(例如 100→1)
原因 IED 重启、程序复位、GoCB 被重新初始化
影响 接收端若启用了 stNum 严格递增检测,会判定为无效报文并丢弃
定位方法 在 Wireshark 中添加列 goose.stnum,观察曲线变化
缓解措施 IEC 61850 建议接收端允许 stNum 在一定范围内回退,或结合 t 时间戳辅助判断

③ sqNum 不归零

诊断项 内容
现象 stNum 递增后,sqNum 未从 0 开始,而是从某个非零值继续
原因 发送端 GOOSE 协议栈实现存在缺陷
影响 订阅端可能认为尚未收到该事件的首帧,导致重复处理
标准要求 IEC 61850-8-1 明确要求:stNum 变化时 sqNum 必须归零

④ TAL(timeAllowedToLive)超时

诊断项 内容
现象 订阅者报 “GOOSE 丢失” 告警,Wireshark 中两帧间隔 > TAL
原因 IED 离线、光纤中断、交换机端口故障、网络拥塞
影响 严重时导致保护装置闭锁出口或切换至后备逻辑
诊断方法 计算实际报文间隔,与 goose.tal 字段对比
计算公式 2 × TAL 是接收端常用超时判据(标准推荐):若在 2 × timeAllowedToLive 内未收到新帧,则判为超时

⑤ allData 长度不一致

诊断项 内容
现象 Wireshark 中 numDatSetEntries 显示为 N,但解析出的 allData 条目数不为 N
原因 IED 配置更新后 DataSet 定义变化,但发送端未更新 numDatSetEntries;或 allData 编码错误导致 Wireshark 解析偏移
影响 接收端解析 allData 可能发生错位,读取到错误的数据值
诊断方法 对比 SCL 配置文件中的 DataSet 定义与实际报文中的 allData 结构

⑥ 组播 MAC 与 APPID 不匹配

诊断项 内容
现象 目的 MAC 为 01-0C-CD-01-00-01,但 APDU 内 APPID 不为 0x0001(注:APPID 位于 GOOSE APDU 外层,Wireshark 解析的 goose.appid 字段)
原因 SCL 配置错误,或同一网络中不同 GOOSE 流使用了相同的组播 MAC
影响 订阅者可能收到错误来源的 GOOSE 报文,导致误动作
标准规范 IEC 61850-8-1 建议:组播 MAC 地址的后 2 字节 = APPID(即 01-0C-CD-01-HH-LL 中的 HH LL 来自 APPID 的高/低字节)
验证方法 在 Wireshark 中使用 eth.dst == 01:0c:cd:01:00:01 && goose.appid != 0x0001 检查不匹配报文

下期预告

IEC 61850 GOOSE 专题(三):GOOSE 通信参数与工程配置实战

第三篇将聚焦工程实施层面的关键内容:

  • GoCB 参数详解(GoEna、MinTime、MaxTime 等)
  • SCL 文件中 GOOSE 配置的完整 XML 实例
  • 订阅方配置方法与组态工具操作
  • 多播 MAC 地址分配策略与冲突预防
  • 典型案例:GOOSE 参数设置不当导致的工程问题分析

参考标准

标准编号 名称 与本篇关联内容
IEC 61850-8-1 Communication networks and systems for power utility automation – Part 8-1: Specific communication service mapping (SCSM) – Mappings to MMS and to ISO/IEC 8802-3 GOOSE APDU 的 ASN.1 定义(第 8.1 节)、EtherType 0x88B8 分配
IEC 61850-7-2 Part 7-2: Basic information and communication structure – Abstract communication service interface (ACSI) GoCB 抽象模型、DataSet 引用
IEC 61850-6 Part 6: Configuration description language for communication in power utility automation associated with IEDs SCL 文件中 GOOSE 配置语法
IEEE 802.1Q IEEE Standard for Local and Metropolitan Area Networks—Bridges and Bridged Networks VLAN Tag 编码、PCP 优先级
IEEE 802.3 IEEE Standard for Ethernet 以太网帧格式、FCS/CRC-32
ITU-T X.690 ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER) BER 编码规则(TLV 结构、Length 短/长形式、INTEGER/BOOLEAN 编码)

引用说明:本文中的十六进制报文示例基于 IEC 61850-8-1 附录中的参考编码构建,部分字段为教学目的作了简化处理。实际生产中请以具体 IED 的抓包结果为准。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐