dbo*_*tha 17 webrtc rtcdatachannel rtcpeerconnection
我想检查一下我对 WebRTC 数据通道的理解是否正确,特别是通过改变字典的ordered&maxRetransmits或maxPacketLifeTime属性可以实现的不同类型的通道RTCDataChannelInit。我的以下假设是否正确:
Run Code Online (Sandbox Code Playgroud)RTCPeerConnection.createDataChannel("label", { ordered: true });
maxRetransmits或被maxPacketLifeTime指定以实现可靠性?)Run Code Online (Sandbox Code Playgroud)RTCPeerConnection.createDataChannel("label", { ordered: false });
Run Code Online (Sandbox Code Playgroud)RTCPeerConnection.createDataChannel("label", { ordered: false, maxRetransmits: 0 });
Run Code Online (Sandbox Code Playgroud)RTCPeerConnection.createDataChannel("label", { ordered: true, maxRetransmits: 0 });
Gor*_*son 12
你所有的假设都是正确的。
对于第一种和第二种情况,根据WebRTC W3C Candidate Recommendation 的 6.2 RTCDataChannel 部分,未设置maxRetransmits并maxPacketLifeTime导致可靠的通道,如下所示(粗体和斜体是我的):
一个
RTCDataChannel可被配置成在不同的可靠性模式中操作。可靠的通道确保数据通过重传在另一个对等点传送。不可靠信道被配置为限制重传次数(maxRetransmits)或设置允许传输(包括重传)的时间(maxPacketLifeTime)。这些属性不能同时使用,尝试这样做会导致错误。不设置任何这些属性会导致可靠的通道。
第三种情况,即设置ordered: falseand maxRetransmits: 0,根据draft-ietf-rtcweb-data-channel-13第6.1节创建不可靠且无序的通道,如UDP,如下(粗体和斜体我的):
o 必须支持 [RFC3758] 中定义的部分可靠性扩展。除了[RFC3758]中定义的定时可靠性PR-SCTP策略外,必须支持[ID.ietf-tsvwg-sctp-prpolicies]中定义的有限重传策略。 将重传次数限制为零并结合无序传递提供了一种类似 UDP 的服务,其中每个用户消息只发送一次并按接收顺序传递。
第四种情况是设置ordered: trueand maxRetransmits: 0,它创建了一个不可靠但有序(“有序”)的通道。根据RFC 3758 第 1.3 节的一段,这种类型的通道存在,如下(我的粗体和斜体):
- PR-SCTP除了像UDP那样提供无序、不可靠的数据传输外,还可以提供有序、不可靠的数据传输服务。
关于第四种情况,我不知道在“不可靠”的数据通道上究竟是如何实现“有序”的。但我认为这里https://jameshfisher.com/2017/01/17/webrtc-datachannel-reliability/的猜测是正确的。如果较晚的消息到达,接收方可能会丢弃较早的消息。
根据RFC 3758 第 3.6 节的最后一段,这个猜测似乎是正确的,如下(我的粗体和斜体):
请注意,在接收到 FORWARD TSN 并更新累积确认点后,如果被跳过的 TSN 确实到达(即,由于网络重新排序),则接收器将遵循 RFC 2960 [2] 中定义的正常规则来处理重复数据. 这意味着接收器将丢弃该块并将其报告为下一个出站 SACK 块中的重复项。
RFC 3758由draft-ietf-rtcweb-data-channel-13 第5 节引用,而后者又由WebRTC W3C 候选推荐书引用。
| 归档时间: |
|
| 查看次数: |
2114 次 |
| 最近记录: |