在上一篇文章 WebRTC SCTP详解 中我们学习了流控制传输协议(SCTP),但数据通道具有 SCTP 无法表达的某些功能,例如通道标签。为了解决该问题,WebRTC 使用了RFC 8832中定义的数据通道建立协议(DCEP)。DCEP 定义了一条消息,用于传递通道标签和协议。
DCEP
DCEP 只有两个消息 DATA_CHANNEL_OPEN
和 DATA_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 举报,一经查实,本站将立刻删除。