webrtc turn协议

什么时候需要turn服务器?

在对称型网络下,是无法实现P2P互通的。这时就需要TURN服务器作为中转,实现媒体数据的中继互转功能。

turn client与turn server之间可以走UDP、TCP、TLS三种协议报文。

 

实际应用中Turn协议的工作主要有四个阶段:绑定(binding)、分配(Allocation)、转发(Relay)和信道(Channel)

 

 

第一步绑定:

binging request:

 

 

bind response:

 

 

第二步 分配:

客户端想要在服务器端获得一个中继分配,客户端需要在中继服务器上申请一个中继事务。客户端发送分配请求(Allocate request)到服务器,然后服务器为用户开启一个relay端口后返回分配成功响应,并包含了分配的地址信息。客户端可以在属性字段描述其想要的分配类型:UDP or TCP。

 

 

 

 allocation request:

 

 

allocation response:

 

 

第三步 转发:

       webrtc中使用send&data indicate数据包,主要是用来做连通性测试使用

  P2PTransportChannel::SortConnectionsAndUpdateState
    ->P2PTransportChannel::MaybeStartPinging
    ->P2PTransportChannel::OnCheckAndPing
    ->P2PTransportChannel::PingConnection
    ->Connection::Ping

 

第四步:

音视频数据转发场景中,使用Send/Data Indication转发机制,会多加的36字节格式信息,加重客户端和服务端之间的带宽压力。为改善这种情况,turn提供channeldata message信道机制。channeldata message不使用stun头部,而使用一个4字节的头部,包含一个称为信道号的值(channel number)。每一个使用中的信道号都与一个特定的peer绑定,即作为对等端地址的一个记号。要将一个信道与对等端绑定,客户端首先发送一个信道绑定请求(channelbind request)到服务器,并且指定一个未绑定的信道号以及对等端的地址信息。绑定后client和server都能通过channeldata message来发送和转发数据。信道绑定默认持续10分钟,并且可以通过重新发送channelbind request来刷新持续时间。和Allocation不同的是,并没有直接删除绑定的方法,只能等待其超时自动失效。

channel bind request:

 

 

channel bind response:

 

posted @ 2021-06-03 15:38  HappyCoder_1  阅读(410)  评论(0编辑  收藏  举报