999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

NAT穿越技術研究

2020-07-27 14:10:34陳恒勛閆永航孟丹夏倫
現(xiàn)代信息科技 2020年6期

陳恒勛 閆永航 孟丹 夏倫

摘? 要:NAT是一種在IP數(shù)據(jù)包通過路由器或防火墻時重寫源IP地址或目的IP地址的技術,作為一種解決IPv4地址短缺的方案而流行起來,但卻阻礙了以P2P網絡為基礎的應用的發(fā)展。為解決這一問題,各種NAT穿越技術應運而生,文章基于不同場景視角闡述四種主流的NAT穿越方案,包括UDP打洞技術、STUN協(xié)議、TURN協(xié)議和ICE框架,并說明了各方案的研究進展。

關鍵詞:NAT穿越;UDP打洞;STUN;TURN;ICE

中圖分類號:TP393? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)06-0094-05

Abstract:Network Address Translation (NAT) is a technology that rewrites a source IP address or a destination IP address when an IP data packet passes through a router or firewall. NAT is popular as a solution to the shortage of IPv4 addresses,but it has hindered the development of applications based on P2P networks. In order to solve this problem,various NAT traversal technologies have emerged at the historic moment. This paper describes four mainstream NAT traversal solutions based on different scenarios,including UDP hole punching technology,STUN protocol,TURN protocol and ICE framework,and then describes the research progress of each scheme.

Keywords:NAT traversal;UDP hole punching;STUN;TURN;ICE

0? 引? 言

1994年,網絡地址轉換(Network Address Translation,NAT)[1]作為一種解決IPv4地址短缺的方案流行起來,在許多國家廣泛使用。時至今日,NAT成為了家庭和中小型辦公室路由器上的一個標準實現(xiàn)。雖然NAT提供了許多益處,但仍存在許多缺點,其最大的缺點就是使用了NAT設備私有網絡中的主機連接問題。在傳統(tǒng)的P2P網絡中,端到端通信的兩臺主機之間的地位是平等的,參與通信的兩臺主機均可主動發(fā)起連接[2]。但NAT設備卻使得外網的主機無法主動訪問私有網絡中的主機,從而破壞了這種通信平等,這一問題嚴重地阻礙了P2P應用的發(fā)展[3]。

為了解決上述問題,NAT穿越技術應運而生,其中UDP打洞、TCP打洞及STUN技術可有效穿越非對稱型的NAT設備,而TURN技術通過服務器中繼轉發(fā)可以解決上述方法無法解決的對稱型NAT穿越問題。盡管有許多穿越NAT的技術,但沒有一種是完美的,所以后來又出現(xiàn)了ICE這類框架,使各種NAT穿越技術可以實現(xiàn)統(tǒng)一,最大程度地保障了NAT穿越的可行性。本文以河南大學計算機網絡課程為基礎,對NAT穿越技術展開研究,首先闡述NAT的基本概念和類型,之后描述各種實現(xiàn)NAT穿越的解決方案。

1? NAT類型

根據(jù)NAT設備內部地址映射的表現(xiàn)不同,可將NAT分為四類,即完全錐型(Full Cone)、限制錐型(Restricted Cone)、端口限制型(Port Restricted Cone)和對稱型(Sym- metric)[4]。

(1)完全錐型:將來自相同內部IP地址和端口的所有請求都映射到同一個外部IP地址和端口。任何外部主機都可以通過向映射后的外部地址發(fā)送數(shù)據(jù)包實現(xiàn)與內部主機通信。

(2)限制錐型:將來自同一內部IP地址和端口的所有的請求都映射到同一個外部IP地址和端口。但與完全錐型NAT不同,假設外部主機擁有IP地址X,只有當內部主機先前與IP地址X發(fā)送過數(shù)據(jù)包,內部主機才能接收到外部主機發(fā)送的數(shù)據(jù)包。

(3)端口限制型:與限制錐型NAT相似,但是增加了對端口的限制。詳細來說,假設一個外部主機發(fā)送的數(shù)據(jù)包擁有IP地址X源端口號Y,則只有當內部主機先前與(IP:X,Port:Y)發(fā)送過數(shù)據(jù)包,內部主機才能接收到外部主機發(fā)送的數(shù)據(jù)包。

(4)對稱型:來自相同IP地址和端口且傳送至同一目的IP地址和端口的所有請求都映射為同一個外部IP地址和端口。如果主機通過相同的IP地址和端口向不同的目的地發(fā)送數(shù)據(jù)包,那么將產生不同的映射。而且只有先前收到內部主機數(shù)據(jù)包的外部主機才能向內部主機成功發(fā)送數(shù)據(jù)包。

2? NAT穿越方案

2.1? UDP打洞

UDP打洞技術的核心在于將請求對等方時的映射添加至地址映射表,以保證后續(xù)的數(shù)據(jù)包可達。這種穿越方案需要具有公網IP地址的第三方服務器進行協(xié)助。我們假定主機A與主機B進行通信,兩主機均已與第三方服務器建立連接,第三方服務器已獲得此連接請求中雙方主機的映射地址與端口,下面按照四種情況分別給出穿越策略[5,6]。

(1)情況1:主機A(或B)具有公網IP,另一主機處于私網中。假設主機A具有公網IP,此時主機A想要向主機B發(fā)送數(shù)據(jù)包,因為主機B位于NAT后且先前主機B未與主機A發(fā)送過消息,所以此數(shù)據(jù)包會被丟棄。這時主機A只能向第三方服務器請求打洞。第三方服務器指示主機B向主機A發(fā)送打洞消息,因為主機A位于公網,所以主機A可以正確接收消息,當主機A接收到打洞消息后,按此消息中的源地址與源端口號回復應答消息,因為主機B發(fā)送打洞消息時,地址映射表中已經具有主機A的表項,所以主機B也能正確接收應答消息。這種打洞方式也稱為反向連接。

(2)情況2:主機A(或B)在完全錐型或限制錐型NAT后,另一主機在任意類型NAT后。兩主機均位于NAT后,若此前未互通消息,則任一主機發(fā)消息均會被丟棄。如圖1所示,假設NATA是完全錐型或限制錐型,此時主機A想與主機B通信,主機A首先向服務器請求主機B映射后的公網地址,并向此公網地址定時發(fā)送打洞消息,此時主機A的地址映射表中就包含了請求主機B的表項,然后主機A請求服務器協(xié)助打洞,服務器將主機A映射后的公網地址發(fā)送給主機B并指示主機B向主機A發(fā)送打洞消息,此時主機B的地址映射表中也有了請求主機A的表項,主機A和主機B均可接收到對方的打洞消息,通信線路建立。

(3)情況3:主機A、B均在端口限制型NAT后。采用情況2的方法,由于兩主機地址映射后的端口未發(fā)生改變,所以打洞依然可以成功。

(4)情況4:主機A(或B)在端口限制型或對稱型NAT后,另一主機在對稱型NAT后。文獻[7]給出了一種基于UDP打洞的通信實現(xiàn)。由于位于對稱型NAT后的主機的映射端口會隨著數(shù)據(jù)包中目標地址與目標端口的改變而發(fā)生變化,UDP打洞方法不適用于對稱型NAT。周敏等[8]將UDP打洞與HTTP代理相結合實現(xiàn)了對稱型NAT和UDP報文受阻的穿越,保證了即使只允許HTTP傳輸?shù)腘AT也可實現(xiàn)穿越。劉繼明等[9]根據(jù)對稱型NAT的特性,采用端口預測機制實現(xiàn)了對稱性NAT的穿越,端口預測機制僅適用于增量型的NAT分配策略,當NAT隨機分配端口時,此機制不能正常工作。邱耀群等[10]對對稱性NAT采用小范圍端口預測機制,在實驗結果中使小范圍隨機型NAT達到了100%的成功率。

2.2? STUN

STUN[11]是一個輕量級的NAT穿越協(xié)議,它提供了一個標準的NAT類型檢測方法并允許主機得知自己被NAT分配的映射地址和端口,它可以在兩主機間具有任意數(shù)量的NAT時正常工作,解決了兩個重要問題:

(1)獲得主機映射后地址與端口。STUN Client向STUN Server發(fā)送Binding Request,Binding Request是STUN定義的一種消息類型,當此請求到達STUN Server時,它可能經過了一個或多個NAT,因為當Binding Request經過NAT時,NAT會更改數(shù)據(jù)包中的源地址和源端口號,結果Server接收到的數(shù)據(jù)包中的源地址和源端口號就是最靠近Server的NAT分配的公網IP和端口號。STUN Server將此傳輸?shù)刂房截愔罛inding Response的XOR-MAPPED-ADDRESS屬性中,并發(fā)送至STUN Client。之后STUN Client就可以得知其最外層NAT分配的映射公網地址與端口。

(2)檢測NAT類型:

前提條件:STUN Server具有兩個公網IP,假設為(IP1,Port1)(IP2,Port2)。

以下為NAT類型檢測的流程:

步驟1:選擇STUN Server的(IP1,Port1),經過(1)中的交互后STUN Client獲得映射后地址與端口,將此地址和端口與發(fā)送此數(shù)據(jù)包時的本地地址與端口比較。如果不匹配,說明STUN Client在NAT后,否則,STUN Client具有公網地址。

步驟2:STUN Client向(IP2,Port2)再次發(fā)送Binding Request,如果應答中的地址與端口與步驟1中的地址與端口不匹配,則Client位于對稱型NAT后,否則繼續(xù)步驟3。

步驟3:STUN Client向(IP1,Port1)發(fā)送Binding Request并攜帶改變IP和端口的Flag,STUN Server根據(jù)Flag用(IP2,Port2)向源地址發(fā)送Binding Response,若STUN Client接收到此應答消息,則Client位于完全錐型NAT后,否則繼續(xù)步驟4。

步驟4:STUN Client向(IP1,Port1)發(fā)送Binding Request并僅攜帶改變端口的Flag,STUN Server根據(jù)Flag用(IP2,Port2)向源地址發(fā)送Binding Response,若STUN Client接收到此應答消息,則Client位于限制錐型NAT后,否則位于端口限制型NAT后。

解決上述兩個問題后,就可根據(jù)UDP打洞策略擴展STUN協(xié)議,實現(xiàn)NAT穿越。STUN在穿越環(huán)節(jié)需要大量信息交換,所以造成了有效數(shù)據(jù)的傳輸滯后,文獻[12]將數(shù)據(jù)庫技術應用于STUN中,數(shù)據(jù)庫存儲公私網映射條目,簡化了STUN的交互過程,提高了15%的有效數(shù)據(jù)傳輸率。文獻[13]將UPnP與STUN結合,通過運用UPnP服務增加了NAT穿越的成功率。

2.3? TURN

TURN是一種使用中繼手段實現(xiàn)NAT穿越的方案。它允許主機使用中繼手段與對等方交換數(shù)據(jù)包,允許一個客戶端使用一個中繼地址與多個對等方通信。TURN協(xié)議可以實現(xiàn)所有類型的NAT穿越,包括對稱型NAT穿越,但它實現(xiàn)穿越的代價是增加服務器的帶寬負擔。

如圖2的網絡拓撲,TURN的交互流程[14]大致如下:

Client可以使用主機傳輸?shù)刂钒l(fā)送TURN消息至TURN Server,消息經過NAT時,源地址與端口會被映射為服務器反射傳輸?shù)刂贰T趯崿F(xiàn)中繼的過程中,Client首先使用TURN命令在Server上創(chuàng)建一個Allocation,Allocation是一個數(shù)據(jù)結構,其中包含了Server為Client與Peers實現(xiàn)通信而分配的中繼傳輸?shù)刂罚琍eers可以使用此傳輸?shù)刂分欣^數(shù)據(jù)至Client。一個中繼傳輸?shù)刂穼粋€唯一的Allocation。

當Allocation建立后,Client可以使用TURN消息發(fā)送數(shù)據(jù)至Server并指示發(fā)送至哪一個Peer,Server根據(jù)指示中繼此數(shù)據(jù)至相應的Peer。而Peer可以將數(shù)據(jù)發(fā)送至一個與Allocation對應的中繼傳輸?shù)刂罚琒erver收到數(shù)據(jù)后將數(shù)據(jù)包裝成TURN消息,中繼至相應的Client。這就實現(xiàn)了一次對等主機間的交互。每一個Allocation只屬于一個Client,且只包含一個中繼傳輸?shù)刂贰R虼耍敂?shù)據(jù)包到達Server的中繼傳輸?shù)刂窌r,Server可以識別出數(shù)據(jù)包對應的Client。

文獻[15]在TURN協(xié)議上增加了對IPv6的支持,實現(xiàn)了IPv4至IPv6、IPv6至IPv4和IPv6至IPv6的中繼方案。文獻[16]在原標準中加入了TCP Allocation,為Client分配TCP端口提供了一種解決方案。文獻[17]將自動發(fā)現(xiàn)機制加入至原有的標準中,避免了手動配置的必要,增強了TURN的可移植性。

2.4? ICE

當前已經有許多協(xié)議可以實現(xiàn)NAT穿越,如ALGs、STUN、TURN等,但是這些方案都具有一定的局限性,在應用的實現(xiàn)中更是呈現(xiàn)出零零散散的狀態(tài)。于是,ICE作為一種NAT穿越的整合框架被定義出來。

ICE[18]是一個使用SDP offer/answer模型[19]建立的基于UDP的多媒體會話的NAT穿越協(xié)議。ICE使用STUN協(xié)議及其擴展TURN協(xié)議,其背后的基本思想是:每一個Agent,即主機,都具有不同類型的候選傳輸?shù)刂罚脕硎褂眠@些地址同其他Agent進行通信。這些候選傳輸?shù)刂房赡苁且韵聨追N:

(1)直接與網絡接口相聯(lián)系的傳輸?shù)刂贰?/p>

(2)位于NAT公共側的服務器反射傳輸?shù)刂贰?/p>

(3)TURN Server分配的中繼傳輸?shù)刂贰?/p>

ICE的工作流程如下:

(1)收集候選地址。為執(zhí)行ICE,Agent需要識別自己所有的Candidate。這些Candidate的關系如圖3所示。首先,Host Candidate與本地網絡接口相聯(lián)系,十分容易確定,需要注意的是Host Candidate可能有多個。其次,Agent可以通過STUN或TURN獲得其他的Candidate,這些Candidate包括Server Reflexive Candidate和Relayed Transport Candidate。當TURN Server被使用時,這兩種Candidate均可通過TURN Server獲得,但如果僅僅使用了STUN Server,則只能從中獲得Server Reflexive Candidate。在圖3中,X:x為Host Candi-date,Y:y為Server Reflexive Candidate,而Z:z是TURN Server分配給Agent的Relayed Transport Candidate。

(2)連接性檢測。一旦Agent獲得它所有的Candidate,它就對其以從高到低的優(yōu)先級進行排序,并將這些Candidate放入SDP offer中發(fā)送給要進行通信的另一方Agent。當另一方收到此Offer,也會進行相同的處理,將自身的Candidate列表作為應答送回。最終兩Agent均具有自身及對方的所有Candidate。他們將兩列表中的Candidate兩兩組合形成一個Check List。列表中的每一個Check都是一次STUN Request/Response交互,其中STUN Request從Local Candidate發(fā)往Remote Candidate。

連接性檢測的基本準則十分簡單:

(1)使用特定算法對 進行優(yōu)先級排序;

(2)根據(jù)優(yōu)先級順序在每一Candidate Pairs間發(fā)送Check消息;

(3)從其他Agent接收Check確認。

實際上,Candidate Pairs的一次檢測過程即是一個四次握手的交互過程,如圖4所示。

(3)斷定ICE。在連接性檢測過程中會出現(xiàn)連接成功的Candidate Pair,ICE安排兩Agent之一來確認用來進行后續(xù)媒體通信的合法Candidate Pair,此Agent稱為Controlling Agent。確認最終Candidate Pair有兩種策略,即Regular Nomination和Aggressive Nomination。前者是在Controlling Agent找到合法的Pair后再發(fā)送一個額外的STUN Request,并在請求中添加完成標志以告知另一Agent。而后者則要求Controlling Agent的每一個STUN Request都帶有完成標志,第一次檢測成功后,Controlling Agent就無需再發(fā)送額外的請求,這種方式更加快速,但缺乏靈活性。在找到合法的Candidate Pair后通信雙方就可以順利地進行后續(xù)的媒體通信。

文獻[20]使用NAT類型對連通性檢測過程進行制約,避免了多余的地址對檢測,縮短了連通性檢測時間。文獻[21]則調整了檢測過程,將收集-檢測過程分類多次執(zhí)行,盡可能減少對候選地址的收集,減少了連通性檢測時間,提高了NAT穿透效率。

3? 結? 論

本文總結提煉一些主流可行的NAT穿越技術,首先說明NAT產生的背景以及其對P2P網絡通信帶來的問題,之后詳細地闡述的NAT的不同類型,剖析了不同類型NAT所具有的特性,最后詳細描述了四種NAT穿越方案,即UDP打洞、STUN協(xié)議、TURN協(xié)議和ICE框架,并說明了各方案近期的研究進展。其中UDP打洞簡單易實現(xiàn),但欠缺安全性且不能穿透對稱型NAT;STUN協(xié)議靈活易擴展,且可以實現(xiàn)多級NAT穿越,但不可實現(xiàn)對稱型NAT穿越;TURN協(xié)議可以實現(xiàn)任何類型的NAT穿越但會增加服務器的帶寬負擔;ICE整合了多種NAT穿越協(xié)議,安全可靠、局限性小但是實現(xiàn)相對復雜。本文為具有P2P通信需求的應用程序提供了一系列靈活有效的方案實現(xiàn)NAT穿越,在實際應用中可根據(jù)所處的網絡環(huán)境,選擇合適的解決方案以滿足項目需求。

參考文獻:

[1] SRISURESH P,EGEVANG K. Traditional IP Network Address Translator (Traditional NAT) [M]. RFC Editor,2001:1-2.

[2] 賀文華,劉浩,賀勁松.P2P網絡現(xiàn)狀與發(fā)展研究 [J].軟件工程,2019,22(4):1-5.

[3] 曹申會.NAT穿越技術的研究與實現(xiàn) [D].南京:南京郵電大學,2013:8-11.

[4] ROSENBERG J,WEINBERGER J,HUITEMA C,et al.STUN-Simple traversal of user datagram protocol (UDP) through network address translators (NATs) [J]. Ietf Rfc,2003:5-6.

[5] 姚秋紅.基于P2P的網絡視頻會議系統(tǒng)的研究和開發(fā) [D].上海:上海交通大學,2010:38-40.

[6] FORD B,SRISURESH P,KEGEL D. Peer-to-Peer Communication Across Network Address Translators [C]. USENIX Annual Technical Conference,Anaheim,CA,2005:13.

[7] 李自薦,趙順,劉宏,等.P2P網絡通信中NAT穿越技術的研究及實現(xiàn) [J].數(shù)字技術與應用,2015(8):34-35.

[8] 周敏,余慕春,黃維豐.綜合UDP打洞與Http代理的SIP穿越NAT方案 [J].計算機技術與發(fā)展,2014,24(8):147-151+156.

[9] 劉繼明,馬樂,李波.一種基于NAT穿越的優(yōu)化STUN算法 [J].西安郵電大學學報,2019,24(3):19-24.

[10] 邱耀群,金光,江先亮,等.對稱型NAT穿越技術的研究 [J].移動通信,2015,39(7):57-60+65.

[11] ROSENBERG J,MAHY R,MATTHEWS P,et al.Session traversal utilities for NAT (STUN):RFC 5389 [S].IETF,2008:5-8.

[12] 楊金花.STUN技術通信問題的研究 [J].電子設計工程,2015,23(6):92-94+98.

[13] 任浩,王勁林,魯逸峰.UPnP和STUN相結合的NAT穿越技術研究 [J].計算機工程與應用,2009,45(2):99-101.

[14] MAHY R,MATTHEWS P,ROSENBERG J.Traversal Using Relays around NAT (TURN):Relay Extensions to Session Traversal Utilities for NAT (STUN):RFC 5766 [S].IETF,2010:5-11.

[15] CAMARILLO G,NOVO O,PERREAULT S.Traversal using relays around NAT (TURN) extension for IPv6:RFC 6156 [S].IETF,2011:4-10.

[16] PERREAULT S,ROSENBERG J.Traversal using relays around NAT (TURN) extensions for TCP allocations:RFC 6062 [S].IETF,2010:6-11.

[17] PATIL P,REDDY T,WING D,.Traversal using relays around NAT (TURN) server auto discovery:RFC 8155 [S].IETF,2017:4-9.

[18] ROSENBERG J.Interactive connectivity establishment (ICE):A protocol for network address translator (NAT) traversal for Offer/Answer protocols:RFC 5245 [S].IETF,2010:6-16.

[19] ROSENBERG J,SCHULZRINNE H.An Offer/Answer model with the session description protocol (SDP):RFC 3264 [S].IETF,2002:3-5.

[20] 王夢杰,何加銘.基于ICE的SIP穿越NAT方法的研究 [J].移動通信,2015,39(2):45-50.

[21] 劉繼明,王逸凡,呂芳,等.一種優(yōu)化連接速率的ICE算法實現(xiàn) [J].西安郵電大學學報,2017,22(6):92-97.

作者簡介:陳恒勛(1998-),男,漢族,河南商丘人,本科在讀,研究方向:移動Adhoc網絡;通訊作者:閆永航(1981-),男,漢族,河南周口人,副教授,研究生導師,博士,研究方向:互聯(lián)網體系結構、移動Ad hoc網絡、網絡安全、物聯(lián)網、區(qū)塊鏈;孟丹(1995-),女,漢族,河南商丘人,碩士研究生,研究方向:網絡體系結構;夏倫(1996-),男,漢族,河南信陽人,碩士研究生,研究方向:網絡體系結構。

主站蜘蛛池模板: 欧美国产菊爆免费观看 | 国产农村1级毛片| 国产国产人在线成免费视频狼人色| 国产永久在线观看| 亚洲一区二区三区麻豆| 国产JIZzJIzz视频全部免费| 国产精品亚洲一区二区三区z| 天堂网亚洲综合在线| 免费一级毛片在线观看| 毛片一级在线| 色天天综合久久久久综合片| 国产拍在线| 久久精品这里只有精99品| 久久夜色精品| 成人伊人色一区二区三区| 久久久久亚洲精品无码网站| 91视频青青草| 性欧美在线| 国产熟女一级毛片| 无码福利日韩神码福利片| 片在线无码观看| 自偷自拍三级全三级视频 | 99免费在线观看视频| 国产尤物jk自慰制服喷水| 毛片久久久| 在线精品视频成人网| 人妻丰满熟妇啪啪| 亚洲综合在线网| 尤物精品国产福利网站| 在线看国产精品| 欧美午夜视频在线| 国产在线精彩视频二区| 免费看美女毛片| 色综合久久久久8天国| 亚洲精品波多野结衣| 国产91导航| 国产黄视频网站| 国产乱子伦视频三区| 免费人成网站在线高清| 免费人成视网站在线不卡| 国产玖玖玖精品视频| a毛片基地免费大全| 韩国福利一区| 欧美中文字幕在线二区| 日韩无码真实干出血视频| 美女内射视频WWW网站午夜| 久视频免费精品6| 国产无码精品在线播放| 永久在线精品免费视频观看| 国产精品亚洲精品爽爽| 另类综合视频| 毛片视频网| a网站在线观看| 成年人午夜免费视频| 黄色网站不卡无码| 亚洲天堂视频在线观看| 在线播放91| 国产剧情无码视频在线观看| 亚洲成在人线av品善网好看| 丁香综合在线| 97国产在线观看| 毛片a级毛片免费观看免下载| 永久天堂网Av| 在线人成精品免费视频| 久久久久青草大香线综合精品| 青青青亚洲精品国产| 在线精品亚洲一区二区古装| 97人妻精品专区久久久久| 日韩欧美在线观看| 欧美亚洲综合免费精品高清在线观看 | 亚洲综合色吧| 国产人人乐人人爱| 五月婷婷综合色| 99精品国产高清一区二区| 5555国产在线观看| 国产丝袜啪啪| 亚洲第一综合天堂另类专| 亚洲国产精品无码久久一线| 国产精品黄色片| 日韩专区欧美| 国产成人AV男人的天堂| 国产剧情一区二区|