穿NAT的實現(xiàn)技術分析_第1頁
穿NAT的實現(xiàn)技術分析_第2頁
穿NAT的實現(xiàn)技術分析_第3頁
穿NAT的實現(xiàn)技術分析_第4頁
穿NAT的實現(xiàn)技術分析_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 穿NAT的實現(xiàn)技術分析作者:何志川(盛科網(wǎng)絡)1. NAT設備分類: 1.1基本NAT/Basic NAT 當數(shù)據(jù)包穿過NAT時,基本NAT映射內部主機的私有IP為公網(wǎng)IP,不改變TCP/UDP 端口號。僅僅當基本NAT有一個公網(wǎng)IP地址池,它才發(fā)生效用,從池中做代表內部主機的地址綁定。 1.2網(wǎng)絡地址/端口轉換器(NAPT) 現(xiàn)在最普通的端口轉換器,他檢查并且修改穿越邊界包的IP地址和TCP/UDP端口 號,多個內部主機同時共享一個公網(wǎng)IP。進一步NAPT又分為兩類。參考NAT-TRAD和NAT-TERM取得關于NAT分類和術語的更多信息。進一步劃分NAPT的術語在最近的STUN文檔中。當

2、內部主機通過NAPT打開一個向外的TCP或UDP會話時,NAPT分配給這個會話一個公共IP地址和端口,以便接下來外部節(jié)點的響應包能夠被 NAPT接收、解釋、轉發(fā)給內部節(jié)點。效果就是NAPT建立了一個如下的端口綁定:(private IP addr, private port number)和(public IP addr, public port number)。端口綁定定義了地址轉換,NAPT將完成這個會話過程。NAPT是依據(jù)什么策略來判斷是否要為一個請求發(fā)出的UDP數(shù)據(jù)包建立Session的呢?主要有一下幾個策略: A. 源地址(內網(wǎng)IP地址)不同,忽略其它因素, 在NAPT上肯定對應不同

3、的SessionB. 源地址(內網(wǎng)IP地址)相同,源端口不同,忽略其它的因素,則在NAPT上也肯定對應不同的SessionC. 源地址(內網(wǎng)IP地址)相同,源端口相同,目的地址(公網(wǎng)IP地址)相同,目的端口不同,則在NAPT上肯定對應同一個SessionD. 源地址(內網(wǎng)IP地址)相同,源端口相同,目的地址(公網(wǎng)IP地址)不同,忽略目的端口,則在NAPT上是如何處理Session的呢? 錐形NAT/Cone NAT 對于到同一個IP地址,任意端口的連接分配使用同一個Session; 對于到不同的IP地址,任意端口的連接也使用同一個Session.我們稱此種NAPT為 Cone NAPT. 也就

4、是只要本地綁定的UDP端口相同, 發(fā)出的目的地址不管是否相同, 都使用同一個Session.。 Server S1 Server S2 | | +-+-+ | Session 1 (A-S1) | Session 2 (A-S2) | Cone NAT | Session 1 (A-S1) | Session 2 (A-S2) v .1:1234 v | v .1:1234 v | Client A .1:1234 根據(jù)NAT能夠有多少的自由接收已經建立連接(public IP, public port)的輸入數(shù)據(jù),Cone NAT可以被進一步劃分。這種分類通常僅用于UDP方式數(shù)據(jù)交換,因為N

5、AT和防火墻會無條件拒絕tcp連接,除非在其他地方有特別的設置。 完全的(Full) Cone NAT 在為一個向外的會話建立了公/私端口綁定之后,full cone NAT隨后將接收來自公網(wǎng)上任何終端節(jié)點相應端口的輸入通訊。Full cone NAT有時也稱為“混雜”(promiscuous)NAT. 受限的(Restricted) Cone NAT 受限的cone NAT僅僅在外部輸入數(shù)據(jù)包的端口匹配內部主機曾經發(fā)給外部數(shù)據(jù)時使用的映射端口才轉發(fā)給內部主機。受限的cone NAT精簡采用了防火墻的原則,通過限制輸入數(shù)據(jù)包為已知的外部IP地址,來拒絕一些外部的主動連接請求。 端口受限(Por

6、t-Restricted) Cone NAT 反過來,對端口受限(Port-Restricted) Cone NAT,如果外部ip地址和端口匹配那些內部主機曾經向外發(fā)包在NAT上映射的端口,他就將這個輸入包轉發(fā)給相應的內部主機。當端口受限Cone NAT在維護這種穿越映射所需的端口身份表時,他提供了和對稱(symmetric)NAT一樣的對(未有映射的)主動的外部請求有同樣的保護。 對稱NAT / Symmetric NAT 對稱NAT / Symmetric NAT 作為對比,對于到同一個IP地址,任意端口的連接分配使用同一個Session; 對于到不同的IP地址, 任意端口的連接使用不同的

7、Session. 我們稱此種NAPT為 Symmetric NAPT. 也就是只要本地綁定的UDP端口相同, 發(fā)出的目的IP地址不同,則會建立不同的Session. Server S1 Server S2 | | +-+-+ | Session 1 (A-S1) | Session 2 (A-S2) | Symmetric NAT | Session 1 (A-S1) | Session 2 (A-S2) v .1:1234 v | v .1:1234 v | Client A .1:12342. 跨越中間設備P2P通訊的技術當前p2p跨越中間設備通訊實現(xiàn)的技術主要有以下幾種:2.1. 中繼/

8、Relaying 即在公有網(wǎng)絡中放置一個服務器,使私有網(wǎng)絡的兩個客戶端通過服務器建立通信。 比如,2個客戶端A和B,初始發(fā)起了TCP或UDP的連接到一個已知的有永久IP地址的server S。然而,客戶端是分居在兩個私有網(wǎng)絡中的,他們各自的中間設備阻止了一方直接向另一方發(fā)起連接。 Server S | +-+-+ | | NAT A NAT B | | Client A Client B 兩個客戶端可通過server S來中繼他們的消息,而不是試圖直接連接。比如,要發(fā)消息給B,A只要把消息通過已經建立的連接發(fā)給S,然后S使用已經建立的連接發(fā)給B。 這個方法的優(yōu)點是,只要雙方都連上了server

9、,總能工作。但明顯的不足在于:無謂的消耗了服務器的處理能力和網(wǎng)絡帶寬,而且,即使和服務器連接的很好,雙方的通訊延時也增加了。TURN 協(xié)議 TURN 實現(xiàn)了一種相對可靠的中繼方式。在基于視頻碼流轉發(fā)的實現(xiàn)方式中,采用此種方式。2.2. 反向連接/Connection reversal 如果僅有一個客戶端在中間設備后面,那么第二項技術就可行了。比如,客戶端A在一個NAT后面,而B有一個全球可路由的IP地址,如下圖: Server S | | +-+-+ | | NAT A | | | | | Client A Client B 客戶端A的私有IP為 現(xiàn)在假設客戶端B要發(fā)起一個和A的初始連接會話。

10、B首次嘗試連接A要么在A自認 為的地址 在試圖和A建立連接失敗后,B可以借用S來中繼一個給A的請求,告訴A做一個反向的到B的連接。A根據(jù)從S受到的這個請求,打開一個TCP連接到B的ip:port。A的NAT會許可這個連接,因為他從防火墻內發(fā)起,并且B能夠收到這個連接,因為他不在任何的中間設備后面。 許多當前的P2P系統(tǒng)實現(xiàn)了這一技術。當然,他的主要限制在于:僅有一端在NAT后面的情況才適用,在越來越普遍的兩端都在NATs后面的情況,就不行了。 因為反向連接不是一般的解決方案,不推薦作為一個主要策略。應用程序可以選擇進行反向連接,但是當正向和反向都失敗時,他應能回來再用其他的方法,比如通過中繼。

11、2.3. UDP穿孔(hole punching) UDP穿孔技術既在私有網(wǎng)絡的兩個客戶端穿越中間設備建立彼此的直接連接,即使當通訊雙方都在中間設備的后面。這項技術在RFC 3027的5.1節(jié)NAT-PORT有簡要的介紹,也在Internet的其他地方有非正式的描述KEGEL, 并且被用在最近的一些協(xié)議種TEREDO, ICE。不幸的是,和他的名字所暗示的一樣,這個技術僅僅適用UDP。 我們將要考慮2種具體的情況,和應用程序如何以優(yōu)雅的設計來處理這兩種情況。在第一種情況中,代表了一種一般的情況,兩個要建立P2P通訊的客戶端被置于兩個不同的NATs之后。第二種情況是,兩個要建立P2P通訊的客戶端

12、在同一個NATs的后面,但是未必知道他們的這個處境。. 兩端在不同的NATs之后 假定clients A 和 B 都有自己的私有IP地址,并且在不同的NATs之后。在A,B,S上運行的應用程序都使用UDP的1234端口。A和B都已和S建立了UDP連接,使得NAT A為A和S的會話分配了公網(wǎng)的UDP端口62000,NAT B為B和S的會話分配了公網(wǎng)UDP端口31000。 Server S | | +-+-+ | | NAT A NAT B | | | | Client A Client B .1:1234 .3:1234. 雙端在同一個NAT之后 現(xiàn)在考慮雙端在同一個NAT之后的情況(他們可能并

13、不知道),這樣他們就在同一個私有的IP地址空間中。A和S建立了UDP會話,NAT分配了62000端口,B和S建立了UDP連接,NAT分配了62001端口。 Server S | | NAT | +-+-+ | | Client A Client B .1:1234 .3:1234 假定A和B使用上面提到的UDP穿孔技術,通過S為介紹人來建立P2P連接。則會出現(xiàn)當A和B在建立通信的時候是通過他們的公網(wǎng)地址建立的,這就可能增加A和B的潛在的對話同時加重了NAT的負擔。 對這個問題的解決方法是直接轉發(fā)(straightforward)。當A和B通過S初始交換地址的時候,他們應該包括自己看到的自己的I

14、P地址和端口和由server看到的自己的IP地址和端口。客戶端然后同時給這兩個地址發(fā)送數(shù)據(jù),并使用第一個成功進行通訊的地址。如果兩個客戶端在同一個NAT的后面,那么,直接發(fā)往私有地址的包會先到達,就產生了一個直接連接的通道,而與NAT無關了。如果兩個客戶端在不同的NATs后面,直接發(fā)往私有地址的包就根本不能到達,但客戶端將又希望通過各自的公網(wǎng)地址建立連接。然而,對這些包進行某種授權(比如通過GUID)是重要的,因為在不同NATs的情況中,A直接發(fā)往B私有地址的信息完全可能到達和A同一個私網(wǎng)的其他主機(or vice versa)。具體實現(xiàn)可以按照以下步驟進行:假如A和B是處于統(tǒng)一私網(wǎng)的兩個客戶

15、端,則在A、B向S注冊時提供各自私網(wǎng)的IP地址和GUID(全局唯一標識符)信息,依照在AB建立連接時:A向B的公網(wǎng)地址發(fā)一個UDP包,同時請求S要求B向A的公網(wǎng)地址發(fā)一個UDP包到A的公網(wǎng)地址并且向B發(fā)送A的GUID(全局唯一標識符)信息,這樣B信任A的情況下A方能建立成功的連接。. 對端由多個NATs分開 Server S | | NAT X | +-+-+ | | NAT A NAT B | | | | Client A Client B .1:1234 .3:1234在這種情況下A和B只能通過S端看到的全局的公網(wǎng)地址來進行P2P通訊。3. 基于視頻監(jiān)控(會議)的穿NAT的實現(xiàn) 在目前視頻

16、監(jiān)控(會議)時,碼流從編碼端(編碼)傳輸至解碼端(客戶端)可能涉及到兩種方式:碼流通過服務器轉發(fā)和碼流直發(fā)。兩種方式對于NAPT(The IP Network Address/Port Translator) 進行UDP穿透的具體情況分析,首先明確的將NAPT設備按照上面的說明分為: Symmetric NAPT 和 Cone NAPT。3.1 通過服務器進行碼流轉發(fā)方式第一種情況, 雙方都是Symmetric NAPT:第二種情況, 雙方都是Cone NAPT:第三種情況, 一個是Symmetric NAPT, 一個是Cone NAPT:對于以下三種情況,參考2.1只要通信的雙方向建立交換的

17、轉發(fā)服務器發(fā)送探測包都可以實現(xiàn)碼流正確轉發(fā)。3.2 碼流直發(fā)方式(p2p穿NAT的典型應用)應用:錄象文件穿NAT下載第一種情況, 雙方都是Symmetric NAPT:此情況應給不存在什么問題,肯定是不支持UDP穿透。第二種情況, 雙方都是Cone NAPT:此情況是我們需要的,可以進行UDP穿透。第三種情況, 一個是Symmetric NAPT, 一個是Cone NAPT:此情況比較復雜,但我們按照上面的描述和數(shù)據(jù)機構進行一下分析也很容易就會明白了, 分析如下,假設: A -> Symmetric NAT, B -> Cone NAT1. A 想連接 B, A 從服務器那兒獲取到 B 的NAT地址和映射端口, A 通知服務器,服務器告知 B A的NAT地址和映射端口, B 向 A 發(fā)起連接,A 肯定無法接收到。此時 A 向 B 發(fā)起連接, A 對應的NAT建立了一個新的Session,分配了一個新的映射端口, B 的 NAT 接收到UDP包后,在自己的映射表中查詢,無法找到映射項,因此將包丟棄了。2. B 想連接

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論