WebRTC 数据通道建立协议DCEP

在上一篇文章 WebRTC SCTP详解 中我们学习了流控制传输协议(SCTP),但数据通道具有 SCTP 无法表达的某些功能,例如通道标签。为了解决该问题,WebRTC 使用了RFC 8832中定义的数据通道建立协议(DCEP)。DCEP 定义了一条消息,用于传递通道标签和协议。

DCEP

DCEP 只有两个消息 DATA_CHANNEL_OPENDATA_CHANNEL_ACK。对于打开的每个数据通道,远端必须以 ack 响应。

DATA_CHANNEL_OPEN

该消息由希望打开数据通道的 WebRTC Agent 发送。

封包格式

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Message Type |  Channel Type |            Priority           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Reliability Parameter                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Label Length          |       Protocol Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\                                                               \
/                             Label                             /
\                                                               \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\                                                               \
/                            Protocol                           /
\                                                               \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

消息类型(Message Type)

消息类型是一个静态值 0x03

通道类型(Channel Type)

Channel Type controls durability/ordering attributes of the channel. It may have the following values: 通道类型控制通道的持久性 / 排序属性。它可能具有以下值:

  • DATA_CHANNEL_RELIABLE (0x00) – 没有消息丢失,消息依序到达。
  • DATA_CHANNEL_RELIABLE_UNORDERED (0x80) – 没有消息丢失,但消息可能乱序到达。
  • DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT (0x01) – 按照请求中的次数重试发送后,消息可能会丢失,但消息将依序到达。
  • DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED (0x81) – 按照请求中的次数重试发送后,消息可能会丢失,且消息可能乱序到达。
  • DATA_CHANNEL_PARTIAL_RELIABLE_TIMED (0x02) – 如果没有在请求的时间内到达,消息可能会丢失,但消息将依序到达。
  • DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED (0x82) – 如果没有在请求的时间内到达,消息可能会丢失,且消息可能乱序到达。

优先级(Priority)

数据通道的优先级。具有较高优先级的数据通道将首先被调度。较大的低优先级用户消息不会耽误高优先级用户消息的发送。

可靠性参数

如果数据通道类型的前缀为 DATA_CHANNEL_PARTIAL_RELIABLE,则不同的后缀对应的参数配置如下:

  • REXMIT – 定义发送方重试发送消息的次数,超出此次数将放弃尝试。
  • TIMED – 定义发送方重试发送消息的时间(以毫秒为单位),超出此时间将放弃尝试。

标签(Label)

一个包含数据通道名称的 UTF-8 编码的字符串。可能为空。

协议(Protocol)

如果这里为空字符串,则协议未指定。如果是非空字符串,则这里应指定一个协议,可指定的协议请参考RFC 6455中定义的 “WebSocket 子协议名称注册表 ” 中的注册协议。

DATA_CHANNEL_ACK

WebRTC Agent 发送此消息以确认此数据通道已打开。

封包格式

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Message Type |
+-+-+-+-+-+-+-+-+

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论