原文地址: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. php实现邮箱激活功能

    php实现邮箱激活功能 一.样例 二.文件结构 其中swiftmailer-master是第三方插件,用来发验证邮件 三.核心代码 doAction.php 响应页面 <?php header( ...

  2. ES等待任务——是master节点上的task任务

    等待中的任务编辑 有一些任务只能由主节点去处理,比如创建一个新的 索引或者在集群中移动分片.由于一个集群中只能有一个主节点,所以只有这一节点可以处理集群级别的元数据变动.在 99.9999% 的时间里 ...

  3. caffe训练CIFAR数据库

    CIFAR-10是一个用于普适物体识别的数据集.Cifar-10由60000张32*32的RGB彩色图片构成,50000张训练图片,10000张测试图片,分为10类.cifar下载地址: http:/ ...

  4. 【POJ 1704】 Georgia and Bob

    [题目链接] http://poj.org/problem?id=1704 [算法] 阶梯博弈 [代码] #include <algorithm> #include <bitset& ...

  5. POJ 3260 DP

    只需要对John的付款数做一次多重背包,对shopkeeper的找零钱数做一次完全背包即可. 最重要的是上界的处理.可以注意到,John的付款数最多为maxv*maxv+m,也就是24400元.同理, ...

  6. SQL学习——基础语句(1)

    简序 1.SQL,指结构化查询语言,全称是 Structured Query Language. 2.SQL 让您可以访问和处理数据库. 3.SQL 是一种 ANSI(American Nationa ...

  7. @DateTimeFormat无效原因

    一般都是使用@DateTimeFormat把传给后台的时间字符串转成Date,使用@JsonFormat把后台传出的Date转成时间字符串,但是@DateTimeFormat只会在类似@Request ...

  8. zabbix_agent代理端监控FTP服务

    (FTP服务器) 监控agent的Linux主机我们在之前就已经做好了,现在直接安装ftp服务即可 (可以看上一遍文章如何搭建监控端agent)  这里不过多演示 [root@agent ~]# yu ...

  9. BZOJ 2820: YY的GCD 莫比乌斯反演_数学推导_线性筛

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...

  10. (2016北京集训十三)【xsy1531】魔法游戏 - Nim游戏

    题解: 好题!我的结论很接近正解了... 把一个数化成二进制,每次至少要拿走一位,最多全拿走,不能不拿.那么这就是一个经典的Nim问题了,子树异或起来就是根节点的答案,随便递推一下就行了. 代码: # ...