[转]ICE介绍 (RFC 5245)

http://blog.csdn.net/dxpqxb/article/details/22040017

1关于ICE的10个事实

1 ICE使用STUN和TURN

2 ICE是一种P2P的NAT穿越方式

3 ICE只需要网络提供STUN或TURN服务器

4 ICE允许在很复杂的网路环境下传输媒体流

5 ICE只在确定媒体流可到达情况下才让电话进行振铃

6 ICE动态发现终端间媒体流的最短路径

7 ICE可以附带消除DoS攻击

8 ICE可以几乎和任意类型的NAT和防火墙设备一起工作

9 ICE不需要终端去发现NAT类型以及它们的存在

10 ICE只有在最坏的情况下才只用中继(两边都在对称NAT之后)

2 ICE的步骤

ICE 是一种探索、学习和更新式的解决方案。在ICE 算法的开始,通信的2 个代理并不知道自己的拓扑部署——在NAT 后还是不在NAT 后。
2.1 初始请求的发送
为了探索本地拓扑,代理 A 执行如下操作,收集 3 类候选地址(Candidates):

(1)A 从本地接口上获得主机候选地址(Host Candidates)192.168.1.22: 8484;

(2)发送STUN 绑定请求到STUN 服务器获得服务器反射候选地址(Server Reflexive Candidates)202.199.112.102: 61866;

(3)发送TURN 分配请求到TURN 服务器获得中继候选地址(Relay Candidates)202.199.112.105: 5006,同时也获得了服务器反射候选地址202.199.112.102: 62072。

这些候选地址是随后可能用于接收媒体流的地址。

计算候选的优先级。设置主机候选的类型优先参数为最高值126,服务器反射候选的类型优先参数为100,中继候选的类型优先参数为最低值0。本地参
数设为65 535,分组ID为1。经计算,主机候选的优先级为2 130 706 431,服务器反射候选的优先级为1 694 498
815,中继候选的优先级为16 777
215。按候选优先级高低排序。分配主机候选的基础(Foundation)属性为1,服务器反射候选的基础属性为2,中继候选的基础属性为3。

按中继候选、服务器反射候选、主机候选次序选择默认候选(该候选包含了默认用于接收媒体流的地址和端口),由于A 获得了中继候选,因此优先选择连通概率较大的中继候选202.199.112.105:5006 作为默认候选。

将默认候选的 IP 地址和端口编辑进SDP 的c 行和m 行,并添加收集到的3 个候选地址到a 属性,形成发送请求Offer,通过信令信道传给B,请求消息内容如下所示,修改的参数和添加的属性值用粗体显示。

v=0
o=UserA 2890844526 2890842807 IN IP4 192.168.1.22
s=
c=IN IP4 202.199.112.105
t=0 0
a=ice-pwd:asd88fgpdd777uzjYhagZg
a=ice-ufrag:8hhY
m=audio 5006 RTP/AVP 0
b=RS:0
b=RR:0
a=rtpmap:0 PCMU/8000
a=candidate:1 1 UDP 2130706431 192.168.1.22 8484 typ host
a=candidate:2 1 UDP 1694498815 202.199.112.102 61866 typ
srflx raddr 192.168.1.22 rport 8484
a=candidate:3 1 UDP 16777215 202.199.112.105 5006 typ relay
raddr 202.199.112.102 rport 62072

2.2 应答的发送

当 B 收到请求,就知道了A 所处的拓扑环境(反射候选和主机候选地址不同,说明A 处于NAT 后)。B 执行和A
相同的操作,收集候选,计算候选优先级,设置基础(Foundation)属性,选择默认候选,进行SDP 编码,并发送应答消息Answer
给A。这样A 也知道B 所处的拓扑环境了,反射候选和主机候选地址不同,说明B 也处于NAT 后。应答消息内容如下所示:
v=0
o=UserB 2808849004 2808849004 IN IP4 172.16.10.102
s=
c=IN IP4 202.199.112.105
t=0 0
a=ice-pwd:YH75Fviy6338Vbrhrlp8Yh
a=ice-ufrag:9uB6
m=audio 49152 RTP/AVP 0
b=RS:0
b=RR:0
a=rtpmap:0 PCMU/8000
a=candidate:1 1 UDP 2130706431 172.16.10.102 8484 typ host
a=candidate:2 1 UDP 1694498815 202.199.112.87 63756 typ srflx
raddr 172.16.10.102 rport 8484
a=candidate:3 1 UDP 16777215 202.199.112.105 49152 typ relay
raddr 202.199.112.87 rport 63768

决定代理角色。由于A 和B 都是Full 型代理,且A 是请求的发起端,因此A 充当控制代理(Controlling Agent),B
为被控制代理(Controlled Agent)。A和B 开始对候选进行配对。A, B 各有3 个候选,A, B 各选1 个候选组成对,共有9
个对。由于不能从服务器反射选和中继候选发送请求,因此剪掉冗余对,A, B 每一方只剩下3
个对,即从主机候选分别到对端的主机候选、服务器反射候选、中继候选。

计算候选对的优先权并对候选对排序。对于控制代理A而言,按优先级排序候选对,形成检查列表所示。

对于被控制代理B,同样也计算候选对的优先级,并按优先级排序,形成自己的检查列表。

检查列表的次序决定了将来连通性检查的次序。设置检查列表中最高优先级对的状态为等待态,其余对为冻结态。

2.3 连通性检查

B 开始它的连通性检查。B
依次从检查列表移出最高优先级对,对的状态由等待态迁移为进行态(这同时会触发次高优先级对转换为最高优先级对,状态由冻结态变为等待态),开始连通性检
查。对第1 个对从本地候选172.16.10.102: 8484到远程候选192.168.1.22: 8484
发送STUN绑定请求([RFC5389]),由于远程候选处于NAT 后是私有的,不能被路由,检查失败。对第2
个对执行连通性检查,当数据包抵达NAT A 时,NAT 会发现传输地址202.199.112.102: 61866
已经映射202.199.112.108: 3478 了。而此时STUN请求的源地址并非202.199.112.108:
3478,所以数据包必然会被NAT A 丢弃。

对第 3 个对执行连通性检查。由于远程候选等于中继候选,为了有效利用带宽,应从本地候选172.16.10.102: 8484
向远程候选202.199.112.105: 5006 发送信道绑定请求[5]。请求中指出了信道号0x4001 及通信对端A
的地址,请求到达TURN 服务器,绑定成功。该绑定的成功,激励其学习对端反射候选202.199.112.102:
62072,经该反射候选到达对端A,然后产生了一个成功的响应,A 的检查终于成功。B 产生了一个新的对(202.199.112.105:
49152,202.199.112.105:
5006),该对被增加到有效列表,媒体流分组的ICE 处理迁移到完成态。至此B 可以利用信道0x4001发送媒体流分组到A 了。

当 A 收到应答后,也按照候选对的优先级次序开始自己的连通性检查。和B 类似,也失败了。当A 一收到B
检查成功的消息,马上开始触发检查,在信道绑定请求中指定信道号0x4002 以及对端B 的地址。由于A
是控制代理,在检查里可包含USE-CANDIDATE 属性执行强制提名算法,结果检查也成功了。代理A
产生了一个新的对(202.199.112.105:5006,
202.199.112.105:49152),该对被增加到有效列表,并设置提名标志(nominated flag)为TRUE,媒体流分组的ICE
处理迁移到完成态。A 可以通过信道0x4002 发送媒体流到B。

至此,通过该算法最终找到了媒体流传输的有效候选对,对应的最优路径也就随之确定了。由于有效候选是公网地址,因此通过该路径媒体流可顺利穿越NAT。

参考文献

[1] 魏立峰等。 一种媒体流穿越 NAT 的算法设计与实现,  《计算机工程》, 2009 年12 月

[2]RFC5245: Interactive Connectivity Establishment (ICE):  A Protocol
for Network Address Translator (NAT) Traversal for      Offer/Answer
Protocols, 2010 April

时间: 2024-11-01 22:43:19

[转]ICE介绍 (RFC 5245)的相关文章

RFC 5245 ICE学习笔记

RFC 5245 ICE  1, offer/answer model 2, ICE Step: 1) 产生候选地址(1.公网 2.NAT反射 3.Relay转发地址) Generate candidates 2) 本地对端交换候选地址,完成连接性检查.(用RTP包,一个四次握手的过程,如下图:) 3) 根据优先级进行排序                              Sorting Candidates 4) 冻结候选地址                              

STUN, TURN, ICE介绍

STUN STUN协议为终端提供一种方式能够获知自己经过NAT映射后的地址,从而替代位于应用层中的私网地址,达到NAT穿透的目的.STUN协议是典型的Client-Server协议,各种具体应用通过嵌入STUN客户端与STUN Server端通讯来完成交互. 在典型的运用STUN进行NAT穿透的场景中,STUN客户端首先向位于公网上的STUN服务器 发送Binding Request消息,STUN服务器接收到请求消息后识别出经过NAT转换后的公网地址60.1.1.1:12345,将其附加在Bin

webrtc教程

cdsn博客不支持word文件,所以这里显示不完全.可到本人资源中下载word文档: v0.3:http://download.csdn.net/detail/kl222/6961491 v0.1:http://download.csdn.net/detail/kl222/6677635  下载完后评论,可以返还你的积分.此文档还在完善中,欢迎大家交流,共同完善.    Webrtc  教程 版本0.3(2014年2月) 康林 ([email protected]) 本文博客地址:http://

RFC学习笔记 -- 5245 ICE & 3261 SIP

---------------------------------------------------------------------------- RFC list: 3550 (rtp/rtcp)  - 3711(srtp) - 5245 (ice) - 3261(sip) - 4575(sip-conference) - 4566(sdp) 5389 (stun) - 5766(turn) - 6455(websocket) - 6865(fec) - 2616(http) -----

转:SIP相关的RFC文档索引

索引来源于http://www.packetizer.com/ipmc/sip/standards.html SIP Standards Core SIP Documents RFC Document Title RFC 2543 SIP: Session Initiation Protocol (obsolete) RFC 3261 SIP: Session Initiation Protocol RFC 3262 Reliability of Provisional Responses RF

ICE分布式文件管理系统——初识ICE(其一)

中间件介绍 中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务.面向服务的体系结构等中应用比较广泛.同时也为当今的大型分布式应用搭起了一个标准的平台,把大型企业分散的系统和技术组合在一起,实现大型企业应用软件系统的集成. 简单说中间件就是通过屏蔽各种复杂的技术细节使技术问题简单化,具体来说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,

HTTP协议(一):介绍

HTTP协议(一):介绍 RFC 2616定义了今天普遍使用的一个版本--HTTP 1.1.HTTP协议(HyperText Transfer Protocol,超文本传输协议)是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.HTTP是一个无状态的协议. HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS.如下图所

高性能浏览器网络(High Performance Browser Networking) 第三章

第3章UDP篇 1980年8月,用户数据报协议(UDP)由John Postel添加到到核心网络协议族中,UDP协议起始于TCP/IP协议之后,但和TCP和IP规范被分裂成为两个独立的RFC的时间差不多.这个时机是非常重要的,因为正如我们将看到的,UDP重要的特点不是他带了什么新特性,而是他忽略了的那些特性.UDP(RFC 768)是通俗称为空协议,它描述的操作,基本上可以容纳在一张餐巾纸上. 数据报 一个自包含的,独立的数据实体,其承载了足够的信息,使其可以从源路由到达目标路由,而不依赖于在网

HTTP/1.1中文版

http://www.cnblogs.com/cxd4321/p/3504632.html 摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外,还可以通过扩展它的请求方式,错误代码和报头来完成许多任务.HTTP的一个特点是数据表示方式的典型性和可协商性允许独立于传输数据而建立系统.在1990年WWW全球信息刚刚起步的时候HTTP就得到了应用.HTT