WebRTC信道可靠性

WebRTC信道可靠性,webrtc,rtcdatachannel,rtcpeerconnection,Webrtc,Rtcdatachannel,Rtcpeerconnection,我想检查我对WebRTC数据通道的理解是否正确,特别是通过将有序的&maxRetransmits或maxPacketLifeTime属性更改为RTCDataChannelInit字典可以实现的不同类型的通道。我的以下假设是否正确: 创建一个可靠的&有序的通道,如TCP,但基于消息而不是流: 创建一个可靠但无序的通道(是否也应指定maxRetransmits或maxPacketLifeTime以实现可靠性?) 创建一个不可靠的和无序的通道,如UDP 创建一个不可靠的但已排序的通道,即如果较早的消息

我想检查我对WebRTC数据通道的理解是否正确,特别是通过将
有序的
&
maxRetransmits
maxPacketLifeTime
属性更改为
RTCDataChannelInit
字典可以实现的不同类型的通道。我的以下假设是否正确:

  • 创建一个可靠的&有序的通道,如TCP,但基于消息而不是流:
  • 创建一个可靠无序的通道(是否也应指定
    maxRetransmits
    maxPacketLifeTime
    以实现可靠性?)
  • 创建一个不可靠的无序的通道,如UDP
  • 创建一个不可靠的已排序的通道,即如果较早的消息在较后的消息之后到达,则会丢弃较早的消息

  • 前三个假设是正确的,第四个假设是不正确的

    根据webrtc pc规范,maxPacketLifeTime或MaxRetransmit只能在不可靠模式下使用

    第四种情况创建可靠且有序的通道


    更多信息-

    您所有的假设都是正确的


    对于第一种和第二种情况,不设置
    maxRetransmits
    maxpacketlife
    会根据产生可靠的通道,如下所示(粗体和斜体):

    RTCDataChannel
    可以配置为在不同的可靠性模式下运行。可靠的通道确保数据通过重传在另一个对等方传递。不可靠信道被配置为限制重传次数(
    maxretransmit
    )或设置允许传输(包括重传)的时间(
    maxretransmit
    )。这些属性不能同时使用,尝试这样做将导致错误不设置任何这些属性都会产生可靠的通道。


    第三种情况是设置
    ordered:false
    maxRetransmits:0
    ,根据创建一个不可靠的无序的通道,如UDP,如下所示(粗体和斜体):

    o必须使用[RFC3758]中定义的部分可靠性扩展 支持。除了定时可靠性PR-SCTP策略之外 [RFC3758]中定义,在中定义的有限重传策略 必须支持[I-D.ietf-tsvwg-sctp-PRPolicys]限制 再传输到零的次数与无序传递相结合 提供类似UDP的服务,在该服务中发送每个用户消息 仅一次,并按收到的订单交付


    第四种情况是设置
    ordered:true
    maxRetransmits:0
    ,它创建了一个不可靠但有序的“sequenced”)通道。这种类型的频道是根据以下段落(粗体和斜体):

  • 除了像UDP一样提供无序、不可靠的数据传输外,PR-SCTP还可以提供有序、不可靠的数据传输服务

  • 关于第四种情况,我不知道如何在“不可靠”数据通道上实现“有序”。但我想这里的猜测是对的。如果较早的消息在较后的消息之后到达,则接收方可能会丢弃较早的消息

    根据的最后一段(粗体和斜体):

    请注意,在收到转发TSN并更新累积 确认点,如果跳过的TSN确实到达(即。, 由于网络重新排序),则接收器将遵循正常 RFC 2960[2]中定义的用于处理重复数据的规则。这 这意味着接收者将丢弃区块,并将其报告为 在下一个出站SACK块中复制

    被引用,反过来,被引用

    RTCPeerConnection.createDataChannel("label", {
        ordered: true 
    });
    
    RTCPeerConnection.createDataChannel("label", {
            ordered: false    
    });
    
    RTCPeerConnection.createDataChannel("label", {
        ordered: false,
        maxRetransmits: 0
    });
    
    RTCPeerConnection.createDataChannel("label", {
        ordered: true,
        maxRetransmits: 0
    });