研究了将近几个月的voip,总结出来一下相关概念的知识,特此分享一下。若是有错误还请你们多多指教。 算法
咱们先说为何要讲 turn stun ice kamailio之间的关系,由于点对点通话是基于ip的音频流通讯,而因为上网设备的增多,ipv4没法知足给每个设备分配一个ip,因此就出现了nat这个概念。而stun、stun、ice、kamailio有些模块都是为nat穿透而准备的(具体的nat穿透能够网上搜索)。为何要准备这么多呢?由于nat有不少类型,因为我在实际测试中只遇到过两种类型:一种是彻底开放型的、一种是对称型的(具体能够搜索nat类型)。若是你的上网设备是在公网上,则彻底没有必要往下看了。可是大多数上网设备都是在nat后的。 apache
stun 服务器
stun是一个正对stun协议的单独的服务器,你使用stun协议访问他时他会返回你上网设备的公网ip,stun和sip协议没有关系,你若是用到stun的话sip客户端会吧stun返回的公网ip做为本身的sip本机ip,这样别人就能够找到你了,音频数据流就能够直接经过该ip地址和你点对点通话 测试
turn spa
turn服务器至关于把本身的ip租给你使用,应为turn服务器在公网。当对方找你的时候就像找到turn分配给你的ip,而后经过他给你发送音频流。其实turn至关于服务器中转,与之相似的好比rtpproxy、mediaproxy等等 代理
ice ip
ice实际上是一种算法,由于对称型nat中上网设备每次数据的出口和入口端口都是随机的,这时候stun是没有办法获取到可以让另外一个终端的公共ip和端口,ice经过算法来预测让对方数据流进来的 文档
kamailio io
voip经常使用的协议是sip协议(相似于http协议),kamailio是sip协议的服务器(相似于http协议的apache)。只负责处理sip协议,固然它有不少模块实现不少功能, 通过一段时间的官方文档阅读发现他有一个stun.so和outbound 模块好像是做为代理模式能够充当stun的功能,可是因为项目时间缘由就没有仔细阅读 音频