視頻通訊原理之NET的簡單介紹

一:爲何須要NAT

因爲IP地址隨着互聯網的發展而逐漸稀缺,難以使得每臺主機都擁有一個公網上的IP地址,且並非全部主機都須要一個公網上的地址,因而就有了NAT技術。服務器

NAT(The IP Network Address Translator)網絡地址轉換,其基本工做原理是:當私有網主機與公共網逐漸通訊的IP通過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換
圖片描述網絡

假設NAT網關有2個網絡端口,其中公共網絡端口的IP地址是統一分配的公共IP,爲202.204.65.2;私有網絡端口的IP地址是保留地址,爲192.168.1.1。私有網中的主機 192.168.1.2向公共網中的主機166.111.80.200發送了1個IP包(Des=166.111.80.200,Src=192.168.1.2)。測試

當IP包通過NAT網關時,NAT會將IP包的源IP轉換爲NAT的公共 IP並轉發到公共網,此時IP包(Des=166.111.80.200,Src=202.204.65.2)中已經不含任何私有網IP的信息。因爲IP 包的源IP已經被轉換成NAT的公共IP,響應的IP包(Des=202.204.65.2,Src=166.111.80.200)將被髮送到NAT。 這時,NAT會將IP包的目的IP轉換成私有網中主機的IP,而後將IP包(Des=192.168.1.2,Src=166.111.80.200)轉 發到私有網。對於通訊雙方而言,這種地址的轉換過程是徹底透明的。flex

2、NAT類型

(一)Full-cone NAT:

一旦一個內網地址 (iAddr:iPort) 被映射到一個外部地址 (eAddr:ePort), 來自 iAddr:iPort 的任何數據包將經過 eAddr:ePort 發送。spa

任何外部主機可以經過eAdder:ePort這個地址發送數據包到iAddr:iPortrest

(二)Address-restricted-cone NAT:

一旦一個內網地址(iAdder:iPort)被映射到一個外部地址(eAddr:ePort),來自iAddr:iPort的任何數據包將經過eAddr:ePort發送。server

僅只有接收到主機(iAddr:iPort)經過eAddr:ePort發送的數據包的外部主機經過該主機的任何端口發送到eAddr:ePort的數據包纔可以被正確的轉發到iAddr:iPort.也就是說主機有關端口無關blog

(三)Port-restricted cone NAT

相似於address restricted cone NAT, 可是端口號有限制.圖片

一旦一個內網地址 (iAddr:iPort) 被映射到一個外部地址 (eAddr:ePort), 來自 iAddr:iPort 的任何數據包將經過 eAddr:ePort 發送.ip

僅只有接收到主機(iAddr:iPort)經過eAddr:ePort發送的數據包的外部主機經過該主機的相同端口發送到eAddr:ePort的數據包纔可以被正確的轉發到iAddr:iPort.

(四)Symmetric NAT

來自相同內部ip和port發送到相同目的地ip和port的請求被映射到惟一的外部ip和port地址;若是相同的內部主機採用相同的ip和port地址發送到不一樣的目的地,那麼從新分配映射地址。

只有先前收到內部主機發送包的外部主機纔可以發送返回包到內部主機。

針對前面三種NAT類型,只要通訊雙方彼此知道對方的內部地址和外部地址的映射關係,而後經過UDP打洞的方式就能夠創建相互鏈接的通訊;可是第四種也就是Symmetric NAT的話因爲每次向不一樣目的地發送數據包時採用不一樣的外部地址,也就沒辦法經過直接的方式創建P2P鏈接。

三:爲何要作NAT穿透:

咱們知道在平常的互聯網交互中,全部的信息流必需要經過NAT,通過服務器,而這對服務器的壓力可想而知。
圖片描述

這時就有人提出,咱們能不能不從服務器通過,直接對兩個端口進行鏈接。這樣不只能減輕服務器壓力,也能夠節省大量的流量。這時發現,以前幫助端口實現「溝通」的NAT如今成了直接鏈接的阻力。NAT穿透是實現P2P所需的基礎。

四:如何作NAT穿透:

NAT穿透目前主要有:ALG、MII3COM、STUN、TURN、ICE和Full Proxy等6種方式,這裏主要介紹一下ICE方式

ICE是一種NAT穿透技術,經過offer/answer模型創建基於UDP的媒介流。ICE是offer/answer模型的擴展,經過在offer和answer的SDP裏面包含的IP地址和端口,而後對本地SDP和遠程SDP裏面的IP地址進行配對,而後經過P2P連通性檢查進行連通性測試工做,若是測試經過即代表該傳輸地址對能夠創建鏈接。其中IP地址和端口有如下幾種:本機地址、經過STUN服務器反射後獲取的server-reflexive地址(內網地址被NAT映射後的地址)、relayed地址(和TURN轉發服務器相對應的地址)及Peer reflexive地址等。

在一般的ICE部署環境中,咱們有兩個端想要創建通訊鏈接,他們能夠直接經過signaling服務器(如SIP服務器)執行offer/answer過程來交換SDP消息。

在ICE過程開始的時候,客服端會忽略他們各自的網絡拓撲結構,不論是不是在NAT或多個NAT後面,ICE容許客服端發現他們所在網絡的拓撲結構的信息,而後找出一個或更多能夠創建通訊鏈接的路徑。

相關文章
相關標籤/搜索