4、网络延迟与抖动:延迟的概念、RTT 测量、抖动定义、影响带宽的因素、延迟与带宽的关系

聊到网络性能,大家最关心的往往是带宽——「我家宽带是 1000M 的!」。但说实话,真正影响你刷网页、打游戏、看视频体验的,很多时候不是带宽,而是延迟和抖动。

我入行那会儿,有个项目让我印象特别深。客户抱怨说「视频会议卡得没法用」,我一看带宽,还有 200M 的空闲呢。后来一查,延迟高达 300ms,抖动更是离谱。说白了,水管再粗,水半天流不过来,也是白搭。

今天我们就来把这几个概念掰扯清楚。

延迟的概念

延迟,简单说就是数据从 A 点跑到 B 点所花的时间。单位通常是毫秒(ms)。

你想想看,你在浏览器里点了一下,到服务器收到这个请求,中间经历了什么?

  • 处理延迟:你的电脑、路由器、交换机处理数据包的时间
  • 排队延迟:数据包在路由器队列里等着被转发的时间
  • 传输延迟:把数据比特放到链路上的时间,跟带宽有关
  • 传播延迟:信号在物理介质上跑的时间,跟距离有关

嗯,这里要注意:传播延迟是物理定律决定的,光速再快,从北京到纽约也得几十毫秒。这个你没法优化,除非你把服务器搬到用户隔壁。

核心观点:延迟不是单一数值,它是多个环节的累加。排查问题时,要逐段分析。

RTT 测量

RTT,全称 Round-Trip Time,往返时间。就是你的数据包发出去,到收到对方的确认,这一来一回的总时间。

我个人习惯用 ping 命令来测 RTT。简单粗暴,但够用。

ping -c 10 8.8.8.8

输出结果里,你会看到类似这样的信息:

64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.8 ms
...
--- 8.8.8.8 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss
rtt min/avg/max/mdev = 11.5/12.1/13.2/0.5 ms

这里 avg 就是平均 RTT,mdev 是均差,其实就是抖动的雏形。

我在项目中遇到过一个问题:用 ping 测 RTT 只有 5ms,但实际应用却卡得要死。后来发现是防火墙把 ICMP 包优先处理了,真正的业务流量却在排队。所以,RTT 测量要结合业务流量一起看,不能只看 ping。

小技巧:用 mtr 命令可以同时看每一跳的延迟和丢包,比 ping 更直观。

抖动定义

抖动,英文叫 Jitter。说白了,就是延迟的变化量。

举个例子:

  • 第 1 个包延迟 10ms
  • 第 2 个包延迟 20ms
  • 第 3 个包延迟 15ms
  • 第 4 个包延迟 100ms

你看,延迟忽高忽低,这就是抖动。抖动对实时应用(比如语音、视频、在线游戏)影响特别大。

为什么?因为接收端需要把数据包按顺序播放。如果包来得不均匀,要么卡顿,要么声音变调。我曾经帮一个直播平台排查过问题,他们的带宽足够,延迟也不高,但观众就是抱怨画面一卡一卡的。最后发现是某个路由器的队列调度策略有问题,导致抖动高达 50ms。

注意:抖动比高延迟更可怕。高延迟你可以忍受,但抖动会让你觉得网络「不稳定」。很多用户说的「卡」,其实是抖动在作怪。

影响带宽的因素

带宽,就是单位时间内能传输的数据量。但实际能跑多少,受很多因素制约。

因素 说明 我踩过的坑
物理介质 光纤、铜缆、无线,上限不同 有次客户用 Cat5 线跑千兆,死活上不去
协议开销 TCP 头、IP 头、以太网头,占带宽 小包场景下,有效吞吐量可能只有标称的一半
拥塞控制 TCP 的慢启动、拥塞避免 跨洋链路,带宽再大,TCP 窗口也打不开
应用层限制 服务器处理能力、磁盘 IO 带宽没跑满,CPU 先 100% 了

说白了,标称带宽是理想值。实际能跑多少,得看整条链路最弱的那一环。

延迟与带宽的关系

很多人以为延迟和带宽是独立的。其实不然,它们之间有个经典公式:

带宽延迟积(BDP) = 带宽 × RTT

这个值代表「在任意时刻,网络中最多能有多少数据在传输」。如果 BDP 很大,而你的 TCP 窗口太小,那带宽就浪费了。

举个例子:

  • 带宽 100Mbps,RTT 100ms
  • BDP = 100Mbps × 0.1s = 10Mb = 1.25MB
  • 如果 TCP 窗口只有 64KB,那实际吞吐量最多也就 5Mbps 左右

你看,延迟高了,带宽再大也跑不满。这就是为什么跨洋传输时,需要调大 TCP 窗口,或者用多连接、HTTP/2 等技巧来弥补。

一句话总结:延迟决定了你能用多少带宽。低延迟 + 高带宽 = 爽。高延迟 + 高带宽 = 浪费。

知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以看到延迟、抖动、带宽三者如何相互影响。

网络延迟与抖动知识体系 网络性能核心指标 延迟 (Latency) 处理延迟 排队延迟 传输延迟 传播延迟 抖动 (Jitter) 延迟的变化量 影响实时应用 队列调度问题 带宽 (Bandwidth) 物理介质限制 协议开销 拥塞控制 BDP = 带宽 × RTT

这张图里,延迟、抖动、带宽是三个核心指标。它们不是孤立的,延迟高了会限制带宽的利用率,抖动大了会让用户体验变差。而 BDP 公式,就是连接延迟和带宽的那座桥。

好了,这一章的内容就到这里。记住一句话:测带宽看容量,测延迟看速度,测抖动看稳定。三者缺一不可。