目錄
WebRTC傳輸基本知識
- NAT(Network Address Translator)
- STUN(Simple Traversal of UDP Through NAT)
- TURN(Traversal Using Relays around NAT)
- ICE(Interactive Connectivity Establishment)
1 NAT
如圖所示:11.0.25.33的主機,在NAT Server的後面,左側三臺主機,是公網122.35.10.11映射出來的。
由於IPv4不夠,並且出於網絡完全的原因,所以出現了NAT Server。常見的,個人電腦的ip查詢,總是192.168.x.x 這就是nat之後的內網地址。而在瀏覽器直接輸入ip,獲得的是外網地址。
1.1 NAT 種類
內網的 X=ip, y=port, 映射後,得到外網的 A=ip, b=port.
X y, 向M P S 發送請求,M P S就知道了A b,通過A b, 就可以與Xy進行通信了。這是最好穿越的完全錐形NAT。安全性差。
X=ip, y=port, 映射後,A=ip, b=port. 還有將要請求的主機ip=P。 五元組。
先有內網向外網發送一個請求。X首先向P發送消息,記錄保留P,然後P的不同端口才可以向X發送消息。
其他主機的IP地址,不能通過,因爲內網沒有向他們發送請求,沒有記錄M和S,所以M S 都不能跟X連接。
X=ip, y=port, 映射後,A=ip, b=port. 還有將要請求的主機ip=P,port=q。 六元組。
先有內網向外網發送一個請求。X首先向Pq發送消息,記錄保留Pq,然後P的q端口纔可以向X發送消息,其他端口不可以。
其他主機的IP地址,不能通過,因爲內網沒有向他們發送請求,沒有記錄M和S,所以M S 都不能跟X連接。
X=ip, y=port, 映射後,A=ip, b=port. 還有將要請求的主機ip=P,port=q。 六元組。
先有內網向外網發送一個請求。X首先向Pq發送消息,記錄保留Pq,然後P的q端口纔可以向X發送消息,P的他端口不可以。且P只能向Ab發送數據,雖然Cd也是Xy映射出來的,但是並不接受Pq的數據。Cd是爲Mn服務的。
2 STURN
簡單記錄一下
3 TURN
(1)--------UDP/TCP/加密UDP-----------(2)--------------UDP-----------(3)
TURN Client在NAT之後,內網地址 10.1.1.5:49721
TURN Client的映射地址(出口地址)(外網):192.0.2.1:7000
TURN Server 地址:192.0.2.15:3478,3478一般是固定的接收請求的端口。TURN Server端看到的TURN Client端的地址,就是192.0.2.1:7000。
TURN Server接收到TURN Client請求的時候,會開闢一箇中轉的端口:192.0.2.15:50000。用來提供UDP中轉的服務。
Peer B 與TURN Server端是同一個網段,所以,兩者建立連接後,可以直接互相發送數據,通過50000端口和49191端口。當50000端口收到數據,經過內部中轉給3478端口,然後3478端口再中繼給TURN Client端。逆向也是這樣的。
在NAT之後的Peer-A, Peer-A 先穿越NAT,得到192.0.2.150:32102, 然後發送到TURN Server 端50000端口,然後TURN Server內部中轉到3478端口,3478端口再傳給7000端口,TURN Client就能接收到數據。TURN Client發送數據,也是經過NAT穿越,3478端口中轉50000端口,向32102端口發送數據,使得TURN Client端與Peer-A進行通信。
4 ICE
STUN Server可以有兩個,也可以有一個。STUN Server用於NAT穿越,也就是獲得外網ip和port。
Relay server 就是上面圖中的TURN server。Relay server也具有STUN Server的功能。可以映射公網IP,也有中繼的功能。
ICE目的:就是讓Peer-A獲取到,所有可以連接到Peer-B的通路。
通路一共有多少種:
- 本機網卡一個IP,局域網內,這就是一個通路了。
- 兩端都穿越NAT,通過STUN server服務獲取NAT映射後的地址,外網地址,就可以嘗試P2P通信了。
- P2P不通,就得通過Relay server進行通信。
- 如果本機有多個網卡,還會有其他路線。
- 如果本機有VPN,還會有VPN通信
- 還可能是虛擬IP
- ...
ICE 具體做哪些:
- 將所有的通路都收集起來。
- 對Candidate Pair排序
- 分別進行連通性檢測