WebRTC學習之路---TURN/STUN服務原理及搭建

一、NAT的四種類型

       簡單來說,IPV4地址不夠,出現了NAT。

1、完全錐型

       私網內的主機向公網主機發起一個請求,期間會在NAT服務上打洞(留下發起方公網的IP地址和端口)。外網的所有主機都可以通過這個IP地址和端口來訪問
Alt

2、地址限制型

       私網內的主機向公網內的某臺主機發起一個請求,會在NAT服務上開啓類似訪問權限的功能,就是說對於私網主機請求過的所有公網主機,都可以通過私網內主機的公網IP+端口訪問私網內的主機;而未被請求過的公網主機則無法訪問。
Alt

3、端口限制型

       私網內的主機向公網內的某臺主機的某個端口發起一個請求,會在NAT服務上開啓類似訪問權限的功能,就是說對於私網主機請求過的所有公網主機的特定端口,都可以通過私網內主機的公網IP+端口訪問私網內的主機;而未被請求過的公網主機的特定端口則無法訪問。
Alt

4、對稱型

       會在NAT服務的映射表中添上一組映射信息(每次請求都會往上添)----------六元組(私網內主機的內網IP+端口,私網內主機的公網IP+端口,公網內主機的IP+端口),其中前兩元是不變的,而後面的四元都有唯一的對應關係,也就是說公網內某個IP地址特定端口的主機只能通過映射表上與之相對應的第三、四元來訪問私網主機,其他都不能訪問。
Alt

二、STUN服務

       服務器有兩個公網的IP地址和端口。


1、STUN服務目的

       1、判斷通信雙方是否在NAT後;
       2、判斷雙方NAT的類型;
       3、交換各自公網的地址和端口(在NAT後就交換NAT轉換後的地址和端口)。

2、STUN服務檢測NAT類型的原理

       1、客戶端向STUN服務器的第一個IP地址端口1發起請求,通過服務器原路返回進行響應。如果這個響應的IP地址和客戶端的相同,說明客戶端在公網不在NAT之後
       2、前提:客戶端在NAT後。客戶端向STUN服務器的第一個IP地址端口1發起請求,通過服務器的第二個IP地址端口1響應。如果客戶端能收到響應,說明是完全錐型NAT
       3、如果第二步還不能收到響應,客戶端再向STUN服務器的第二個IP地址端口1發起請求,通過服務器同一個IP地址的端口2響應。如果客戶端能收到響應,說明是地址限制型NAT
       4、如果第三步收不到響應,客戶端向STUN服務器的第二個IP地址端口1發起請求,由服務器原路返回進行響應。客戶端不能收到請求,且返回的IP地址和第一步響應的I地址不相同,說明是對稱型NAT;當客戶端能收到請求,就是端口限制型NAT

       如果STUN提供的服務能夠連通,那兩端不走中繼服務器,直接點對點傳輸媒體流了。



三、TURN服務

       服務器分爲turn_client端和turn_server端。

1、TURN服務目的

       解決無法穿透的NAT。

2、TURN服務原理

       假設A端和B端要通信。A發送請求給STUN/TURN服務器(限定必須是3478端口),turn_client向turn_server發送一個Allocate請求,turn_server收到Allocate請求之後會爲A發的請求分配一個relay端口(中繼端口),經過中繼端口轉發給B。相反,B要發送自己的數據就通過relay端口進行發送,之後經過服務器端口轉發到3478,最後再到達A端。

       每次A發送的數據先發到turn_client端(3478),turn_client發送Send到turn_server的時候會帶上TURN的協議頭,然後turn_server再去掉協議頭,發給B端。B端發數據先到turn_server端(Allocate請求開通的relay端口),turn_server發Data給turn_client的時候也會帶上TURN的協議頭,然後turn_client再去掉協議頭,發給A端。這樣發數據會浪費帶寬,可用Channel解決帶寬損耗問題



四、TURN/STUN服務搭建

1、修改配置文件

       雲服務器記得開放端口!

	listening-port=3478
	external-ip=公網IP
	user=用戶名:密碼		//訪問TURN服務的憑證
	min-port=x
	max-port=x		//relay端口在min-max範圍內
	

2、測試ICE

       ICE測試網址百度就有。

Alt


       不用管報錯信息,只要relay和srflx就代表STUN/TURN服務搭建成功!
Alt

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章