王 嬌,張惠剛,李廣華,許家浩,遲 翔
(1.南京工程學(xué)院,南京市211167;2.南瑞繼保電氣有限公司,南京市211100)
IEC 61850 標(biāo)準(zhǔn)作為變電站自動(dòng)化領(lǐng)域最為完善的通信標(biāo)準(zhǔn),推動(dòng)了一次設(shè)備智能化和二次設(shè)備集成化的快速發(fā)展[1-5]。其最大程度上實(shí)現(xiàn)了系統(tǒng)信息模型的統(tǒng)一,通信服務(wù)的統(tǒng)一和傳輸過程的統(tǒng)一。但是其未對(duì)網(wǎng)絡(luò)冗余、安全等重要應(yīng)用領(lǐng)域做出明確的規(guī)定。2008年,IEC SC65WG15 發(fā)布了IEC 62439 高可用性自動(dòng)化網(wǎng)絡(luò)協(xié)議,提出了幾種典型的網(wǎng)絡(luò)冗余技術(shù),包括跨網(wǎng)冗余協(xié)議、分布冗余協(xié)議、媒介冗余協(xié)議、信標(biāo)冗余協(xié)議、并行冗余協(xié)議和高可用性無縫冗余協(xié)議[6]。隨著IEC 61850 第2 版引入IEC 62439-3 標(biāo)準(zhǔn)中高可用性無縫環(huán)網(wǎng)(high seamless ring,HSR)和并行冗余雙網(wǎng)(parallel ring protocol,PRP),為數(shù)字化變電站的通信可靠性、安全性提供了參考性的實(shí)現(xiàn)方案[7-8]。目前,大量基于該種協(xié)議的網(wǎng)絡(luò)構(gòu)架層出不窮,文獻(xiàn)[9]提出了PRP 的網(wǎng)絡(luò)構(gòu)架,在站控層網(wǎng)絡(luò)和過程層網(wǎng)絡(luò)均布置為星型雙網(wǎng)。文獻(xiàn)[10]根據(jù)HSR技術(shù)抵抗單點(diǎn)故障,實(shí)現(xiàn)無縫恢復(fù)的優(yōu)勢(shì),設(shè)計(jì)了應(yīng)用HSR 的變電站三層通信網(wǎng)絡(luò)結(jié)構(gòu)。文獻(xiàn)[11]詳細(xì)闡述了PRP 在站級(jí)總線中的組網(wǎng)方式,根據(jù)冗余丟棄算法、冗余檢測和冗余管理的工作原理設(shè)計(jì)了PRP 的處理模塊。文獻(xiàn)[12]提出了站內(nèi)信息網(wǎng)絡(luò)結(jié)構(gòu)簡化技術(shù)路線和骨干、終端通信網(wǎng)框架建設(shè)方案。但是這些設(shè)計(jì)方案的可行性是否能夠通過驗(yàn)證,需要一個(gè)強(qiáng)有力的監(jiān)測工具來支撐。本文以Wireshark 開源代碼為基礎(chǔ),以Visual Studio 2008 為開發(fā)平臺(tái),利用C+ +語言編碼,融合GTK 界面設(shè)計(jì)工具,開發(fā)一個(gè)捕獲、解析PRP 報(bào)文的插件。并通過WinPcap 庫模擬相關(guān)設(shè)備發(fā)包,來驗(yàn)證PRP 報(bào)文插件開發(fā)的正確性。
并行冗余雙網(wǎng)協(xié)議執(zhí)行冗余的功能指的是在節(jié)點(diǎn)處實(shí)現(xiàn)雙備用,而不是指網(wǎng)絡(luò),通常利用雙連接節(jié)點(diǎn)(double attached node implementing,DANP)可達(dá)到冗余效果。
PRP 的環(huán)形拓?fù)浣Y(jié)構(gòu)如圖1 所示。由圖1 可知,一個(gè)DANP 連接到2個(gè)獨(dú)立、并列的局域網(wǎng),當(dāng)其作為源端節(jié)點(diǎn)發(fā)送數(shù)據(jù)幀到各個(gè)局域網(wǎng)中時(shí),發(fā)送的數(shù)據(jù)幀結(jié)構(gòu)中帶有冗余控制監(jiān)測(redundancy check trailer,RCT),為目的DANP 節(jié)點(diǎn)處的鏈路冗余單元(link redundancy entity,LRE)識(shí)別重復(fù)報(bào)文提供幫助。然后目的DANP 節(jié)點(diǎn)在一定的時(shí)間內(nèi)接收各個(gè)局域網(wǎng)傳來的數(shù)據(jù)幀,并通過LRE 處理重復(fù)數(shù)據(jù)幀和管理冗余。

圖1 含有單節(jié)點(diǎn)和雙節(jié)點(diǎn)的PRP 環(huán)形拓?fù)浣Y(jié)構(gòu)Fig.1 PRP ring topology of with SANs and DANPs
圖1中PRP網(wǎng)絡(luò)中含有2 種連接方式:雙連接節(jié)點(diǎn)(DANP)和單連接節(jié)點(diǎn)(SAN)。其中單連接節(jié)點(diǎn)的使用情況和PRP 網(wǎng)絡(luò)有很大的不同。PRP 網(wǎng)絡(luò)中的SAN 有2 種連接方式:(1)直接連接到局域網(wǎng)中,可通信的范圍只限定在連接在本局域網(wǎng)中的單節(jié)點(diǎn)和所有的雙節(jié)點(diǎn);(2)通過冗余盒連接到2個(gè)局域網(wǎng)中,它可以和所有的DANP 和SAN 通信。
PRP 網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)包含2個(gè)以太網(wǎng)總線控制器,具有相同的MAC 地址和IP 地址,因此PRP 基于第2 層網(wǎng)絡(luò)協(xié)議的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),非常適用于GOOSE 報(bào)文和SV 報(bào)文的傳輸,工程配置相對(duì)簡單。
在第二版IEC 61850 -9 -2 中,國際電工委員會(huì)第15 工作組提出將網(wǎng)絡(luò)冗余配置添加到過程層網(wǎng)絡(luò)中。其中,PRP 幀是映射到數(shù)據(jù)鏈路層,采用ISO/IEC 8802 -3 版本的以太網(wǎng)數(shù)據(jù)幀,幀的左側(cè)標(biāo)注了字節(jié)數(shù),具體格式如表1 所示[13]。

表1 ISO/IEC 8802 -3 幀結(jié)構(gòu)-鏈路冗余:并行冗余雙網(wǎng)Tab.1 ISO/IEC 8802-3 frame format-link redundancy:PRP
表1 ISO/IEC 8802 -3 數(shù)據(jù)幀中部分字段的含義如下。
(1)目的地址:目的地址長度為6個(gè)字節(jié)。根據(jù)規(guī)定,對(duì)PRP 的目的地址的前5個(gè)字節(jié)固定為“01 -15 -4E-00 -01”。
(2)標(biāo)簽協(xié)議標(biāo)識(shí)符:8 位,由802.1Q 標(biāo)準(zhǔn)以太網(wǎng)編碼幀來確定,一般設(shè)定為0X8100。
(3)標(biāo)簽控制信息:8 位,主要涉及到優(yōu)先級(jí)和虛擬局域網(wǎng)。如果數(shù)據(jù)單元是SV 或GOOSE 報(bào)文的話,則優(yōu)先級(jí)為4,其他的報(bào)文優(yōu)先級(jí)為1。
(4)應(yīng)用標(biāo)識(shí)符:16 位,它是由APPID 類型和實(shí)際ID 值組成。對(duì)于SV 報(bào)文APPID 取值范圍為0X40000 ~0X70000。GOOSE 報(bào)文分配的取值范圍為0X0000 ~0X3FFF[14]。
(5)長度:16 位,從APPID 開始到APDU 結(jié)束。
(6)保留位:保留位1 最高為simulate,當(dāng)該值設(shè)置為1 時(shí),表示采樣值的報(bào)文是由測試裝置產(chǎn)生的,而不是來自裝置的配置文件。后面3 位為將來標(biāo)準(zhǔn)設(shè)置,一般為0。剩下的12 位與保留位2 合起來構(gòu)成28 位的“保留安全性”,它是由標(biāo)準(zhǔn)IEC/TS62351-6 定義的。
(7)序列號(hào):16 位,用以標(biāo)識(shí)重復(fù)幀。每次從高層發(fā)送一幀,序列號(hào)加1。
(8)路徑標(biāo)識(shí)符:4 位,由網(wǎng)絡(luò)標(biāo)識(shí)符和局域網(wǎng)標(biāo)識(shí)符構(gòu)成。其中局域網(wǎng)標(biāo)識(shí)符占1 位,確定冗余盒兩端口的接收情況(端口A 為0,端口B 為1)。
(9)幀大小:12 位,前4 位與路徑標(biāo)識(shí)符結(jié)合,計(jì)算長度從APDU 數(shù)據(jù)單元開始,一直到PRP 類型結(jié)束。
(10)PRP 以太網(wǎng)類型:PRP 報(bào)文的以太網(wǎng)類型是由IEEE 的著作權(quán)注冊(cè)機(jī)構(gòu)進(jìn)行了注冊(cè),一般是唯一的。PRP 報(bào)文的以太網(wǎng)類型為0X88FB。
PRP 報(bào)文中的鏈路冗余控制單元由(7)~(10)構(gòu)成。由于PRP 鏈路冗余控制單元(LRE link redundancy trailer)的加入,可能會(huì)超過IEEE801.1D規(guī)定的數(shù)據(jù)最大長度1 522 字節(jié),因此需要網(wǎng)絡(luò)內(nèi)交換節(jié)點(diǎn)單元的內(nèi)部結(jié)構(gòu)支撐這種協(xié)議,目前該類裝置研究處于起步階段,開發(fā)測試報(bào)文的平臺(tái)可以為裝置研發(fā)提供強(qiáng)有力的支撐。
Wireshark 是一款強(qiáng)大的網(wǎng)絡(luò)協(xié)議分析開源的跨平臺(tái)軟件[15],具有簡潔友好的用戶界面。由于軟件底層和界面涉及到許多LINUX 環(huán)境配置項(xiàng),在Windows 系統(tǒng)中編譯Wireshark 還需要以下軟件來輔助:Visual Studio、Python、Cygwin,且采用C + +語言作為主要開發(fā)語言。
Wireshark 源代碼的基本結(jié)構(gòu)邏輯上是由5 部分組成[16]。(1)WinPcap 庫文件中數(shù)據(jù)包監(jiān)聽設(shè)備驅(qū)動(dòng)程序(netgroup packet filter,NPF)在操作系統(tǒng)核心內(nèi)與網(wǎng)絡(luò)接口驅(qū)動(dòng)交互,調(diào)用用戶級(jí)的packet.dll 和wpacp.dll 來實(shí)現(xiàn)報(bào)文的捕獲,將捕獲結(jié)果傳遞給Capture;(2)Capture 將捕獲的數(shù)據(jù)儲(chǔ)存在Wiretap 部分;(3)GTK1/2 提供圖形窗口工具,將用戶的輸入信息傳遞出去;(4)Core 綜合協(xié)調(diào)用戶傳入、傳出的信息;(5)Epan 接收來自Core 傳達(dá)的命令,指揮協(xié)議解析器,將結(jié)果傳送到Core,最后調(diào)用GTK1/2 庫文件在界面上顯示[17-18],如圖2 所示。
開發(fā)協(xié)議解析器主要目標(biāo)是針對(duì)協(xié)議部分的各個(gè)字段的信息,以一個(gè)樹形的結(jié)構(gòu)來劃分各層結(jié)構(gòu),進(jìn)行詳細(xì)展示。同時(shí),通過過濾規(guī)則篩選顯示到數(shù)據(jù)包列表的主窗口中[19]。將表1 的協(xié)議分成4 層:
(1)解析以太網(wǎng)層。前12個(gè)字節(jié),包括目的MAC 地址和源MAC 地址,并判斷是否有上層協(xié)議封裝。

圖2 Wireshark 結(jié)構(gòu)模塊Fig.2 Wireshark structure block
(2)解析虛擬局域網(wǎng)層。第12 到第14個(gè)字節(jié),分析數(shù)據(jù)優(yōu)先級(jí)和虛擬局域網(wǎng)標(biāo)識(shí)符等。
(3)解析SV 層。數(shù)據(jù)結(jié)構(gòu)根據(jù)裝置發(fā)出的類型分辨來解析。同時(shí)需要在最后判別是否存在上層協(xié)議,通過全局性指針變量跳轉(zhuǎn)到下一層協(xié)議解析引擎句柄。
(4)解析PRP 層。單獨(dú)分裂出來,便于后面添加不同的數(shù)據(jù)報(bào)文,同時(shí)也有利于到達(dá)目的裝置后丟棄PRP 標(biāo)簽算法的統(tǒng)計(jì),本文主要開發(fā)該層解析器。下面介紹如何開發(fā)PRP 解析器。
2.2.1 協(xié)議注冊(cè)初始化
設(shè)計(jì)的插件與外部實(shí)現(xiàn)交互,需要特定的接口來承擔(dān)這項(xiàng)任務(wù)。其中一個(gè)就是函數(shù)proto_register_prp 接口,作用是注冊(cè)PRP 解析器的協(xié)議信息。該函數(shù)中囊括了PRP 協(xié)議的全名、PRP 協(xié)議的簡寫和PRP 協(xié)議過濾字符串以及該層字段信息。對(duì)字段信息初始化也必不可少,如static hf_register_info hf[]描述PRP 協(xié)議字段具體信息,包括路徑標(biāo)識(shí)符、局域網(wǎng)標(biāo)識(shí)符、序列號(hào)等,其定義如下:
static hf_register_info hf[] = {
{&hf _ prp _ sequence _ nr,{" Sequencenumber"," prp.sequence_nr",F(xiàn)T _UINT16,BASE_DEC,NULL,0x00,NULL,HFILL }},//序列號(hào)
{&hf_prp_path,{" Path"," prp. path",F(xiàn)T_UINT16,BASE_DEC,NULL,0xf000,NULL,HFILL }},//路徑標(biāo)識(shí)
{&hf _prp_laneid,{" Lane id"," prp. laneid",F(xiàn)T _UINT16,BASE_DEC,VALS(prp_laneid_vals),0x1000,NULL,HFILL }},//局域網(wǎng)標(biāo)識(shí)
{&hf_prp_lsdu_size,{"LSDU size","prp.lsdu_size",
FT_UINT16,BASE_DEC,NULL,0x0fff,NULL,HFILL}},//PRP 幀大小
{&hf_type,{" Type"," prp. type",F(xiàn)T_UINT16,BASE_HEX,VALS(etype_vals),0x00,NULL,HFILL }}};//PRP類型
然后設(shè)置PRP 層報(bào)文詳細(xì)列表樹根節(jié)點(diǎn)static gint * ett[]=&ett_prp_frame。最后通過函數(shù)proto_register_field_array(proto_prp,hf,array_length(hf))完成數(shù)組結(jié)構(gòu)的注冊(cè)。
2.2.2 注冊(cè)切換器
注冊(cè)切換器,就是將PRP 解析器掛載到樹形節(jié)點(diǎn)中,并形成與外界交互的端口。通過采用函數(shù)proto_reg_handoff_prp()生成解析協(xié)議的句柄,關(guān)聯(lián)上下層解析器,根據(jù)唯一標(biāo)識(shí)識(shí)別協(xié)議類型。首先通過create_dissector_handle(dissect_prp_frame,proto_prp)查找到解析該幀的句柄,句柄包含協(xié)議的名稱、協(xié)議類型和對(duì)應(yīng)解析器等元素,其中dissect_prp_frame 是解析prp 協(xié)議報(bào)文的函數(shù)。利用dissector_add_uint("ethertype",ETHERTYPE_PRP,prp_frame_handle)將句柄與協(xié)議類型關(guān)聯(lián);最后根據(jù)類型名稱使用g_hash_table_lookup (dissector_tables,name)函數(shù)查找相應(yīng)的解析器列表,準(zhǔn)備開始解析。
2.2.3 實(shí)際解析處理
實(shí)際解析處理,就是對(duì)dissect_prp_frame 函數(shù)內(nèi)容具體描述,具體解析如下。
首先設(shè)置Wireshark 界面中數(shù)據(jù)包列表中列protocol 和列Info 的內(nèi)容。采用函數(shù)col_set_str(pinfo - >cinfo,COL_PROTOCOL,"PRP")在數(shù)據(jù)列表中的縱向欄中設(shè)置需要顯示的列表信息,之后創(chuàng)建協(xié)議樹的詳細(xì)信息。將PRP 標(biāo)簽中的路徑標(biāo)識(shí)符、網(wǎng)絡(luò)標(biāo)識(shí)符和局域網(wǎng)通過proto_tree_add_item()函數(shù)添加到子協(xié)議樹,將給定報(bào)文大小與實(shí)際報(bào)文比較。如果兩者相等,則繼續(xù)將該節(jié)點(diǎn)添加到子協(xié)議樹中。反之,在子協(xié)議樹中添加判斷的結(jié)果,并顯示正確的數(shù)值。接著重復(fù)使用proto_tree_add_item()函數(shù)設(shè)置序列號(hào)、類型等,其代碼如下:
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)。
WinPcap 網(wǎng)絡(luò)開發(fā)包是一個(gè)免費(fèi)的,基于Windows 平臺(tái)下的工業(yè)標(biāo)準(zhǔn)工具。它可以實(shí)現(xiàn)網(wǎng)絡(luò)報(bào)文監(jiān)聽、抓捕、過濾、發(fā)包以及網(wǎng)絡(luò)流量統(tǒng)計(jì)[20]。利用WinPcap 發(fā)送數(shù)據(jù)幀模擬裝置發(fā)包,利用已開發(fā)好的工具捕捉該類報(bào)文,最后可以驗(yàn)證工具的可行性,具體流程如圖3 所示。通過pcap_findalldev()函數(shù)獲取設(shè)備列表,根據(jù)列表顯示的內(nèi)容選擇合適的網(wǎng)卡序列號(hào)。利用pcap_open_live()打開網(wǎng)卡,其中內(nèi)部延遲參數(shù)設(shè)定要稍長些,因?yàn)楣ぞ呤褂玫氖侵骶€程抓包。按照?qǐng)?bào)文格式設(shè)置主要數(shù)據(jù)后,最后利用pcap_sendpacket()發(fā)送出去。查看測試工具中是否有該類報(bào)文。其中,數(shù)組packet 中數(shù)據(jù)組字符為16進(jìn)制編碼,編碼分解結(jié)果如表2 所示。

表2 編碼分解結(jié)果Tab.2 Coding decomposition results
發(fā)送報(bào)文后,從軟件截取到解析報(bào)文的測試結(jié)果如圖4 所示。
由圖4 可知,該結(jié)果符合圖2 要求的格式。因此,解析報(bào)文工具設(shè)計(jì)正確。

圖3 發(fā)送報(bào)文流程圖Fig.3 Flow chart of packet sending

圖4 PRP 數(shù)據(jù)包解碼示意圖Fig.4 Analysis of PRP data packet
本文根據(jù)IEC 61850 最新發(fā)布的網(wǎng)絡(luò)冗余方案預(yù)先設(shè)計(jì)出解析該類報(bào)文的插件,詳細(xì)地分析該類報(bào)文產(chǎn)生機(jī)理和最新IEEE802-3 報(bào)文格式(含有PRP 的LRE),采用分層解決思路,簡單概括解析報(bào)文的流程。通過在Visual Studio 平臺(tái)下搭建以WinPcap 庫文件為核心的模擬裝置,并利用其設(shè)備驅(qū)動(dòng)(NPF)和一組動(dòng)態(tài)連接庫(DLL)發(fā)送報(bào)文來驗(yàn)證測試工具設(shè)計(jì)的可行性,為未來設(shè)計(jì)相關(guān)類裝置提供強(qiáng)有力的監(jiān)測工具。
[1]梁俊斌,張煒,鄧雨榮,等. 智能化變電站監(jiān)測數(shù)據(jù)現(xiàn)場并行處理技術(shù)研究[J]. 電力建設(shè),2013,34(2):35-40.
[2]李敬如,宋璇坤,張祥龍,等. 智能變電站一、二次設(shè)備集成技術(shù)[J]. 電力建設(shè),2013,34(6):16-21.
[3]曹亮,陳小衛(wèi),肖筱煜. 新一代智能變電站二次設(shè)備集成方案[J]. 電力建設(shè),2013,34(6):26-30.
[4]高磊,張鵬,陳久林,等. 智能變電站一體化集成測試平臺(tái)設(shè)計(jì)[J]. 電力建設(shè),2013,34(6):31-35.
[5]宋璇坤,劉穎,孫佳,等. 新一代智能變電站一體化信息平臺(tái)設(shè)計(jì)[J]. 電力建設(shè),2013,34(9):21-25.
[6]謝志迅,鄧素碧,臧德?lián)P.?dāng)?shù)字化變電站通信網(wǎng)絡(luò)冗余技術(shù)[J].電力自動(dòng)化設(shè)備,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]李俊剛,宋小會(huì),狄軍峰,等.基于IEC 62439 -3 的智能變電站通信網(wǎng)絡(luò)冗余設(shè)計(jì)[J].電力系統(tǒng)自動(dòng)化,2011,35(10):70-73.
[10]陳原子,徐習(xí)東.基于并行冗余網(wǎng)絡(luò)的數(shù)字化變電站通信網(wǎng)絡(luò)構(gòu)架[J]. 電力自動(dòng)化設(shè)備,2011,31(1):105-108.
[11]許鐵峰,徐習(xí)東.高可用性無縫環(huán)網(wǎng)在數(shù)字化變電站通信網(wǎng)絡(luò)的應(yīng)用[J].電力自動(dòng)化備,2011,31(10):121-125.
[12]辛培哲,閆培麗,肖智宏,等. 新一代智能變電站通信網(wǎng)絡(luò)技術(shù)應(yīng)用研究[J]. 電力建設(shè),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 應(yīng)用入門[M]. 北京:中國電力出版社,2012:279-300.
[15]陳俊,閻慧,王宇.基于wireshark 的協(xié)議分析插件開發(fā)[C]//第十六屆全國青年通信學(xué)術(shù)會(huì)議集.杭州:中國通信學(xué)會(huì),2011:74-76.
[16]彭城.基于Wireshark 的協(xié)議分析研究與擴(kuò)展實(shí)現(xiàn)[D].成都:電子科技大學(xué),2007.
[17]Wireshrk Developer ’ s Guide [EB/OL ]. http://www.wireshark. org/.
[18]呂雪峰,張春芳. Wireshark 協(xié)議解析原理與新協(xié)議添加方法[J].軟件導(dǎo)報(bào),2011,11(12):105-107.
[19]羅青林,徐克付,臧文羽,等.Wireshark 環(huán)境下的網(wǎng)絡(luò)協(xié)議解析與驗(yàn)證方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(3):770-775
[20]范建忠,馬千里.GOOSE 通信與應(yīng)用[J].電力系統(tǒng)及其自動(dòng)化,2007,31(19):85-90.