1:pjsip教程(一)之PJNATH简介

  2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介

  3:pjsip教程(三)之ICE stream transport的使用

  4:pjsip文档(四)之ICE Session的使用方法

原文地址:http://www.pjsip.org/docs/latest/pjnath/docs/html/group__PJNATH__ICE.htm

Introduction to ICE

  ICE是提供客户端穿越能力的有力武器,只要在两个客户端之间确实存在一条可以通信的路径,ICE肯定就能找到该路径,并且该路径是两个客户端之间通信路径中最高效的最节省资源的(在两个客户端之间经ICE探测后,可能存在多条路径,而ICE保证从它那里获取的路径是最高效的).

  ICE把几个协议结合在一起,在两个客户端之间能提供几条候选路径,这在最大程度上保证了两端通信成功的几率。并且它还提供了在几条通信路径中给出优先顺序的能力,让使用中继(中继的方式代价比较昂贵)的传输方式的优先级降到最低,只有在其他路径都行不通的情况下,才会启用该路径。具体的ICE协商的过程包括以下几个几步:

  • 1:候选地址的收集:ICE客户端收集本地所有可能用于通信的地址。所收集的地址类型分3种:主机候选地址(host candidate),这个地址其实就是本地物理网卡的地址;服务器反射候选地址(server reflexive candidate,其实就是在NAT上关于本地ip的映射地址),这个地址通过STUN服务器获取;中转/中继候选地址(relay candidate),这个地址是在使用中继(relay)的传输方式时,在中继服务器(或者称为TURN服务器)上为本地机器所分配的地址。
  • 2:候选地址的优先策略:一般情况下,使用中继方式而产生的中继候选地址的优先权最低,因为它的代价最昂贵。
  • 3:将本地候选地址编码,把编码后的候选地址传送至对端,双方通过报告/应答的方式进行协商。
  • 4:为候选地址配对儿:将本端的地址与对端的地址一一进行配对。此时应该已经通过某种方式得到了对端的候选地址。
  • 5:为每对儿地址做连接测试。
  • 6:得到结果:由于已经对所有候选地址一一配对,并一一进行连接测试,所以,如果确实存在一个可以通信的路径,ICE肯定会找到他。

Using ICE transport

  ICE stream transport 是一个现成可用的对象,可以使用它来进行ICE操作,而且它为应用程序提供了数据发送与接受的接口,而数据收发的路径,正是经ICE协商过后的高效的路径。

Creating custom ICE transport

  如果ICE stream transport 还是不能满足您的需求,那么您还可以通过使用本软件包提供的ICE Session以及自己的数据传输策略去实现自己的运输层,ICE stream transport 在这方面为您提供了很好的借鉴。

  转载请注明:

  名称:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介

  作者:大雪先生

  链接:http://www.cnblogs.com/ishang/p/3413241.html

中文翻译:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介的更多相关文章

  1. 中文翻译:pjsip教程(三)之ICE stream transport的使用

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  2. 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

  3. 《Entity Framework 6 Recipes》中文翻译——第十二章自定义EntityFramework对象(一)

    本章的方法探讨一些可以应用于对象和实体框架的流程定制.这些方法涵盖了许多“幕后”的东西,它可以使你的代码更统一,比如通过更关注应用程序核心业务规则执行的细节,应用范围更广泛.我们开始本章的一个方法,告 ...

  4. 中文翻译:pjsip文档(四)之ICE Session的使用方法

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  5. 中文翻译:pjsip教程(一)之PJNATH简介

    在学习pjsip的过程中,发现只是单单的阅读英文官方文档,对于里边概念的理解还是不够透彻,并且苦于pjsip没有发现全一点的中文版本,所以想尽自己所能为建设和谐社会而贡献一份力量,文中定会有所疏漏,希 ...

  6. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程

    PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程   作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...

  7. Swift中文教程(二)--简单值

    原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...

  8. JasperReports入门教程(二):中文打印

    JasperReports入门教程(二):中文打印 背景 在上一篇中我们介绍了JasperReport的基本入门,也展示了一个报表.但是我们的示例都是使用的英文,如果我们把需要打印的数据改为中文会怎么 ...

  9. Superset 官方入门教程中文翻译

    本文翻译自 Superset 的官方文档:Toturial - Creating your first dashboard 最新版本的 Superset 界面与功能上与文档中提到的会有些许出入,以实际 ...

随机推荐

  1. 2D游戏编程3—GDI

    WM_PAINT消息触发程序重新绘制界面,过程如下: PAINTSTRUCT    ps;    // used in WM_PAINT HDC        hdc;    // handle to ...

  2. stuff about set multiset map multimap

    A lot of interviewers like to ask the candidates the difference between set and multiset(map and mul ...

  3. 日常使用 Git 的 19 个建议

    如果你对git一无所知,那么我建议先去读一下Git 常用命令速查.本篇文章主要适合有一定 git 使用基础的人群. 目录: 日志输出参数 查看文件的详细变更 查看文件中指定位置的变更 查看尚未合并(m ...

  4. 【转】shell 教程——07 Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运 ...

  5. 8-7-Exercise

    链接:第二次小练 这次是我们这组出的题目~我出了一道......B-Prison rearrangement,感觉有点复杂~不过其实题目想通了还是很简单的...... @荆红浅醉出的是A.C.D,@从 ...

  6. 【python自动化第五篇:python入门进阶】

    今天内容: 模块的定义 导入方法 import的本质 导入优化 模块分类 模块介绍 一.模块定义: 用来在逻辑上组织python代码(变量,函数,逻辑,类):本质就是为了实现一个功能(就是以.py结尾 ...

  7. struts2 表单处理

    在这篇教程里我们将探究如何处理表单提交.本文例子介绍: javabean存储表单数据 在action中重写validate方法进行简单的校验 创建一个struts2表单并和javabean匹配 jav ...

  8. linux 环境下java环境配置

    vi + /etc/profile向文件里面追加以下内容:JAVA_HOME=/usr/local/java7JRE_HOME=/usr/local/java7/jrePATH=$PATH:$JAVA ...

  9. System.currentTimeMillis();

    1.  意义: currentTimeMillis()返回以毫秒为单位的当前时间,返回的是当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位測量).注意,当返回值的时间单 ...

  10. iOS CoreData (1)

    下面开始学习一下CoreData. Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS). Core Data 为数据变更管理.对象存储.对象读取恢复的功能提供了支持. 它 ...