IEC 61850 新型网络冗余报文捕获解析工具开发

2014-02-14 02:22张惠刚李广华许家浩
电力建设 2014年10期
关键词:标识符局域网以太网

王 娇,张惠刚,李广华,许家浩,迟 翔

(1.南京工程学院,南京市211167;2.南瑞继保电气有限公司,南京市211100)

0 引 言

IEC 61850 标准作为变电站自动化领域最为完善的通信标准,推动了一次设备智能化和二次设备集成化的快速发展[1-5]。其最大程度上实现了系统信息模型的统一,通信服务的统一和传输过程的统一。但是其未对网络冗余、安全等重要应用领域做出明确的规定。2008年,IEC SC65WG15 发布了IEC 62439 高可用性自动化网络协议,提出了几种典型的网络冗余技术,包括跨网冗余协议、分布冗余协议、媒介冗余协议、信标冗余协议、并行冗余协议和高可用性无缝冗余协议[6]。随着IEC 61850 第2 版引入IEC 62439-3 标准中高可用性无缝环网(high seamless ring,HSR)和并行冗余双网(parallel ring protocol,PRP),为数字化变电站的通信可靠性、安全性提供了参考性的实现方案[7-8]。目前,大量基于该种协议的网络构架层出不穷,文献[9]提出了PRP 的网络构架,在站控层网络和过程层网络均布置为星型双网。文献[10]根据HSR技术抵抗单点故障,实现无缝恢复的优势,设计了应用HSR 的变电站三层通信网络结构。文献[11]详细阐述了PRP 在站级总线中的组网方式,根据冗余丢弃算法、冗余检测和冗余管理的工作原理设计了PRP 的处理模块。文献[12]提出了站内信息网络结构简化技术路线和骨干、终端通信网框架建设方案。但是这些设计方案的可行性是否能够通过验证,需要一个强有力的监测工具来支撑。本文以Wireshark 开源代码为基础,以Visual Studio 2008 为开发平台,利用C+ +语言编码,融合GTK 界面设计工具,开发一个捕获、解析PRP 报文的插件。并通过WinPcap 库模拟相关设备发包,来验证PRP 报文插件开发的正确性。

1 并行冗余双网

1.1 原理分析

并行冗余双网协议执行冗余的功能指的是在节点处实现双备用,而不是指网络,通常利用双连接节点(double attached node implementing,DANP)可达到冗余效果。

PRP 的环形拓扑结构如图1 所示。由图1 可知,一个DANP 连接到2个独立、并列的局域网,当其作为源端节点发送数据帧到各个局域网中时,发送的数据帧结构中带有冗余控制监测(redundancy check trailer,RCT),为目的DANP 节点处的链路冗余单元(link redundancy entity,LRE)识别重复报文提供帮助。然后目的DANP 节点在一定的时间内接收各个局域网传来的数据帧,并通过LRE 处理重复数据帧和管理冗余。

图1 含有单节点和双节点的PRP 环形拓扑结构Fig.1 PRP ring topology of with SANs and DANPs

图1中PRP网络中含有2 种连接方式:双连接节点(DANP)和单连接节点(SAN)。其中单连接节点的使用情况和PRP 网络有很大的不同。PRP 网络中的SAN 有2 种连接方式:(1)直接连接到局域网中,可通信的范围只限定在连接在本局域网中的单节点和所有的双节点;(2)通过冗余盒连接到2个局域网中,它可以和所有的DANP 和SAN 通信。

PRP 网络中每个节点包含2个以太网总线控制器,具有相同的MAC 地址和IP 地址,因此PRP 基于第2 层网络协议的网络拓扑结构,非常适用于GOOSE 报文和SV 报文的传输,工程配置相对简单。

1.2 报文结构

在第二版IEC 61850 -9 -2 中,国际电工委员会第15 工作组提出将网络冗余配置添加到过程层网络中。其中,PRP 帧是映射到数据链路层,采用ISO/IEC 8802 -3 版本的以太网数据帧,帧的左侧标注了字节数,具体格式如表1 所示[13]。

表1 ISO/IEC 8802 -3 帧结构-链路冗余:并行冗余双网Tab.1 ISO/IEC 8802-3 frame format-link redundancy:PRP

表1 ISO/IEC 8802 -3 数据帧中部分字段的含义如下。

(1)目的地址:目的地址长度为6个字节。根据规定,对PRP 的目的地址的前5个字节固定为“01 -15 -4E-00 -01”。

(2)标签协议标识符:8 位,由802.1Q 标准以太网编码帧来确定,一般设定为0X8100。

(3)标签控制信息:8 位,主要涉及到优先级和虚拟局域网。如果数据单元是SV 或GOOSE 报文的话,则优先级为4,其他的报文优先级为1。

(4)应用标识符:16 位,它是由APPID 类型和实际ID 值组成。对于SV 报文APPID 取值范围为0X40000 ~0X70000。GOOSE 报文分配的取值范围为0X0000 ~0X3FFF[14]。

(5)长度:16 位,从APPID 开始到APDU 结束。

(6)保留位:保留位1 最高为simulate,当该值设置为1 时,表示采样值的报文是由测试装置产生的,而不是来自装置的配置文件。后面3 位为将来标准设置,一般为0。剩下的12 位与保留位2 合起来构成28 位的“保留安全性”,它是由标准IEC/TS62351-6 定义的。

(7)序列号:16 位,用以标识重复帧。每次从高层发送一帧,序列号加1。

(8)路径标识符:4 位,由网络标识符和局域网标识符构成。其中局域网标识符占1 位,确定冗余盒两端口的接收情况(端口A 为0,端口B 为1)。

(9)帧大小:12 位,前4 位与路径标识符结合,计算长度从APDU 数据单元开始,一直到PRP 类型结束。

(10)PRP 以太网类型:PRP 报文的以太网类型是由IEEE 的著作权注册机构进行了注册,一般是唯一的。PRP 报文的以太网类型为0X88FB。

PRP 报文中的链路冗余控制单元由(7)~(10)构成。由于PRP 链路冗余控制单元(LRE link redundancy trailer)的加入,可能会超过IEEE801.1D规定的数据最大长度1 522 字节,因此需要网络内交换节点单元的内部结构支撑这种协议,目前该类装置研究处于起步阶段,开发测试报文的平台可以为装置研发提供强有力的支撑。

2 PRP 报文测试工具开发

2.1 开发平台介绍

Wireshark 是一款强大的网络协议分析开源的跨平台软件[15],具有简洁友好的用户界面。由于软件底层和界面涉及到许多LINUX 环境配置项,在Windows 系统中编译Wireshark 还需要以下软件来辅助:Visual Studio、Python、Cygwin,且采用C + +语言作为主要开发语言。

Wireshark 源代码的基本结构逻辑上是由5 部分组成[16]。(1)WinPcap 库文件中数据包监听设备驱动程序(netgroup packet filter,NPF)在操作系统核心内与网络接口驱动交互,调用用户级的packet.dll 和wpacp.dll 来实现报文的捕获,将捕获结果传递给Capture;(2)Capture 将捕获的数据储存在Wiretap 部分;(3)GTK1/2 提供图形窗口工具,将用户的输入信息传递出去;(4)Core 综合协调用户传入、传出的信息;(5)Epan 接收来自Core 传达的命令,指挥协议解析器,将结果传送到Core,最后调用GTK1/2 库文件在界面上显示[17-18],如图2 所示。

2.2 开发测试流程

开发协议解析器主要目标是针对协议部分的各个字段的信息,以一个树形的结构来划分各层结构,进行详细展示。同时,通过过滤规则筛选显示到数据包列表的主窗口中[19]。将表1 的协议分成4 层:

(1)解析以太网层。前12个字节,包括目的MAC 地址和源MAC 地址,并判断是否有上层协议封装。

图2 Wireshark 结构模块Fig.2 Wireshark structure block

(2)解析虚拟局域网层。第12 到第14个字节,分析数据优先级和虚拟局域网标识符等。

(3)解析SV 层。数据结构根据装置发出的类型分辨来解析。同时需要在最后判别是否存在上层协议,通过全局性指针变量跳转到下一层协议解析引擎句柄。

(4)解析PRP 层。单独分裂出来,便于后面添加不同的数据报文,同时也有利于到达目的装置后丢弃PRP 标签算法的统计,本文主要开发该层解析器。下面介绍如何开发PRP 解析器。

2.2.1 协议注册初始化

设计的插件与外部实现交互,需要特定的接口来承担这项任务。其中一个就是函数proto_register_prp 接口,作用是注册PRP 解析器的协议信息。该函数中囊括了PRP 协议的全名、PRP 协议的简写和PRP 协议过滤字符串以及该层字段信息。对字段信息初始化也必不可少,如static hf_register_info hf[]描述PRP 协议字段具体信息,包括路径标识符、局域网标识符、序列号等,其定义如下:

static hf_register_info hf[] = {

{&hf _ prp _ sequence _ nr,{" Sequencenumber"," prp.sequence_nr",FT _UINT16,BASE_DEC,NULL,0x00,NULL,HFILL }},//序列号

{&hf_prp_path,{" Path"," prp. path",FT_UINT16,BASE_DEC,NULL,0xf000,NULL,HFILL }},//路径标识

{&hf _prp_laneid,{" Lane id"," prp. laneid",FT _UINT16,BASE_DEC,VALS(prp_laneid_vals),0x1000,NULL,HFILL }},//局域网标识

{&hf_prp_lsdu_size,{"LSDU size","prp.lsdu_size",

FT_UINT16,BASE_DEC,NULL,0x0fff,NULL,HFILL}},//PRP 帧大小

{&hf_type,{" Type"," prp. type",FT_UINT16,BASE_HEX,VALS(etype_vals),0x00,NULL,HFILL }}};//PRP类型

然后设置PRP 层报文详细列表树根节点static gint * ett[]=&ett_prp_frame。最后通过函数proto_register_field_array(proto_prp,hf,array_length(hf))完成数组结构的注册。

2.2.2 注册切换器

注册切换器,就是将PRP 解析器挂载到树形节点中,并形成与外界交互的端口。通过采用函数proto_reg_handoff_prp()生成解析协议的句柄,关联上下层解析器,根据唯一标识识别协议类型。首先通过create_dissector_handle(dissect_prp_frame,proto_prp)查找到解析该帧的句柄,句柄包含协议的名称、协议类型和对应解析器等元素,其中dissect_prp_frame 是解析prp 协议报文的函数。利用dissector_add_uint("ethertype",ETHERTYPE_PRP,prp_frame_handle)将句柄与协议类型关联;最后根据类型名称使用g_hash_table_lookup (dissector_tables,name)函数查找相应的解析器列表,准备开始解析。

2.2.3 实际解析处理

实际解析处理,就是对dissect_prp_frame 函数内容具体描述,具体解析如下。

首先设置Wireshark 界面中数据包列表中列protocol 和列Info 的内容。采用函数col_set_str(pinfo - >cinfo,COL_PROTOCOL,"PRP")在数据列表中的纵向栏中设置需要显示的列表信息,之后创建协议树的详细信息。将PRP 标签中的路径标识符、网络标识符和局域网通过proto_tree_add_item()函数添加到子协议树,将给定报文大小与实际报文比较。如果两者相等,则继续将该节点添加到子协议树中。反之,在子协议树中添加判断的结果,并显示正确的数值。接着重复使用proto_tree_add_item()函数设置序列号、类型等,其代码如下:

ti = proto_tree_add_item(tree,proto_prp,tvb,0,PRP_TOTAL_LENGTH,ENC_NA);

prp_tree = proto_item_add_subtree(ti,ett_prp_frame);

proto_tree_add_item(prp_tree,hf_prp_sequence_nr,tvb,2,2,ENC_BIG_ENDIAN);

proto_tree_add_item(prp_tree,hf_prp_netid,tvb,4,2,ENC_BIG_ENDIAN)。

3 开发结果验证

WinPcap 网络开发包是一个免费的,基于Windows 平台下的工业标准工具。它可以实现网络报文监听、抓捕、过滤、发包以及网络流量统计[20]。利用WinPcap 发送数据帧模拟装置发包,利用已开发好的工具捕捉该类报文,最后可以验证工具的可行性,具体流程如图3 所示。通过pcap_findalldev()函数获取设备列表,根据列表显示的内容选择合适的网卡序列号。利用pcap_open_live()打开网卡,其中内部延迟参数设定要稍长些,因为工具使用的是主线程抓包。按照报文格式设置主要数据后,最后利用pcap_sendpacket()发送出去。查看测试工具中是否有该类报文。其中,数组packet 中数据组字符为16进制编码,编码分解结果如表2 所示。

表2 编码分解结果Tab.2 Coding decomposition results

发送报文后,从软件截取到解析报文的测试结果如图4 所示。

由图4 可知,该结果符合图2 要求的格式。因此,解析报文工具设计正确。

图3 发送报文流程图Fig.3 Flow chart of packet sending

图4 PRP 数据包解码示意图Fig.4 Analysis of PRP data packet

4 结 语

本文根据IEC 61850 最新发布的网络冗余方案预先设计出解析该类报文的插件,详细地分析该类报文产生机理和最新IEEE802-3 报文格式(含有PRP 的LRE),采用分层解决思路,简单概括解析报文的流程。通过在Visual Studio 平台下搭建以WinPcap 库文件为核心的模拟装置,并利用其设备驱动(NPF)和一组动态连接库(DLL)发送报文来验证测试工具设计的可行性,为未来设计相关类装置提供强有力的监测工具。

[1]梁俊斌,张炜,邓雨荣,等. 智能化变电站监测数据现场并行处理技术研究[J]. 电力建设,2013,34(2):35-40.

[2]李敬如,宋璇坤,张祥龙,等. 智能变电站一、二次设备集成技术[J]. 电力建设,2013,34(6):16-21.

[3]曹亮,陈小卫,肖筱煜. 新一代智能变电站二次设备集成方案[J]. 电力建设,2013,34(6):26-30.

[4]高磊,张鹏,陈久林,等. 智能变电站一体化集成测试平台设计[J]. 电力建设,2013,34(6):31-35.

[5]宋璇坤,刘颖,孙佳,等. 新一代智能变电站一体化信息平台设计[J]. 电力建设,2013,34(9):21-25.

[6]谢志迅,邓素碧,臧德扬.数字化变电站通信网络冗余技术[J].电力自动化设备,2011,31(9):100-103.

[7]International Electro Commission. IEC 62439 SC 65C High availability automation networks[S]. Switzerland:International Electro Commission,2008.

[8]International Electro Commission. IEC 61850 Communication network and systems in substations[S]. Switzerland:International Electro Commission,2005.

[9]李俊刚,宋小会,狄军峰,等.基于IEC 62439 -3 的智能变电站通信网络冗余设计[J].电力系统自动化,2011,35(10):70-73.

[10]陈原子,徐习东.基于并行冗余网络的数字化变电站通信网络构架[J]. 电力自动化设备,2011,31(1):105-108.

[11]许铁峰,徐习东.高可用性无缝环网在数字化变电站通信网络的应用[J].电力自动化备,2011,31(10):121-125.

[12]辛培哲,闫培丽,肖智宏,等. 新一代智能变电站通信网络技术应用研究[J]. 电力建设,2013,34(7):17-23.

[13]International Electro Commission. IEC 61850 Communication network and systems in substations[S]. Switzerland:International Electro Commission,2011.

[14]何磊.IEC 61850 应用入门[M]. 北京:中国电力出版社,2012:279-300.

[15]陈俊,阎慧,王宇.基于wireshark 的协议分析插件开发[C]//第十六届全国青年通信学术会议集.杭州:中国通信学会,2011:74-76.

[16]彭城.基于Wireshark 的协议分析研究与扩展实现[D].成都:电子科技大学,2007.

[17]Wireshrk Developer ’ s Guide [EB/OL ]. http://www.wireshark. org/.

[18]吕雪峰,张春芳. Wireshark 协议解析原理与新协议添加方法[J].软件导报,2011,11(12):105-107.

[19]罗青林,徐克付,臧文羽,等.Wireshark 环境下的网络协议解析与验证方法[J].计算机工程与设计,2011,32(3):770-775

[20]范建忠,马千里.GOOSE 通信与应用[J].电力系统及其自动化,2007,31(19):85-90.

猜你喜欢
标识符局域网以太网
基于底层虚拟机的标识符混淆方法
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
轨道交通车-地通信无线局域网技术应用
基于区块链的持久标识符系统①
基于VPN的机房局域网远程控制系统
基于802.1Q协议的虚拟局域网技术研究与实现
局域网性能的优化
谈实时以太网EtherCAT技术在变电站自动化中的应用
科研人员唯一标识符的理论研究现状剖析
浅谈EPON与工业以太网在贵遵高速公路中的应用