• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      跨正向隔離裝置文件傳輸協(xié)議的設(shè)計與實現(xiàn)

      2017-09-08 04:59:33張浩然耿戰(zhàn)霞鹿海成
      科技創(chuàng)新與應(yīng)用 2017年24期
      關(guān)鍵詞:實現(xiàn)設(shè)計

      張浩然+耿戰(zhàn)霞+鹿海成

      摘 要:為滿足跨正向隔離裝置傳輸文件的需求,設(shè)計了一種文件傳輸協(xié)議,制定了報文格式及工作機制,給出了發(fā)送端和接收端的狀態(tài)遷移過程。然后基于C++語言/Qt框架,實現(xiàn)了發(fā)送端和接收端的編程。該協(xié)議設(shè)計簡單、易于實現(xiàn),便于擴展,具有一定的通用性。

      關(guān)鍵詞:正向隔離裝置;文件傳輸協(xié)議;設(shè)計;實現(xiàn)

      中圖分類號:TM769 文獻標志碼:A 文章編號:2095-2945(2017)24-0101-03

      引言

      為保障電力信息網(wǎng)絡(luò)的安全性,電力系統(tǒng)根據(jù)安全等級把信息網(wǎng)絡(luò)劃分為I、Ⅱ、Ⅲ等區(qū)。I/Ⅱ區(qū)向Ⅲ區(qū)傳遞數(shù)據(jù)要求有正向隔離裝置做隔離。

      網(wǎng)絡(luò)隔離技術(shù)在確保保障電力信息網(wǎng)絡(luò)安全的同時,也給信息的跨區(qū)通信帶來了不便。本文設(shè)計了一個可透過正向隔離裝置的文件傳輸協(xié)議,據(jù)此實現(xiàn)的文件傳輸系統(tǒng)系統(tǒng),為I/Ⅱ區(qū)向Ⅲ區(qū)的數(shù)據(jù)傳輸提供了很好的支持。

      1 正向隔離裝置工作原理

      正向隔離裝置主要功能體現(xiàn)在禁止兩個區(qū)域的應(yīng)用之間直接建立TCP連接。它將兩個區(qū)域的應(yīng)用之間的TCP連接分解成兩個區(qū)域的應(yīng)用各自到隔離裝置內(nèi)外兩個網(wǎng)卡的兩個TCP虛擬連接。隔離裝置內(nèi)外兩個網(wǎng)卡在裝置內(nèi)部為非網(wǎng)絡(luò)連接。正向隔離裝置工的作模式如圖1所示。

      正向隔離裝置只允許表示層與應(yīng)用層數(shù)據(jù)單向傳輸,即從安全區(qū)III到安全區(qū)I/II的應(yīng)答報文禁止攜帶應(yīng)用數(shù)據(jù)(最多只能通過一個字節(jié)的數(shù)據(jù),而且要么全為0,要么全為1)。

      電力二次系統(tǒng)I/Ⅱ區(qū)與Ⅲ區(qū)增設(shè)正向隔離裝置后,普通的C/S和B/S程序無法穿越該裝置,需按隔離裝置編程規(guī)定修改程序,才能進行數(shù)據(jù)通信。

      這使得常規(guī)網(wǎng)絡(luò)中容易解決的問題,變得復(fù)雜了。如Ⅲ區(qū)的應(yīng)用想要獲得I/Ⅱ區(qū)的文件,常見的文件共享方法如FTP服務(wù)、共享文件夾等都無法使用。需使用專門的跨正向隔離裝置的文件傳輸系統(tǒng)。雖然正向隔離裝置的生產(chǎn)商都提供了基于Java的文件透傳系統(tǒng),但并非所有的設(shè)備都能運行Java程序,特別是資源緊張的嵌入式設(shè)備。而若部署專門的文件傳輸服務(wù)器,又增加了成本。因此,有必要自行開發(fā)跨正向隔離裝置的文件傳輸系統(tǒng)。

      2 文件傳輸協(xié)議

      現(xiàn)有的FTP等文件傳輸協(xié)議都需發(fā)送端和接收端交互大量的控制報文,以對數(shù)據(jù)的發(fā)送、接收、重傳等進行控制。而正向隔離裝置禁止從Ⅲ區(qū)到I/Ⅱ區(qū)的報文攜帶應(yīng)用數(shù)據(jù)。這使得現(xiàn)有協(xié)議都無法使用。因此,本文設(shè)計了一種新的文件傳輸協(xié)議FTPAFID(跨正向隔離裝置文件傳輸協(xié)議,F(xiàn)ile Transfer Protocol Across Forward Isolating Device)以適應(yīng)跨正向隔離裝置傳輸文件的需要。

      2.1 報文格式

      FTPAFID共定義了三種報文。其中數(shù)據(jù)報文和保活報文由發(fā)送端產(chǎn)生,確認報文由接收端產(chǎn)生。

      數(shù)據(jù)報文用于傳送文件。第一個字段(1Byte)表示類型碼;第二個字段(2Byte)表示數(shù)據(jù)長度;從第三個字段開始到報文末為數(shù)據(jù)段。數(shù)據(jù)報文共定義了三種操作碼:文件名稱(值為0x01),文件內(nèi)容(值為0x02)和文件hash字符串(值為0x03)。

      ?;顖笪挠糜谠诓粋魉臀募r檢測通信狀態(tài)。?;顖笪臑橐粋€字節(jié),字節(jié)數(shù)值為0x0f。

      確認報文為一個字節(jié),用于確認接收到的報文。其值為0xff時表示收到的報文正確,而值為0x00時表示收到的報文錯誤或收到的文件校驗錯誤。

      具體的報文結(jié)構(gòu)如圖2所示。

      2.2 工作模式

      FTPAFID協(xié)議被設(shè)計為一種停止等待協(xié)議,采用一問一答方式工作。圖3顯示了FTPAFID協(xié)議在傳輸文件時,正常情況發(fā)送端和接收端的交互過程。

      以傳輸一個文件為例,在開始工作時,F(xiàn)TPAFID的發(fā)送端首先發(fā)送一個文件名報文給接收端。接收端收到報文后返回一個OK報文。發(fā)送端在收到確認報文后發(fā)送一個文件數(shù)據(jù)報文。接收端收到數(shù)據(jù)報文后返回一個OK報文。重復(fù)這個過程直到文件傳送完。最后一個數(shù)據(jù)報文的數(shù)據(jù)長度字段的數(shù)值為0。當接收端收到數(shù)據(jù)長度字段數(shù)值為0的數(shù)據(jù)報文時,就知道文件數(shù)據(jù)傳輸結(jié)束。最后發(fā)送端會發(fā)送一個文件hash字符串報文。接收端在接收完文件后,會計算文件的hash字符串,并與收到的hash字符串進行對比,如兩者一致,就返回OK報文。

      2.3 保活功能和差錯控制

      FTPAFID協(xié)議的收/發(fā)兩端在工作時需經(jīng)過一個正向隔離裝置中轉(zhuǎn),因此無法基于TCP協(xié)議提供的控制功能判斷通信是否中斷,必須自己進行控制。

      FTPAFID的?;罟δ茉O(shè)計為:在空閑時由發(fā)送端定時向接收端發(fā)送?;顖笪模邮斩耸盏綀笪暮蠓祷卮_認報文;當發(fā)送端超時未收到確認報文或接收端超時未收到?;顖笪臅r,判定通信為中斷狀態(tài)。

      ?;罟δ軐邮斩擞绕渲匾?。若沒有?;罟δ埽邮斩藷o法判斷通道上沒有數(shù)據(jù)是因為沒有文件需要傳送,還是發(fā)送端已經(jīng)崩潰。如果發(fā)送端已崩潰,使得在接收端上留下一個開放連接,而接收端又在等待發(fā)送端的數(shù)據(jù),則發(fā)送端將永遠等待下去。

      因為正向隔離裝置只允許接收端返回0xff和0x00兩種報文,無法表示太多含義,所以FTPAFID的差錯控制實現(xiàn)的很簡單。無論是在傳送文件還是在空閑狀態(tài),發(fā)送端在超時未收到確認報文或收到的確認報文為0x00時都直接關(guān)閉通道。接收端在超時未收到報文時直接關(guān)閉通道;而在文件傳輸過程中收到錯誤報文或文件傳輸完畢后文件校驗錯誤時,先返回值為0x00的ERR報文,然后關(guān)閉通道。

      2.4 發(fā)送端狀態(tài)變遷

      FTPAFID發(fā)送端首先向接收端(實際是隔離裝置)發(fā)起連接請求,建立連接。建立連接后,發(fā)送端處于空閑狀態(tài)。如果無文件需要發(fā)送,則定時發(fā)送?;顖笪模源_認接收端工作正常。若有文件需要發(fā)送,則先發(fā)送文件名稱報文;收到確認后繼續(xù)發(fā)送文件內(nèi)容報文;按照發(fā)送/確認機制持續(xù)發(fā)送文件內(nèi)容報文直到文件內(nèi)容完全傳送完畢;最后,發(fā)送端會發(fā)送文件hash報文,收到確認后完成整個文件的傳送并返回空閑狀態(tài)。接收端在發(fā)送任何報文后,如果超時未收到確認報文或收到ERR報文,都會關(guān)閉連接停止運行。這些工作流程都能從圖4所示的發(fā)送端狀態(tài)變遷圖中得出。endprint

      2.5 接收端狀態(tài)變遷

      FTPAFID接收端接收發(fā)送端(實際是隔離裝置)發(fā)起的連接請求并建立連接,隨后進入空閑狀態(tài)。此時,接收端會等待發(fā)送端傳送來的報文。如收到?;顖笪?,接收端會發(fā)送OK報文,并繼續(xù)等待。如收到文件名稱報文,則在發(fā)送OK報文后,進入等待文件內(nèi)容狀態(tài)。接收端持續(xù)接收文件內(nèi)容報文,直至收到數(shù)據(jù)長度為0的文件內(nèi)容報文。此時,接收端判定文件內(nèi)容已全部傳送完畢,進入等待文件hash狀態(tài)。接收端收到文件hash報文并校驗無誤后,發(fā)送OK確認報文,進入空閑等待狀態(tài)。接收端在等待任何報文的狀態(tài)下,如果超時未收到報文,都會直接關(guān)閉連接;如果收到的報文無法識別,接收端會先回復(fù)一個ERR報文,然后關(guān)閉連接停止運行。圖5所示為FTPAFID接收端的工作狀態(tài)變遷。

      3 協(xié)議實現(xiàn)

      基于FTPAFID協(xié)議開發(fā)的跨正向隔離裝置文件傳輸系統(tǒng)已成功應(yīng)用于許繼直流輸電系統(tǒng)故障分析處理輔助決策平臺。整個文件傳輸系統(tǒng)基于C++語言/Qt框架實現(xiàn),可分為發(fā)送軟件和接收軟件兩部分,分別部署在正向隔離裝置的兩側(cè)。

      3.1 發(fā)送端實現(xiàn)

      發(fā)送軟件的發(fā)送器類負責具體的文件傳輸過程,它實現(xiàn)了FTPAFID的發(fā)送端部分。發(fā)送器結(jié)構(gòu)如圖6所示。

      發(fā)送器內(nèi)部持有一個QTcpSocket對象client負責實際的通信功能,和一個定時器keepAliveTimer用于實現(xiàn)?;疃〞r功能。

      connect方法通過client對象來和接收端建立連接。在建立連接后,connect方法還會激活?;疃〞r器keepAliveTimer,?;疃〞r器會定時調(diào)用sendKeepAlive方法發(fā)送?;顖笪?。disConnect方法則通過client對象實現(xiàn)斷開連接功能,同時關(guān)閉?;疃〞r器。

      sendFile方法調(diào)用了sendName、sendData和sendHash方法來發(fā)送文件。sendFile方法在開始執(zhí)行時會關(guān)閉?;疃〞r器,在方法執(zhí)行完畢后會打開?;疃〞r器。從而避免在發(fā)送文件時插入?;顖笪摹?/p>

      sendName、sendData和sendHash方法分別用于發(fā)送文件名稱、文件內(nèi)容和文件hash字符串,它們都是通過client對象來實現(xiàn)具體的報文發(fā)送功能。

      每發(fā)送一幀報文,發(fā)送器都會調(diào)用waitAnswer方法來等待接收端的確認。waitAnswer方法通過client對象來接收確認報文。如接收確認報文超時或確認報文為ERR(0x00),waitAnswer方法就調(diào)用disconnect方法關(guān)閉連接,并發(fā)出信號通知調(diào)用者文件傳輸失敗。

      3.2 接收端實現(xiàn)

      接收軟件的接收器負責具體的文件接收,它實現(xiàn)了FTPAFID協(xié)議的接收端部分。接收器結(jié)構(gòu)如圖7所示。

      接收器內(nèi)部的QTcpServer對象listener負責監(jiān)聽端口,QTcpSocket對象worker負責具體的通信。

      open方法負責初始化listener,并調(diào)用listener監(jiān)聽端口。在接受連接請求后,將產(chǎn)生套接字對象賦值給worker,最后調(diào)用run方法處理通信工作。close方法用于停止監(jiān)聽端口,關(guān)閉listener。

      run方法內(nèi)部循環(huán)調(diào)用worker對象來接收報文。收到報文后,run方法會用doProcess來處理報文。stop方法則用于停止run的循環(huán)邏輯,并關(guān)閉worker。

      doProcess是一個函數(shù)指針。接收器利用doProcess在內(nèi)部維持一個狀態(tài)機,用以判定什么時候該接收哪一種報文。它初始指向doPackage。doPackage根據(jù)報文的操作碼區(qū)分調(diào)用doKeepAlive或doName。

      doKeepAlive方法通過worker對象向發(fā)送端返回一個OK報文。

      doName方法先通過worker對象返回一個OK報文,然后按照接收到的文件名創(chuàng)建文件對象file,最后將doProcess指向doData來處理文件數(shù)據(jù)報文。

      doData方法使用file保存接收到的內(nèi)容;在處理文件內(nèi)容報文時doData會判斷是否到達文件末尾,如果未到達,doProcess繼續(xù)指向doData方法,否則doProcess會指向doHash方法來處理文件hash字符串報文。

      doHash方法在接收完文件hash字符串后,會將doProcess重置為指向doProcess方法,從而完成一個狀態(tài)循環(huán)。

      4 結(jié)束語

      本文設(shè)計的跨正向隔離裝置傳輸文件的通信協(xié)議,完全能夠滿足電力系統(tǒng)中跨區(qū)傳輸文件的需求,彌補了信息跨區(qū)傳輸?shù)牟槐銌栴}。文中介紹了協(xié)議的報文格式、工作機制和狀態(tài)遷移過程。該協(xié)議設(shè)計簡單、易于實現(xiàn),便于擴展,具有一定的通用性。本文給出了基于C++語言/Qt框架的實現(xiàn)作為參考,不過采用其他語言或框架也很容易實現(xiàn)該協(xié)議。協(xié)議的實現(xiàn)可以采用多種方式,協(xié)議的設(shè)計也可以根據(jù)具體的實際需要來擴展。

      參考文獻:

      [1]王子,徐澄宇.正向隔離裝置在電力信息外網(wǎng)中的應(yīng)用[J].電腦開發(fā)與應(yīng)用,2010,23(8):59-61.

      [2]南瑞集團公司信息通信技術(shù)分公司.SysKeeper-2000網(wǎng)絡(luò)安全隔離設(shè)備(正向單比特版)用戶手冊[Z].2010.endprint

      猜你喜歡
      實現(xiàn)設(shè)計
      何為設(shè)計的守護之道?
      《豐收的喜悅展示設(shè)計》
      流行色(2020年1期)2020-04-28 11:16:38
      瞞天過?!律O(shè)計萌到家
      設(shè)計秀
      海峽姐妹(2017年7期)2017-07-31 19:08:17
      有種設(shè)計叫而專
      Coco薇(2017年5期)2017-06-05 08:53:16
      信息系統(tǒng)安全評價系統(tǒng)設(shè)計及實現(xiàn)
      高校聲像檔案數(shù)字化管理的實現(xiàn)路徑
      辦公室人員尚需制定個人發(fā)展規(guī)劃
      蘇州信息學院教務(wù)管理系統(tǒng)的設(shè)計與實現(xiàn)
      如何實現(xiàn)人企合一
      新晃| 怀柔区| 麟游县| 兴宁市| 开鲁县| 延津县| 辽中县| 海口市| 宾川县| 阿拉尔市| 克东县| 泸西县| 许昌县| 江都市| 加查县| 长治县| 大洼县| 离岛区| 黄浦区| 原阳县| 阿拉善盟| 库车县| 海兴县| 桦甸市| 芒康县| 无棣县| 娱乐| 芮城县| 贺兰县| 元氏县| 阿鲁科尔沁旗| 呼伦贝尔市| 马鞍山市| 宝丰县| 新昌县| 莱州市| 茌平县| 崇州市| 孟村| 黄龙县| 福泉市|