地铁中的“到达间隔抖动”是什么?

网络工程 地铁
2021-07-12 18:22:12

什么是“到达间隔抖动”?

我注意到它在 mtr 中可用,但计算出的值没有多大意义——它们似乎甚至比最大抖动值还要大。它们有什么用?

Cns# mtr --report{,-cycles=100} --order "SRL BAWV JMXI" ... ; 日期
主持人:Cns??????Snt Rcv Loss% Best Avg Wrst StDev Jttr Javg Jmax Jint
  1.|-- cnst????????????????????? 100 100 0.0% 8.0 8.7 28.3 2.2 0.3 0.7 19.6 9.4
  2.|-- v320.core1.fra1.he.net 100 100 0.0% 5.3 9.2 22.9 4.5 0.4 4.8 17.6 73.4
  3.|-- 100ge5-2.core1.par2.he.ne 100 100 0.0% 15.0 18.7 41.0 4.6 7.3 4.2 26.0 47.8
  4.|-- 10ge15-1.core1.ash1.he.ne 100 99 1.0% 93.0 99.4 133.3 6.7 0.9 6.0 40.2 125.9
  5.|-- abilene-as11537.gigabitet 100 100 0.0% 93.7 98.0 159.5 11.7 0.0 7.8 65.7 149.4
1个回答

(有趣的事实:我曾经和最初在 97 年编写 mtr 的人一起工作)

如果您查看github 上源代码,特别是在 中net.c,就会有这样的花絮:

  int jinta;        /* estimated variance,? rfc1889's "Interarrival Jitter" */

RFC 1889是 RTP 的 RFC,后来被RFC 3550取代以下是详细说明如何计算到达间抖动的摘录(取自 RFC 3550):

RTP 数据包到达间隔时间的统计方差的估计,以时间戳为单位测量并表示为无符号整数。到达间隔抖动 J 被定义为一对数据包在接收方与发送方之间的数据包间距差 D 的平均偏差(平滑的绝对值)。

如下面的等式所示,这相当于两个数据包的“相对传输时间”的差异;相对传输时间是数据包的 RTP 时间戳与到达时接收器时钟之间的差值,以相同的单位测量。

如果 Si 是数据包 i 的 RTP 时间戳,Ri 是数据包 i 在 RTP 时间戳单元中的到达时间,那么对于两个数据包 i 和 j,D 可以表示为

D(i,j) = (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)

当从源 SSRC_n 接收到每个数据包 i 时,应该连续计算到达间隔抖动,使用该数据包的差异 D 和前一个数据包 i-1 按到达顺序(不一定按顺序),根据公式

J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16

每当发出接收报告时,都会对 J 的当前值进行采样。

抖动计算必须符合此处指定的公式,以允许与配置文件无关的监视器对来自不同实现的报告进行有效解释。该算法是最优的一阶估计器,增益参数 1/16 给出了良好的降噪率,同时保持了合理的收敛速度 [22]。附录 A.8 显示了一个示例实现。有关在传输前改变数据包持续时间和延迟的影响的讨论,请参见第 6.4.4 节。