適用于分布式網(wǎng)絡的udp傳輸方法和系統(tǒng)的制作方法
【技術(shù)領域】
[0001]本發(fā)明涉及分布式網(wǎng)絡通訊技術(shù)領域,尤其涉及一種適用于分布式網(wǎng)絡的UDP傳輸方法和系統(tǒng)。
【背景技術(shù)】
[0002]在對等分布式網(wǎng)絡通訊中,有一個技術(shù)難題是關于NAT穿越的問題,NAT穿越(NATtraversal)涉及TCP/IP網(wǎng)絡中的一個常見問題,即在處于使用了 NAT設備的私有TCP/IP網(wǎng)絡中的主機之間建立連接的問題。盡管有許多穿越NAT的技術(shù),但沒有一項是完美的,這是因為NAT的行為是非標準化的。這些技術(shù)中的大多數(shù)都要求有一個公共服務器,而且這個服務器使用的是一個眾所周知的、從全球任何地方都能訪問得到的IP地址。一些方法僅在建立連接時需要使用這個服務器,而其它的方法則通過這個服務器中繼所有的數(shù)據(jù)一一這就引入了帶寬開銷的問題。
[0003]解決穿透NAT問題的一個思路是,私網(wǎng)中終端通過某種機制預先得到出口 NAT上的對外地址,然后在負載中所填寫的地址信息直接填寫出口 NAT上的對外地址,而不是私網(wǎng)內(nèi)終端的私有IP地址,這樣負載中的內(nèi)容在經(jīng)過NAT時就無需被修改了,只需按普通NAT流程轉(zhuǎn)換報文頭的IP地址即可,負載中的IP地址信息和報文頭地址信息是一致的。STUN協(xié)議就是基于此思路來解決應用層地址的轉(zhuǎn)換問題。STUN的全稱是Simple Traversal ofUDP Through Network Address Translators,即 UDP 對 NAT 的簡單穿越方式。
[0004]STUN協(xié)議的一個重要點是基于UDP協(xié)議進行數(shù)據(jù)傳輸,UDP協(xié)議面向無連接通信,沒有三次握手的需求,網(wǎng)絡設備在通信時,UDP數(shù)據(jù)擁有比TCP數(shù)據(jù)更高的優(yōu)先通信權(quán)利,這點使得UDP數(shù)據(jù)在通信上更加的快速,但是當網(wǎng)絡擁堵時,通信設備同樣會優(yōu)先丟棄UDP數(shù)據(jù),這種設計方式會導致UDP數(shù)據(jù)出現(xiàn)丟失的問題,同時協(xié)議沒有規(guī)定相應的流控制方式,自然也不會保證數(shù)據(jù)的順序到達。在沒有流控制的情況下,UDP數(shù)據(jù)可能出現(xiàn)丟失、亂序到達的問題,同樣由于沒有流控制,如果開發(fā)控制不當,可能導致數(shù)據(jù)風暴問題。在系統(tǒng)驅(qū)動實現(xiàn)上,由于所有的UDP數(shù)據(jù)接收時,使用共享的數(shù)據(jù)緩沖區(qū),設置不當大小的緩沖區(qū),可能會增加數(shù)據(jù)包的丟失問題,這個就是為什么UDP協(xié)議無法實現(xiàn)高并發(fā)的服務器原因所在。
【發(fā)明內(nèi)容】
[0005]在下文中給出關于本發(fā)明的簡要概述,以便提供關于本發(fā)明的某些方面的基本理解。應當理解,這個概述并不是關于本發(fā)明的窮舉性概述。它并不是意圖確定本發(fā)明的關鍵或重要部分,也不是意圖限定本發(fā)明的范圍。其目的僅僅是以簡化的形式給出某些概念,以此作為稍后論述的更詳細描述的前序。
[0006]本發(fā)明提供一種針對對等分布式網(wǎng)絡設計的、支持穿越MT、支持數(shù)據(jù)重發(fā)的適用于分布式網(wǎng)絡的UDP傳輸方法和系統(tǒng),并進一步將重發(fā)機制、數(shù)據(jù)校驗、數(shù)據(jù)壓縮、RTT計算、應用層數(shù)據(jù)拆分與重組集中于一個模塊中,打造一個支持面向?qū)ο缶幊痰陌踩咝У膫鬏斈K,為對等網(wǎng)絡傳輸提供更好的通訊支持。
[0007]本發(fā)明的一個方面提供一種適用于分布式網(wǎng)絡的UDP傳輸方法,所述分布式網(wǎng)絡中包括若干網(wǎng)絡節(jié)點,所述網(wǎng)絡節(jié)點中包括傳輸模塊和上層應用模塊,所述傳輸模塊包括至少一個鏈接單元,所述鏈接單元包括一對發(fā)送子單元和接收子單元,所述發(fā)送子單元內(nèi)設有發(fā)送緩沖器和發(fā)送定時器,所述接收子單元內(nèi)設有接收緩沖器和接收定時器,所述方法包括:
[0008]S13:第一發(fā)送子單元將待發(fā)送的第一數(shù)據(jù)存入第一發(fā)送緩沖器,并向第二接收子單元發(fā)送包含所述第一數(shù)據(jù)的數(shù)據(jù)包;
[0009]S15:第一發(fā)送定時器定時檢測第一接收子單元是否收到對應所述數(shù)據(jù)包的確認字符,如未收到,則所述第一發(fā)送子單元向所述第二接收子單元定時重發(fā)所述數(shù)據(jù)包;
[0010]S17:所述第一接收子單元接收所述確認字符,或在預設的最大發(fā)送超時時間內(nèi)未收到所述確認字符,所述第一發(fā)送子單元刪除所述第一發(fā)送緩沖器中緩存的所述第一數(shù)據(jù)。
[0011]本發(fā)明的一個方面還提供另一種適用于分布式網(wǎng)絡的UDP傳輸方法,所述方法包括:
[0012]S23:第一發(fā)送子單元將待發(fā)送的第一數(shù)據(jù)拆分為第一組數(shù)據(jù)分片,將所述第一組數(shù)據(jù)分片存入第一發(fā)送緩沖器;
[0013]S25:所述第一發(fā)送子單元分批次向第二接收子單元發(fā)送分別包含所述第一組數(shù)據(jù)分片中各數(shù)據(jù)分片的數(shù)據(jù)包,第一發(fā)送定時器分別定時檢測第一接收子單元是否收到對應各批次發(fā)送數(shù)據(jù)包的確認字符,如未收到,則所述第一發(fā)送子單元向所述第二接收子單元定時重發(fā)未收到的確認字符所對應的數(shù)據(jù)包;
[0014]S27:所述第一接收子單元接收對應所述第一組數(shù)據(jù)分片中所有數(shù)據(jù)分片的各確認字符,接收對應所述第一組數(shù)據(jù)分片的總確認字符,或,在預設的最大發(fā)送超時時間內(nèi)未收到對應所述第一組數(shù)據(jù)分片的所有確認字符和所述總確認字符,所述第一發(fā)送子單元刪除所述第一發(fā)送緩沖器中緩存的所述第一組數(shù)據(jù)分片。
[0015]本發(fā)明的另一個方面提供一種適用于分布式網(wǎng)絡的UDP傳輸方法,所述方法包括:
[0016]S31:第二接收子單元接收的第一發(fā)送子單元發(fā)送的數(shù)據(jù)包,判斷所述數(shù)據(jù)包中的數(shù)據(jù)為未拆分的完整數(shù)據(jù);
[0017]S33:所述第二接收子單元將所述數(shù)據(jù)返回給對應的上層應用模塊,并向第一接收子單元發(fā)送對應所述數(shù)據(jù)包的確認字符。
[0018]本發(fā)明的另一個方面還提供另一種適用于分布式網(wǎng)絡的UDP傳輸方法,所述方法包括:
[0019]S41:第二接收子單元接收的第一發(fā)送子單元發(fā)送的數(shù)據(jù)包,判斷所述數(shù)據(jù)包中的數(shù)據(jù)為已拆分的數(shù)據(jù)分片;
[0020]S43:所述第二接收子單元將所述數(shù)據(jù)分片存入第二接收緩沖器,所述第二接收緩沖器判斷所述數(shù)據(jù)分片與之前緩存的數(shù)據(jù)分片能否組成完整數(shù)據(jù);
[0021]S45:第二接收定時器循環(huán)定時檢測所述第二接收緩沖器是否已接收所述數(shù)據(jù)分片同組的所有數(shù)據(jù)分片:
[0022]如已接收所有數(shù)據(jù)分片,則所述第二接收子單元將完整數(shù)據(jù)返回給對應的上層應用模塊,并向第一接收子單元發(fā)送對應所述完整數(shù)據(jù)的總確認字符,所述第二接收定時器停止定時檢測;
[0023]如未接收所有數(shù)據(jù)分片,則向第一接收子單元發(fā)送對應所述數(shù)據(jù)分片的確認字符,跳轉(zhuǎn)至步驟S41。
[0024]本發(fā)明還提供一種適用于分布式網(wǎng)絡的UDP傳輸系統(tǒng),包括若干網(wǎng)絡節(jié)點,所述網(wǎng)絡節(jié)點中包括傳輸模塊和上層應用模塊,其特征在于,所述傳輸模塊包括至少一個鏈接單元,所述鏈接單元包括一對發(fā)送子單元和接收子單元;
[0025]所述發(fā)送子單元內(nèi)設有發(fā)送緩沖器和發(fā)送定時器,用于對所述分布式系統(tǒng)中其它網(wǎng)絡節(jié)點的接收子單元發(fā)送包含待發(fā)送的數(shù)據(jù)或數(shù)據(jù)分片的數(shù)據(jù)包,將所述待發(fā)送的數(shù)據(jù)或數(shù)據(jù)分片存入所述發(fā)送緩沖器,利用所述發(fā)送定時器定時檢測是否收到對應所述數(shù)據(jù)包的確認字符,如未收到則定時重發(fā)所述數(shù)據(jù)包;
[0026]所述接收子單元內(nèi)設有接收緩沖器和接收定時器,用于接收所述分布式系統(tǒng)中其它網(wǎng)絡節(jié)點的發(fā)送子單元發(fā)送的數(shù)據(jù)包,判斷所述數(shù)據(jù)包中的數(shù)據(jù)是否已拆分為數(shù)據(jù)分片,回發(fā)與所述數(shù)據(jù)包對應的確認字符,將所述數(shù)據(jù)分片存入所述接收緩沖器,利用所述接收定時器定時檢測同組數(shù)據(jù)分片是否已完整接收,將數(shù)據(jù)包中的數(shù)據(jù)或數(shù)據(jù)分片重組的數(shù)據(jù)返回給對應的上層應用模塊。
[0027]本發(fā)明諸多實施例提供的適用于分布式網(wǎng)絡的UDP傳輸方法和系統(tǒng)通過確認字符對數(shù)據(jù)發(fā)送進行驗證,提高了數(shù)據(jù)傳輸?shù)陌踩?、準確性和完整性;通過發(fā)送定時器定時檢測確認字符,實現(xiàn)支持數(shù)據(jù)重發(fā),降低了數(shù)據(jù)傳輸?shù)氖÷剩换赨DP協(xié)議設計,支持穿越NAT,保證了數(shù)據(jù)傳輸?shù)臏蚀_性和安全性;
[0028]本發(fā)明一些實施例提供的適用于分布式網(wǎng)絡的UDP傳輸方法和系統(tǒng)通過計算RTT實時調(diào)整發(fā)包數(shù)量,提升了數(shù)據(jù)傳輸?shù)男剩?br>[0029]本發(fā)明一些實施例提供的適用于分布式網(wǎng)絡的UDP傳輸方法和系統(tǒng)通過壓縮數(shù)據(jù)降低了網(wǎng)絡傳輸?shù)膲毫?,?jié)省了帶寬,在一定程度上提高了系統(tǒng)的傳輸能力;
[0030]本發(fā)明一些實施例提供的適用于分布式網(wǎng)絡的UDP傳輸方法和系統(tǒng)支持隨機數(shù)據(jù)填充和數(shù)據(jù)包長隨機,降低了被深度包檢測系統(tǒng)識別的可能;
[0031]本發(fā)明一些實施例提供的適用于分布式網(wǎng)絡的UDP傳輸方法和系統(tǒng)將重發(fā)機制、數(shù)據(jù)校驗、數(shù)據(jù)壓縮、RTT計算、應用層數(shù)據(jù)拆分與重組集中于一個模塊中,提供了支持面向?qū)ο缶幊痰陌踩咝У膫鬏斈K和面對對象的實現(xiàn)方法,采用雙緩存設計,無需上層應用監(jiān)測每一個數(shù)據(jù)包,實現(xiàn)了一個完全應用層網(wǎng)絡緩存模型。
【附圖說明】
[0032]參照下面結(jié)合附圖對本發(fā)明實施例的說明,會更加容易地理解本發(fā)明的以上和其它目的、特點和優(yōu)點。附圖中的部件只是為了示出本發(fā)明的原理。在附圖中,相同的或類似的技術(shù)特征或部件將采用相同或類似的附圖標記來表示。
[0033]圖1為根據(jù)本發(fā)明實施例中網(wǎng)絡節(jié)點作為請求端發(fā)送數(shù)據(jù)的一種適用于分布式網(wǎng)絡的UDP傳輸方法的流程圖。
[0034]圖2為圖1所示UDP傳輸方法的優(yōu)選實施例的流程圖。
[0035]圖3為圖1或圖2所示UDP傳輸方法中步驟S17的一種情況的流程圖。
[0036]圖4為圖1或圖2所示UDP傳輸方法中步驟S17的另一種情況的流程圖。
[0037]圖5為圖1所示UDP傳輸方法的時序示意圖。
[0038]圖6為根據(jù)本發(fā)明實施例中網(wǎng)絡節(jié)點作為請求端發(fā)送數(shù)據(jù)的另一種適用于分布式網(wǎng)絡的UDP傳輸方法的流程圖。
[0039]圖7為圖6所示UDP傳輸方法的優(yōu)選實施例的流程圖。
[0040]圖8為圖7所示UDP傳輸方法的優(yōu)選實施例的流程圖。
[0041 ]圖9為圖6-圖8任一所示UDP傳輸方法中步驟S23的流程圖。
[0042]圖10為圖6-圖8任一所示UDP傳輸方法中步驟S25的流程圖。
[0043]圖11為圖6-圖8任一所示UDP傳輸方法中步驟S27的一種情況的流程圖。
[0044]圖12為圖6-圖8任一所示UDP傳輸方法中步驟S27的另一種情況的流程圖。
[0045]圖13為圖6所示UDP傳輸方法的時序示意圖。
[0046]圖14為根據(jù)本發(fā)明實施例中網(wǎng)絡節(jié)點作為服務端接收數(shù)據(jù)的一種適用于分布式網(wǎng)絡的UDP傳輸方法的流程圖。
[0047]圖15為根據(jù)本發(fā)明實施例中網(wǎng)絡節(jié)點作為服務端接收數(shù)據(jù)的另一種適用于分布式網(wǎng)絡的UDP傳輸方法的流程圖。
[0048]圖16為圖15所示UDP傳輸方法中步驟S