任晨 劉立 陳鵬



為保障網絡安全,通常會把網絡分為內、外兩個不同安全級別的網絡環境。內網為一般企事業單位內部使用網絡,安全等級較高,是防控嚴格的可信網絡;外網擁有開放而豐富的資源,但是安全等級比較低,為不可信的網絡。為保證2個不同安全等級網絡的物理連接和網絡協議互聯互通,通常會采用隔離網閘,以信息“擺渡”的方式,實現2個網絡間的數據交換。然而基于安全考慮,網閘通常會對傳輸速度和內容進行限制,對于數據量較小的信息交換一般問題不大,但是對于數據量較大的大文件,傳輸耗費時間較長,而網閘使用的實際情況是多個應用共同使用,網絡環境取決于各個應用共同作用的結果,如果長時間傳輸,碰到網絡比較擁堵的時候,會對傳輸造成影響,嚴重的時候甚至會導致連接主動斷開,進而造成數據重傳風險,影響傳輸效率。
為此,基于隔離網閘的實際使用情況,筆者提出一種基于隔離網閘的大文件傳輸方案。方案從兩個方面改進傳輸效率,首先盡可能減少傳輸的數據量,采用壓縮率最高的改進LZMA算法,最大限度減少傳輸數據量;然后盡可能減少或規避連接斷開帶來的數據重傳風險,采用文件切片和動態反饋傳輸算法,把原有整個大文件重傳變為切片重傳,大大減少重傳量,同時利用動態反饋傳輸算法盡量避免文件過快傳輸帶來的斷開風險。經過實際驗證,該方案能夠動態適應網絡變化情況,大大提高傳輸大文件的效率。
隔離網閘
隔離網閘是內部網絡與外部網絡之間的一個安全防護裝置,可以識別非法請求并阻止超越權限的數據訪問和操作,從而有效地抵御病毒、黑客等惡意破壞和攻擊活動。隔離網閘由外網處理單元、內網處理單元和安全隔離模塊3個部分組成,內網和外網處理單元分別處理內外網的連接請求,安全隔離模塊包含了控制單元和存儲介質,控制單元從硬件層面上實現了數據交換區在任一時刻只與內網系統或外網系統相連,這樣便能保證在任一時刻內網與外網沒有連通,從而實現了鏈路的物理隔離。存儲介質用于在隔離網閘進行數據通信過程中,臨時保存內外網的連接數據,在發送方斷開后,從存儲介質中取出發送給接受方。由于一次數據交互需要進行連接一方控制單元、傳輸數據、保存數據到存儲介質、斷開原有連接控制單元、再使用另外一方連接控制單元、從存儲介質取出數據并傳輸等6個步驟,隔離網閘相較于其他一些用于安全防護設備,性能在傳輸過程中損耗較大。基于大文件本身的特性和隔離網閘的情況,大文件傳輸會長時間占用隔離網閘帶寬,同時對存儲介質中的數據流轉也帶來巨大挑戰,會給隔離網閘的數據傳輸帶來風險,進而影響傳輸效率。如何保證傳輸效率,筆者結合國標《GB/T20279-2015信息安全技術網絡和終端隔離產品安全技術要求》對隔離網閘提出的吞吐量和性能延遲要求,對大文件進行分割傳輸。
在實際使用過程中,一般采用圖1所示網絡架構。圖1中外網想要請求內網服務器,必須通過隔離網閘,隔離網閘安全檢驗通過后,再通過路由等方式發送給對應內網服務器,外網會有多個應用同時請求數據通過隔離網閘并發送到不同的內網服務器,內網服務器收到請求后,根據請求類型和內容進行回復。
結合隔離網閘的物理特性和實際應用情況,為保證大文件的傳輸效率,需要根據隔離網閘的實際情況進行測試,把測試結果作為方案的輸入項。測試過程中,把吞吐量和性能延遲指標綜合為傳輸速率,結合切片文件的傳輸過程,得到切片大小相對的傳輸效率值。具體做法為準備不同大小的切片文件,每次測試使用一種大小的切片文件進行反復持續傳輸,根據傳輸的數據總量和傳輸的總時間得到平均傳輸速率,多次測試后,得到以文件大小為橫軸、傳輸速率為縱軸的負債測試結果,取傳輸速率最高值作為推薦帶寬值,同時相對應的切片文件大小則為推薦的切片文件大小。
數據壓縮
隔離網閘基于安全考慮,對網絡流量有非常嚴格的限制。大文件如果想在內外網通過隔離網閘傳播,必須盡可能減少傳輸文件的大小。如何在保證文件完整的情況下,盡量減少傳輸文件的大小?針對這種情況,一般會采用對文件進行無損壓縮后再傳輸的方式,文件壓縮算法一般有RLE、LZW、LZSS、bzip2、gzip等。LZMA是通過Deflate和LZ77算法改良和優化后的壓縮算法,該算法壓縮率相較于RLE、LZW、LZSS、bzip2(-9)、gzip(-9)等壓縮算,表現更優異。為了更大提高壓縮率和安全性,采用LZMA算法進行實驗,根據該算法設計LzmaDeal壓縮類,核心內容如圖2所示。
該類中包含兩個成員變量,key表示用于加密密鑰、sMap表示壓縮字典,采用字典格式,字典key為整形,value值使用類WsData,類中包含權值和二進制串。類中一共包含5個核心方法,其中Init是在類實例化的時候使用,主要作用是初始sMap成員變量;Encryption方法用來加密數據,傳入src表示需要加密的數據,dst表示加密后的數據,方法返回值為bool類型,表示加密是否成功;Compress方法用來壓縮文件,該方法中可以分多個線程進行壓縮,src表示帶壓縮數據,dst表示壓縮結果,threads表示使用線程數據。SmapSearch是sMap字典搜索方法,src表示待編碼字符串,dst返回src編碼結果;CompressFile功能為實現文件壓縮,傳入參數為源文件和壓縮文件地址,該方法中會調用其他幾個方法完成文件的加密和壓縮。經過測試,該壓縮算法的壓縮率一般能達到35%左右,有些文件甚至能達到20%。按照該效率計算,傳輸數據量能夠減少65%—80%,對于網閘的壓力減少和傳輸效率的提高都有很大的幫助,同時該算法使用了加密算法,兼顧了網絡數據安全。
切片及動態反饋
使用網閘時會給使用網閘的應用分配一定大小帶寬,在內外網傳輸過程中,這個帶寬是傳輸文件時能夠達到的最大帶寬。但是網閘在實際使用中,經常是大量應用共同使用同一個網閘。當其他應用比較忙、對網閘的使用率比較高的時候,傳輸應用在使用網閘時無法達到最大帶寬,如果對傳輸速率不進行限制,網閘會基于安全考慮,主動斷開連接。為了防止出現斷開連接導致的數據重傳,同時最大利用網閘帶寬,筆者采用對文件進行切片的方式進行傳輸,同時在傳輸時利用動態反饋的傳輸機制,調整傳輸速率。
傳輸切片文件時首先需要網絡連接請求操作,如果切片太小,連接操作會耗費大量時間,如果切片過大,動態反饋機制會延遲,有被強制斷開連接的風險,所以切片必須根據實際傳輸情況進行調整。假定X(n),n=1,2,3…N代表每次切片的大小, 假定P(n),n=1,2,3…N代表每次切片傳輸的時間,T代表推薦調整間隔。為保證調整間隔接近T,采用前n-1次傳輸的情況按照公式求取最佳切片文件大小:
該公式先求得第1到n-2次的傳輸平均速率,然后與n-1次的速率求平均速率,得到結果乘以T得到切片文件大小。其中X(1)和X(2)的值為T與最大帶寬的乘積。其中T作為可變參數,可根據實際情況調整該參數。
切片完成后進行數據傳輸,為保證傳輸數據效率,使用如圖3所示流程進行數據傳輸。
第一步,對數據進行切片,按照切片節中的X(n)進行計算切片大小。若文件傳輸完成,則結束傳輸。第二步,傳輸切片文件,并記錄傳輸的開始和結束時間。第三步,判斷傳輸過程是否正常,如果正常跳到第四步,如果傳輸錯誤則跳到第五步。第四步,使用動態反饋算法計算確定傳輸速率是否過快,如果正常則跳到第一步,如果速率過快,則根據動態反饋算法計算結果,使用睡眠的方式暫停指定時間,然后再回到第一步,抑制傳輸速率過快。第五步,標記當前切片傳輸失敗,然后把當前切片作為下一次的傳輸切片數據。在重新傳輸前,需要先判斷該切片是否已經失敗過3次或3次以上,如果不是則直接回到第一步,如果是則需要長時間睡眠等待。該睡眠等待時間作為可變參數,可以根據實際情況調整。
動態反饋算法根據傳輸速率動態調整傳輸過程,通過睡眠方式抑制傳輸過快帶來的風險。動態反饋算法結合切片文件大小、傳輸時間、分配帶塊、上一次傳輸速率等因素。假定使用X(n),n=1,2,3…N代表每次切片的大小,使用T1(n),n=1,2,3…N表示每次傳輸開始時間,使用T2(n),n=1,2,3…N表示傳輸結束時間,則可以使用公式X(n)/(T2(n)-T1(n))計算出當前文件的傳輸速率,假定網閘分配最大帶寬為R,使用D(n),n=1,2,3…N表示第n次傳輸速率偏差值,結合上一次切片傳輸偏差值使用公式(X(n)/(T2(n)-T1(n))-R+D(n-1))/2得到當次實際偏差值,為避免偏差值多余強烈變化,使用P表示單次最大偏差值,使用MIN表示取最小值,使用如下公式表示速率偏差值的求取:
其中R,P值為可變參數,其中R值在實際測試過程中,可以不必寫理論值,推薦為理論值的90%。D(0)=0,若D(n)<0,則D(n)=0。得到速率偏差之后,如果速率偏差值大于0,則需要做睡眠處理,睡眠時間使用如下公式計算:
本方案通過實際環境測試,在保證文件正常傳輸的情況下,能夠以接近最大帶寬的速率進行傳輸。
隔離網閘廣泛應用于內外網數據通信,而大文件以其特殊性,在經過隔離網閘時需要特別予以關注。本文所提出的解決方案,能夠基于隔離網閘情況下,保證大文件的傳輸效率,進而保證業務的正常進行。同時該方案還可以擴展到類似大文件數據交互的限速環境中,通過應用本文所提供的單個或者所有方法結合的方式,能夠有效減少因為大文件傳輸效率過慢帶來的影響。
(作者單位:國網新疆電力有限公司物資公司)