zoukankan      html  css  js  c++  java
  • 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:

  • 相关阅读:
    NOIP1996 第三题
    vijos P1071
    USACO 2.3
    NOIP2006 第二题(change)
    NOIP2006 第二题
    NOIP2005 第三题
    Building Block 动态规划
    砝码问题 Weight
    装箱问题(Packing DP)
    算法第二章上机实践报告
  • 原文地址:https://www.cnblogs.com/132818Creator/p/14845434.html
Copyright © 2011-2022 走看看