這段時(shí)間一直在寫一個(gè)TURN(RFC5766)協(xié)議的客戶端軟件水评,用的是C++艳馒。雖然參考了一些開源的程序,但也有很多的波折衙耕。STUN/TURN/ICE相關(guān)的協(xié)議有好幾個(gè),后來也發(fā)現(xiàn)這些協(xié)議之間都是既有聯(lián)系又有區(qū)別勺远,也是這個(gè)原因讓我多耗了不少時(shí)間橙喘,我想更好的方式不僅是從協(xié)議原文出發(fā),也要參考其它產(chǎn)品的交互是怎么樣的谚中,這里把自己的一些心得記述下來渴杆。
首先,尋找一個(gè)TURN的服務(wù)器宪塔。公共的STUN服務(wù)器是很多了磁奖,但公共的TURN服務(wù)器看起來不多,以下這個(gè)是測試可用的 http://numb.viagenie.ca/ 某筐,這個(gè)網(wǎng)站提供了賬戶的注冊(cè)比搭,你可以注冊(cè)一個(gè)賬戶和密碼。
其次南誊,尋找一個(gè)TURN的客戶端身诺,用以觀察其與TURN Server之間的交互過程。我用的是 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 測試可用抄囚,它本身自帶了一個(gè)公共的STUN的服務(wù)器地址霉赡,可以將其刪除,并添加一個(gè)我們申請(qǐng)到的TURN Server的地址幔托。URI是turn:numb.viagenie.ca
第三步穴亏,用wireshark來做監(jiān)控。下面這兩篇文章介紹了怎么通過wireshark來做監(jiān)控: ? ? ? ? ? ? ? http://chimera.labs.oreilly.com/books/1230000000545/ch18.html? https://webrtc.org/testing/wireshark/#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 簡單來說重挑,下載一個(gè)wireshark嗓化,打開wireshark后,先選擇當(dāng)前的以太網(wǎng)連接谬哀;然后在wireshark的左上角直接輸入”stun”就可以了刺覆;
第四步,在trickle-ice的網(wǎng)址上做好配置史煎,點(diǎn)擊”Gather Candidates”谦屑,我們?cè)俎D(zhuǎn)回wireshark軟件驳糯,就能看到TURN的Client與Server的整個(gè)交互過程了;我用的版本是Version 2.0.3伦仍。
另外要注意的是结窘,其中的stun數(shù)據(jù)包只是整體的一部分,像下圖一樣選中充蓝,即可看到這一部分的數(shù)據(jù)隧枫,事實(shí)上,wireshark已經(jīng)將整個(gè)數(shù)據(jù)的含義完整的解析出來了谓苟。