原文地址:http://blog.pjsip.org/2007/04/06/introducing-pjnath-open-source-ice-stun-and-turn/

ICE是什么?

对于那些不熟悉ICE的人而言,ICE可能是一种最全面的用于穿透NAT和多媒体通信的方法。它提供了一种找到两个终端之间最好路径的方法,它还解决了NAT所带来的各种各样的问题,比如两个终端处在同一个NAT后面(and no hairpin is available),两个终端都处在对称NAT后面(在这种情况下,将使用一个中继器)。详情请参看draft-ietf-mmusic-ice-15.txt

这是个了不起的协议!首先,它不靠自身来运行,ICE使用STUN(Session Traversal Utlities for NAT, 其最新的草案是draft-ietf-behave-rfc3489bis-06)协议来做连通性检测。对于转播,它使用TURN(Obtaining Relay Addresses from Simple Traversal Underneath NAT,其最新的草案是draft-ietf-behave-turn-03)来做同样的检测。这三者加起来,总共有103+61+44=208页协议文档。我想这就为什么是"Simple"这个词被从STUN这个首字母缩略语中移除的原因。

总之,我相信现在是支持这个协议的好时机。ICE一周前通过了WGLC-ed (Work Group Last Call),而且STUN草案也日趋完善(TURN稍微落后一点点)。实际上,我觉得时机是完美的,因为在它们通过RFC-ed (this is not to say that we’re expert in any kind!)之前,我们可以帮助发现这些文档中的漏洞。我们早点把这些协议实现出来并发现其中的问题,协议也可以及时做相应的改动。

PJNATH – NAT Traversal Helper Library

PJNATH – Open Source NAT Traversal Helper supporting STUN, TURN, and ICE(点击该链接可以转到相应的文档)

PJNATH是PJ项目中一个新的库,它与PJLIB,PJSIP,PJMEDIA这些库处于同一层次。它由如下部分组成:

将来,我们可能把诸如UPnP或SOCKS这样的NAT穿透协议也加进来。

为了支持ICE,PJMEDIA和PJSUA这两个库需要升级:

  • 在PJMEDIA中,我们添加了一个新的媒体传输,叫做pjmedia_ice_trans。
  • 在PJSUA库中,STUN设置已经被从传输设置移动全局设置,并且在媒体设置中添加了使能ICE的设置选项。

它可以工作了吗?

我想,是的。

我试着在同一个NAT之后运行两个pjsua,本地地址对被使用。我试着在不同的NAT之后运行两个pjsua,公共地址对被使用。所以看起来它是可以工作了。

此外,从上周开始,我一直在做测试,发现并解决了一些bugs。而且在测试过程中,我发现协商很快就完成了,对于不同的ADSL线上的两个终端,这个时间大约是100ms,即便是SDP应答被代理延迟(ICE在SDP应答被调用者收到之前就可以开始检查)。

但是这些天测试ICE最主要的困难之一是没有其它可以免费获取的ICE实现,所以虽然PJNATH中的实现看起来可以工作,并且它严格遵守ICE-15,但在它与其它的实现进行对话之前我们还是不能确定它的兼容性到底怎样。

PJNATH介绍 -- 开源的用于NAT穿透的ICE, STUN和TURN的更多相关文章

  1. NAT穿透解决方案介绍

    最近公司要实现在各种网络环境下面的多屏互动(机顶盒.android phone.iphone及PC端)的需求:由于IP地址资源有限的原因,目前我们使用的各种终端设备都位于局域网后面也就是多台设备共享同 ...

  2. NAT穿透解决方案介绍(转)--Java ICE实现

    转:http://www.cnblogs.com/javaminer/p/3575282.html 最近公司要实现在各种网络环境下面的多屏互动(机顶盒.android phone.iphone及PC端 ...

  3. CWMP开源代码研究——stun的NAT穿透

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 参考: http://www.cnblogs.com/myblesh/p/6259765.htm ...

  4. 解决外网与内网或内网之间的通信,NAT穿透

    在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行.问题就在于NAT.首先介绍下NAT. NAT的作用NAT(Network Address Translato ...

  5. NAT穿透的详解及分析

    一.什么是NAT?为什么要使用NAT?NAT是将私有地址转换为合法IP地址的技术,通俗的讲就是将内网与内网通信时怎么将内网私有IP地址转换为可在网络中传播的合法IP地址.NAT的出现完美地解决了lP地 ...

  6. NAT穿透的详细讲解及分析.RP

    原创出处:https://bbs.pediy.com/thread-131961.htm 转载来源: https://blog.csdn.net/g_brightboy/article/details ...

  7. 《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)

    c#实现P2P文件分享与传输系统 二.设计 - 续(NAT穿透) 首先要抱歉,因为这些日子较忙,没有写文章,这个系列拖了很久,现在开始继续.  上一篇文章介绍了p2p系统Tracker Server和 ...

  8. NAT穿透的详细讲解及分析

    原文地址:http://bbs.pediy.com/thread-131961.htm 一.什么是NAT?为什么要使用NAT?NAT是将私有地址转换为合法IP地址的技术,通俗的讲就是将内网与内网通信时 ...

  9. 关于NAT穿透的一些理解

    前些天在知乎回答了一个智能家居远程控制方面的问题,感觉自己对无公网IP地址环境下的穿透问题有些了解.昨天同事拿来一个网络摄像头,安装在ADSL路由器上网的环境下,可以远程查看视频,效果还挺不错,问我厂 ...

随机推荐

  1. Android安全攻防战,反编译与混淆技术全然解析(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/50451259 在上一篇文章其中,我们学习了Android程序反编译方面的知识,包括 ...

  2. 【BZOJ 1878】 HH的项链

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1878 [算法] 显然,在线算法是不可做的,考虑离线算法 笔者的做法是莫队算法,时间复 ...

  3. 捣鼓TinyMCE 粘贴图片并上传+Django后台

    前面一篇写了上传到Flask后台,但是我不熟悉Flask,原先想学习一下,据说是轻量级. 但是我发现,学习会浪费我大量的时间,因为我并不是以这个为生的,我的目标只是要完成功能,让我自己能尽早使用起来, ...

  4. FrameLsyout

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_ ...

  5. ZBrush软件特性之Marker标记调控板

    在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点. ZBrush软件下载:http://pan.baidu.com/s/1sl ...

  6. day03 Python3的安装

    目录 Python的安装 Python下载 Python3安装 环境变量 添加环境变量 在CMD中运行Python Python的安装 Python可在多个操作系统(Windows,Linux,Mac ...

  7. c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)

    我的安装环境: (1)vs2013(32位版) (vs2013只有32位的 没有64位的,但是它可以编译出64位的程序)  : (2)mysql-5.7.15(64位) vs2013中的设置(按步骤来 ...

  8. (2)pyspark建立RDD以及读取文件成dataframe

    别人的相关代码文件:https://github.com/bryanyang0528/hellobi/tree/master/pyspark 1.启动spark (1)SparkSession 是 S ...

  9. ThoughtWorks 技术雷达(2013年5月)

    ThoughtWorks技术雷达(2013年5月) 作者ThoughtWorks技术战略委员会 发布于 六月 25, 2013| 讨论 新浪微博腾讯微博 豆瓣网 Twitter Facebook li ...

  10. vue项目初始化步骤

    项目初始化:() 1. 安装vue-cli :    npm install -g vue-cli 2.初始化项目:   vue init webpack  my-project 3.进入项目:  c ...