在真實(shí)的網(wǎng)絡(luò)環(huán)境中瞧捌,NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù)隨處可見完箩,它是一種把內(nèi)部私有網(wǎng)絡(luò)地址(IP地址)轉(zhuǎn)換為合法網(wǎng)絡(luò)IP地址的技術(shù)粘捎。這種通過使用少量的公有IP地址代表較多的私有IP地址的方式帖蔓,不僅在一定程度上能都有效解決IPv4地址短缺的問題棚瘟,還能通過隱藏主機(jī)IP解決一定的安全問題拄丰。但是由于需要連接的個(gè)人設(shè)備大多數(shù)都隱藏在各自的內(nèi)網(wǎng)當(dāng)中府树,導(dǎo)致無法直接獲取IP地址,無法直接進(jìn)行P2P的音視頻通信料按。
現(xiàn)在的NAT基本可以總結(jié)成4種類型:
- 完全錐型
- IP限制錐型
- 端口限制錐型
- 對稱型
為了解決這個(gè)問題奄侠,實(shí)現(xiàn) NAT 穿越的效果,WebRTC 采用了 ICE 技術(shù)框架载矿。ICE 技術(shù)框架是參照 RFC5245 建議實(shí)現(xiàn)的垄潮,它由STUN 服務(wù)器、TURN服務(wù)器和相應(yīng)的ICE搜集和連接狀態(tài)組成闷盔,以更有效的方式來建立P2P會話弯洗。WebRTC 在ICE技術(shù)框架的采用下,客戶端無需關(guān)心所處網(wǎng)絡(luò)的位置以及 NAT 類型逢勾,即可動(dòng)態(tài)發(fā)現(xiàn)最優(yōu)的傳輸路徑牡整。下面主要介紹一下STUN服務(wù)器、TURN服務(wù)器以及ICE技的工作流程溺拱。
STUN服務(wù)器
STUN服務(wù)器基于STUN(Session Traversal Utilities for NAT)協(xié)議逃贝,它可以讓位于NAT后的客戶端判斷出路由器采用的NAT類型,找出自己的公網(wǎng)地址迫摔。通過信令服務(wù)器將公網(wǎng)地址轉(zhuǎn)發(fā)給對端沐扳,從而完成候選地址交換,實(shí)現(xiàn)P2P直連的效果句占。但是STUN服務(wù)器只能獲取完全錐型沪摄、IP限制錐型和端口限制錐型NAT的后面的主機(jī)地址,并不能獲取對稱型NAT后面的主機(jī)地址,因此ICE技術(shù)架構(gòu)中還需要使用 TURN服務(wù)器的支持杨拐。
TURN 服務(wù)器
TURN 服務(wù)器基于TURN(Traversal Using Relays around NAT)協(xié)議祈餐,用于協(xié)助完成STUN服務(wù)器無法完成的NAT穿越場景。具體的操作是兩端客戶端獲取TURN服務(wù)器的地址戏阅,通過TURN服務(wù)器進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)昼弟,完成間接的P2P直連效果。
ICE技術(shù)
ICE技術(shù)基于ICE(Interactive Connectivity Establishment)協(xié)議奕筐,該協(xié)議中一共有三種候選地址(優(yōu)先級依次下降):
- 主機(jī)地址(客戶端自身自主獲取的地址,用于同一局域網(wǎng)進(jìn)行連接)
- 反射地址(客戶端通過STUN服務(wù)器獲取的地址变骡,即當(dāng)前設(shè)備的外網(wǎng)地址离赫,告知多端即可在外網(wǎng)直連)
- 中繼地址(客戶端通過TURN服務(wù)器獲取的地址,后續(xù)用于數(shù)據(jù)中轉(zhuǎn))
ICE技術(shù)的工作流程簡單來說就是客戶端盡可能獲取不同的候選地址塌碌,并使用指定的信令通道進(jìn)行交換渊胸,然后根據(jù)候選地址的優(yōu)先級進(jìn)行連通性測試,最后選擇連接效果最優(yōu)的候選地址建立連接台妆。(ICE技術(shù)框架如下圖所示)