肖堅(jiān)
摘要:網(wǎng)絡(luò)技術(shù)快速發(fā)展,聯(lián)網(wǎng)設(shè)備的數(shù)量也愈來愈多且多樣化,為了解決IP地址短缺及提升網(wǎng)絡(luò)安全性,大部分的聯(lián)網(wǎng)設(shè)備都會(huì)通過網(wǎng)絡(luò)地址轉(zhuǎn)換器(Network Address Translator;NAT)與其他設(shè)備互聯(lián),由于NAT會(huì)提供網(wǎng)絡(luò)地址的轉(zhuǎn)換,并對(duì)封包的傳輸有所限制,導(dǎo)致設(shè)備與設(shè)備之間的傳輸會(huì)因封包無法穿透NAT而出現(xiàn)問題。因此,如何穿透NAT變成一個(gè)重要的研究議題。建立中繼聯(lián)機(jī)及點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),并提出一個(gè)協(xié)同式NAT穿透方法,以兼顧成功穿透率、傳輸效率及節(jié)省網(wǎng)絡(luò)帶寬的使用。
關(guān)鍵詞:網(wǎng)絡(luò)地址轉(zhuǎn)換; 中繼服務(wù)器;點(diǎn)對(duì)點(diǎn);網(wǎng)絡(luò)地址轉(zhuǎn)換穿透
中圖分類號(hào):TP393? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)23-0050-02
1 前言
現(xiàn)今網(wǎng)絡(luò)技術(shù)快速發(fā)展,加上物聯(lián)網(wǎng)(Internet of Things; IoT)[1][2]的觀念也愈來愈成熟,連上網(wǎng)絡(luò)的設(shè)備愈來愈多,設(shè)備與設(shè)備之間的數(shù)據(jù)傳輸也愈來愈多元,除了信息的傳輸外,還有大量的多媒體信息。
為了提升網(wǎng)絡(luò)安全性,設(shè)備與設(shè)備之間的網(wǎng)絡(luò)環(huán)境也愈來愈復(fù)雜,據(jù)統(tǒng)計(jì)至少有超過70%的聯(lián)網(wǎng)設(shè)備都會(huì)通過NAT與其他設(shè)備互聯(lián),由于 NAT 會(huì)提供網(wǎng)絡(luò)地址的轉(zhuǎn)換,并對(duì)封包的傳輸有所限制,因此常導(dǎo)致設(shè)備與設(shè)備之間的數(shù)據(jù)無法直接傳輸,因此如何穿透NAT是一個(gè)重要的研究議題。
現(xiàn)行網(wǎng)絡(luò)上的NAT大致分成四種形態(tài),分別為一對(duì)一NAT 、地址限制 NAT 、端口限制NAT及對(duì)稱式NAT [3]。由于對(duì)稱式NAT對(duì)于封包進(jìn)出的限制最為嚴(yán)格,且因?yàn)閷?duì)稱式NAT在現(xiàn)行網(wǎng)絡(luò)環(huán)境中愈來愈普及,對(duì)于點(diǎn)對(duì)點(diǎn)之間網(wǎng)絡(luò)傳輸成功率也帶來更多的不確定性。
2 文獻(xiàn)研究
在文獻(xiàn)[6]中,提出一個(gè)設(shè)備可以先與其他設(shè)備建立一種主要點(diǎn)對(duì)點(diǎn)傳輸信道,此設(shè)備并可以利用此主要傳輸通道再建立多條次要點(diǎn)對(duì)點(diǎn)傳輸通道,若偵測(cè)主要傳輸信道失敗或傳輸質(zhì)量降低,則次要傳輸通道可以取代原本的主要傳輸通道成為之后傳輸?shù)闹饕ǖ?,在這個(gè)方法當(dāng)中,并沒有考慮使用中繼服務(wù)器來穿透 NAT ,故若在對(duì)稱式 NAT 的網(wǎng)絡(luò)環(huán)境下,仍然很容易造成無法穿透NAT的情況。文獻(xiàn)[7]的研究當(dāng)中,會(huì)先判斷點(diǎn)對(duì)點(diǎn)直接穿透NAT是否可行,若可行,則嘗試建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),若判斷點(diǎn)對(duì)點(diǎn)直接穿透NAT不可行,或是建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)失敗,則會(huì)使用中繼服務(wù)器來建立中繼聯(lián)機(jī),并用中繼聯(lián)機(jī)傳送數(shù)據(jù)。在這個(gè)方法當(dāng)中有幾個(gè)缺點(diǎn),第一,當(dāng)一端設(shè)備為對(duì)稱式 NAT 且另一端設(shè)備為對(duì)稱式NAT或端口限制NAT時(shí),在這個(gè)研究當(dāng)中都判斷為點(diǎn)對(duì)點(diǎn)直接穿透NAT不可行,然而,在這些網(wǎng)絡(luò)環(huán)境下,只要適當(dāng)運(yùn)用端口預(yù)測(cè)技術(shù)及hole punching 技術(shù),利用點(diǎn)對(duì)點(diǎn)的方式仍有可穿透的機(jī)會(huì)。第二,如同文獻(xiàn)[5],仍會(huì)有聯(lián)機(jī)延遲的問題。在文獻(xiàn)[4]的研究當(dāng)中,設(shè)備與設(shè)備之間可以先利用隧道(tunneling) 技術(shù)通過中繼服務(wù)器來穿透NAT,建立中繼聯(lián)機(jī)后即可開始傳送數(shù)據(jù),因此不會(huì)有傳輸延遲的問題,中繼聯(lián)機(jī)建立后再嘗試建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),若點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)被成功建立,則可利用點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)傳送數(shù)據(jù),并于適當(dāng)時(shí)機(jī)終止中繼聯(lián)機(jī);若點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)沒有成功建立,則使用中繼聯(lián)機(jī)傳輸。在這個(gè)方法當(dāng)中,在點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)可以建立卻建立失敗的情況下,未再重新做端口預(yù)測(cè)跟設(shè)定,因此也未再嘗試建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),導(dǎo)致傳輸?shù)男式档?、傳輸成本提高?/p>
3 協(xié)同式NAT穿透方法
由于借由中繼服務(wù)器的協(xié)助能有很高的NAT穿透率,另一方面,點(diǎn)對(duì)點(diǎn)NAT穿透率雖然較低,但使用點(diǎn)對(duì)點(diǎn)聯(lián)機(jī)傳輸能提升傳輸效率并降低傳輸成本,因此這個(gè)研究的概念是兩端設(shè)備分別先后與對(duì)方嘗試建立中繼聯(lián)機(jī)及點(diǎn)對(duì)點(diǎn)聯(lián)機(jī),并用一種協(xié)同機(jī)制來決定何時(shí)需采用中繼聯(lián)機(jī)機(jī)制、何時(shí)采用點(diǎn)對(duì)點(diǎn)聯(lián)機(jī)機(jī)制來傳輸以達(dá)到穿透NAT并兼顧傳輸效率、傳輸成本等目的。
基于這樣的機(jī)制,若點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)可建立成功,則可利用點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)傳輸以提升傳輸效率,同時(shí)并將中繼聯(lián)機(jī)刪除以減少中繼轉(zhuǎn)傳成本;若點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)無法建立或是被判斷可建立卻建立失敗,則可直接用中繼聯(lián)機(jī)來傳輸,也不會(huì)造成因需要等待建立聯(lián)機(jī)而造成的傳輸延遲。另外,在點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)被判斷為可以建立卻建立失敗的情況,通常都是因?yàn)镹AT外部的通訊端口被占用而導(dǎo)致聯(lián)機(jī)建立失敗,因此在這種情況,則在利用中繼聯(lián)機(jī)傳輸?shù)耐瑫r(shí)仍會(huì)持續(xù)嘗試建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),待點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)建立成功,則可進(jìn)一步將中繼聯(lián)機(jī)刪除。
3.1 設(shè)備與NAT的信息搜集及交換
本方法在一個(gè)設(shè)備嘗試與另一個(gè)設(shè)備聯(lián)機(jī)或是當(dāng)一個(gè)設(shè)備接受其他設(shè)備聯(lián)機(jī)的請(qǐng)求時(shí),會(huì)先與中繼服務(wù)器注冊(cè),以便之后建立中繼聯(lián)機(jī),接著會(huì)通過STUN 服務(wù)器的協(xié)助來取得與設(shè)備連接的NAT 的外部IP 位置,并搭配端口預(yù)測(cè)算法來預(yù)測(cè)與設(shè)備連接的NAT的外部端口配置(以下稱為映射端口) 以便通過映像端口來傳送封包,如多媒體串流等。
做完映像端口預(yù)測(cè),接著會(huì)做與設(shè)備連接的NAT形態(tài)辨識(shí),并將點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)所需信息與另一設(shè)備交換,另外,若映射端口無法預(yù)測(cè),則映射端口值為0。
3.2 建立中繼聯(lián)機(jī)
當(dāng)設(shè)備收到另一設(shè)備的點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)所需信息,則可先通過中繼服務(wù)器穿透NAT以建立中繼聯(lián)機(jī),并開始通過中繼聯(lián)機(jī)傳送與接收數(shù)據(jù)。接著可使用連接兩端設(shè)備的NAT的形態(tài)及映像端口這兩個(gè)信息來判斷設(shè)備間的點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)的可行性。
3.3 點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)的可行性判斷
由于在對(duì)稱式NAT 中每一個(gè)NAT 內(nèi)部地址對(duì)應(yīng)不同的目的地,都對(duì)應(yīng)到不同的NAT外部地址,且NAT外部位元址的配置有的是有規(guī)則性的,有的則是沒有規(guī)則性的,因此對(duì)稱式NAT的映射端口有的是可預(yù)測(cè),有的是不能預(yù)測(cè)的,而一對(duì)一NAT、地址限制NAT及端口限制NAT這三種形態(tài)的NAT的映像端口皆可預(yù)測(cè)。
3.4 協(xié)同式NAT穿透
若依上述判斷方法判斷點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)不可行,則不建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),只通過中繼聯(lián)機(jī)傳送/接收數(shù)據(jù);若判斷點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)可行,則會(huì)利用接收到的點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)所需信息的與設(shè)備連接的NAT外部IP地址及預(yù)測(cè)的映像端口嘗試與另一設(shè)備建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),若點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)成功建立,則會(huì)馬上刪除中繼聯(lián)機(jī),使用點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)來傳送/接收數(shù)據(jù)以提升傳輸效率、降低傳輸成本。另一方面,若點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)被判斷可行但卻因映像端口被占用而建立失?。?即數(shù)據(jù)無法通過所建立的點(diǎn)對(duì)點(diǎn)聯(lián)機(jī)正常接收),則會(huì)再次嘗試建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)。
當(dāng)再嘗試建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),設(shè)備會(huì)重新作映像端口的配置,包含發(fā)送請(qǐng)求至某臺(tái)STUN服務(wù)器以獲得目前NAT映像端口配置的情況,依據(jù)目前的情況做接下來的映像端口配置,并再次與其他設(shè)備交換點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)所需信息,重新利用新收到的點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)所需信息的與設(shè)備連接的NAT外部IP地址及預(yù)測(cè)的映像端口再嘗試與另一設(shè)備建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),待點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)成功建立,再將中繼聯(lián)機(jī)刪除改由使用點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)進(jìn)行傳輸。
然而,如果多次嘗試建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)皆失敗,則設(shè)備會(huì)改用收到的點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)所需信息的設(shè)備所在本地網(wǎng)絡(luò)地址與另一設(shè)備建立點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī),會(huì)采用此機(jī)制是因?yàn)橛行o線網(wǎng)絡(luò)基地臺(tái)并不支持NAT loopback,在這種情況,若兩端設(shè)備同時(shí)連上此基地臺(tái)時(shí),用NAT外部地址來建立聯(lián)機(jī)是無法建立成功的。
3.5 實(shí)施方式及流程
基于上述所提出的方法,我們使用市面上普遍可見的無線路由器來做實(shí)驗(yàn),兩端設(shè)備分別連上各式無線路由器,不同的無線路由器呈現(xiàn)不同的NAT形態(tài),其點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)的成功率實(shí)驗(yàn)結(jié)果如表1所示。有部分設(shè)備連到D-link無線路由器,在雙方協(xié)調(diào)好映射端口之后,當(dāng)要開始傳輸多媒體串流數(shù)據(jù)時(shí),這些設(shè)備的數(shù)據(jù)卻是從另外一個(gè)隨意選擇的映像端口送出而不是當(dāng)初協(xié)調(diào)好的映射端口,當(dāng)這種情形發(fā)生,如果另外一個(gè)設(shè)備的 NAT 形態(tài)為端口限制或是對(duì)稱式NAT時(shí),將導(dǎo)致點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)傳輸失敗,如表1的符號(hào)“x”所處的情形,在這種情形發(fā)生時(shí),只能使用中繼聯(lián)機(jī)來傳輸,但如表1所示,大部分點(diǎn)對(duì)點(diǎn)直接聯(lián)機(jī)傳輸是可行的。
4 結(jié)論
本論文所提出的方法,借由先建立傳輸成功率較高的中繼聯(lián)機(jī),再嘗試建立傳輸效率較高、傳輸成本較低的點(diǎn)對(duì)點(diǎn)聯(lián)機(jī),而可節(jié)省使用者等待嘗試建立點(diǎn)對(duì)點(diǎn)聯(lián)機(jī)的時(shí)間,并且盡量使用傳輸效率較高、傳輸成本較低的點(diǎn)對(duì)點(diǎn)聯(lián)機(jī),可同時(shí)具有傳輸效率更高、傳輸成本更低的方式且傳輸成功率更高的效果。
參考文獻(xiàn):
[1] 方承志,程宥鋮,火興龍.基于MLS的窄帶物聯(lián)網(wǎng)系統(tǒng)下行信道估計(jì)算法[J/OL]. 計(jì)算機(jī)工程,2019(5).
[2] 周童.嵌入式系統(tǒng)在物聯(lián)網(wǎng)領(lǐng)域中的應(yīng)用[J/OL].電子技術(shù)與軟件工程,2019(10):197.
[3] 陳恒勛,閆永航,孟丹,等.NAT穿越技術(shù)研究[J].現(xiàn)代信息科技,2020,4(6):94-98.
[4] 賀清碧,黃大榮,趙玲.網(wǎng)絡(luò)地址轉(zhuǎn)換器友好通訊構(gòu)件的設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2016,16(18):197-203,224.
[5] Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols, RFC 5245, 2010.
[6] Berkat S. Tung, Barry A. Whitebook, Joe S. Abuan, H. Jeong, Y. Yang and R. Garcia, “Apparatus and method for establishing and utilizing backup communication channels,” U.S. Patent 8 819 244, Aug. 26, 2014.
[7] Andrew H. Vyrros, Jeremy Matthew Werner and Patrick Gates, “Apparatus and method for inviting users to online sessions,” U.S. Patent 8 412 833, Apr. 2, 2013.
【通聯(lián)編輯:代影】