WebRTC之STUN与TURN以及ICE

作者&投稿:东野司 (若有异议请与网页底部的电邮联系)
~

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

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

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

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规范:分别是 RFC3489 和 RFC5389 。

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无法使用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(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又有三种类型:

2、对Candidate Pair进行排序

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

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

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

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

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

微信公号:思想觉悟




赣州市17122188639: 如何配置配置 stun 服务器 -
苌侮丁硼: 1、Webrtc是基于P2P的,在两个客户端建立连接之前需要服务器建立连接,这时两台设备一般都处于一个或者多个NAT中,那么两台设备建立连接就需要穿墙技术2、这时就用到了turn服务器,他包括stun服务器,stun服务器主要用来获得外网的地址,而turn服务器则负责在P2P连接失败时进行转发3、建议下载ActiveFax Server(传真服务器)www.3322.cc/soft/27414.html

赣州市17122188639: STUN服务器的介绍 -
苌侮丁硼: 要确保VoIP的连接性通常是很有挑战性的,因为很可能在用户和企业网络之间存在数量和种类繁多的网络地址转换(NAT)防火墙.

赣州市17122188639: [Fate和Just和Turn]这三个是什么意思?
苌侮丁硼: FATE:命运之意. JUST:仅仅,刚好 TURN:转变

赣州市17122188639: 如何在没有https环境下使用webrtc -
苌侮丁硼: 你好,根据该地址汉化:TURN server installation Guide 速 Muaz Khan 我自己的服务器是CentOS的,在Windows下没有做任何尝试所以不保证结果,遇到问题再交流.

赣州市17122188639: turn out 和turn out to be的区别 -
苌侮丁硼: turn out 有多种含义,如:(以某种方式)发生、结果是、(天气突然)变得、关掉(电灯、煤气等)、制造、撵走、翻出/倒出、出席等.turn out to be 只是 turn out 其中的一种用法,意思是“结果是/原来是”.

赣州市17122188639: turn in 与turn into和turn to 的区别 -
苌侮丁硼: turn in与turn into和turn to的区别为:意思不同、用法不同、侧重点不同. 一、意思不同 1、turn in:上床睡觉,把(犯罪嫌疑人)交给警方. 2、turn into:变成. 3、turn to:向(某人)求助,求助于,转向. 二、用法不同 1、turn in:turn的基本...

赣州市17122188639: take和turn的用法和意思
苌侮丁硼:take vt. 带(去),携带 Shewentoutoftheroom,takingtheflowerswithher. 她带着花走出了房间. 拿,取,抓 Whohastakenmypen? 谁把我的钢笔拿走了? 需要;花费 Theflighttooktwohours. 这一飞行花了两小时. 学习;教 ...

赣州市17122188639: open和turn on的区别 -
苌侮丁硼: 一、后接的名词不同 开电脑应该用turn on而不是open,open主要指将原来关上或合上的东西打开,比如开门,窗等. 英文里对电子设备的"开关",正确的动词是"turn on/off或switch on/off",比如开电脑,开灯,开电视等,是我们常说的启动...

赣州市17122188639: shift from和turn from 的区别 -
苌侮丁硼: shift更强调轮班,或换挡,而turn强调转变,变得和以前完全不同.Shift在电脑键盘上表示上档键. ››键盘上有用途各不相同的一些功能键.在操作电脑时,可以按这些键进行操作,而且还可以把两个以上的键同时按下以实现某种功能,叫做...

赣州市17122188639: 以Turning或Turn或To turn开头的句子语法上这三者有什么区别?
苌侮丁硼: turn to help去帮忙 turn for help求助 turn to sb. for sth.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网