turn协议部分摘录----draft-ietf-behave-turn-14

本文深入解析了TURN协议,一种允许NAT环境下的主机通过中继进行通讯的机制。介绍TURN协议的功能,包括中继地址的创建与管理,以及与ICE协议的配合使用。详细解释了Server-ReflexiveAddress和Relayed_Transport_Address的概念,并阐述了数据传输、权限管理、发送机制和RTP支持等内容。
摘要由CSDN通过智能技术生成

1、简介

  本文定义了一个名为TURN的协议,它允许两个处于NAT环境的主机利用中继进行通讯。client能够在TURN Server上分配资源,与peer(对端)进行通讯,也能够决定何时应该停止通讯。client需要关联一个TURN Server的地址作为中继,称为relayed server address。当client发送报文给TURN Server,TURN Server使用relayed server address作为源地址向其他peer进行中继转发报文。
在这里插入图片描述
  使用的TURN的client必须使用一些方法来获取对端peer的relayed-transport-address地址及每个peer的本机IP及端口。该方法并不在这里讨论。
  虽然TURN稀有一适用于两个主机都位于NAT之后的情况,但是TURN协议的TURN Server的要求很高,server必须要有很大带宽。所以使用TURN协议的最佳情景是-----当两个主机没有直接通信路径时。当TURN与ICE一起使用时,ICE会优先去查找有无直接通信路径,如果实在找不到才会启用TURN协议
  TURN支持每个relayed-transport-address同时与多个peer(对端)通信。

2、功能一览

  一般情况TURN 客户端在内网中,TURN Server在公网。TURN客户端使用TURN Server作为中继来和位于其它网络的对端通信。
在这里插入图片描述
上图的几个地址概念:
  Server-Reflexive Address: 客户端向turn server发送消息,该消息经过NAT再发送出去,所以turn server接收到消息 后实际获得的IP地址,即是NAT的地址(一般是公网地址)。这个地址就叫做客户端的Server-Relexive地址。turn serve向客户端发送消息时,目的地址就是server-reflexive地址,当该消息达到NAT后,NAT会再将该地址转发给客户端。

  Relayed_Transport_Address: 客户端使用TURN协议来创建和管理ALLOCATION。allocation是turn server端的数据结构,而Relayed_Transport_Address是该数据结构中重要的组成部分。该地址是turn server本身地址,用于客户端和对端进行消息交互。称为中转地址,客户端和对端通信消息都要拿这个地址(turn server)做中转。

  当peers(对端)位于NAT之后,客户端必须使用peer的Server-Reflexive IP来做标记而不是使用peer的本地IP。拿上图例子来说。客户端给peer A发送应用数据时,客户端必须使用192.0.2.150:32102而不是192.168.100.2:49582 。

4、传输

   TURN在TURN server与peers之间总是使用UDP进行数据传输,但是客户端和turn server之间可以使用UDP,TCP和TLS over tcp 三种方式.

在这里插入图片描述

5、Allocation

  客户端使用Allocation事务来在turn server创建一个allocation结构。客户端发送一个Allocate request到服务器,然后服务器通过Allocate success响应回复客户端,在该响应中带有客户度的中继IP地址(relayed transport address)。
  客户端可以在Allocate request中携带一些属性如lifetime。
  如果需要安全认证则因为server中转数据包需要占用很大带宽,故server一般会要求客户端使用long-term认证
在这里插入图片描述

  一旦中继地址分配成功,客户端必须定期发送Refresh request来保活该地址。这个定期时间由lifetime属性规定(单位为秒),默认是600s,可修改。

流程:
在这里插入图片描述
抓包:
在这里插入图片描述

6、Permissions

   TURN提供了一种绕过企业防火墙的机制,该机制就称为permissions。
一个Allocation可以有0或多个permission,每个permission由一个IP地址和lifetime组成。当turn server接收到一个来自于中继地址(relayed transport address)的UDP数据报文时,它首先会检查permission列表,如果该UDP报文的源地址IP和某个permission匹配,这个UDP报文就会被转发给客户端,否则丢弃该UDP报文。
一个permission如果不refresh,则会在5分钟后过期。
在这里插入图片描述

  客户端可以使用CreatePermission 请求或ChannelBind 请求来安装或刷新一个permission。
  一个CreatePermission请求可以用来安装或刷新多个permission,这个属性对于ICE来说非常重要。出于安全考虑,permission只能有经过安全认证的事务(transaction)来安装及刷新。

  Send indications及ChannelData Message并不能安装或刷新permission。
  permission保存在一个allocation结构中,因此在一个allocation中添加一个新的permission或一个permission过期并不会影响其他的allocation。
在这里插入图片描述

7、发送机制

  在客户端和对端使用turn server进行应用数据交互时有两种发送机制可用。
第一种是send and Data方式,第二种是使用channel。这两种方式都能仅用一个中继地址(relayed transport address)使客户端和多个对端进行通信。
在这里插入图片描述

第一种方式:

  Send indications被用于客户端向server发送应用数据,而Data indication被用于服务器向客户端发送数据
在这里插入图片描述

流程:
在这里插入图片描述
在上图中发送的 CreatePermission请求中需要添加XOR-PEER-ADDRESS属性, 该属性的值为对端A的反射地址(server reflexive address),如果没有该地址则server不会给客户端及对端A转发数据。
在这里插入图片描述
数据交互:
在这里插入图片描述

第二种方式;

   在一些使用场景如Voip(视频电话),为了节约带宽可以使用ChannelData message。该方法不使用STUN头而是使用特有的4字节的头部来包含channel number(通道号)等信息。每个在使用的通道号都已经和一个特定的对端绑定了,因此turn server就作为对端的本地地址(host transport address)的速记。
在这里插入图片描述

   为了将通道和对端绑定,客户端需要向server发送ChannelBind 请求,请求中需要包括未绑定的通道号及对端的地址。
一旦一个通道被绑定了,客户端就可以向server发送一个ChannelData 消息,server进而将该消息发送给对端。类似的server会将来自对端的消息通过ChannelData消息发送给客户端。
在这里插入图片描述
通道绑定的默认有效期是10分钟,到期之前可以通过另外一个ChannelBind 请求来重新绑定。
在这里插入图片描述

抓包:
在这里插入图片描述
在这里插入图片描述

8、RTP 支持

  TURN包含一些特定的的对RTP的支持。
旧版本的RTP协议(RFC3550)要求一个奇数的rtp端口和一个rtcp端口(rtp端口号+1)。为了客户端和对端能用就版本的RTP协议交互,TURN支持客户端向server请求一个带有一个奇数端口及一个(奇数端口+1)的端口的中继地址(relayed transport address),并且可以要求server在接下来的allocation请求中不使用此次(奇数端口+1)的端口(也可以不要求)。
在这里插入图片描述
具体怎么请求文档没说。

9、英文原网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值