摘要:穿透的協(xié)議穿透協(xié)議系列介紹了協(xié)議協(xié)議版本變化屬于的協(xié)議通過(guò)與之間發(fā)送數(shù)據(jù)包通信以獲取一些信息。同樣和交互其作用是穿透失敗使用中繼,確保通信成功的低優(yōu)先級(jí)策略。
UDP NAT穿透俗稱(chēng)p2p打洞。
講到NAT, 追溯一下NAT產(chǎn)生原因:使用ipv4的時(shí)候,地址數(shù)量有限,NAT設(shè)備可以讓接上它的其他設(shè)備在其上共享ip,緩解地址不夠用。當(dāng)然ipv6的概念早就來(lái)臨了,國(guó)內(nèi)推廣的程度和推廣慢原因這里就先忽略,下面介紹一下NAT穿透以及實(shí)現(xiàn)。
NAT的類(lèi)型(NAPT)
完全錐型(Full Cone)
內(nèi)部地址[internal_ip:internal_port]通過(guò)NAT映射外部地址[external_ip:external_port], NAT分配端口后,所有外部設(shè)備可以通過(guò)這個(gè)[external_ip:external_port]和[internal_ip:internal_port]通信
受限錐型(Restricted Cone), 或者說(shuō)是IP受限錐型
內(nèi)部必須主動(dòng)鏈接外部, 被訪問(wèn)的目標(biāo)設(shè)備[tag_exrenal_ip:*]可以與之任意端口通信, 而其他外部IP則不能
端口受限錐型(Port Restricted Cone), 或者說(shuō)是IP + PORT受限錐型
在受限錐型的基礎(chǔ)之上,對(duì)端口進(jìn)一步約束;目標(biāo)設(shè)備[tag_exrenal_ip:tag_port1]可以與之通信,而[tag_exrenal_ip:tag_port2]不行
對(duì)稱(chēng)型(Symmetric)
每次對(duì)外訪問(wèn), NAT映射外部地址[external_ip:external_port]的端口均不一樣。如: 當(dāng)主機(jī)A訪問(wèn)主機(jī)B, A的IP被映射為[ip:port1]后; 當(dāng)主機(jī)A訪問(wèn)主機(jī)C, A的IP被映射為[ip:port2]后。
穿透NAT的協(xié)議
Google穿透協(xié)議[RFC3489][RFC5766]系列介紹了[STUN][TURN]協(xié)議(協(xié)議版本變化),屬于 client-server的協(xié)議,通過(guò)client與server之間發(fā)送數(shù)據(jù)包,通信以獲取一些信息。
STUN
STUN-client位于NAT后面,它通過(guò)與STUN-server交互,發(fā)送接收[協(xié)議的]數(shù)據(jù)報(bào),可以通過(guò)抓包 簡(jiǎn)略查看(比如tcpdump)交互過(guò)程,最終將NAT類(lèi)型和內(nèi)外二元組返回給STUN-client。當(dāng)然詳細(xì)的 通信過(guò)程,查看goole定義RFCxxxx的協(xié)議,最好結(jié)合開(kāi)源的client實(shí)現(xiàn)結(jié)合。
TURN
TURN-client同樣和server交互,其作用是穿透失敗,使用中繼,確保通信成功的低優(yōu)先級(jí)策略。 就是實(shí)際數(shù)據(jù)中轉(zhuǎn)的傳輸中心,當(dāng)然如果TURN存在NAT,需要支持hairpin。協(xié)議簡(jiǎn)要概括:client Allocate請(qǐng)求、創(chuàng)建Permission、建立Channel等等,通過(guò)在TURN-server上分配一個(gè)Port,作為 己方的一個(gè)候選通信 [ip:port]。
ICE
穿越協(xié)議[RFC5245],可以理解為對(duì)STUN和TURN的擴(kuò)展,利用STUNTURN client收集、檢查、優(yōu) 先級(jí)本地候選地址,用于其他peer使用并用于連接。
NAT穿透實(shí)現(xiàn)
試驗(yàn)幾個(gè)組件
1.STUN服務(wù)器使用google開(kāi)放stun.l.google.com:19302 2.TURN使用開(kāi)源coturn,主機(jī)阿里云即可,支持hairpin 3.客戶端實(shí)現(xiàn),使用開(kāi)源ice4j(實(shí)現(xiàn)了STUNTURN的client,協(xié)議版本可能有異)
架構(gòu)
流程
step1:通過(guò)ice4j獲取候選[ip:port] step2:通過(guò)login-server權(quán)限校驗(yàn)以及SDP交換 step3:檢測(cè)彼方SDP,進(jìn)而通信,ice完成
結(jié)語(yǔ)
UDP穿透成功,兩端位于對(duì)稱(chēng)NAT后,這里沒(méi)有使用生日攻擊等端口預(yù)測(cè),通過(guò)realy可以通信
測(cè)試源碼
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/70972.html
摘要:為了使連接起作用,對(duì)等方必須獲取元數(shù)據(jù)的本地媒體條件例如,分辨率和編解碼器功能,并收集應(yīng)用程序主機(jī)的可能網(wǎng)絡(luò)地址,用于來(lái)回傳遞這些關(guān)鍵信息的信令機(jī)制并未內(nèi)置到中。所有特定于多媒體的元數(shù)據(jù)都使用協(xié)議傳遞。 這是專(zhuān)門(mén)探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 18 篇。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 如果你錯(cuò)過(guò)了前面的章節(jié),可以在這里...
摘要:網(wǎng)絡(luò)地址轉(zhuǎn)換,其基本工作原理是當(dāng)私有網(wǎng)主機(jī)與公共網(wǎng)逐漸通信的經(jīng)過(guò)網(wǎng)關(guān)時(shí),將包中的源或目的在私有和的公共之間進(jìn)行轉(zhuǎn)換。由于包的源已經(jīng)被轉(zhuǎn)換成的公共,響應(yīng)的包將被發(fā)送到。對(duì)于通信雙方而言,這種地址的轉(zhuǎn)換過(guò)程是完全透明的。 一:為什么需要NAT 由于IP地址隨著互聯(lián)網(wǎng)的發(fā)展而逐漸稀缺,難以使得每臺(tái)主機(jī)都擁有一個(gè)公網(wǎng)上的IP地址,且并不是所有主機(jī)都需要一個(gè)公網(wǎng)上的地址,于是就有了NAT技術(shù)。 ...
閱讀 2823·2021-11-25 09:43
閱讀 2191·2021-11-18 13:25
閱讀 4780·2021-09-22 15:52
閱讀 1992·2021-09-22 15:49
閱讀 2302·2019-08-30 15:54
閱讀 3093·2019-08-29 17:13
閱讀 2393·2019-08-29 16:54
閱讀 2324·2019-08-29 12:58