WebRTC 基础技术 | RTP 包序列号的回绕处理

本文介绍了网络通信中RTP包序列号的处理,特别是16位序列号在回绕时的向前和向后回绕问题。通过WebRTC的IsNewer和Unwrap函数,展示了如何正确比较和展开回绕的序列号,确保正确处理丢包和乱序。此外,还提供了测试案例来验证算法的正确性。
摘要由CSDN通过智能技术生成

1.导读


在诸多的网络通信协议中,都会有序列号字段 sequence number ,这个字段主要用于丢包、乱序的处理。比如, RTP 包的头部序列号字段长度为 16 bits,取值范围为 [0, 65535]。

现在有这样一个问题:对于两个 RTP 包,如何比较哪一个包才是最新的包?

比如,序列号为 0 的包一定比序列号为 65535 的包小,是旧的包吗?再如,序列号为 65535 的包一定比序列号为 255 的包大,是最新的包吗?

当然不是这样,因为在判断序列号的连续性时要考虑回绕问题,不能直接根据数学意义上的大小进行比较。本篇将介绍 WebRTC 中与序列号回绕处理相关的算法。

2.序列号回绕


序列号的回绕方式有两种,分别是向前回绕和向后回绕。

2.1 ForwardWrap

向前回绕发生时,有如下特点:

  1. 包号呈向前递增趋势。

  1. 当前的包号很小,而前一个包号很大。

  1. 从上一个包号向前跨越包号 0 到当前的包号。

  1. 包号之间的距离小于包号类型能表示的数字个数的一半。

  1. 认为当前的包号是更大的包号,即当前包是更新的包。

下图展现了向前回绕的这些特点:

向前回绕

2.2 BackwardWrap

向后回绕发生时,有如下特点:

  1. 包号呈向后递减趋势。

  1. 当前的包号很大,而前一个包号很小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值