stun/turn/ice学习笔记
stun基本只是用于client探测NAT之后靠近stun server的外网地址,本身不包含应用数据通信的功能,其底层STUN协议通信多是基于UDP的。多个端点之间相互通过信令通道拿到彼此的NAT外网地址之后,就可以进行直接的P2P通,但可能因路由防火墙的规格太严格导致直接P2P通信不成功。
turn是扩展了stun功能,除了类似stun可是实现NAT外网侧地址探测之外,也实现了基于中继转发实现应用数据通信,其底层通信可以基于UDP或TCP,多基于UDP,(rfc5766也建议基于UDP)。由于turn包含了stun的功能,自然是可以实现类似stun时的直接的P2P通信。类似可能因路由防火墙的原因直接的P2P通信不成功,可以使用turn的中继转发来实现两个端点之间的间接通信。
中继转发模式时,两个端点间的通信始终需要turnserver参与,turnserver对此实施了权限管理。
1,首先每个端点链接到turnserver后,需要通过turnserver的身份认证之后才能进行后续操作,认证方式是向turnserver提供预先分配的realm/用户名/密码等信息。此步骤在 STUN Alloc Request中执行。在响应消息中中会得到turnserver返回的mapped addr和relay addr。
2,第一步的身份认证通过之后,若想向其他的端点发送数据,则需要先向turnserver申请发送许可,此步骤需要提供目标端点的relay地址。此步骤在STUN CreatePermission request中执行。
3,之后即可以STUN Data Indication消息形式向turnserver发送应用数据,目的地址为目标端点的relay地址。为进一步减小包头开销,可以进一步向turnserver申请通道绑定,将当前turn中继会话与turnserver的一个通道相关联,后续和turnserver以ChannelData的方式通信,其包头开销小很多。
以上可见STUN/TURN是已经提供了基本可用的通信机制,实际可优先采用STUN P2P直接的通信方式,但可能不通,继而需要改用TURN中继。因此就需要初始的连通性协商检查过程,而此过程都是类似的,ICE的作用正是可以替我们完成这个探测协商过程,并且还提供了双方身份确认的功能。
在pjnath实现中,ICE具体的数据收发由STUN UDP P2P/TURN中继来完成,每个STUN UDP P2P/TURN数据通道在内部用transport表示,而对应应用层的每一路数据流用component表示,其各自的都分配一个id,后续通过ice会话进行数据收发时都需要按需指定这些id值。
stun/turn/ice学习笔记的更多相关文章
- STUN/TURN/ICE协议在P2P SIP中的应用(一)
1 说明 本文详细描述了基于STUN系列协议实现的P2P SIP电话过程,其中涉及到了SIP信令的交互,P2P的原理,以及STUN.TURN.ICE的协议交互 本文所提到的各个服务 ...
- STUN/TURN/ICE协议在P2P SIP中的应用(二)
1 说明 2 打洞和穿越的概念... 1 3 P2P中的打洞和穿越... 2 4 使用STUN系列 协议穿越的特点... 2 5 STUN/ ...
- 基于jquery的插件turn.js学习笔记
基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...
- STUN, TURN, ICE介绍
STUN STUN协议为终端提供一种方式能够获知自己经过NAT映射后的地址,从而替代位于应用层中的私网地址,达到NAT穿透的目的.STUN协议是典型的Client-Server协议,各种具体应用通过嵌 ...
- ICE学习笔记一----运行官方的java版demo程序
建议新手和我一样,从官网下载英文文档,开个有道词典,慢慢啃. 官方文档下载: http://download.csdn.net/detail/xiong_mao_1/6300631 程序代码就不说了, ...
- ICE学习笔记 -- RFC 5245
RFC 5245 ICE 1, offer/answer model 2, ICE Step: 1) 产生候选地址(1.公网 2.NAT反射 3.Relay转发地址) Generate ca ...
- STUN/TURN服务器搭建
目录 STUN/TURN服务器搭建 编译安装 配置使用 添加用户 启动server 测试 开机启动 参考 STUN/TURN服务器搭建 编译安装 编译安装 OpenSSL: sudo apt-get ...
- stun/turn服务器部署
目录: 一.简介 二.安装 三.配置与运行 四.运行检测 五.答疑环节 一.简介 本文通过在服务器上安装coturn这个软件,实现搭建STUN服务器和TURN服务器. coturn 简介:是一个免费的 ...
- webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建
webrtc是google推出的基于浏览器的实时语音-视频通讯架构.其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路由器/交换机/防火墙等),浏览器与浏览器 ...
随机推荐
- 洛谷 [P2701] 巨大的牛棚
首先,本题是一道最大子矩阵问题,且m,n较小,可以使用DP做, 与 洛谷 [P1387]最大正方形 做法相同. #include <iostream> #include <cstdi ...
- NOIP 2017 day 1 游记
心情非常复杂.大概就是我问到的所有人都A掉了T1那样. 的确没有按套路出牌,今年T1不是大模拟,反倒是T2. ……已经不想再提到今天的T1了.如果真的要我说,我只能说 我再次学了一整年的OI,结果栽到 ...
- shared_ptr模版推导的问题
问题描述 今天在帮同事解决问题时,发现了这个比较有意思的现象,特记录下来备忘. 问题是这样的,同事开发的是应用程序动态库模块,通过应用的框架中以接口方式供外部使用.然后他想对这些接口生命周期进行控制, ...
- 用Spring Tools Suite(STS)开始一个RESTful Web Service
spring.io官方提供的例子Building a RESTful Web Service提供了用Maven.Gradle.STS构建一个RESTFul Web Service,实际上采用STS构建 ...
- centos-安装python3.6环境并配置虚拟环境
python3.6下载地址:https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz linux下python环境配置 统一目录: 源码存放位置 ...
- ES6标准入门 第一章:简介
ECMAScript 6 是JavaScript 语言的下一代标准:发布于2015年,又称为ECMAScript 2015. ECMAScript 与 JavaScript 的关系:前者是后者的规范, ...
- shell 脚本中执行SQL语句 -e "..."
/usr/local/mysql/bin/mysql -uroot -p123456 -e " use faygo source faygo.sql select * from devqui ...
- jq实现数字增加或者减少的动画
效果图: 1.HTML: <div class="up"></div> <br> <div class="down"& ...
- Android Camera 摄像 demo
google 在Android 5.0推出 Camera2 这个类,用于替换 Camera,但是Camera2要求android sdk 最低版本为 minSdkVersion = 21 ...
- Java经典编程题50道之三十八
编写一个函数:输入n为偶数时,调用函数求1/2+1/4+...+1/n:当输入n为奇数时,调用函数1/1+1/3+...+1/n. public class Example38 { public ...