目录
科普原理

延迟、丢包、带宽:为什么测速很快,网页却打开很慢?

测速显示几百兆,网页却要转好几秒?因为测速测的是水管有多粗,而打开网页更看水要多久才流到、路上漏了多少。本文用水管打比方讲清带宽、延迟和丢包,配时序图数清打开一个网页要等几个来回,再给出估算表和自测方法。

最后更新:

测速测的是「水管有多粗」,打开网页更看「水要多久才流到」和「路上漏了多少」。带宽决定一次能传多少数据,延迟决定每一个来回要等多久,丢包决定有多少数据要重新发。打开一个网页要先后等十个左右的来回,每个来回都要付一次延迟;而网页本身只有几 MB,带宽再大也只能节省很少的时间。所以测速几百兆、网页却转圈,通常不是带宽不够,而是延迟高或者有丢包。

插图:粗水管哗哗灌满大桶、细水管只滴下一点;一根从远处水塔绕过来的长水管,有人拿着杯子和秒表等第一滴水;水管破了几处在漏水,水管工在修补;粗水管把水池灌满;两个人隔着长长的小路来回传递小杯子;房子旁边的短水管同时开着好几个水龙头,表盘指针指向高处
  1. ① 水管有多粗带宽:一次能传多少数据
  2. ② 水要多久才流到延迟:每个来回要等多久
  3. ③ 路上漏了多少丢包:漏掉的要重新送
  4. ④ 灌满一池水下载、看视频,主要看带宽
  5. ⑤ 小杯子来回传打开网页,主要看延迟
  6. ⑥ 门口开很多龙头测速:近处、多条连接一起测

用水管来理解三个指标

把网络连接想象成一根从远方水塔接到你家的水管:

水管网络指标单位影响什么
水管有多粗带宽Mbps(每秒兆比特)一次能传多少数据:下载大文件、看高清视频
水要多久才流到延迟毫秒(ms),通常指一个来回每一次「请求—回应」要等多久:打开网页、游戏、视频通话
水流忽快忽慢抖动毫秒延迟稳不稳定:游戏、视频通话、直播
路上漏了多少丢包百分比有多少数据要重新发,丢包还会让 TCP 主动降速

这几个指标彼此独立:水管可以很粗但很长(带宽大、延迟高),也可以很短却到处漏水(延迟低、丢包多)。只看其中一个数字,判断不了体验好不好。

打开一个网页,要等几个来回?

打开网页不是「一次把整个页面要过来」,而是一连串必须按顺序完成的来回。下面的时序图展开了打开一个 HTTPS 网页的前几步:

浏览器 DNS 服务器 网站 来回 ①:查地址 这个域名的 IP 是多少? 1 返回 IP 地址 2 来回 ②:建立连接(TCP) 请求建立连接 3 同意连接 4 来回 ③:加密握手(TLS) 协商加密方式 5 证书与密钥参数 6 来回 ④:取网页 请求网页 7 返回 HTML 8 读 HTML,发现还要样式和图片 9 来回 ⑤ 起:取更多资源 请求样式、脚本、图片 10 返回资源 11
实线是发出的请求,虚线是收到的回应。每一组「请求—回应」就是一个来回,要完整地等一次延迟;后一组要等前一组完成才能开始。
往返发生了什么为什么必须等
① 查地址浏览器向 DNS 服务器询问域名对应的 IP不知道 IP 就无法连接
② 建立连接TCP 握手,和网站约定开始通信对方同意后才能发数据
③ 加密握手TLS 协商加密方式、验证证书加密约定好之前不能发送内容
④ 取网页请求网页,拿到 HTML读完 HTML 才知道还需要什么
⑤ 起 取更多资源根据 HTML 再去请求样式、脚本、图片,样式里又引用了字体……后一个资源要等前一个读到才知道

光是拿到第一段 HTML 就要 4 个来回;网页上的样式、脚本、图片常常放在其他域名上,每换一个域名又要重新查地址、握手。加起来,一个普通网页往往要先后等十个左右的来回。HTTP/2、HTTP/3(QUIC)会复用连接、合并握手,能省掉几个来回,但省不掉全部(协议细节见 常见网络协议)。

为什么带宽帮不上忙:估算一下

可以把打开网页的时间粗略拆成两部分:

打开时间 ≈ 来回次数 × 每个来回的延迟 + 网页大小 ÷ 带宽

按一个 3 MB 的网页、10 个来回估算:

每个来回的延迟带宽 10 Mbps带宽 100 Mbps带宽 1000 Mbps
20 毫秒(本地网站)约 2.6 秒约 0.44 秒约 0.22 秒
200 毫秒(其他地区)约 4.4 秒约 2.2 秒约 2.0 秒

看第二行:延迟 200 毫秒时,带宽从 100M 提到 1000M,只快了零点二秒,因为大部分时间(2 秒)都花在等来回上;反过来,同样是 100M 带宽,延迟从 200 毫秒降到 20 毫秒,打开时间从 2.2 秒变成 0.44 秒。带宽很低时它才是瓶颈(第一列),一旦够用,再加带宽对打开网页几乎没有作用,降低延迟才有用。

丢包会让情况更糟:每丢一个包,至少要多等一个来回才能补上,TCP 还会因此主动降速,延迟越高恢复越慢(见 为什么晚上网速会变慢)。

测速为什么总是很快

测速软件的结果「好看」,有几个原因:

  • 测速服务器离你很近:默认会选最近的测速点,往返只有几毫秒,测的基本是你家到运营商这一小段,不经过跨地区线路;
  • 同时开很多条连接:测速一般会并行开 8 到 16 条连接一起下载,个别连接因为丢包降速,其他连接能补上,把丢包的影响平均掉了;
  • 测的就是带宽:测速给出的主要数字是「水管有多粗」,延迟只是附带显示,而且是到那个很近的测速点的延迟。

而打开一个其他地区的网页,走的是跨地区线路,延迟高、晚高峰还可能有丢包,每条连接都要从慢速起步。所以「测速几百兆、网页打不开」并不矛盾,两者测的是不同的东西。

不同用途,看重的指标不同

用途最看重说明
打开网页、刷社交 App延迟大量小请求,一个接一个地等
看视频(点播)带宽播放器会提前缓冲,延迟高一点只是起播慢一点
视频通话、语音、直播互动延迟、抖动、丢包实时画面没法缓冲,丢了就是卡顿或花屏
网络游戏延迟、抖动数据量很小,但每个操作都要尽快送达
下载大文件、系统更新带宽,其次是丢包时间主要花在传输上,丢包会让 TCP 降速
远程桌面、远程开发延迟每一次键盘、鼠标操作都要等一个来回

穿山甲显示的「延迟」是怎么测的

App 里有两处显示延迟,测的是不同的东西:

  • 节点列表里的延迟:App 直接和每个节点服务器做几次连接握手、取最快的一次,反映的是你的设备到节点服务器这一段的往返时间,用来比较哪个节点离你更近、线路更好。「智能选择」就是按它挑延迟最低的节点(见 连接与切换线路)。
  • 连接后,连接页上的延迟:经过加密线路,实际请求一个只返回空内容的测试网址,测从发出请求到收到回应的时间。它走的是你 → 节点 → 网站的完整路径,所以通常比节点列表里的数字高,但更接近你打开网页时真实要等的时间。

两个数字都不是越接近 0 越好那么简单:离你物理距离更远的节点延迟天然更高,但如果你要访问的网站就在那个地区,走过去之后剩下的路反而更短。

自己动手测一测

  • 测延迟和丢包:在终端里执行 ping -c 20 example.com(Windows 用 ping -n 20 example.com),看每一行的 time(延迟)、各行之间差多少(抖动),以及最后统计的 packet loss(丢包率)。注意很多服务器会屏蔽 ping,ping 不通不代表网页打不开。
  • 看网页到底在等什么:在浏览器里按 F12 打开开发者工具,切到「网络(Network)」再刷新页面,看每个请求的时间条。如果大部分时间花在「等待服务器响应」上,说明慢在延迟;如果时间花在「内容下载」上,才是带宽不够。
  • 测跨地区的带宽:测速时手动选一个其他地区的测速点,而不是默认最近的,结果更接近访问那个地区网站时的真实情况。
  • 换个时间再测:同样的测试在白天、晚上各做一次,如果晚上延迟和丢包明显变高,就是线路晚高峰拥堵(见 为什么晚上网速会变慢)。

相关阅读

常见问题

延迟多少算正常?

大致参考:访问本地网站通常在 10–50 毫秒;访问其他地区的网站,100–250 毫秒都很常见。浏览网页时延迟在 200 毫秒以内体验还算流畅;玩对战类游戏最好在 80 毫秒以内,而且要稳定,忽高忽低(抖动)比稍高但稳定更影响体验。

我把宽带从 100M 升级到 1000M,网页会快很多吗?

打开网页基本不会。一个网页通常只有几 MB,100M 带宽传完只要零点几秒,大部分时间花在等一个个来回上。升级带宽对下载大文件、多人同时看 4K 视频才明显有帮助。

ping 不通,是不是网络断了?

不一定。很多网站和服务器出于安全考虑会屏蔽 ping,ping 不通但网页能打开很正常。判断网络是否连通,直接打开网页比 ping 更可靠。

为什么连接页显示的延迟,比节点列表里的高?

两个数字测的不是同一段。节点列表测的是你的设备到节点服务器的这一段;连接后显示的是经过加密线路、实际访问一个测试网址的往返时间,多走了节点到网站的那一段,所以通常更高,也更接近你打开网页时的真实等待时间。

还没有安装穿山甲?

支持 iPhone / iPad、Mac、Windows 与 Android。新用户注册即送 7 天会员体验。

下载客户端
← 全部文章