使用 GCC 进行基于 TWCC 延迟的估计
TWCC Delay-Based Estimation with GCC
我一直在学习 Google 拥塞控制以及它如何从网络收集数据。我希望确认我对 t(i) - t(i-1)
延迟如何有用的理解。
我的理解是发件人用时间戳标记每个数据包(所谓的,abs-send-time
)。此时间戳基于发送方的时钟。当数据包被传输到接收方时,接收方旨在计算它接收到的数据包之间的延迟'change'。
据推测,这种延迟变化有助于推断路由器何时缓冲数据包,从而导致网络拥塞。然后 GCC 算法可以降低比特率以适应数据包最终丢失到缓冲区丢弃它们之前的情况。
我的问题是,接收方如何准确测量数据包之间延迟的变化?我知道单向延迟是多么棘手,因为时钟不同步。因此,SR/RR使用RTT来估计双向延迟。
因此,发送方在每个数据包上标记 abs-send-time
,这些数据包以一定的间隔发送。该间隔应在 abs-send-time
时间戳中捕获。
示例:
packet_1 abs-send-time = 2022-01-01: 00: 00 : 00 : 000
delay of 10 ms (so called sender_delay_1)
packet_2 abs-send-time = 2022-01-01: 00: 00 : 00 : 010
delay of 10 ms (so called sender_delay_2)
packet_3 abs-send-time = 2022-01-01: 00: 00 : 00 : 020
作为接收方,我们可以推断发送间隔是每10毫秒一次。现在,如果接收间隔不是每 10 毫秒,接收方知道网络中的某些东西阻止了每 10 毫秒接收一次数据包 .
如果接收端的receiver_delay_1
是10ms,receiver_delay_2
是20ms,就知道虽然是10ms发送,但是receiver_delay_2
表示第三个包比预期的接收间隔长 10 毫秒(基于它们发送的间隔(由 abs-send-time
推断)。
总结一下:
abs-send-time
通知接收方发送速率是多少。然后,接收器可以使用该信息来衡量数据包的接收速率。当它们相等时,一切都很好。当接收速率和发送速率之间存在差异时,这可以推断路径正在变得拥塞,因为路由器中的延迟会增加数据包接收速率之间的差异。
这里的理解正确吗?
您正在混合来自 transport-wide-cc 和 abs-send-time 的概念,后者用于较旧的 REMB。虽然两者都使用 https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02 中的相同概念,但它很复杂 :-)
简而言之,您是对的。发送方和接收方之间不能假定绝对时钟。由于通常 high-resolution 稳定的时钟自机器启动以来正在计算时间滴答声,这使情况变得更糟。但是可以比较发送方和接收方本地时间表示的时间差(假设时钟运行以相同的速率但不需要考虑相对论效应)
在 abs-send-time 和 REMB 的情况下,接收器计算差异(到达间隔增量),并考虑 abs-send-time header 扩展(比 RTP 分辨率更高时间戳),然后估算比特率。
对于transport-wide拥塞控制,发件人用序列号标记每个数据包(transport-wide因此不能使用RTP)并存储发送时间。接收器发送由接收时间(在其自己的时钟中)和(transport-wide)序列号组成的反馈。发送方然后计算增量并估计延迟是否增加。这进入发送者比特率估计算法。
我一直在学习 Google 拥塞控制以及它如何从网络收集数据。我希望确认我对 t(i) - t(i-1)
延迟如何有用的理解。
我的理解是发件人用时间戳标记每个数据包(所谓的,abs-send-time
)。此时间戳基于发送方的时钟。当数据包被传输到接收方时,接收方旨在计算它接收到的数据包之间的延迟'change'。
据推测,这种延迟变化有助于推断路由器何时缓冲数据包,从而导致网络拥塞。然后 GCC 算法可以降低比特率以适应数据包最终丢失到缓冲区丢弃它们之前的情况。
我的问题是,接收方如何准确测量数据包之间延迟的变化?我知道单向延迟是多么棘手,因为时钟不同步。因此,SR/RR使用RTT来估计双向延迟。
因此,发送方在每个数据包上标记 abs-send-time
,这些数据包以一定的间隔发送。该间隔应在 abs-send-time
时间戳中捕获。
示例:
packet_1 abs-send-time = 2022-01-01: 00: 00 : 00 : 000
delay of 10 ms (so called sender_delay_1)
packet_2 abs-send-time = 2022-01-01: 00: 00 : 00 : 010
delay of 10 ms (so called sender_delay_2)
packet_3 abs-send-time = 2022-01-01: 00: 00 : 00 : 020
作为接收方,我们可以推断发送间隔是每10毫秒一次。现在,如果接收间隔不是每 10 毫秒,接收方知道网络中的某些东西阻止了每 10 毫秒接收一次数据包 .
如果接收端的receiver_delay_1
是10ms,receiver_delay_2
是20ms,就知道虽然是10ms发送,但是receiver_delay_2
表示第三个包比预期的接收间隔长 10 毫秒(基于它们发送的间隔(由 abs-send-time
推断)。
总结一下:
abs-send-time
通知接收方发送速率是多少。然后,接收器可以使用该信息来衡量数据包的接收速率。当它们相等时,一切都很好。当接收速率和发送速率之间存在差异时,这可以推断路径正在变得拥塞,因为路由器中的延迟会增加数据包接收速率之间的差异。
这里的理解正确吗?
您正在混合来自 transport-wide-cc 和 abs-send-time 的概念,后者用于较旧的 REMB。虽然两者都使用 https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02 中的相同概念,但它很复杂 :-)
简而言之,您是对的。发送方和接收方之间不能假定绝对时钟。由于通常 high-resolution 稳定的时钟自机器启动以来正在计算时间滴答声,这使情况变得更糟。但是可以比较发送方和接收方本地时间表示的时间差(假设时钟运行以相同的速率但不需要考虑相对论效应)
在 abs-send-time 和 REMB 的情况下,接收器计算差异(到达间隔增量),并考虑 abs-send-time header 扩展(比 RTP 分辨率更高时间戳),然后估算比特率。
对于transport-wide拥塞控制,发件人用序列号标记每个数据包(transport-wide因此不能使用RTP)并存储发送时间。接收器发送由接收时间(在其自己的时钟中)和(transport-wide)序列号组成的反馈。发送方然后计算增量并估计延迟是否增加。这进入发送者比特率估计算法。