P2P技術(一):NAT


1、NAT由來

NAT是一項神奇的技術,說它神奇在於它的出現幾乎使IPv4起死回生。在IPv4已經被認為行將結束歷史使命之后近20年時間里,人們幾乎忘了IPv4的地址空間即將耗盡這樣一個事實——在新技術日新月異的時代,20年可算一段漫長的歷史。更不用說,在NAT產生以后,網絡終端的數量呈加速上升趨勢,對IP地址的需求劇烈增加。

說它神奇,更因為NAT給IP網絡模型帶來了深遠影響,其身影遍布網絡每個角落。根據一份最近的研究報告,70%的P2P用戶位於NAT網關以內。

2、NAT的工作特點

NAT通常部署在一個組織的網絡出口位置,通過將內部網絡IP地址替換為出口的IP地址提供公網可達性和上層協議的連接能力。對於有Internet訪問需求而內部又使用私有地址的網絡,就要在組織的出口位置部署NAT網關,在報文離開私網進入Internet時,將源IP替換為公網地址,通常是出口設備的接口地址。

RFC1918規定l了三個保留的地址段落:10.0.0.0-10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255,分別處於A/B/C類地址,作為內部網絡IP

截屏2021-04-29 下午4.05.38

NAT處理報文的幾個關鍵特點:

  • NAT網關設置在私網到公網的路由出口位置,雙向流量必須都要經過NAT網關
  • 網絡訪問只能先由私網側發起,公網無法主動訪問私網主機
  • NAT網關在兩個訪問方向上完成兩次地址的轉換和翻譯,出方向做源信息替換,入方向做目的信息替換
  • NAT網關的存在對通信雙方是保持透明的
  • NAT網關為了實現雙向翻譯的功能,需要維護一張表,把回話信息保存下來

其中第二個特點打破了IP協議架構中所有節點在通訊中的對等地位,這是NAT最大的弊端,為對等通訊帶來了諸多問題,當然相應的克服手段也應運而生。事實上,第四點是NAT致力於達到的目標,但在很多情況下,NAT並沒有做到,因為除了IP首部,上層通信協議經常在內部攜帶IP地址信息。

3、NAT的實現方式

NAT工作模型有一對一的NAT、一對多的NAT。其中一對一表示一個內部主機占用一個公網IP,這種方式對節約公網IP沒有多大意義,主要實現一下特殊需求比如:用戶希望隱藏內部主機的真實IP。

NAT工作模型最常用的就是一對多。在一對多模型中,按照端口轉換的工作方式不同,又可以更進一步的划分。

3.1、靜態NAT

即一對一的NAT,這里只進行IP轉換,沒有進行端口的轉換

通俗易懂:快速理解P2P技術中的NAT穿透原理_11.png

3.2、NAPT

端口多路復用技術。與靜態NAT的差別是,NAPT不但要轉換IP地址,還要進行傳輸層的端口轉換。具體的表現形式就是,對外只有一個公網IP,通過端口來區別不同私有IP主機的數據。

通俗易懂:快速理解P2P技術中的NAT穿透原理_22.png

3.3、NAPT的四種NAT類型

  • 完全錐形NAT(Full Cone NAT)

    特點:IP和端口都不受限

    表現形式:將來自內部同一個IP地址同一個端口號(IP_IN_A : PORT_IN_A)的主機監聽/請求,映射到公網IP某個端口(IP_OUT_B : PORT_OUT_B)的監聽。任意外部IP地址與端口對其自己公網的IP這個映射后的端口訪問(IP_OUT_B : PORT_OUT_B),都將重新定位到內部這個主機(IP_IN_A : PORT_IN_A)。簡單來說就是只要客戶端由內到外建立一個映射后,其他外部主機的IP和端口都可以使用這個洞給客戶端發送數據。

    通俗易懂:快速理解P2P技術中的NAT穿透原理_2.png

  • 受限錐形NAT(Restricted Cone NAT)

    特點:IP受限,端口不受限

    表現形式:與完全錐形NAT不同的是,在公網映射端口后,並不允許所有IP進行對於該端口的訪問,要想通信必需內部主機對某個外部IP主機發起過連接,然后這個外部IP主機就可以與該內部主機通信了,但端口不做限制。

    通俗易懂:快速理解P2P技術中的NAT穿透原理_4.png

  • 端口受限型NAT(Port Restricted Cone NAT)

    特點:IP和端口都受限

    表現形式:該技術與受限錐形NAT相比更為嚴格。除具有受限錐形NAT特性,對於回復主機的端口也有要求。假設內部主機發送過報文給A主機P1端口,那外部主機向內部主機發送UDP報文時候必須要求報文IP是A,端口是P1。這一要求進一步強化了對外部報文請求來源的限制,從而較Restrictd Cone更具安全性。

    通俗易懂:快速理解P2P技術中的NAT穿透原理_5.png

  • 對稱型NAT(Symmetric NAT)

    特點:對每個外部主機或端口的會話都會映射為不同的端口(洞)

    表現形式:同一個客戶端和不同的目標IP:PORT通信,經過NAT映射后的公網IP:PORT是不同的。此時,如果B想要和客戶端通信,也只能通過NatIP:NatPortB(也就是紫色的洞洞)來進行,而不能通過NatIP:NatPortA(也就是黃色的洞洞)。

    通俗易懂:快速理解P2P技術中的NAT穿透原理_6.png

    以上四種類型對NAT的限制是越來越大。

4、NAT的限制與解決方案

IP協議的一個重要貢獻就是把世界變得平等,我們熟知的CS體系結構是在應用層協議上的角色區分,而在網絡層和傳輸層沒有差異,一個IP地址的主機既可以是客戶機,也可以是服務器。

與此同時,很多應用也是把客戶端和服務器的角色組合起來來完成功能。而在P2P應用中,一個用戶的主機既為下載的客戶,同時也向其他客戶提供數據,是一種C/S混合的模型。上層應用之所以能這樣設計,是因為IP協議棧定義了這樣的能力。試想一下,如果IP提供的能力不對等,那么每個通信會話都只能是單方向發起的,這會極大限制通信的能力。

**而NAT最大的弊端正在於此——破壞了IP端到端通信的能力!其次NAT設備會對數據包進行編輯修改,這樣就降低了發送數據的效率;此外,各種協議的應用各有不同,有的協議是無法通過NAT的(不能通過NAT的協議還是蠻多的),這就需要通過穿透技術來解決

4.1、NAT弊端

  • NAT使IP會話的保持時效變短。由於IP和端口資源有限,所以在會話結束后需要回收資源,即老化操作。基於UDP通信協議很難確定何時通信結束,所以NAT網關主要依賴超時機制回收外部的端口,但是如果應用需要維持連接的時間大於NAT網關的設置,通信就會意外中斷。因為網關回收相關轉換表資源以后,新的數據到達時就找不到相關的轉換信息,必須建立新的連接。當這個新數據是由公網側向私網側發送時,就會發生無法觸發新連接建立,也不能通知到私網側的主機去重建連接的情況。這時候通信就會中斷,不能自動恢復。即使新數據是從私網側發向公網側,因為重建的會話表往往使用不同於之前的公網IP和端口地址,公網側主機也無法對應到之前的通信上,導致用戶可感知的連接中斷。很多應用協議的設計者已經考慮到了這種情況,所以一般會設置一個連接保活的機制,即在一段時間沒有數據需要發送時,主動發送一個NAT能感知到而又沒有實際數據的保活消息,這么做的主要目的就是重置NAT的會話定時器。
  • NAT在實現上將多個內部主機發出的連接復用到一個IP上,這就是依賴IP進行主機跟蹤的機制都失效了。一個IP被很多用戶共享,如果存在惡意的用戶行為,很難定位到發起連接的那個主機。
  • NAT工作機制依賴於修改IP包頭的信息,這會妨礙一些安全協議的工作。因為NAT篡改了IP地址、傳輸層端口號和校驗和,這會導致認證協議徹底不能工作,因為認證目的就是要保證這些信息在傳輸過程中沒有變化。IP分片機制是在信息源端或網絡路徑上,需要發送的IP報文尺寸大於路徑實際能承載最大尺寸時,IP協議層會將一個報文分成多個片斷發送,然后在接收端重組這些片斷恢復原始報文。IP這樣的分片機制會導致傳輸層的信息只包括在第一個分片中,NAT難以識別后續分片與關聯表的對應關系,因此需要特殊處理。

4.2、NAT路由類型判斷

根據上面的介紹,我們可以了解到,在實際的網絡情況中,各個設備所處的網絡環境是不同的。那么,如果這些設備想要進行通信,首先判斷出設備所處的網絡類型就是非常重要的一步。

舉個例子來說:對於IM中的實時音視頻功能和VoIP軟件,對位於不同NAT內部的主機通信需要靠服務器來轉發完成,這樣就會增加服務器的負擔。為了解決這種問題,要盡量使位於不同NAT內部的主機建立直接通信,其中,最重要的一點就是要判斷出NAT的類型,然后才能根據NAT的類型,設計出直接通信方案。不然的話,兩個都在NAT的終端怎么通信呢?我們不知道對方的內網IP,即使把消息發到對方的網關,然后呢?網關怎么知道這條消息給誰,而且誰允許網關這么做了?

為了解決這個問題,也就是處於內網的主機之間能夠穿越它們之間的NAT建立直接通信,已經提出了許多方法,STUN(Session Traversal Utilities for NAT,NAT會話穿越應用程序)技術就是其中比較重要的一種解決方法,並得到了廣泛的應用。

參考鏈接:

http://www.52im.net/thread-50-1-1.html

http://www.360doc.com/content/14/0305/17/8285430_357987074.shtml

http://www.52im.net/thread-1055-1-1.html

《計算機網絡自頂向下方法》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM