WebRTC | ICE详解

news2024/11/23 15:23:36

目录

一、Candidate种类与优先级

二、ICE策略

 1. iceServers 

2. iceTransportPolicy

三、P2P连接

1.Nat类型

(1)完全锥型NAT

(2)IP限制锥型NAT

(3)端口限制锥型NAT

(4)对称型NAT

四、网络中继

1. TURN协议中转数据

 (1)发送指令Send indication

(2)端对端传输数据


一、Candidate种类与优先级

        ICE中使用的Candidate具有优先级次序,由高到低分别为host、srflx、prflx、relay。WebRTC进行一对一音视频通信时,就是按照这个次序尝试建立连接的。

        不在同一局域网内,双方尝试host型Candidate连接时会失败。不过,在双方尝试连接时,双方Candidate的收集工作并未停止。Candidate收集线程还在收集其他类型的Candidate,如从STUN/TURN服务器收集srflx和relay类型的Candidate;当收集到srflx类型的Candidate时,ICE会尝试NAT打洞,如果打洞成功,则双方会通过P2P的方式传输数据;如果打洞失败,则会通过TURN服务器中转数据。

WebRTC通信时会按照内网、P2P、relay这样的次序尝试连接:

1. 内网连接对应host连接策略。host连接表示直接在本地设备上建立的连接,也就是在同一局域网内的设备之间的直接连接。
2. P2P连接对应srflx和prflx连接策略。srflx(server reflexive)和prflx(peer reflexive)连接都是通过STUN服务器获取的公共IP地址,用于建立点对点连接。srflx连接是通过NAT后的公共IP地址建立的连接,而prflx连接是对等方自己的NAT映射地址。
3. 中继连接对应relay连接策略。当无法建立直接的P2P连接时,WebRTC会使用TURN服务器作为中继,建立relay连接。relay连接通过中继服务器传递数据,确保数据的可靠传输。

        WebRTC中的ICE既考虑了数据传输的效率,又考虑了网络的连通率:

  • WebRTC的ICE机制会选择最好的链路传输音视频数据,即如果通信的双方在同一网段内,则优先使用内网链路;如果通信的双方不在同一网段,则优先使用P2P;当以上方式都无法连通时,则使用relay服务进行中转。
  • ICE的连通率几乎可以达到100%。在内网和P2P无法连通的情况下,它还可以通用中继的方式让彼此连通,从而大大提高了WebRTC的连通率。

二、ICE策略

        RTCPeerConnection提供了一种在浏览器之间建立点对点连接的方式,而无需通过服务器进行中转。它使用了ICE(Interactive Connectivity Establishment)协议来处理网络地址和端口的自动配置,以确保连接的稳定性和可靠性。

        构造RTCPeerConnection对象时,其输入参数的类型为RTCConfiguration。

RTCConfiguration pcConfig = {
   'iceServers': [{
      'urls': 'turn:stun.learningrtc.cn:3478',
      'username': "username1",
      'credential': "password1",
   },{
      'urls': 'turn:stun.avdancedu.com:3478',
      'username': "username2",
      'credential': "password2",
   }],
   'iceTransportPolicy': "all",
   'bundlePolicy': "max-bundle",
   'rtcpMuxPolicy': "require"
};
RTCPeerConnection pc = new RTCPeerConnection(pcConfig);
…
RTCConfiguration各字段含义

 1. iceServers 

        iceServers是RTCIceServer类型的数组,可以包含一个或多个STUN和/或TURN服务器。

2. iceTransportPolicy

        在ICE中,有两种常见的网络连接策略:

  • all:默认策略,浏览器将尝试使用所有可用的网络接口(如本地IP地址、VPN、Wi-Fi等)来建立连接。这种策略适用于多种网络环境,但可能会增加连接建立的时间和网络带宽的消耗。
  • relay:这种策略仅使用中继服务器(如TURN服务器)来建立连接。中继服务器充当中间人,帮助两个浏览器在防火墙或NAT后面建立连接。这种策略适用于网络环境受限的情况,但可能会增加延迟和中继服务器的负载。

三、P2P连接

1.Nat类型

        P2P指的就是如何进行NAT穿越。NAT在真实的网络环境中随处可见,它的出现主要出于两个目的。一是为了解决IPv4地址不够用的问题。当时IPv6短期内还无法替换IPv4,而IPv4的地址又特别紧缺,所以人们想到让多台主机共用一个公网IP地址,大大减缓了IPv4地址不够用的问题。二是为了解决安全问题。使用NAT后,主机隐藏在内网,这样黑客就很难访问到内网主机,从而达到保护内网主机的目的。

        NAT就是一种地址映射技术,它在内网地址与外网地址之间建立了映射关系。当内网主机向外网主机发送信息时,数据在经过NAT层时,NAT会将数据包头中的源IP地址和源端口号替换为映射后的外网IP地址和外网端口。相反,当接收数据时,NAT收到数据后会将目标地址映射为内网的IP地址和端口再转给内网主机。

        RFC3489和RFC5389是最重要的两份NAT穿越的协议文档。在RFC3489协议中,将NAT分成4种类型,即完全锥型、IP限制锥型、端口限制锥型以及对称型。在这4种类型中,越往后的NAT类型穿越难度越大。

        大多数情况下NAT穿越使用的是UDP,这是因为UDP是无连接协议的,打洞会更加方便。当然,也可以使用TCP打洞。

(1)完全锥型NAT

        完全锥型NAT的特点:一旦打洞成功,所有知道该洞的主机都可以通过它与内网主机进行通信。

(2)IP限制锥型NAT

        IP限制锥型NAT要比完全锥型NAT严格得多。IP限制锥型NAT的主要特点:NAT打洞成功后,只有与之打洞成功的外网主机才能通过该洞与内网主机通信,而其他外网主机即使知道洞口也不能与之通信。

(3)端口限制锥型NAT

        端口限制锥型NAT的主要特点:除了像IP限制锥型NAT一样需要对IP地址进行检测外,还需要对端口进行检测。

(4)对称型NAT

        对称型NAT是4种NAT类型中对数据包检测最严格的。对称型NAT的特点:内网主机每次访问不同的外网主机时,都会生成一个新洞,而不像前面3种NAT类型使用的是同一个洞。

        对称型NAT每次访问不同外网主机都生成新洞的这种特性,导致对称型NAT碰到对称型NAT或者对称型NAT遇到端口限制型NAT时,双方打洞的成功率非常低,即使可以互通,成本也非常高。WebRTC遇到上面这两种情况时,直接放弃打洞的尝试。

四、网络中继

        当遇到NAT之间无法打通的情况时,WebRTC会使用TURN协议通过中转的方式实现端与端之间的通信。

1. TURN协议中转数据

        TURN协议采用了典型的客户端/服务器模式,其服务器端称为TurnServer,客户端称为TurnClient。TurnClient与TurnServer之间通过信令控制数据流的发送。

        TurnClient与TurnServer之间的传输协议既可以是UDP,也可以是TCP,而在TurnServer上分配的relay地址使用的都是UDP。

 (1)发送指令Send indication

        该指令包括两个属性:XOR-PEER-ADDRESS和DATA。其中XOR-PEER-ADDRESS属性用于指定向哪个主机转发数据,DATA属性指明数据的具体内容。

(2)端对端传输数据

        一种方法就是上面说的Send indication指令,当TurnClient向某个Peer发数据时就要使用它。相反,当Peer通过TurnServer向TurnClient转发数据时,使用Data indication指令,指明向哪个TurnClient转发数据。

        另一种方法是使用tunnel机制。使用tunnel机制的好处是不用再像使用Send/Data indication指令一样,每次都要指定数据发往的地址,只需要在开始发送数据之前,发送ChannelBind指令将channel number与目标地址绑定一次即可,后面统一使用channel number就可以找到发往的目的地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/879857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP的MPLS实验

题目 拓扑图 IP地址及环回配置 注&#xff1a;R2的g0/0/1口和g0/0/2口还有R4的g0/0/0口和g0/0/2口都先不配置IP&#xff0c;因为后面这些接口的IP需要放入vpn空间中 R1 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname r1 [r1]int l0 […

《Linux从练气到飞升》No.13 Linux进程状态

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

通过 Amazon SageMaker JumpStart 部署 Llama 2 快速构建专属 LLM 应用

来自 Meta 的 Llama 2 基础模型现已在 Amazon SageMaker JumpStart 中提供。我们可以通过使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型&#xff0c;并且结合开源 UI 工具 Gradio 打造专属 LLM 应用。 Llama 2 简介 Llama 2 是使用优化的 Transformer 架构的自回归语…

正确治理窜货的方法

所有违规行为的形成原因都离不开利益&#xff0c;窜货是如此&#xff0c;低价也是如此&#xff0c;窜货与低价又是一体的&#xff0c;因为有更多的利润空间&#xff0c;所以经销商或者非授权愿意承担风险去窜货&#xff0c;同样的也是因为窜货可以将价格压更低&#xff0c;上升…

冠达管理:险资最新重仓股曝光!加仓这些股票

随着上市公司半年报陆续发表&#xff0c;险资最新重仓持股状况也逐渐清晰。 到8月14日&#xff0c;在已发表2023年半年报的上市公司中&#xff0c;超越60家上市公司的前十大流通股东中呈现险资身影。 从职业来看&#xff0c;制造业成为险资的“心头好”。在险资重仓个股中&…

ClickHouse(十九):Clickhouse SQL DDL操作-1

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

学习助手(安卓)

首先&#xff0c;这是一款人工智能的学习软件&#xff0c;功能非常的强大&#xff0c;进入软件就能看见多种功能&#xff0c;它可以根据大家提供的主题&#xff0c;环境&#xff0c;文体&#xff0c;语言等要求进行写作&#xff0c;还有诗歌创作&#xff0c;也可以帮我们进行内…

如何精准预测天气?火山引擎ByteHouse与大地量子这么做

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 伴随着气象技术的发展以及城市气象设施的完善&#xff0c;气象监测服务能力在不断提高&#xff0c;实现短期甚至中长期的气象预测成为可能。 短期、长期的天气形势预…

opencv+ffmpeg+QOpenGLWidget开发的音视频播放器demo

前言 本篇文档的demo包含了 1.使用OpenCV对图像进行处理&#xff0c;对图像进行置灰&#xff0c;旋转&#xff0c;抠图&#xff0c;高斯模糊&#xff0c;中值滤波&#xff0c;部分区域清除置黑&#xff0c;背景移除&#xff0c;边缘检测等操作&#xff1b;2.单纯使用opencv播放…

crm客户管理系统的功能有哪些?

阅读本文&#xff0c;您可以了解&#xff1a;1、CRM客户管理系统的定义&#xff1b;2、CRM客户管理系统的功能。 CRM客户管理系统是一个工具或软件&#xff0c;能够帮助企业更好地与客户进行沟通、理解客户需求&#xff0c;以及有效地处理客户信息和互动。通俗地说&#xff0c…

选择正确的液压密封件的综合指南

在液压系统中&#xff0c;选择正确的密封件对于确保较佳性能和防止潜在泄漏至关重要。由于有许多选择&#xff0c;因此需要选择较合适的液压密封件。在本文中&#xff0c;我们将讨论选择液压密封件时应考虑的关键因素&#xff0c;以帮助您做出明智的决定。 1、了解您的系统要求…

一篇文章告诉你,为什么要使用Javascript流程图来可视化进程?(上)

DHTMLX Diagram库是有各种类型的图组成的&#xff0c;其中最广泛使用的是JavaScript流程图&#xff0c;它可以显示任何类型的的工作流、过程或系统&#xff0c;您可以下载DHTMLX Diagram的评估版并亲自试用。 DHTMLX Diagram正式版下载 Javascript流程图是用来干什么的&#…

项目经理如何做好多项目管理?

多项目管理一直是一项极具挑战性的工作&#xff0c;之所以难&#xff0c;不仅在于项目数量的增加&#xff0c;而且在于项目资源分配不均、项目进度比较难监控、沟通不良&#xff0c;协作不畅。 项目经理应该如何做好多项目管理呢&#xff1f; 1、明确的项目组织结构 一个清晰…

纯js点击按钮切换首页部分页面

像我这种大数据的&#xff0c;不会前端的&#xff0c;懒得学框架&#xff0c;现在有gpt了&#xff0c;前端对于我来说&#xff0c;用原生的更加友好&#xff0c;毕竟算法gpt都能优化。 首页我有个页面&#xff0c;然后我现在想点击gm替换上面的统计&#xff0c;点击用户替换回…

低代码平台轻松玩转业务规则

规则&#xff0c;是运行、运作规律所遵循的法则。规则无处不在&#xff0c;社会活动中的规则通常由传统、公共认识形成&#xff0c;表现为该干什么或是不该干什么。在计算机应用系统中&#xff0c;经常会面对这样的场景&#xff0c;处理执行一个动作时&#xff0c;需要另外的条…

【从零学习python 】29. 「函数参数详解」——了解Python函数参数的不同用法

文章目录 函数参数详解一、缺省参数二、不定长参数三、缺省参数在*args后面可变、不可变类型总结 进阶案例 函数参数详解 一、缺省参数 调用函数时&#xff0c;缺省参数的值如果没有传入&#xff0c;则取默认值。 下例会打印默认的age&#xff0c;如果age没有被传入&#xf…

UI设计师的主要职责说明(合集)

UI设计师的主要职责说明1 职责&#xff1a; 1、负责公司移动端、PC端产品相关的交互、UI等设计 2、负责公司宣传册、海报、运营物料、banner等设计 3、负责公司品牌相关的视觉设计 3、制定相关设计规范&#xff0c;提高产品的可用性、不断优化产品体验; 4、与PM、运营紧密…

Labview选项卡之实现被选择选项卡工作

文章目录 前言一、使用选项卡二、实现被选择选项卡工作1、需求2、分析3、实现①、前面板②、程序框图 三、效果展示四、源码自取 前言 有些时候&#xff0c;我们做界面&#xff0c;需要好多个界面切换。如果是同一个 VI 里界面切换&#xff0c;一般都是选项卡了。切换不同选项…

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写

解锁编程的新契机&#xff1a;深入探讨Kotlin Symbol Processor (KSP)的编写 1. 引言 随着软件开发领域的不断发展&#xff0c;新的工具和技术不断涌现&#xff0c;以满足开发者在构建高效、可维护和创新性的代码方面的需求。Kotlin Symbol Processor&#xff08;KSP&#xf…

ssm+vue网上花店设计源码和论文

ssmvue网上花店设计源码和论文017 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xf…