时延相关指标

时延

时延(delay 或 latency)是指数据(由一个或多个分组、甚至是一个比特构成)从网络的一端传送到另一端所耗费的时间,也称为延迟或者迟延。数据可由一个或多个分组、甚至是一个比特构成。

网路中的时延由发送时延、传播时延、排队时延以及处理时延这四部分组成。

举例说明:

主机 A 和 主机 B 通过一台路由器进行互联,共有两段链路。

主机 A 给 主机 B 发送一个分组,则从主机A发送该分组开始,到主机 B 接收到完整的该分组为止,需要经过两个发送时延,两个传播时延,一个排队时延以一个处理时延。

注:各种时延之间没有相互关系,他们的大小有其各自的影响因素

发送时延

发送时延是主机或路由器发送分组所耗费的时间,也就是从发送分组的第一个比特开始,到该分组的最后一个比特发送完毕为止所耗费的时间。

发送时延的计算公式如下:

$$
发送时延 = \frac{分组长度(b)}{发送速率(b/s)}
$$

在举例说明中有两个发送时延:

  • 一个是主机A 将分组发送给路由器所耗费的时间
  • 另一个是路由器将分组转发出去所耗费的时间

传播时延

传播时延是电磁波在链路(传播介质)上传播一定的距离所耗费的时间。

传播时延的计算公式如下:

$$
传播时延=\frac{链路长度(m)}{电磁波在链路上的传播速率(m/s)}
$$

在举例说明中有两个传播时延:

  • 一个是分组的最后一个比特的信号从哪个主机A传播到路由器所耗费的时间
  • 另一个是该分组的最后一个比特的信号从路由器传播到主机B所耗费的时间

电磁波在链路上的传播速率主要有以下三种:

  • 电磁波在自由空间中的传播速率为 3 * 10^8 m/s
  • 电磁波在铜线电缆中的传播速率为 2.3 * 10^8 m/s
  • 电磁波在光纤中的传播速率为 2 * 10^8 m/s

注意:
光纤作为传输介质之所以快,并不是因为光在光纤中传播的速率快,实际上光在光纤中的传播速率还要略低于光在铜线中的传输速率,它们都是亚光速的的,而电磁波在自由空间的电磁速率是就是光速即 3 * 10^8 m/s
光纤网络速度快的根本原因在于,光纤的带宽很大,也就是所能承载的最高数据传输速率很大,简单来说,就是单位时间内可传送更多的比特。

排队时延

当分组进入路由器后,会在路由器的输入队列中排队缓存并等待处理。

在路由器确定了分组的转发接口后,分组会在输出队列中排队缓存并等待转发。

分组在路由器的输入队列和输出队列中排队缓存所耗费的时间就是排队时延。

在分组从源主机传送到目的主机的过程中,分组往往要经过多个路由器的转发。

分组在每个路由器上产生的排队时延的长短,往往取决于网络当时的通信量和个路由器的自身性能。

由于网络的通信量随时间变化会很大,各路由器的性能也可能并不完全相同,因此排队时延一般无法用一个简单的公式进行计算。

另外,当网络通信量很大时,可能会造成路由器的队列溢出,使分组丢失,这相当于排队时延无穷大。

处理时延

路由器从自己的输入队列中取出排队缓存并等待处理的分组后,会进行一系列处理工作。

例如:检查分组的首部码是否误码、提取分组分组首部中的目的地址、为分组查找相应的转发接口以及修改分组首部中的部分内容(例如生存时间)等。

路由器对分组进行这一系列的处理工作所耗费的时间就是处理时延。

与排队时延类似,处理时延一般也无法用一个简单的公式进行计算。

【练习1】

在下面所示的采用 “存储-转发” 方式的分组交换网中,所有链路的数据传输速率为 100Mbps,分组大小为 1000B,其中分组头大小为 20B。

若主机 H1 向主机 H2 发送一个大小为 980,000B的文件,则在不考虑分组拆装时间和传播时延的情况下,从 H1 发送到 H2 接收完为止,需要的时间至少是多少秒?

解析

计算公式:

需要的最小时长 = 所有分组的发送时延 + 1个分组的发送时延 * 2

$$

\frac{1000B}{100Mb/s}
\times
\frac{980000B}{1000B-20B}
+
\frac{100B}{100Mb/s}\times2
=80.16ms
$$

  1. 将数据量单位 B 转换为基本单位 b

$$

\frac{1000 \times 8}{100 * 10^{6}/s}
\times
\frac{980000 \times 8}{980 \times 8}
+
\frac{100 \times 8}{100 \times 10^{6}/s}\times2
$$

  1. 计算单位换算

$$

\frac{8000}{100000000/s}
\times
\frac{7840000}{7840}
+
\frac{8000}{100000000/s}\times2
$$

  1. 计算公式
    $$
    =
    \frac{8}{100000/s}
    \times
    1000

\frac{8}{100000/s}\times2
$$

  1. 最终计算
1
2
3
4
5
6
0.08s + 0.00008s * 2  
0.08s + 0.00016s
// 秒转毫秒
0.08 * 1000 + 0.00016 * 1000
80ms + 0.16ms
80.16ms

【练习2】

数据块长度为 100MB,信道带宽为 1Mb/s, 传输距离为 1000KM,传输介质为光纤,计算发送时延和传播时延。

【解析】

发送时延 计算公式:

$$
发送时延 = \frac{分组长度(b)}{发送速率(b/s)}
$$

计算过程:

$$
=\frac{100 \times 2^{20} \times 8(b)}{10^{6}(b/s)}=838.8608(s)
$$

详细过程:

1
2
3
4
5
6
// 分组长度:100Mb -> b  
100 x 2^20 (B)
104857600 * 8 (b)

// 发送速率 Mb/s -> b/s
1 * 10^6 (b/s)

传播时延 计算公式:

$$
传播时延 = \frac{信道长度(m)}{信号传播速率(m/s)}
$$

计算过程:

$$
=\frac{1000 * 10^{3}(m)}{2 * 10^8(m/s)}
=0.005(s)
$$

详细过程:

1
2
3
4
5
// 信道长度: 1000km -> m  
1000 * 10^3 (m)

// 信号传播速率: 光纤
2 * 10^8 (m/s)

【练习3】

数据块长度为 1B,信道带宽为 1Mb/s, 传输距离为 1000KM,传输介质为光纤,计算发送时延和传播时延。

【解析】

发送时延计算:

$$
=\frac{1 \times 8(b)}{10^{6}(b/s)}
=8 \times 10^{-6}(s)
$$

传播时延计算:

$$
=\frac{1000 * 10^{3}(m)}{2*10^{8}(m/s)}
= 0.005(s)
$$

结论:
根据 练习2 与 练习3 的结果可得出以下结论:

在不考虑排队时延和处理时延的情况下,总时延中是发送时延占主导还是传播时延占主导,应该具体问题具体分析,而不能想当然的认为是发送时延占主导或传播时延占主导。

【练习4】

假设在某段链路上传输某个 10MB 的数据块,链路带宽为 10Mb/s, 信号传播速率为 20000km/s, 链路长度为 1000km, 则数据块的发送时延是多少?

解析

公式计算:

$$
=\frac{ 10 \times 2^{20} \times 8(b) }{10 \times 10^6(b/s)}
= 8.388608(s)
\approx 8.4(s)
$$

快速约算:

$$
=\frac{10MB}{10Mb/s}
=\frac{10 * 8b}{10b/s}
=\frac{8b}{b/s}
=8s
$$

【练习5】

假设在某段链路上传输某个 1B 的数据块,链路带宽为 1Mb/s, 信号传播速率为 20000km/s, 链路长度为 1000km, 则数据块的发送时延是多少?

【解析】

公式计算:

$$
=\frac{1B}{1Mb/s}
=\frac{1 * 8b}{1 * 10^6 b/s}
=\frac{8b}{10^6 b/s}
=0.000008s * 1000
=0.008ms * 1000
=8us
$$

时延带宽积

时延带宽积是传播时延和带宽的乘积。

时延带宽积计算公式如下:

$$
时延带宽积 = 传播时延(s) \times 带宽(b/s)
$$

我们可以将链路看做一个圆柱形的管道,管道的长度是链路的传播时延(即以时间作为单位来表示链路长度),管道的横截面积是链路的带宽,因此,时延带宽积就相当于这个管道的容积,表示这样的链路可以容纳的比特数量。

【举例说明】

主机A 和主机B 之间采用光纤链路,链路长度为 1km, 链路带宽为 1Gb/s, 光在光纤中的传播速率为 2x10^8m/s , 主机A 给 主机B 连续发送数据。

根据时延带宽积公式可算出:

$$
时延带宽积 = \frac{1km}{2 \times 10^{8}m/s} \times 1Gb/s = 5000b
$$

本例表明,若发送端连续发送数据,则在发送的第一个比特即将到达终点是,发送端已发送了时延带宽积个比特(在本例中是 5000b), 而这些比特都正在链路上向前传播,因此链路的时延带宽积也称为以比特为单位的链路长度。

往返时间

往返时间(Round-Trip Time, RTT)是指从发送端发送数据分组开始,到发送端收到接收端发来的响应确认分组为止,总共耗费的时间。

往返时延计算公式:

$$
= 传播时延(s) \times 2
$$

【举例说明】

在下图中主机A 与 主机B 通过多个异构型的网络和多个路由器进行互联。

在以太网中的主机A给无线局域网中的主机B发送数据分组,主机B收到数据分组后给主机A发送相应的确认分组。

从主机A送数据分组开始,到主机A 收到主机B 发来的响应确认分组为止,这就是一次交互的往返时间。

**注意:**卫星链路带来的传播时延比较大,这是因为卫星链路的通信距离一般都比较远,例如地球同步卫星与地球的距离大约 36000km, 信号往返的传播时延为:

$$
往返传播时延 = \frac{36000km}{3 \times 10^{8}m/s} \times 2 = 240ms
$$

通过 ping 命令测量往返时延

1. B 站往返时延

2.百度往返时延

3. Stackoverflow 往返时延


时延相关指标
https://blog.pangcy.cn/2022/11/08/编程素养相关/计算机网络/时延相关指标/
作者
子洋
发布于
2022年11月8日
许可协议