原文地址: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. 机器学习 LR中的参数迭代公式推导——极大似然和梯度下降

    Logistic本质上是一个基于条件概率的判别模型(DiscriminativeModel). 函数图像为: 通过sigma函数计算出最终结果,以0.5为分界线,最终结果大于0.5则属于正类(类别值为 ...

  2. Mongo——C#操作

    自己练手写了一个MongoDb的泛型类,顺便把一些常用命令整理了一下,做个记录: /// <summary> /// Mongo操作类. /// </summary> /// ...

  3. Kylin基础教程(二)

    近期先把Kylin教程整理完毕,后续根据大家需求(可能会发起投票),整理其他技术栈知识教程. OK,那么接上一篇文章,感性认知了Kylin之后,我们先来看一下如何部署Kylin吧. 序号也依然沿用上一 ...

  4. Unity3D基础

    鼠标事件: OnMouseEnter():鼠标进入 OnMouseExit():鼠标移出 OnMouseDown():鼠标点击 OnMouseUp():鼠标抬起 static GameObject I ...

  5. vue 父子组件通信props/emit

    props 1.父组件传递数据给子组件 父组件: <parent> <child :childMsg="msg"></child>//这里必须要 ...

  6. Xml实现图片旋转

    1. 需求:不使用Java代码,实现旋转图片动画 2.实现:使用Progressbar控件 3. anim/anim_loading.xml <?xml version="1.0&qu ...

  7. indexOf实际试用方法

    用于搜索和查找关键字个数或者位置 例如: package zifu; public class tianqi { public static void main (String args[]){ St ...

  8. C#实现软件监控外部程序运行状态的方法

    本文实例讲述了C#实现软件监控外部程序运行状态的方法.分享给大家供大家参考.具体方法如下: 需要外挂一个程序,用于监控另一个程序运行状态,一旦检测到另一程序关闭,就触发一个事件做其他处理. using ...

  9. CentOS 7.1 下载,安装,配置

    CentOS(全称 Community Enterprise Operating System)是 RHEL 源代码再编译的产物. 2014年初,CentOS 宣布加入 Red Hat. CentOS ...

  10. requests模块的高级用法

    SSL Cert Verification #证书验证(大部分网站都是https) import requests respone=requests.get('https://www.12306.cn ...