问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

网络时延与RTT详解

创作时间:
作者:
@小白创作中心

网络时延与RTT详解

引用
CSDN
1.
https://m.blog.csdn.net/enternalstar/article/details/144834012

在网络通信中,时延和RTT是两个重要的性能指标。本文将详细介绍这两个概念的定义、计算方法及其在实际应用中的意义。

网络时延

一个数据包从服务器到达客户端的时间需要经过一定时间,即时间延迟。通常,客户端和服务器有时间同步的需求,需要通过时间延迟,来让双方在时间上尽量统一。

例如,在客户端有本地时间、时延,得到的服务器时间 = 本地时间 + 时延;服务器有本地时间+不同客户端的时延,得到不同客户端的时间 = 本地时间 + 不同客户端的时延。注意客户端得到的服务器时间 和 服务器本地时间不完全相同。

在数据传输过程中,可以将时延分为四个部分:总时延 = 发送时延 + 处理时延 + 排队时延 + 传输时延。

如果数据包中包含了服务器发送时间,那么时延 = 客户端接收时间 - 服务器发送时间;反之亦然。

由于网络的复杂性,通过每个数据包计算出来的时延都不相等,为了得到一个确定的时延值,通常的做法是取过去数次的时延平均值作为当前的时延值。

RTT

RTT是往返时间,指数据包从端点发送并接收到返回数据包的总时间,是往返双程的时间。而网络时延是单程时间,通常是传输层的时间。

而RTT是应用层的时间,除了来回的网络时延,还包括应用自身处理信息的时延。一般来说,应用层处理信息时延基本固定,可以忽略。

因此,在实际中,会近似认为RTT为来回的网络时延,但是要注意半程RTT不等于单程网络时延。

RTT计算方式

显而易见的方式是简单的移动平均(SMA,simple moving average)。有一个大小为k的移动窗口,第n次数据包的RTT为:第n-k+1到第n次数据包的RTT的平均值SMA_n。通过简单换算可以得到第n次数据包的RTT为:SMA_n+1 = SMA_n + (RTT_n+1 - RTT_n-k+1)/k。

在实际的网络通信中,1s内发上百的数据包是正常的,而网络时延通常不会在1s内发生大的变化。这时,根据每个数据包做RTT计算是不合适的。需要根据特定数据包做RTT计算,这个特定的数据包可以是心跳包。例如,心跳包3s一次,移动窗口大小为10,可以估计最近30s的RTT。

加权移动平均(WMA,weighted moving average)

SMA可以认为是WMA的特例,其给每个数据值的权重都为1,在实际应用中,这显然是不合理的。

(实际每个数据的权重为1/k,权重之和为1;简化下,权重为1,之和为k)区别在于,不同应用实际有各自的容差,即使权重为1不符合应用实际,但这在容差内是可接受的。在不能接受时,我们需要给每个数据值不同的权重。最为理想的情况当然是给根据数据的特点分配不同的权重,也即自定义权重。而这恰恰是不可能的,因为我们用WMA的目的就是为了给下一个未知的数据一个合适的权重。理想情况下,窗口内的每个数据各自权重不同,计算出的RTT值恰好等于下一个数据的真实值。窗口移动后,为使得计算出的RTT值恰好等于再下要给数据的真实值,必须给窗口内每个数据新的权重。也即窗口移动前后,同样的数据权重不同,窗口内同一个位置的数据权重也会不相同。这在实际中做不到,通常会简化为窗口内同一位置的权重相同。窗口内所有位置权重之和为1,但窗口可以自定义变化。为适应变化,不会直接给每个位置计算出一个小于1的权重值,否则窗口一旦变化,比较难给每个位置重新分配权重并使得其累加和为1通常,会通过一个函数计算出每个位置的值,该位置的权重 = 该位置的值/所有位置的累加和。如此,通过间接的方式得到权重值。当窗口大小变化时,实现权重变化。为了使得权重尽可能贴合实际,需要选择一个与数据某些特征相符合的函数,或者权重模型。例如,在RTT计算中,数据的特征是越近的数据越有效,其权重应该更大,但与较远的数据不能差距过大,函数可以是指数、抛物线等。

指数移动加权平均(EWMA,exponential wighted moving average)

可以计算得到平滑RTT值,公式为 srtt_n = alpha * RTT_n + (1 - alpha) * srtt_n-1。初始值即为第一个数据的真实值。根据公式可以看出是将上次计算的结果与当前的结果做混合得到预测的结果。这个公式可以累积展开,EWMA_n和之前的EWMA_0到WEMA_n-1皆有关系,第n到第0个数据的权重依次是alpha,alpha*(1-alpha),alpha *(1-alpha)^2,......,alpha * (1-alpha)^n。可以看到所有权重都是指数的形式,alpha取不同值时,可以到不同的权重变化曲线。

通常,当指数累积到一定程度时,权重过小,数据就可以忽略不计。可以通过以下公式得到alpha值 alpha = 2/(N+1),其中N表示移动窗口大小。在TCP中,N取值为15,alpha = 0.125。

抖动jitter

抖动用于衡量网络时延的变化,即连续数据包的时延的不一致性。在实时视频或音频中,抖动会引起卡顿,一般WebRTC会专门针对抖动做优化。

参考

Exponentially Weighted Moving Average (EWMA) - Formula, Applications

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号