閆培哲
(忻州師范學院,山西 忻州 034000)
?
網(wǎng)絡文件傳輸技術的研究與實現(xiàn)*
閆培哲
(忻州師范學院,山西 忻州 034000)
在現(xiàn)代信息社會中,信息的交換、共享顯現(xiàn)的尤為重要。局域網(wǎng)作為計算機網(wǎng)絡中的終端成員,在企事業(yè)單位中起著至關重要的作用。本文介紹了計算機網(wǎng)絡中文件的傳輸實現(xiàn)技術,并針對局域網(wǎng)特點,設計了一種較為高效安全的局域網(wǎng)文件傳輸系統(tǒng)設計方案,實現(xiàn)了網(wǎng)絡發(fā)現(xiàn),數(shù)據(jù)的實時壓縮、實時加密,流量控制等功能。
局域網(wǎng)發(fā)現(xiàn);文件傳輸;網(wǎng)絡流量控制
基于局域網(wǎng)的文件傳輸系統(tǒng)能夠讓局域網(wǎng)內(nèi)部資料實現(xiàn)快捷,準確,安全的共享。文件傳輸系統(tǒng)主要功能是自動獲取局域網(wǎng)內(nèi)用戶的主機名,IP地址以及其他信息,最終通過TCP/IP協(xié)議和UDP協(xié)議實現(xiàn)點到點文件傳輸功能。
在目前的局域網(wǎng)中信息的傳輸是開放的,所以任何人都可以借助一些特殊的工具(如抓包工具)實現(xiàn)對這些信息的獲取,這樣就大大的降低了信息的安全性,甚至可能會帶來巨大的經(jīng)濟損失。另外,雖然目前局域網(wǎng)的帶寬已經(jīng)達到10 M/s到100 M/s,甚至出現(xiàn)了千兆以太網(wǎng),但是可用帶寬作為一種資源,它的不足會嚴重影響到整個局域網(wǎng)的服務質(zhì)量,使得人們的工作效率大幅度下降。
設計基于自身局域網(wǎng)特點的文件傳輸工具顯得尤為重要。
計算機與計算機之間的網(wǎng)絡通訊實際上是運行在這兩個計算機上的進程之間的通訊,如圖1所示。
圖1 網(wǎng)絡通訊示意圖
網(wǎng)絡中使用一個三元組來標識全局中的唯一進程:
(協(xié)議,本地地址,本地端口號)
這樣一個三元組稱作半相關(half-association),它指定的是連接的一端,如果需要確定一個完整的網(wǎng)絡通訊,則需要確定兩個進程,并且只能使用一種高層協(xié)議,這就需要下面的五元組,稱為全相關(association):
(協(xié)議,本地地址,本地端口號,遠程地址,遠程端口號)
Heartbeat服務的目的就是收集和維護這些信息。
在本文中,協(xié)議主要用到TCP和UDP兩種協(xié)議,用于發(fā)送和接受控制數(shù)據(jù)的Socket使用UDP協(xié)議,而用于文件傳輸?shù)腟ocket使用TCP協(xié)議。
根據(jù)SOCK_STREAM和SOCK_DGRAM兩種類型的Socket的工作模式,可以知道,應用程序可以在整個生命周期中重復使用一個SOCK_DGRAM類型的Socket來向任意客戶端發(fā)送數(shù)據(jù)包形式數(shù)據(jù),而利用一個SOCK_STREAM類型的Socket在請求連接或接受連接時返回的Socket來進行所需的流式數(shù)據(jù)通訊。
另外,考慮到安全性和穩(wěn)定性等因素,客戶端可以設置三種端口用于整個生命周期中的網(wǎng)絡通訊,分別為Heartbeat Service Port(每個HeartbeatService 設置需要一個端口,以適應不同Heartbeat Service Port的客戶端群),TCP Port(唯一)和UDP Port(唯一)。其中,TCP Port和UDP Port隨機創(chuàng)建,然后通過端口固定的Heartbeat服務來通知其他客戶端自己的TCP Port和UDP Port信息。
2.1Heartbeat服務的實現(xiàn)
HeartbeatService主要是以計時器為驅(qū)動的服務,其中包含一個Heartbeat Info List,存儲了所有Heartbeat服務節(jié)點。
在客戶端啟動后,Heartbeat服務便開始運行。初始化過程將遍歷 Broadcast List,對每一個CHeartbeatNode做如下處理。
1) 讀取其中的Heartbeat服務設置,通過CommManager為其創(chuàng)建CommNode數(shù)據(jù),并將此數(shù)據(jù)指針填入其中;
2) 使創(chuàng)建的CommNode中的Socket開始監(jiān)聽;
3) 將此CHeartbeatNode注冊到HeartbeatService中,開始廣播Heartbeat數(shù)據(jù)。
至此開始,HeartbeatService將伴隨著客戶端的整個生命周期,定時廣播HeartbeatData,并監(jiān)聽其他客戶端廣播的HeartbeatData,并根據(jù)前文中的處理方法處理對應的Buddy。
當BuddiesList更改了自身的數(shù)據(jù)后,會同時更新一個時間戳,UI部分在定時檢查BuddiesList時會檢查這個時間戳,以確定是否更新界面。
2.2數(shù)據(jù)加密
目前,網(wǎng)絡安全傳輸方案中經(jīng)典的加密方法分為對稱加密和非對稱加密兩種。對稱加密運算速度快但容易被攻擊和破解;非對稱加密算法復雜,不易被破解,但加密速度慢,不適宜傳輸大量的安全數(shù)據(jù)。由于考慮到文件傳輸?shù)奶攸c,本文使用的是對稱加密算法。
由于本文所使用的加密算法屬于對稱加密算法,所以便需要一套較為健壯的密鑰生成算法。密鑰的生成需要以下信息:接收方IP地址:peer_ip;接收方端口:peer_port;發(fā)送方userhash:userhash;一個16位隨機數(shù):randomkey。這里用到了發(fā)送方和接收方雙方的信息,保證了信息的分散;另一方面,在一定程度上也防止了虛假Package的干擾(如果無法利用擁有的userhash正確解密Package數(shù)據(jù),則這個Package可能屬于虛假Package)。
創(chuàng)建函數(shù)首先會創(chuàng)建一個長度為18的緩沖區(qū)key_data,緩沖區(qū)將被分為三部分:
A0(13Bytes)A1(2Bytes)A2(3Bytes)
圖2緩沖區(qū)示意圖
各部分按照如下規(guī)則填充數(shù)據(jù):A0:userhash中從第3字節(jié)開始的13字節(jié)數(shù)據(jù);A1:peer_port與randomkey異或的結果;A2:peer_ip的結尾3字節(jié)數(shù)據(jù);填充完畢后生成其md5值,并根據(jù)此md5值利用RC4初始化算法KSA最終產(chǎn)生加密密鑰。
解密過程與加密過程相反,是將加密時用于創(chuàng)建密鑰的隨機數(shù)和原始數(shù)據(jù)的md5值從加密數(shù)據(jù)中獲取出來,然后根據(jù)隨機數(shù)和相關信息創(chuàng)建密鑰解密加密數(shù)據(jù),再取得解密后數(shù)據(jù)的md5值,并與原始數(shù)據(jù)的md5值比較,判斷解密過程是否成功,成功則返回解密數(shù)據(jù)。
壓縮過程和解壓縮過程是在Package中完成的,Package中設計了三個函數(shù)用于壓縮和解壓,分別是:void CPacket::PackPacket(void);bool CPacket::UnPackPacket(UINT nUnPackSize);bool CPacket::UnPackPacket(void)。壓縮過程指的是Package在發(fā)送之前將會被壓縮,當壓縮之后的長度小于原始數(shù)據(jù)長度時,發(fā)送壓縮數(shù)據(jù),否則依然發(fā)送原始數(shù)據(jù)。解壓縮過程使用Package的兩個成員函數(shù),UnPackPacket(UINT nUnPackSize)解壓當前Package,nUnPackSize限制了解壓后數(shù)據(jù)的最大長度,如果超過這個長度,則認為解壓失敗。此函數(shù)同樣為解壓當前Package,解壓方法大致相同,與上一個函數(shù)不同的是它忽略了解壓后最大長度的限制。
在對壓縮功能做測試時,使用了上述的函數(shù)對Regedit.exe進行了壓縮和解壓,結果如下:
圖3 Regedit.exe壓縮解壓效果圖
其中,regedit_compressed.exe為regedit.exe壓縮后得到的文件,regedit_uncompressed.exe為將regedit_compressed.exe解壓后得到的文件,壓縮率約為17.22%,壓縮結果較為理想。
流量的控制目的是為了限制網(wǎng)絡傳輸時傳輸速率的上限,保證有限地使用網(wǎng)絡帶寬,防止帶寬耗盡,影響其他需要占用網(wǎng)絡帶寬的應用程序或主機。
流量控制可以在硬件層、驅(qū)動層或者在應用程序?qū)又型瓿?。這里將流量控制處理放在應用程序?qū)又?,以時間片調(diào)度的方式來實現(xiàn)。在每個時間片中,完成一組TransferTask的處理。
前文中提到當應用層需要發(fā)送一個Package時,它并不直接將這個Package通過相應的受控Socket發(fā)送出去,而是將其放入BandThrottler中的任務隊列,這種任務被稱作TransferTask,通常為發(fā)送或接受一個Package。
一個TransferTask的處理流程如圖4所示。
圖4 TransferTask的處理流程
當一個TransferTask創(chuàng)建并放入任務隊列之后,它將開始等待獲得傳輸權,當獲得了傳輸權后,它便被Task Processor從TaskQueue中提取出來進行處理。
TaskQueue中包含兩個隊列,如圖5。
圖5 TaskQueue隊列圖
Temp Queue用于暫時存放新添加的TransferTask,相當于應用層和Task Queue之間的一個緩沖區(qū)。Temp Queue 和Process Queue各有一個互斥鎖,保證了各線程在同時訪問這兩個隊列時的數(shù)據(jù)安全。當應用層各個線程希望添加自己的任務到TaskQueue時,由于Temp Queue的互斥鎖,可以依次完成添加任務;當Process Queue由于Task Processor提取任務鎖閉時,應用層仍可以將任務提交到Temp Queue,而不必等待Process Queue解鎖;當Process Queue中無任何任務時,將執(zhí)行一次從Temp Queue中提取所有任務到自身的過程。
為了控制整個傳輸過程,這里將時間劃分為一個個長度相同的時間片,并為當前的時間片計算出可以用于傳輸?shù)淖畲罅髁恐?,在每個時間片內(nèi),BandThrottler如果發(fā)現(xiàn)TaskQueue中有任務,將開始執(zhí)行一個循環(huán),不斷提取TaskQueue中的每個任務并進行處理,每次處理將會從單位時間片的最大傳輸流量值中減去此次任務執(zhí)行所需的流量,當流量耗盡時,將停止處理并在剩余的時間內(nèi)進入休眠,以等待下一個時間片。
為了獲得精確的系統(tǒng)時間,這里使用了timeGetTime()。經(jīng)反復測試,每個時間片(即TIME_BETWEEN_UPLOAD_LOOPS)設置在200毫秒較為適宜。
通過上面的設計,流量控制基本實現(xiàn)了其功能。
至此,主要功能的實現(xiàn)大致完成。
本文提出一種結合了加密、壓縮和流量控制的文件傳輸系統(tǒng)。使用加密來提高數(shù)據(jù)的安全性,使用壓縮來減小傳輸流量,并通過一套算法來控制傳輸過程。針對文件傳輸?shù)奶攸c,本文使用的是對稱加密方式,采用RC4算法;壓縮使用了目前較為成熟的zlib壓縮函數(shù)庫。
[1]齊治昌,譚慶平,寧洪.軟件工程[M].第2版.北京:高等教育出版社,2004.
[2]Steve McConnell.代碼大全[M].金戈,湯凌,等譯.北京:電子工業(yè)出版社,2006.
[3]謝希仁.計算機網(wǎng)絡 [M].第2版.北京:電子工業(yè)出版社,1999.
[4]韓希義.計算機網(wǎng)絡基礎 [M].北京:高等教育出版社,2004.
[5]Dr. International.國際化軟件開發(fā)[M].北京:機械工業(yè)出版社,2003.
[6]Schneier B.Applied Cryptography,Protocols.Algorithms and Source Code in Co[M].New York:John Wiley & Sons,1996.
[7]孟慶樹,王麗娜,傅建明,等.密碼編碼學與網(wǎng)絡安全原理與實踐[M].北京:電子工業(yè)出版社,2006.
[8]馬永勤,李正文,汪劉艷.基于Winsock的文件互傳[J].重慶大學學報,2004,28: 49-52.
[9]侯俊杰.深入淺出MFC[M].武漢:華中科技大學出版社,2001.
[10]孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
[11]孔鵬.Visual C++技術手冊[M].北京:機械工業(yè)出版社,2007.
[12]王曉鵬.TCP/IP下的Socket及Winsock通信機制[J].航空計算技術,2004,34: 126-128.
[13]Dana Moore,John Hebeler.對等網(wǎng)[M].北京:清華大學出版社,2003.
[14]Microsoft.Microsoft Visual C++分布式應用程序開發(fā)(英文版)[M].北京:北京大學出版社,2001.
[15]黃強.WINDOWS網(wǎng)絡編程[M].北京:人民郵電出版社,2003.
Research and Implementation on Network File Transmission Technology
Yan Peizhe
(XinzhouTeachersUniversity,XinzhouShanxi034000,China)
In the modern information society, information exchange and sharing appears particularly important. LAN, as a computer network terminal member, plays a crucial role in enterprises and institutions. This paper introduces the transmission technology of files in the computer network, and according to the characteristics of the local area network, it designs a more efficient and safe network file transmission system; realizes the network discovery, data real-time compression, real-time encryption, flow control and other functions.
LAN discovery; file transmission; network flow control
2016-07-05
忻州師范學院院級科研基金資助項目(201111)
閆培哲(1981- ),男,碩士,忻州師范學院計算機助教,主要研究方向為網(wǎng)絡開發(fā)、教育管理。
1674- 4578(2016)04- 0092- 03
TP 393.093
A