ICE

【网络通信 -- WebRTC】WebRTC 基础知识 -- ICE 交互总结 【网络通信 -- WebRTC】WebRTC 基础知识 -- ICE 交互总结 【1】ICE 的一般概念简介 ICE 角色 offer (主动发起)的一方为 controlling 角色 answer (被动接受)的一方为 controlled 角色 full ice agent 必须是 controlling role,lite ice agent 是 controlled;srs 仅支持 lite ice ICE 模式 FULL ICE,双方都要进行连通性检查;ice 客户 阅读详情

装载自:http://blog.itpub.net/10294527/viewspace-121602/

ICE概要

一、ICE产生的背景

基于信令协议的多媒体传输是一个两段式传输。首先,通过信令协议(如SIP)建立一个会话连接,通过该连接,会话双方(Agent)通过SIP交互所承载的SDP消息彼此学习传输媒体时所必须的信息,针对媒体传输机制达成共识。然后,通常采用RTP协议进行媒体传输。

基于传输效率的考虑,通常在完成第一阶段的交互之后,通信双方另外建立一条直接的连接传输媒体。这样就会减少传输时延、降低丢包率并减少开销。这样,用于SIP传输的链路就不再用于传输媒体。现在,问题出现了,由于不采用原来的链路,当传输双方中任一方位于NAT之后,新的传输链接必须考虑NAT穿越问题。

通常有四种形式的NAT,对于每一中NAT方式,都有相应的解决方案。然而,每一种NAT穿越解决方案都局限于穿越对应得NAT方式,对于复杂的网络环境来说,将会出现无法进行媒体传输的情况,同时这些方案给整个系统带来了在不同程度上的脆弱性和复杂性。

在这种背景下,Interactive Connectivity Establishment(交互式连通建立方式)也即ICE解决方案应运而生。ICE方式能够在不增加整个系统的复杂性和脆弱性的情况下,实现对各种形式的NAT进行穿越,使得媒体流在通信双方顺利传输。

二、ICE工作的基本原理及特性

ICE是一种探索和更新式的解决方案。通过收集自己的和通信对端的尽可能多的网络信息(各种网络地址),尝试在这些地址之间建立数据通道,并在此过程中不断更新先前收集到的信息,从而找到和选择一条能够进行NAT穿越的数据通道。

其特性如下:ICE实现不是很复杂,支持TCP穿透,对NAT设备没有要求,支持所有类型的NAT,必须在客户端实现ICE,在网络结构中需要STUN/TURN服务器,具有与协议无关性和良好的可扩展性,安全性和健壮性都比较好。

三、ICE工作的核心

如下内容是ICE实现NAT穿透的所要完成的核心处理。包括收集地址,对地址进行排序、配对,然后执行连通性检查。

1、收集地址

Agent必须确定所有的候选的地址。这些地址包括本地网络接口的地址和由它派生的其他所有地址。本地网络地址包括本地网卡地址、VPN网络地址、MIP网络地址等。派生地址指的是通过本地地址向STUN服务器发送STUN请求获得的网络地址,这些地址分为两类,一类是通过STUN的绑定发现用法得到的地址,称为服务器反向候选地址(Server Reflexive Candidates)或服务器反向地址。另一类是通过中继用法得到的,称为中继地址(RELAYED CANDIDATES)。上面提到的两种用法在相应的规范中提出。

服务器反向地址实际上就是终端的网络包经过一重或多重NAT穿透之后,由STUN服务器观察到的经过NAT转换之后的地址。中继地址是STUN服务器收到STUN请求后,为请求发起方在本机上分配的代理地址,所有被路由到该地址的网络包将会被转发到服务器反向地址,继而穿透NAT发送到终端,因此如名字所示,它是STUN服务器完成中继功能的地址。

为了找到服务器反向地址,Agent通过每一个主机候选地址(通过绑定主机某个接口和端口而获取的候选地址),使用绑定发现用法(Binding Discovery Usage [11])发送一个STUN绑定请求给STUN服务器(STUN服务器的地址已经配置或者可以通过某种途径学习到)。当Agent发送绑定请求,NAT将分配一个绑定,它映射该服务器反向地址到主机候选地址。这样,通过主机候选地址发送的外发包,将通过NAT转换为通过服务器反向地址发送的包。发往服务器反向候选地址的包,将被NAT转换为发往该主机候选地址的包,并转发给Agent。

当Agent与STUN服务器之间存在多重NAT,那么STUN请求将会针对每一个NAT创建一个绑定,但是,只有最外部的服务器反向地址会被Agent发现。如果Agent不在任何NAT之后,那么,基候选传输地址将与服务器反向地址相同,服务器反向地址可以忽略。

关于中继地址,STUN中继用法允许STUN服务器作为一个媒体中继器进行工作,在L与R之间进行转发。为了发送消息到L,R必须发送消息给媒体中继器,通过媒体中继器转发给L。反之亦然。

从L到R的消息其地址信息将两次被重写:第一次被NAT,第二次被STUN中继服务器。这样,R所了解的想与之通信的地址就是STUN中继服务器的地址。这个地址就是中继地址。

2、连通性检查

Agent L收集到所有的候选地址后,就将它们按优先级高低进行排序,再通过信令信道发送给Agent R。这些候选地址作为SDP请求的属性被传输。当R收到请求,它执行相同的地址收集过程,并且把它自己的候选地址作为响应消息发给请求者。这样,每个Agent都将有一个完整的包含了双方候选地址的列表,然后准备执行连通性检查。

连通性检查的基本原理是:

l 按照优先顺序对候选地址进行排序。

l 利用每个候选地址发送一个检查包。

l 收到另一个Agent的承认检查包。

首先,Agent将本地地址集和远程地址集进行配对,如本地有n个地址,远程有m个地址,那么配成n*m对。对这些地址对进行连通性检查是通过发送和接收STUN请求和响应完成的,此时,Agent在每个地址对的本地地址上,必须同时充当STUN服务器和STUN客户端的角色。若通信双方以某一地址对通过一个完整的四次握手,那么该地址对就是有效地址对。

四次握手是指:当通过地址对中的本地地址向地址对中远程地址发送一个STUN请求,并成功收到STUN响应,称该地址对是可接收的;当地址对中的本地地址收到地址对中远程地址的一个STUN请求,并成功地响应,则称该地址对为可发送的。若一个地址对是可接收的,同时又是可发送的,则称该地址对是有效的,即通过连通性检查。则此地址对可用于媒体传输。

通常在对称NAT的情况下,在地址对验证过程中,会出现发现以前收集地址时没有收集到的地址对,这时就要对这些新的地址对进行连通性检查。

3、对候选地址进行排序

由于收集候选地址时,收集的是所有的候选地址,为了能够更快更好的找到能够正常工作的候选地址对,对所有组合进行排序是势在必行的。在此说明进行排序的两个基本原则,详细地排序算法将在后续文档中描述。

l Agent为它的每个候选地址设置一个数值的优先级,这个优先级连同候选地址对一起发送给通信的对端。

l 综合本地的和远程的候选地址的优先级,计算出候选地址对的优先级,这样,双方的同一个候选地址对的优先级相同。以此排序,则通信双方的排序结果相同。

4、进行SDP编码

为了实现基于ICE的NAT穿越,对SDP进行了扩展,主要增加了四个属性。分别是candidate属性、ice-ufrag属性、ice-pwd属性和remote-candidates属性。

candidate属性为通信提供多种可能的候选地址中的一个。这些地址是使用STUN的端到端的连通性检查为有效的。

remote-candidates属性提供请求者想要应答者在应答中使用的远程候选传输地址标识。

ice-pwd属性提供用于保护STUN连通性检查的密码。

ice-ufrag属性提供在STUN连通性检查中组成用户名的片断。

四、一个例子

两个Agent,L和R,使用ICE。它们都有单个IPv4接口。对于Agent L地址为10.0.1.1,对于R,192.0.2.1。它们都配置了单独的STUN服务器(实际上是同一个),STUN服务器在192.0.2.2地址的3478端口监听STUN请求。这个STUN服务器同时支持绑定发现和中继功能。Agent L位于NAT之后,R位于公网。NAT有一个终端独立的映射特性和依靠地址的过滤特性。NAT公网端的地址是192.0.2.3。网络结构图如下所示。

图一 ICE的典型应用环境

为了便于理解,传输地址用变量名代替。变量名的格式是entity-type-seqno,其中entity是具有该传输地址的接口所在实体,具体为是L、R、STUN或NAT之一。type不是PUB(地址位于公网)就是PRIV(地址位于内网)。seqno是在实体上的相同类型的各传输地址各自的序列号。每个变量都有一个IP地址和端口号,分别用varname.IP和varname.port表示,varname就是变量名。

STUN服务器有公网的传输层地址STUN-PUB-1(192.0.2.2:3478),绑定发现用法和中继用法都使用这个地址。但在此处,两个Agent都不使用中继用法。

在呼叫过程中,STUN消息有被许多属性注解。“S=”属性表明消息的源传输地址,“D=”属性表明消息的目标传输地址。“MA”属性用于STUN绑定响应消息,指明映射的地址。

基于以上规定,媒体传输的初始过程如下图所示。

消息1-4获取服务器反向地址。消息5发送一个请求给R,该请求包括了本地主机候选地址和服务器反向地址。R收到消息5之后,通过消息6-7获取服务器反向地址(由于R不在NAT之后,服务器反向地址与主机候选地址相同),然后发送一个应答(消息8)给L,应答中包括主机候选地址。至此,通信双方都获取了彼此的网络信息。

双方都对获取的传输地址进行配对,确定优先级并排序。之后,R开始执行其连通性检查(消息9),由于来自L的候选地址是一个私有地址,所以此检查必定失败,而被丢弃。

同时,L收到应答后,除去包含了服务器反向地址的那对检查,只剩一对检查。基于此对地址,执行连通性检查(消息10),经过NAT转换后发送给R(消息11)。R收到之后发送响应给L(消息12),该消息中通过MA属性指明映射地址,经过NAT之后返回给L(消息13),这样L的连通性检查成功。L检查收到的消息13,以NAT-PUB-1为本地地址,R-PUB-1为远程地址创建新的地址对,并添加到有效列表中。

ICE查看有效列表,发现有一对存在,就发送一个更新请求(消息14)给R,这个请求用于删除没有被选中的候选地址,并且指示远程地址。

消息11到达R之后,会触发R执行一个相同地址对的检查,消息16-19反映了这个过程,在收到消息19的响应之后,R会像L一样创建一对新的地址对(以R-PUB-1为本地地址,以NAT-PUB-1为远程地址),并添加到有效列表中。这样就可以进行媒体传输了。

五、总结

本文档从ICE的产生背景入手,讨论了ICE的基本原理及其特性,并对其工作的几个核心部位进行了简单的概述,在此基础之上,分析了一个基于ICE通信的例子。所涉及的内容都是在宏观上的考虑,进一步的详细论述将在后续工作中展开。


ZeroC ICE(一) ZeroC ICE入门学习 ZeroC ICE(一) ZeroC ICE入门学习目 录1 ZeroC ICE入门学习 11.1 ZeroC ICE原理图 11.2 RPC框架的性能对比 11.3 前置条件 11.4 ZeroC ICE 安装 11.5 修改注册中心配置 11.6 修改node节点配置 11.7 Windows客户端安装 11.8 连接Ice 阅读详情

相关推荐

ICE基础概念深入解析

关于ICE的介绍,网上的资料有很多,但是从应用的角度上去评述的并不多,在技术革新的今天我们可能更多的是去关注应用领域而非研究领域,因此根据 我个人的使用经验,想对ICE技术做一些总结和介绍。什么是ICE(Internet Communications Engine)呢,它是由Zeroc公司开 发的一套开源中间件系统,与DCOM,CORBA,WEB SERVICEDcom类似,支持RPC(Remot...

KnightOnHorse的博客 3392

会话描述协议-SDP

SDP(Session Description Protocol) 是一种通用的会话描述协议,例如在音视频通话前通话双方需要进行媒体能力协商,比如协商双方都可支持的编解码类型,交换候选地址等,因此通话前都会发送一个 SDP,描述自己的会话和媒体等信息。

椛茶的博客 4809

MONAI教程<1>-安装

MONAI的安装非常简单,常用的有两种方法: 直接 pip install monai 从GitHub 上安装 monai是通常配合其他库一起使用的,比如pytorch, nibabel, skimage, pillow等等。缺什么直接pip install 就行

Tina姐的博客 1万+

webrtc协议_webrtc音频系列——6、WebRTC 数据安全机制

我们假设一个场景, A 与 B 通信,但此时 B 并不是真正的 B ,而是冒充的,这样 A 与 B 通信时,冒充的 B 就获得了 A 的重要信息。其实这种情况更多发生在会议系统或在线教育的小班课中,此时会议中有多人进行互动,如果黑客进入了会议中,他只需听别人说话,自己不发言,这样就将关键的信息窃取走了。所以现在的问题又来了,我们该如何辨别对方的身份是否合法呢?了解https协议的人都知道,http...

weixin_39642619的博客 448

汽车级智能栅极驱动器深度解析 | 连载03:功能框图与工作模式详解

在前两期连载中,我们分析了DRV871x-Q1的产品架构、引脚配置和电气特性。本期我们将深入探讨DRV871x-Q1的功能框图和工作模式,这是理解芯片内部工作机制的关键。通过分析功能框图,我们能够清晰地了解各功能模块之间的关系和信号流向;通过工作模式分析,我们能够掌握芯片在不同应用场景下的配置方法。这些知识对于系统设计和故障排查都至关重要。

VehSwHwDeveloper的博客 1098

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4603

ICE概要

 一、ICE产生的背景基于信令协议的多媒体传输是一个两段式传输。首先,通过信令协议(如SIP)建立一个会话连接,通过该连接,会话双方(Agent)通过SIP交互所承载的SDP消息彼此学习传输媒体时所必须的信息,针对媒体传输机制达成共识。然后,通常采用RTP协议进行媒体传输。基于传输效率的考虑,通常在完成第一阶段的交互之后,通信双方另外建立一条直接的连接传输媒体。这样就会减少传输时延、降

Jitonm's Zone 2327

SurfaceControlViewHost使用介绍

可以看到,主要用途:是把一个进程的View显示到另外一个进程里面。

chadm.xiang 1284

WebRTC SDP 详解和剖析

WebRTC 是 Web Real-Time Communication,即网页实时通信的缩写,是 RTC 协议的一种 Web 实现,项目由 Google 开源,并和 IETF 和 W3C 制定了行业标准。在国内 WebRTC 已经获得了越来越多厂商的支持,应用前景变得更加广阔,所以我们也开设专栏,分享阿里云内部的 WebRTC 研究工作。 本篇是阿里云视频云 WebRTC 技术专栏系列文章的第一篇,作者将从 WebRTC SDP 例子和关键属性的角度为大家深度剖析解读,其中也分享了阿里云技术专家的一些实践

阿里云CloudImagine 1952

redhawk-sc(seascape)学习日志2

design view是主view,是所有seascape view中最root的部分,一个design view可以驱动多种类型分析比如静态IR drop,动态IR drop以及EM.这些分析可以在不同的PVT和翻转率下.Design view是一个必须的view对于redhawk中的任何类型分析来说。seascape view相当于一个容器,用于保存各种和设计相关的数据,类似于逻辑信息、物理信息等等,每个view都有其对应的输入件和依赖,这些view都是redhawk用于各种类型的分析所需。

qq_39493558的博客 3497

pymol 动画简单制作,gif、mp4导出

参考: https://www.youtube.com/watch?v=G77K9Lro8js1、直接Movie下Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec;如果要动画过渡自然,可以在这4sec后面再Append 1sec;如果需要两个视角,既可以再把窗口蛋白定位到比如配体,不用管中间过程怎么定位过去配体,再Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec添加;最后如果要整体形成个循环播放,可以在这4s

weixin_42357472的博客 8435

浅述webrtc中的ICE流程

背景 webrtc的提供的音视频解决方面是针对P2P的,在实际的运用的中往往有诸多限制。在很多场景中会有一个webrtc接入服务来实现对web的接入,实现与具体的音视频业务的转换。 web 互通的基本流程 上图是web对通的基本流程,图中描述的是两个web进行点对点互通。涉及到角色有信令服务,STUN,TURN服务。STUN/TURN+NAT穿越流程即代表了ICE流程 webrtc接入服务 web与接入服务的互通,跟上图的流程差别不大。只是web与接入服务在ICE中所扮演的角色不同,本篇文章将介绍ICE的基

mo4776的博客 4726

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

ICE简介

一、ICE简介 1、ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够以最小的代价构建分布式应用程序。ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、...

深之JohnChen的专栏 8804

通信算法之334:无人机侦测-DJI 大疆云哨接收机系列

【代码】通信算法之334:DJI 大疆 云哨接收机算法流程。

leegang12的专栏 843

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ADZS-ICE-2000和AD-ICE2000的使用详细说明(CCES)

ADZS-ICE-2000这个最高端的ADI DSP仿真器,是怎么使用的,请见本文。

ADI_OP的博客 3058

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

webrtc中的ICE流程

webrtc中的ICE流程

m0_60259116的博客 1962

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【ICE】ICE协议看明白

这个文件描述了以UDP为基础的请求/回答模式的多媒体会话的NAT穿越的协议。这个协议名叫ICE。ICE利用了STUN协议和它的扩展版本TURN。ICE可以被任何请求/问答模式的协议利用。例如sip。 1. 简介 RFC 3264 定义了一个双向会话描述协议(SDP),以建立多媒体回话。这种请求/回答模式被sip利用。        请求/回答的协议很难穿越NAT。因为它们想要建立

九头鹰 6457

六、ICE服务——ice环境搭建

ice环境搭建

tj的博客 3151

【ICE】 ICE通信框架 - hello world

1、安装库:ice安装 2、环境配置:如图所示: 示例代码及运行结果,部分注释已经在代码中给出: //.ice module Demo { interface Printer { void printString(string s); }; }; // //// ICE_client.cpp : 定义控制台应用程序的入口点。...

yaotengjian的博客 2434

ICE浅谈:(一)ICE概览

注:本文内容以RFC 5245文档记载内容为主,中文翻译有不当之处请见谅。 概述 ICE是Interactive Connectivity Establishment的简称,一般的定义是: ICE = STUN + TURN + 协商机制 +协商路径 实时音视频通信的场景中,会话双方可能都在NAT网络后面,直接协商的网络接口地址可能无法直接通信。ICE的目的是发现何种候选地址配对可以工作。 基本的ICE工作理念是:针对传输协议(这里重点讨论UDP协议)每个agent都有各种候选地址(绑

5D金豆豆的博客 3268

WebRTC 之ICE浅谈

前言 ICE全称Interactive Connectivity Establishment:交互式连通建立方式。 ICE参照RFC5245建议实现,是一组基于offer/answer模式解决NAT穿越的协议集合。 它综合利用现有的STUN,TURN等协议,以更有效的方式来建立会话。 客户端侧无需关心所处网络的位置以及NAT类型,并且能够动态的发现最优的传输路径。 Classic STUN...

netease_im的博客 3698

ICE详解

1. ICE的一些背景 ICE(the Internet Communications Engine,因特网通讯引擎),http://www.zeroc.com/ice.html ICE 是ZeroC的主要产品, 是一个object-oriented toolkit,用来帮助我们构建分布式应用程序,使我们专注于程序的逻辑而不是底程网络交互的细节 ice提供了强大的 RPC(remote ...

顺其自然~专栏 3038
上一篇: Java通用集合工具总结
下一篇: JNI
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值