WebRTC之STUN与TURN以及ICE

2024-08-22 15:32
文章标签 turn ice webrtc stun

本文主要是介绍WebRTC之STUN与TURN以及ICE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。
很多时候,我们希望处于不同内部网络中的两台主机能够直接进行通信,即所谓的P2P通信,避免通过其他公共服务器的中转的方式来降低实时通信的延迟。
由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。
这种技术通常称为NAT穿透(NAT Traversal),而更多关于NAT的介绍我们在《WebRTC之NAT穿墙》已经做了简单的介绍。

如果对NAT穿透还不了解的话建议先温习一下。

而今天的主角是STUN、TURN和ICE,它们是实现NAT穿透的不同技术方案。

STUN

STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是Simple Traversal of UDP Through NATs,即简单的用UDP穿透NAT。

在新的RFC5389修订中把STUN协议定位于为穿透NAT提供工具,而不是一个完整的解决方案,英文全称是Session Traversal Utilities for NAT,
即NAT会话穿透。STUN在RFC5389与RFC3489中除了名称变化外,最大的区别是在新的定义中支持TCP穿透。

STUN是典型的客户端/服务器模式,客户端发起请求,服务端进行响应,默认端口是3478。

两种STUN规范:分别是RFC3489RFC5389

RFC3489通过UDP进行穿墙。目前的服务器对于UDP的限制比较多,导致这种模式穿墙的成功率不高。

RFC5389是在RFC3489的升级版,但是含义确是不一样的,一系列的穿墙攻击,纳入了TCP穿墙。

所有的STUN消息都包含20个字节(每个字节占8位,总共是160位)的消息头,其中2个字节(也就是16位)的消息类型,
2个字节的消息长度,这个长度不包含消息头的长度还有16个字节的事务ID,请求与响应事务ID相同。

消息头之后就是是消息体,消息体可以是0或多个属性,每个属性进行TLV编码,包括16位的属性类型、16位的属性长度和变长属性值。

更加具体的消息交互协议笔者目前还不打算深入研究,因为目前我的目的是为了学习并使用WebRTC,还没到达弄清楚WebRTC的每一个细节点的高深境界。

四种主要NAT类型中有三种是可以使用STUN进行穿透:完全圆锥型NAT、受限圆锥型NAT和端口受限圆锥型NAT,对称型NAT则不能使用。

那么对称型NAT如何实现P2P通信呢

TURN协议

上面说到对称型NAT无法使用STUN成功进行穿透,这时候就需要TURN出场了。

TURN协议的目的就是为了解决对称型NAT无法穿越的问题。

TURN(Traversal Using Relay NAT,通过Relay方式穿越NAT),是一种数据传输协议。允许通过TCP或UDP方式穿透NAT。
TURN也是一个Client/Server协议,也和STUN使用同样的消息格式。

但实现TURN client的终端必须在通讯开始前与TURN server进行交互,并要求TURN server产生"relay port",也就是中继转发地址。
这时TURN server会建立peer,即远端端点(remote endpoints),开始进行中继(relay)的动作,TURN client利用relay port将数据传送至peer,再由peer转传到另一方的TURN client。

说白了笔者觉得TURN协议更像一个中继转发协议,并不是真正意义上的P2P通信(不知道笔者这样的理解对不对)

ICE

ICE(Interactive Connectivity Establishment,互动式连接建立)。ICE定义了穿越方法而不是协议。

既然我们NAT穿透可以使用STUN也可以使用TURN,那么什么时候使用STUN什么时候使用TURN呢?这就是ICE做的事情。

更通俗地讲ICE更像一个NAT穿透的管理者,使用者只需要告诉ICE我要穿墙即可,至于怎么穿墙那就是ICE的事情了。

ICE整合了STUN与TURN。ICE使得两个NAT后的端点通信更加便捷。ICE使用STUN进行打洞,若失败,则使用TURN进行中转。

下面说说ICE的主要工作:

1、收集候选地址也就是收集Candidate

所谓的Candidate就是一个由IP和端口组成的地址。而Candidate又有三种类型:

主机候选者类型(网卡自己的ip地址和端口)反射候选者类型(经过NAT之后的ip地址和端口)中继候选者类型(通过TURN服务开通的转发地址和端口)

2、对Candidate Pair进行排序

ICE收集到了候选者地址后,两个对等端都拥有了若干自己和对方的候选地址,并将其配对,组成Candidate Pair。

每对Candidate Pair都有对应的优先级,ICE需要对每对Candidate Pair进行优先级的排序。

3、对候选地址进行连通性检测

ICE对排序好的Candidate Pair进行发送检测和接收检测,发送和检测是同时进行的,如果发送消息出去之后还能收回和发送出去一样的信息则说明连通性是通的

参考资料

《P2P技术详解(四):P2P技术之STUN、TURN、ICE详解》

关注我,一起进步,人生不止coding!!!

微信扫码关注

这篇关于WebRTC之STUN与TURN以及ICE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096664

相关文章

雷动WEBRTC产品

http://www.rtcpower.com/html/leidongwebrtc.html ; 1.前言      WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得一项技术。WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以

Apple quietly slips WebRTC audio, video into Safari's WebKit spec

转自:http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-into-safaris-webkit-spec/?from=timeline&isappinstalled=0 http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-

WebRTC-nack机制详解

1.NACK的含义 丢包重传(NACK)是抵抗网络错误的重要手段。NACK在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端,发送缓冲区的支持。 WebRTC中支持音频和视频的NACK重传。我们这里只分析nack机制,不分析jitterbuffer或者neteq的更多实现。 2.WebRTC

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新

ice skating cf218c

题目链接 题意大概就是 小明初学滑雪只能借靠雪堆他通过一个雪堆可以向上下左右四个方向划,问想要把所有雪堆连接它至少需要再建几个雪堆。 本来想的是通过一个雪堆然后在该行和该列拓展把所有该行和该列的雪堆都除掉然后判断最后剩下几个雪堆只需要将他们连起来就行,结果是忽略了被除掉的雪堆也有可能和其他雪堆有联系。 正解:通过一个雪堆不断地dfs其他雪堆然后把这些能连起来的雪堆当作一条路径然后将其记录。一共有几

WebRTC协议下的视频汇聚融合技术:EasyCVR构建高效视频交互体验

视频汇聚融合技术是指将来自不同源、不同格式、不同网络环境的视频流进行集中处理、整合和展示的技术。随着视频监控、远程会议、在线教育、直播娱乐等领域的快速发展,视频数据的规模急剧增长,对视频处理能力和效率提出了更高要求。视频汇聚融合技术通过统一的平台或系统,实现了视频资源的有效整合与高效利用,为用户提供了更加丰富、灵活的视频服务体验。 一、EasyCVR视频汇聚平台关键技术 视频编解码:采用高效的

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力云服务器,可智能感知业务负载,适用于电商直播、企业建站、开发测试环境、游戏服务器、音视

WebRTC协议下的视频汇聚融合技术:EasyCVR视频技术构建高效视频交互体验

视频汇聚融合技术是指将来自不同源、不同格式、不同网络环境的视频流进行集中处理、整合和展示的技术。随着视频监控、远程会议、在线教育、直播娱乐等领域的快速发展,视频数据的规模急剧增长,对视频处理能力和效率提出了更高要求。视频汇聚融合技术通过统一的平台或系统,实现了视频资源的有效整合与高效利用,为用户提供了更加丰富、灵活的视频服务体验。 一、EasyCVR视频汇聚平台关键技术 视频编解码:采用高效的

浅析WebRTC技术在智慧园区视频管理场景中的应用

随着科技的飞速发展,智慧园区作为城市智慧化的重要组成部分,正逐步成为现代化管理的重要方向。智慧园区的建设不仅涉及硬件设施的智能化升级,还离不开高效的视频管理和实时通信技术。在这一背景下,WebRTC(Web Real-Time Communication)技术以其低延迟、高互动性的优势,在智慧园区的视频管理场景中展现出了巨大的应用潜力。 一、WebRTC技术概述 WebRTC是一种开源的网页实

webrtc使用过程中的一些问题

我的使用指的是peerconnection的使用。 1.项目的属性->C/C++->常规->附加包含目录 设置为webrtc源码的src目录。 2.项目的属性->连接器->常规->链接库依赖项设置为:“C:/Program Files (x86)/Windows Kits/10/Lib/win8/um/x86”和 库文件所在目录。 3.具体依赖项可以参考我的方法: ①进入out中对应的输