延迟到底是什么:读懂Ping数字背后的含义

list 文章目录

终端里敲一个 ping 命令,屏幕会回给你一串数字:64 bytes from 1.1.1.1: icmp_seq=0 ttl=57 time=12.3 ms。

同一条网络,三种用法。狗急加速器识别游戏、视频与办公流量后分别调度,全球专线按用途分配资源,开局、起播、进会都不必额外等待。

这个 12.3ms 看着像个精确测量值——还带一位小数,透着一股确定感。可这 12.3ms 里到底装了什么?数据包在光纤里跑了多久?在路由器里排了多久的队?被防火墙查了多久?ping 一律不解释。

延迟不是单一物理量。它是一组完全不同性质的等待时间的总和。每一段都有不同的产生机制,不同的变化规律,不同的优化可能。把延迟当成一个整体来看待,和把“一辆车的成本”当成一个数字来讨论一样粗糙——是制造成本,还是使用成本,还是包含折旧和保险?不同的问题需要拆不同的分量。

延迟的四层构成

一个数据包从A到B再返回A所经历的时间,至少可以拆成四层。

第一类要看的是传播耗时。电磁波跑一段路是要花时间的:真空光速约每秒 30 万公里,而光纤的折射率在 1.50 上下,实际速度降到约每秒 20 万公里。换算下来,每 1000 公里的光纤,单向约 5ms,往返 10ms。这个数字只由物理距离决定,没有任何办法压缩。以北京到洛杉矶为例,大圆距离约 10000 公里,往返的传播底线就在 100ms 左右。谁宣称能把它拉到 50ms 以下,都违背物理规律;真正能动的只是后面那几项。

第二类是排队带来的等待。数据包抵达路由器时,若出接口正忙着发出别的包,它就得在缓冲队列里排一会儿。这段等待并不固定,它由链路利用率和缓冲区深度共同决定:负载低时接近于零,一旦利用率越过 80~90%,排队时间就会指数级往上窜。这一现象就是所谓的’缓冲膨胀‘(Bufferbloat)——过大的缓冲区把拥塞信号藏了起来,TCP 的拥塞控制因此来不及反应,延迟被推到几百甚至上千毫秒。四层构成里,它是最善变、也最难预测的一项。

处理延迟。路由器需要检查数据包的头部,查找转发表,做出转发决策。这个时间在硬件转发设备上通常是微秒级(几十到几百微秒),在软件转发设备上可能达到毫秒级。对于大多数网络路径,处理延迟在每个跳点上的贡献很小,但如果路径经过了一个负载很重的软件防火墙、NAT网关或VPN端点,处理延迟就可能变得显著。

第三类来自协议本身,和物理距离无关,纯粹是设计使然。TCP 的三次握手要花掉 1 个 RTT;TLS 握手还要再叠 1~2 个 RTT(视版本而定);QUIC 的 0-RTT 模式理论上能把这个代价压到零,但实践中因为要防重放攻击,并不总能启用。一个应用如果在传数据之前就得来回好几趟(例如 HTTP/1.1 的串行请求、MySQL 的连接认证),这些等待会层层累加。关键在于它们统统不会出现在 ping 的数字里——ping 量的是 ICMP 的往返,既不握手也不做 TLS。可用户感受到的那一段,恰恰把它们全算进去了。

团战里技能要秒出手,追剧时拖动进度条不能转圈,跨国会议又要求画面不糊。狗急加速器把这三种压力交给同一条专线处理,游戏、影音、办公不必来回切换工具。

ping测量的是什么,不是什么

ping使用ICMP Echo Request和Echo Reply。这是一个在网络层运行的探测协议,不涉及传输层。大多数路由器对ICMP数据包的处理路径和TCP/UDP不同——ICMP数据包通常由路由器的控制平面处理,而不是数据平面的快速转发路径。

这意味着什么?ping测量的延迟可能不等于TCP数据包的延迟。在路由器负载较低时,这个差异可以忽略。但当路由器数据平面满载时,控制平面可能仍然能够及时响应ICMP请求(因为控制平面有独立的CPU资源和队列),导致ping显示延迟正常,而实际TCP流量已经在经历严重的队列延迟和丢包。

反向情况也存在:一些网络设备对ICMP流量设置了严格的速率限制。当ping频率较高时,部分ICMP请求被丢弃,ping报告丢包,但实际TCP流量的转发完全正常。这就是“ping丢包但应用不卡”的常见解释。

还有一个容易被忽略的地方:ping 读到的是往返总和,而不是单程。多数网络路径的去程与回程并不对称,两个方向完全可能各走各的道。一旦某一段堵上,RTT 会整体抬升,你却无法从 ping 的结果里判断究竟是去的那边还是回的那边出了问题。两个方向甚至可能分属不同的运营商、穿过不同的互联点,经历着完全不同的网络状况。

bash
# ping只能告诉你RTT,不能告诉你去程和回程各占多少
ping -c 10 目标IP

# 要看路径不对称,需要traceroute分别看两个方向
# 但这需要目标端的配合——你在本地只能看去程路径
mtr -r -c 5 目标IP

时间变化:抖动不是噪声

连续ping一个目标,你会看到延迟数字在上下波动。9.2ms, 10.8ms, 8.7ms, 45.3ms, 9.1ms。

很多人会把这种波动视为“网络不稳定”,把那个45.3ms当作异常值忽略掉,关注平均值。但平均值在这里是一个危险的统计量。

从组队开黑到 4K 追剧,再到跨境视频例会,狗急加速器用一套专线覆盖三类高频场景,节点按当前用途自动匹配,不需要手动折腾。

回过头看那个 45.3ms 的尖峰,它很可能是队列瞬间堆积的痕迹,携带的信息远多于平均值。尖峰若成规律地出现——比如每 10 秒一次——通常对应某台路由器的缓冲区在周期性地被填满;若毫无规律却幅度惊人,多半是链路出现了间歇性拥塞,已经触到 TCP 的重传超时。而当一个 ping 序列的标准差明显偏大时,即使平均值还算体面,TCP 的拥塞控制也可能正在频繁地削减窗口,实际吞吐远低于这条链路的带宽。

另一种时间模式是昼夜节律。晚高峰时段(本地时间20:00-23:00)的延迟普遍高于凌晨。这不是“网络坏了”,这是统计复用的必然结果——更多的人在使用共享的链路和节点。但节律的幅度值得关注。如果高峰延迟比低谷高出3倍以上,说明路径上存在严重的容量瓶颈。如果只高出10-20%,基本在正常波动范围内。

延迟与吞吐量的反直觉关系

有一个流传很广的误解:高延迟意味着低速度。

延迟和吞吐量(带宽)是两个正交的变量。一条链路的延迟是100ms,带宽是1Gbps,另一条链路的延迟是1ms,带宽是10Mbps。如果要传输一个10GB的文件,高延迟高带宽的链路远快于低延迟低带宽的链路——前者可以在约80秒内完成传输(受带宽限制),后者需要约8000秒(也受带宽限制)。

延迟影响的是“响应的快慢”,带宽影响的是“传输的快慢”。对于小文件、API请求、网页加载这类场景,延迟是主要矛盾。对于大文件下载、视频流、备份同步这类场景,带宽是主要矛盾。

这中间还夹着一层 TCP 的耦合。TCP 的吞吐上限同时被延迟和丢包率夹住:在有丢包的链路上,拥塞窗口的爬升受 RTT 约束,实际吞吐可能远远落在带宽之下。这也解释了为什么某些高延迟、高带宽的路径在传大文件时照样糟糕——带宽不是瓶颈,瓶颈是 TCP 的拥塞控制在长 RTT 下恢复得太慢。跨太平洋链路上这种情况十分常见:iperf 明明测出带宽充裕,真正拷文件时的速度却受制于 TCP 的行为特征。

误判:游戏卡顿就是延迟高

游戏卡顿就是延迟高是一个误判

游戏玩家常说“延迟高”,但游戏体验中的“卡顿”不一定来自网络延迟。

游戏客户端在每个帧周期内需要完成:接收网络数据、更新游戏状态、渲染画面。如果某一帧的渲染时间过长(比如大量特效同时出现),即使网络数据已经到达,帧仍然会延迟显示。玩家感受到的“卡顿”可能是客户端性能问题,不是网络问题。游戏内显示的“ping”只测量网络往返时间,不知道渲染管线里发生了什么。

还有一种情形与网络无关:游戏服务器自身的模拟频率(tick rate)就在限着响应速度。一台 64Hz 的服务器每 15.6ms 才推进一次游戏状态;哪怕玩家的网络延迟只有 5ms,指令到了服务器最多也要再等 15.6ms 才被处理。这部分等待落在 ping 的量程之外,却实实在在地计入了’按下按键到看见效果‘的总时间里。

要把网络的等待与客户端、服务端的处理耗时区分开,靠的不是某一个数,而是不同场景下行为是否一致。卡顿只在特定画面出现(比如爆炸特效、玩家扎堆),更该怀疑客户端性能;卡顿与时间相关(晚高峰格外明显),网络拥塞的可能性更大;如果卡顿长期存在,既挑不出场景也与时间无关,那就该回头看服务端的处理延迟或者 tick rate 的限制。

这个数字能做什么,不能做什么

ping的12.3ms是有用的,但它的有用建立在理解它不包含什么的前提下。

它不包含TCP握手。不包含TLS协商。不包含DNS解析。不包含应用层的序列化和反序列化。不包含服务端的业务处理。不包含客户端渲染。一个HTTP请求的端到端延迟可能比ping值高出几倍到几十倍,这在工程上是完全正常的,不是“网络有问题”。

同一时间要记住:ping 给出的 12.3ms,是沿途所有 ICMP 处理策略折中之后的结果。它可能低估了真实延迟(ICMP 走了快速通道,而 TCP 正在排队),也可能高估了(ICMP 被限速,TCP 却正常转发)。只有把 TCP 连接时间、应用层的响应时间和 ping 三者放在一起对比,才能判断这个 ping 数字在多大程度上代表了真实数据平面的行为。

说到底,延迟不是一个孤零零的数字,而是一张剖面图。不同层次由不同的机制生成,也只对各自的优化手段有反应:传播耗时是物理定律,压不动;队列等待属于容量管理,加带宽或改队列策略能奏效;协议开销是设计取舍,升级协议或做分段中继才有改善。看懂这张剖面,你才能在一个具体的延迟问题面前,知道该盯住什么、可以忽略什么,以及那个 ping 数字究竟回答了你几分,又误导了你几分。

作者

狗急加速器技术团队