这段时间一直在写一个TURN(RFC5766)协议的客户端软件,用的是C++。虽然参考了一些开源的程序,但也有很多的波折。STUN/TURN/ICE相关的协议有好几个,后来也发现这些协议之间都是既有联系又有区别,也是这个原因让我多耗了不少时间,我想更好的方式不仅是从协议原文出发,也要参考其它产品的交互是怎么样的,这里把自己的一些心得记述下来。
首先,寻找一个TURN的服务器。公共的STUN服务器是很多了,但公共的TURN服务器看起来不多,以下这个是测试可用的 http://numb.viagenie.ca/ ,这个网站提供了账户的注册,你可以注册一个账户和密码。
其次,寻找一个TURN的客户端,用以观察其与TURN Server之间的交互过程。我用的是 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 测试可用,它本身自带了一个公共的STUN的服务器地址,可以将其删除,并添加一个我们申请到的TURN Server的地址。URI是turn:numb.viagenie.ca
第三步,用wireshark来做监控。下面这两篇文章介绍了怎么通过wireshark来做监控: http://chimera.labs.oreilly.com/books/1230000000545/ch18.html https://webrtc.org/testing/wireshark/# 简单来说,下载一个wireshark,打开wireshark后,先选择当前的以太网连接;然后在wireshark的左上角直接输入”stun”就可以了;
第四步,在trickle-ice的网址上做好配置,点击”Gather Candidates”,我们再转回wireshark软件,就能看到TURN的Client与Server的整个交互过程了;我用的版本是Version 2.0.3。
另外要注意的是,其中的stun数据包只是整体的一部分,像下图一样选中,即可看到这一部分的数据,事实上,wireshark已经将整个数据的含义完整的解析出来了。