【正文】
容為hello from caller)12:12: Component 1: received 17 bytes data from :33528: hello from callee響應(yīng)方發(fā)送及接收數(shù)據(jù)12:05: !Data sent(內(nèi)容為hello from callee)12:04: Component 1: received 17 bytes data from :26449: hello from caller請(qǐng)求方位與西安公司的防火墻內(nèi),應(yīng)答方位與上海公司的防火墻內(nèi),stun/turn server位于公網(wǎng)。IN49152a=candidate:Sc0a806f3151663UDPtypIN49153a=candidate:Sc0a87977133001UDPtyphosta=candidate:R3d4137042130706431typUDP0c=INlocalhosts=icet=03414953978hosta=candidate:R3d4137042130706431typUDP0c=INlocalhosts=icet=03414953978585101hosta=candidate:Hc0a800f3UDP0c=INlocalhosts=icet=03414953978hosta=candidate:R3d4137042130706431typUDP0c=INlocalhosts=icet=03414953978(14)~(17):和(10)~(13)是一樣的過(guò)程,因?yàn)锳已經(jīng)和B通信過(guò),所以B能夠順利獲得A給它返回的應(yīng)答包。(6)~(7):和(1)~(4)是一樣的過(guò)程,只是客戶端B位于公網(wǎng),所以STUN服務(wù)器給它返回的地址和它本機(jī)地址是一樣的。9,接收消息,一旦permission建立成功,turn就可以將收到的消息通過(guò)data indication用中繼地址轉(zhuǎn)發(fā)出去。協(xié)商的具體流程如下圖所示: rela模式的建立過(guò)程1~4,認(rèn)證和allocation,客戶端首先向服務(wù)器發(fā)送allocation請(qǐng)求,但是這個(gè)請(qǐng)求沒(méi)有帶用戶名等信息,因此服務(wù)器會(huì)返回一個(gè)錯(cuò)誤的響應(yīng)報(bào)文要求重新發(fā)送請(qǐng)求,第3步,客戶端帶著用戶名等信息重新發(fā)起allocation請(qǐng)求,服務(wù)器認(rèn)證通過(guò),然后返回成功的響應(yīng)信息,allocation請(qǐng)求一旦成功,turn服務(wù)器就會(huì)給客戶端分配一個(gè)端口做為relay port,中繼的地址和端口會(huì)通過(guò)響應(yīng)消息的XORRELAYEDADDRESS返回給客戶端。若一個(gè)地址對(duì)是可接收的同時(shí)又是可發(fā)送的,則稱該地址對(duì)是有效的,即通過(guò)連通性檢查。首先呼叫端和應(yīng)答端分別對(duì)地址列表進(jìn)行配對(duì),例如本地有n個(gè)地址,遠(yuǎn)端有m個(gè)地址,那么配成n*m對(duì)。它是STUN服務(wù)器為STUN請(qǐng)求的發(fā)起方在本機(jī)上分配的代理地址,所有被路由到該地址的網(wǎng)絡(luò)包將會(huì)被轉(zhuǎn)發(fā)到服務(wù)器反向地址,繼而穿透NAT發(fā)送到終端,實(shí)際上就是中繼服務(wù)器的地址。 Server Reflexive CandidateServer Reflexive Candidate,是通過(guò)主機(jī)候選地址向STUN服務(wù)器發(fā)送STUN請(qǐng)求獲得的網(wǎng)絡(luò)地址。比較常用的NAT穿越技術(shù)有STUN,TURN,但是STUN不支持TCP連接的穿越,也不支持對(duì)稱NAT。1. NAT穿越技術(shù)分析如果通信的雙方有一方或者兩方在NAT后,就需要進(jìn)行NAT穿越。 ICE概念交互式連接建立(Interactive Connectivity Establishment ——ICE)草案是由IETF的MMUSIC工作組開(kāi)發(fā)出來(lái)的,它所提供的是一種框架,使各種NAT穿透技術(shù)可以實(shí)現(xiàn)統(tǒng)一。ICE的基本流程其實(shí)很清晰,分兩個(gè)步驟,第一步就是收集各種類型的地址,第二步就是將本地和遠(yuǎn)端的地址進(jìn)行配對(duì),排序,然后執(zhí)行連通性檢查。也就是內(nèi)部機(jī)器A連接外網(wǎng)機(jī)器B時(shí),NAT會(huì)打開(kāi)一個(gè)端口,連接外網(wǎng)機(jī)器C時(shí)又會(huì)打開(kāi)另外一個(gè)端口。2. 獲取候選地址候選地址包括主機(jī)候選地址(host Candidate),服務(wù)器反向候選地址(srflxServer Reflexive Candidate),對(duì)端反向候選地址(prflx Peer Reflexive Candidate)和中繼候選地址(relayed Candidate) host Candidatehost Candidate,也