【正文】
d 17 bytes data from :33528: hello from callee響應方發(fā)送及接收數據12:05: !Data sent(內容為hello from callee)12:04: Component 1: received 17 bytes data from :26449: hello from caller請求方位與西安公司的防火墻內,應答方位與上海公司的防火墻內,stun/turn server位于公網。58510167772151typUDPhosta=candidate:Hc0a800f3UDPa=candidate:Hd20e4ef30c=IN58510localhosts=icet=0IN3414953978typUDPhosta=candidate:R3d4137045462321307064311typUDPa=candidate:Sc0a806f30c=IN51721localhosts=icet=0IN34149539786. 測試結果測試工具:客戶端:pjsua,xlite,icedemo,pjturnclient服務器:stunman,turnserver,pjturnsrv,numb發(fā)起端位于公司防火墻內部,stun/turn server 以及應答端位于公網。(14)~(17):和(10)~(13)是一樣的過程,因為A已經和B通信過,所以B能夠順利獲得A給它返回的應答包。(9):客戶端B就會根據地址列表向A發(fā)送綁定請求的數據包,但是由于A從來沒和B通信過,所以這個包會被NAT丟棄。(6)~(7):和(1)~(4)是一樣的過程,只是客戶端B位于公網,所以STUN服務器給它返回的地址和它本機地址是一樣的。(1)~(4):客戶端A是位于私網后的,首先A發(fā)送一個STUN請求的數據包,該數據包經過NAT后,數據包的IP頭會被NAT改為合法的IP地址,STUN服務器收到該數據包后,解析出源地址,注意這個源地址并不是客戶端A本地的地址,而是客戶端A通過NAT映射后的公網地址,STUN服務器將該地址加入的STUN應答包里,然后返回給客戶端A,那么客戶端A就獲得它在NAT后的映射地址,即服務器反向候選地址。9,接收消息,一旦permission建立成功,turn就可以將收到的消息通過data indication用中繼地址轉發(fā)出去。但是此時客戶端B不能發(fā)送數據到客戶端A,客戶端B需要經過permission請求才可以發(fā)送數據,否則服務器會將A的信息丟棄。協(xié)商的具體流程如下圖所示: rela模式的建立過程1~4,認證和allocation,客戶端首先向服務器發(fā)送allocation請求,但是這個請求沒有帶用戶名等信息,因此服務器會返回一個錯誤的響應報文要求重新發(fā)送請求,第3步,客戶端帶著用戶名等信息重新發(fā)起allocation請求,服務器認證通過,然后返回成功的響應信息,allocation請求一旦成功,turn服務器就會給客戶端分配一個端口做為relay port,中繼的地址和端口會通過響應消息的XORRELAYEDADDRESS返回給客戶端。 四次握手一旦連通性測試成功就需要保持keepalives,ICE是通過binding indication報文來保持keepalives。若一個地址對是可接收的同時又是可發(fā)送的,則稱該地址對是有效的,即通過連通性檢查。若通信雙方的某一個地址對通過一個完整的四次握手,那么該地址對就是有效地址對。首先呼叫端和應答端分別對地址列表進行配對,例如本地有n個地址,遠端有m個地址,那么配成n*m對。 獲取中繼轉發(fā)地址3. 連通性測試當呼叫端收集到所有的候選地址后,通過某種信令(sip,jingle等)將候選地址轉發(fā)給應答端,應答端就獲得了呼叫端的所有候選地址;而應答端同樣也執(zhí)行該過程。它是STUN服務器為STUN請求的發(fā)起方在本機上分配的代理地址,所有被路由到該地址的網絡包將會被轉發(fā)到服務器反向地址,繼而穿透NAT發(fā)送到終端,實際上就是中繼服務器的地址。 獲取服務器反向候選地址 Peer Reflexive CandidatePeer Reflexive Candidate,通過從主機候選地址發(fā)送一個STUN請求到運行在Peer候選地址上的STUN服務器而獲取的候選地址。 Server Reflexive Can