因爲IP
地址資源有限,目前咱們使用的各類終端設備都位於局域網後面,也就是多臺設備共享同一個公網IP
。html
例如,若是位於局域網裏面的一個終端Agent A
要與互聯網上的另外一個終端Agent B
通訊,當A
發送的data packet
通過局域網出口處的NAT
設備時,NAT
會將data packet
裏面的source address
字段替換成相應的公網IP
和Port
,而後再發送data packet
到Agent B
。Agent B
看到的source address
就是通過轉換後的IP
和Port
,並不知道Agent A
的局域網地址;當Agent B
的響應到達Agent A
的NAT
設備後,NAT
設備查找內存中保存的和這個外網地址相對應的內網地址,找到後就將這個data packet
轉發到這個地址,這樣就實現了通訊。java
然而因爲目前存在着各類不一樣類型的NAT
設備,對NAT
有着不一樣的實現方式(將內外地址映射成外網地址的時候有着不一樣的行爲方式),這就給NAT
的穿透帶來了麻煩。服務器
一旦一個內網地址 (iAddr:iPort) 被映射到一個外部地址 (eAddr:ePort), 來自 iAddr:iPort 的任何數據包將經過 eAddr:ePort 發送。網絡
任何外部主機可以經過eAddr:ePort這個地址發送數據包到iAddr:iPort.ide
一旦一個內網地址 (iAddr:iPort) 被映射到一個外部地址 (eAddr:ePort), 來自 iAddr:iPort 的任何數據包將經過 eAddr:ePort 發送.工具
僅只有接收到主機(iAddr:iPort)經過eAddr:ePort發送的數據包的外部主機經過該主機的任何端口發送到eAddr:ePort的數據包纔可以被正確的轉發到iAddr:iPort.也就是說主機有關端口無關.測試
相似於address restricted cone NAT, 可是端口號有限制.flex
一旦一個內網地址 (iAddr:iPort) 被映射到一個外部地址 (eAddr:ePort), 來自 iAddr:iPort 的任何數據包將經過 eAddr:ePort 發送.ui
僅只有接收到主機(iAddr:iPort)經過eAddr:ePort發送的數據包的外部主機經過該主機的相同端口發送到eAddr:ePort的數據包纔可以被正確的轉發到iAddr:iPort.spa
來自相同內部ip和port發送到相同目的地ip和port的請求被映射到惟一的外部ip和port地址;若是相同的內部主機採用相同的ip和port地址發送到不一樣的目的地,那麼從新分配映射地址。
只有先前收到內部主機發送的包的外部主機纔可以發送返回包到內部主機。
針對前面三種NAT類型(即cone NAT)只要通訊雙方彼此知道對方的內部地址和外部地址的映射關係,而後經過UDP打洞的方式就能夠創建相互鏈接的通訊;可是第四種也就是Symmetric NAT的話因爲每次向不一樣目的地發送數據包時採用不一樣的外部地址,也就沒辦法經過直接的方式創建P2P鏈接。
一、若是通訊雙方在同一個局域網內,這種狀況下能夠不借助任何外力直接經過內網地址通訊便可;
二、若是通訊雙方都在有獨立的公網地址,這種狀況下固然能夠不借助任何外力直接通訊便可;
三、若是通訊雙方一方擁有獨立的公網地址另外一方在NAT後面,那麼能夠由位於NAT後面的一方主動發起通訊請求;
四、若是通訊雙方都位於NAT後面,且雙方的NAT類型都是cone NAT,那麼能夠經過一個STUN服務器發現本身的NAT類型以及內網和外網傳輸地址映射信息,而後經過Signaling(信令服務器,實現了SIP協議的主機)交換彼此的NAT類型及內網和外網傳輸地址映射信息,而後經過UDP打洞的方式創建通訊鏈接;
五、若是通訊雙方有一方的NAT類型是Symmetric NAT,則沒法直接創建P2P鏈接,這個時候就須要藉助TURN(Traversal Using Relay NAT)即轉發服務器來實現間接通訊;
當初始化多媒體電視會議、IP電話、視頻流等會話的時候,參與者之間會要求傳送媒介的詳細、傳輸地址和其餘會話描述元數據等信息;SDP爲這些信息提供一種和傳輸方式無關的標準的表現形式。也就是說SDP僅僅只是一種描述會話信息的格式。它主要被各類不一樣的傳輸協議做爲一種信息交換的格式使用列如:HTTP、RTSP、SIP、Email等各類協議。
如ICE裏面的SDP內容爲:
v=0 o=ice4j.org 0 0 IN IP4 192.168.106.215 s=- t=0 0 a=ice-options:trickle a=ice-ufrag:bc01a a=ice-pwd:1boove7ehnpo1lqho7unefni36 m=audio 3030 RTP/AVP 0 c=IN 192.168.106.215 IP4 a=mid:audio a=candidate:1 1 udp 2130706431 192.168.106.215 3030 typ host a=candidate:2 1 udp 1694498815 121.15.130.xxx 64923 typ srflx raddr 192.168.106.215 rport 3030
NAT會話穿透工具;STUN提供了一種方式使一個端點可以肯定NAT分配的和本地私有IP地址和端口相對應的公網IP地址和端口以及NAT的類型信息。它也爲端點提供了一種方式保持一個NAT綁定不過時。NAT綁定過時則表示爲相同的內網地址從新分配外網地址也就是端口號。
TURN是STUN協議的擴展,在實際應用中他也能夠充當STUN的角色;若是一個位於NAT後面的設備想要和另一個位於NAT後面的設備創建通訊,當採用UDP打洞技術不能改實現的時候就必需要一臺中間服務器扮演數據包轉發的角色,這臺TURN服務器須要擁有公網的IP地址;
是一種Signaling(信令)通訊協議;有許多互聯網應用須要建立有多個參與者的會話和管理參與者之間相互的數據交換,然而若是這些工做讓應用的參與者來實現是比較複雜的如:用戶也許在端點之間移動、經過多個名稱尋址和也許同時使用幾種不一樣的媒介通訊。有許多協議可以實現各類形式的多媒體會話進行數據傳送例如聲音、視頻或者文本消息。SIP可以和這些協議一同合做,使一個客服端可以發現參與這個會話的其餘客服端並共享同一會話。爲了定位後面加入會話的參與者等功能,SIP可以爲代理服務器建立基礎設施,客服端能夠經過這個代理服務器實現會話註冊、邀請參與會話等功能。SIP是一個建立、修改和終止會話的靈活的多種用途的工具,不依賴於底層的傳輸協議而且不依賴於被建立的會話類型。
是實現NAT穿透的一種技術方案;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容許客服端發現他們的所在網絡的拓撲結構的信息,而後找出一個或者更多的能夠創建通訊鏈接的路徑。
上圖顯示了一個典型的ICE部署環境,客服端L和R都在各自的NAT設備後面,下面簡單描述下ICE創建通訊的過程:
(1)L和R先分別經過STUN和TURN服務器獲取本身的host address,server-reflexive address、relayed address(和TURN轉發服務器相對應的地址),其中server-reflexive address和relayed address經過定時刷新保證地址不過時。這些地址一般叫作candinate地址。
(2)給這些candinate地址分配優先級排序並格式化成SDP格式,經過SIP服務器交換彼此的SDP;
(3)交換完成後根據必定的原則把本地的候選和遠程的候選進行配對,每一對都有本身的優先級並根據優先級進行排序後放入Check列表裏面(兩邊都會有相同的Check列表)。
(4)而後進行鏈接性測試,測試前會選擇一個客服端扮演Controlled角色和另外一個扮演Controling角色,連通性檢查完成後扮演Controling角色的客服端負責在有效的Candinate對列表裏面選擇一個做爲一個被選中的傳輸通道並通知Controlled的客服端。
(5)利用被選中的candinate地址對進行通訊。
在symmetric NAT中怎麼實現p2p
Peer-to-Peer Communication Across Network Address Translators
NAT穿透解決方案介紹
編譯rfc5766-turn-server搭建turn服務器
實戰rfc5766-turn-server和ice4j廣域網通信
試驗UDP打洞穿透NAT
打洞
NAT Check
NAT類型與穿透 及 STUN TURN 協議
STUNTMAN
NAT的四種類型及類型檢測