网络延迟的统计方法
为了解决目前我们统计网络延迟的问题,我们需要一个量化的测试方法,来测试我们每个包的延迟情况。
延迟种类
延迟分成计算机网络中的四种延迟分别是:节点处理延迟 、排队延迟、发送延迟、传播延迟。
1、节点处理延迟 :
路由器A检查该分组的头部,以确定把它导向哪个链路所需的时间。
节点处理延迟还可能包含其他因素,如在该分组的数据位从上游节点往路由器A的传送过程中,路由器A 可能在同步检查其中是否有位错发生,这种检查位错所造成的延迟。高速路由器中的处理延迟一般在微秒数量级或以下。
2、排队延迟:
排队延迟是指分组在所排队列中等待被发送到出链路的时间;某个特定分组的排队延迟取决于等待通过同一个出链路转发出去的分组的数目。
分组的排队延迟取决于相应队列的分组到达强度和分布特性。排队延迟是分组交换网中的主要延迟,它指的是PDU(协议数据单元) 在传输路径上每交换一次所引起的缓冲延迟的集合。若分组交换临时过载, 每一个 PDU 的目的输出端口上可能有许多分组排队。
队列中位于 PDU 前的每一个分组都会产生一个等于传送延迟的附加延迟。在先进先出( FIFO) 队列机制的交换中,新到达的分组的排队延迟等于已在该输出端口上排队的所有分组传送延迟的总和。所以排队延迟既与队列前面的分组数量有关,也与输出端口的传送速度有关。
作为主要延迟的排队延迟受当前网络负载影响, 它也是分组交换网中延迟变化的主要因素。由 Internet 主干网上每个路由器都有大 量的数据包排队,排队延迟也成为Internet上的主要延迟。如若经过 10个路由器,每个路由器平均有10个IP数据包排队,在这条路径上的排队延迟能够达到上百毫秒。
3、发送延迟:
是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间,发送时延 = 数据帧长度(b) / 信道带宽(b/s)。
L/R,实际的发送延迟一般在微秒数量级或以下。
4、传播延迟 :
是电磁波在信道中传播一定的距离需要花费的时间,传播时延 = 信道长度(m) / 电磁波在信道上的传播速率(m/s)。
一般的统计方法
简单的统计方法是通过ping一个网址来计算网络延迟,该方法存在两个问题,第一,ping的结果不能真实反映锁需要数据的包的真实情况,如果ping的速度过快,则会影响到数据的传输效率,ping太慢,又不能反映时时刻刻的情况;第二,无法对每个数据包进行量化统计。
第二个方式是采用心跳包的方式吗,这个和ping的方式大同小异,没有什么区别。
最终采取的统计方法
由于延迟分为4种延迟,最特殊的延迟为排队延迟,其跟发送的数据量相关联,而其他的延迟主要跟链路有关(单个包的字节数相同),那么就可以将延迟分成两个部分来进行处理。
为了统计A机器发送给B机器的每个包的网络延迟情况,我们首先将A机器的包打印一个A机器的时间戳,B机器接收到后,打印B的时间戳,得到一个包的发送和接受时间。
但是这两个时间戳为不同机器的时间记录的时间,那么这两个时间一定是没有对齐的,我们首先将接收时间-发送时间,得到伪延迟,然后用柱状图查看延迟分布情况。
发现延迟随着时间增加而定向增长,经过推测是由于晶振差导致的延迟会朝一个特定的方向增长(减少)。也就是该延迟会呈现一个一元一次函数形式,我们需要做线性回归y=kx+b,将初始误差b和增长误差k进行排除,得到计算后的延迟情况。
但是这个问题在于,机器A到B存在一个最低穿透延迟(非排队延迟),关于这个延迟,我们采用心跳包来进行测试最低穿透延迟,然后将这个值加到前面计算的延迟上,从而得到初步的每个包的传输延迟情况。