什么是延迟:拆解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当作异常值忽略掉,关注平均值。但平均值在这里是一个危险的统计量。

这样来看那个 45.3ms 的尖峰,它更像是队列瞬间堆高的痕迹,透露的信息比平均值多得多。尖峰若有规律地来——比如每隔 10 秒一次——往往说明某台路由器的缓冲区在被周期性填满;若无踪可循却幅度惊人,可能是链路出现间歇性拥塞,已经踩到 TCP 的重传超时;而整段序列的标准差偏大时,即便平均值还算体面,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、抖动、丢包三者的关系,你已经比多数人更清楚问题出在哪。接下来不必每次手动测量——那属于重复性劳动。

狗急加速器客户端会把这些信息直接列在节点列表里,配合自动选路,让你可以跳过测量环节,一键进入可用的状态。

隐私视角:这些数据会去哪

测量本身也会产生数据:你去过哪些地址、请求了哪些域名、连了多久。这些信息如果被人系统性地留存,比一次两次的延迟更值得担心。

所以在挑选工具时,与其纠结功能表上的差异,不如认真看看它的日志政策写了什么、有没有明确承诺。

狗急加速器在这一点上的做法是不记录浏览内容、DNS 查询与连接日志,而且这是系统架构层面的设置,不是靠自觉执行。这是我们更愿意强调的部分。