目录
科普原理

为什么晚上网速会变慢?晚高峰线路拥堵的原理

白天打开海外网站很快,一到晚上就转圈、视频降画质?问题通常不在你家的宽带,而在大家共用的跨地区线路。本文用晚高峰的跨海大桥打比方,讲清排队、丢包和 TCP 降速,配时序图和估算表,最后说明你能做什么。

最后更新:

晚上网速变慢,通常不是你家宽带的问题,而是大家共用的「跨地区线路」被挤满了。白天用的人少,线路有富余;晚上八点到十二点,大家同时下班回家看视频、玩游戏,需求超过了线路容量。路由器来不及转发,数据包开始排队、排满了就被丢弃;而网页、视频依赖的 TCP 协议一旦发现丢包,就会主动降速,跨地区的距离又越远、恢复得越慢。所以你会感觉「白天秒开,晚上转圈」。

插图:傍晚的小镇里家家户户都在上网,货车挤满了通往对岸的大桥,桥头停车场排满、交警挥旗劝返新来的车,对岸调度员拿着秒表放慢发车,上方另一座快速桥车很少,镇里的本地小路上骑手畅通无阻地送货
  1. ① 大家同时上网晚上看视频、刷网页的人一起上线
  2. ② 车道固定的大桥共享的跨地区线路被挤满
  3. ③ 停车场排满、劝返路由器缓冲区满了,开始丢包
  4. ④ 调度员放慢发车TCP 发现丢包,发送量减半
  5. ⑤ 车少的快速桥优化线路,晚高峰也有余量
  6. ⑥ 本地小路畅通本地网站直连,不受影响

用一座跨海大桥来理解

把跨地区的网络线路想象成一座连接两岸的大桥,网上传输的数据就是桥上来回的货车:

生活中的晚高峰网络里的对应
小镇居民下班回家,同时网购、寄件晚上大家同时看视频、刷网页
连接两岸的大桥,车道数是固定的跨地区线路,带宽是固定的
桥头的停车场排满了,交警劝返新来的车路由器的缓冲区排满,新数据包被丢弃
对岸的调度员看到车没送到,放慢发车节奏发送方发现丢包,TCP 主动降低发送速度
另一座收费更贵、车更少的快速桥运营商的优化线路,晚高峰也留有余量
小镇里的本地小路,畅通无阻本地网站直连,不经过跨地区线路

你家门口的路再宽(千兆宽带),也只能决定货车多快开到桥头;桥上堵不堵,取决于这座桥有多少车道、此刻有多少车。

为什么偏偏是晚上:共享的带宽

你买的宽带,保证的只是从你家到运营商机房的这一段。再往外,所有用户的流量会汇聚到少数几条跨地区的线路上,这些线路是共享的。

运营商不会按「所有人同时满速使用」来建设线路,那样成本太高、平时大部分时间闲置。线路通常按日常的平均用量、再留一些余量来规划。白天大家在上班上学,线路有富余;到了晚上,看视频、玩游戏、下载更新的人同时上线,需求可能是白天的好几倍,一旦超过线路容量,多出来的数据就只能排队。

这也是为什么同样的网站,凌晨打开往往比晚上九点快得多:线路还是那条线路,只是车少了。

排队与丢包:路由器忙不过来时会发生什么

每台路由器都有一块缓冲区,用来临时存放来不及转发的数据包,就像桥头的停车场:

  1. 刚开始拥堵:数据包在缓冲区里排队,等前面的发出去再走。你感觉到的是延迟变高,网页打开要多等一会儿,游戏开始卡顿。
  2. 缓冲区排满:新到的数据包没地方放,路由器只能直接丢弃它们,这就是丢包。丢掉的数据要由发送方重新发送,又要多等一个来回。

所以晚高峰的典型症状是两个一起出现:延迟升高、丢包增多。单看延迟,可能只是从 150 毫秒变成 250 毫秒;真正让速度掉下来的,是丢包。

TCP 降速:一点丢包,为什么速度掉这么多

网页、视频、下载用的大多是 TCP 协议(见 常见网络协议)。TCP 不会一开始就满速发送,而是边发边试探:每收到一轮「确认收到」,就把发送量加大一些;一旦发现丢包,就认为路上堵了,立刻把发送量减半,再慢慢往上加。这个机制叫拥塞控制,它的本意是让大家互相礼让、别把线路彻底堵死。

下面的时序图展开了一次晚高峰的传输过程:

网站服务器 拥堵的路由器 你的设备 起步:越发越快 先发 2 个数据包 1 确认收到 2 顺利,加倍发 4 个 3 晚高峰:路由器排满 继续加倍,发 8 个 4 缓冲区已满,丢弃一部分 5 只送到其中几个 6 反复确认:还缺这一个 7 发现丢包:降速 判断拥堵,发送量减半 8 重发丢失的数据包 9 从一半开始慢慢加 10
实线是数据,虚线是「确认收到」。中间一列是跨地区线路上拥堵的路由器;它排满之后丢掉的数据,要等服务器发现后重新发送。
步骤发生了什么
①–③ 起步服务器先发少量数据,收到确认后加倍发送,速度越来越快
④–⑥ 路由器排满发送量继续加大,跨地区线路上的路由器缓冲区排满,丢弃了一部分数据包,只有一部分送到
⑦ 发现缺包你的设备收到的数据中间缺了一段,反复确认「我还在等这一个」,服务器由此知道发生了丢包
⑧ 降速服务器判断线路拥堵,把发送量直接减半
⑨–⑩ 重发、慢慢恢复补发丢失的数据,再从一半的速度开始一点点往上加

关键在于恢复的快慢取决于来回一趟的时间:发送量每一轮才能加一点,而一轮就是一个往返。跨地区访问一个来回动辄一两百毫秒,比访问本地网站慢好几倍,所以同样的丢包,访问远方网站时速度掉得更多、回升得更慢。

用一个常用的估算公式可以感受一下数量级。单条 TCP 连接能达到的速度大约是:

速度 ≈ (每个数据包的大小 ÷ 往返时间) × 1.22 ÷ √丢包率

按每个包约 1460 字节估算:

往返时间丢包率 0.01%(线路空闲)丢包率 1%(晚高峰)
30 毫秒(本地网站)约 47 Mbps约 4.7 Mbps
180 毫秒(跨地区)约 7.9 Mbps约 0.8 Mbps

丢包率从万分之一升到百分之一,单条连接的速度会掉到原来的十分之一;再叠加跨地区的长往返时间,就从「够看高清视频」变成「网页都要转圈」。这只是粗略估算:较新的拥塞控制算法(例如 BBR)对丢包没这么敏感,浏览器也会同时开多条连接,实际情况会好一些,但晚上明显变慢的道理是一样的。

线路也分「普通」和「优化」

同样是跨地区访问,不同线路在晚高峰的表现差别很大:

  • 普通线路:价格低、用的人多,晚高峰最容易排满,丢包率可能到百分之几甚至更高;
  • 优化线路:运营商收费更高的线路,用户少、预留的余量大,晚高峰的延迟和丢包都稳定得多;
  • 绕路:有时数据包不是直接过去,而是先绕到别的地区再转过去,往返时间被拉长,拥堵的环节也更多。

你访问一个网站时走哪条线路,取决于你的运营商、网站(或加速服务器)所在的机房,以及它们之间怎么互联。这也是为什么「换一个节点」有时立竿见影:不同节点所在的机房,到你这里走的是不同的线路。

你能做什么

先判断慢在哪一段:同时打开一个本地网站和一个海外网站对比。

  • 本地网站也慢:问题在你自己的网络,和跨地区线路无关。检查 Wi-Fi 信号(离路由器近一点,或改用网线)、重启路由器,看看家里是否有人在大量下载或看高清直播。
  • 只有海外网站慢:是跨地区线路拥堵,可以这样做:
    • 换一个节点:不同地区的节点走不同的线路,晚高峰哪条更通畅不一定,可以都试试。延迟最低的节点不一定是晚上最快的,丢包也很关键;
    • 本地网站走直连:开启分流,让本地网站不经过加速服务器,既不受跨地区线路拥堵影响,也不占用加速线路(见 分流是什么);
    • 大文件错峰下载:系统更新、大游戏、网盘同步等可以放到凌晨或白天,晚上留给对延迟敏感的网页和视频;
    • 视频允许自动画质:晚高峰时让播放器自动调整清晰度,比强制最高画质更不容易卡顿。

穿山甲如何应对晚高峰

  • 智能选择节点:默认的「智能选择」会根据你当前的网络,自动挑选延迟最低的节点;节点出现异常时会自动切换到其他可用节点(见 连接与切换线路);
  • 真实测量延迟:连接页显示的延迟,是经过加密线路实际访问测试地址测得的往返时间,反映的是你当下真实走的那条线路,而不是到服务器的直线距离;
  • 智能分流:本地网站默认直连,不绕到海外,晚高峰时本地网站的速度不受影响;
  • 公开实测数据:我们在多家运营商的家庭宽带上每 15 分钟实测一次各条线路的连通情况和延迟,结果公开在 服务状态 页面。晚上变慢时可以去看一眼,判断是整条线路都受影响,还是只有你这边的网络有问题。

如果晚上持续明显变慢,可以先换一个节点试试;问题一直存在的话,可以通过 连不上怎么办 中的方法反馈,附上时间段和所用节点,方便我们排查线路。

相关阅读

常见问题

我家宽带是千兆的,为什么晚上访问海外网站还是慢?

宽带的「千兆」只是从你家到运营商机房这一段。访问海外网站还要经过跨地区的线路,这一段是很多用户共用的,晚高峰被挤满时,再快的家庭宽带也只能排队。所以升级宽带对这种慢基本没有帮助。

为什么测速软件显示很快,网页却打不开?

测速通常连接的是离你最近的测速服务器,测的是本地这一段;而且测速会同时开很多条连接,能把丢包的影响平均掉。打开一个海外网页走的是跨地区线路,单条连接对丢包很敏感,所以两者会差很多。

换了节点还是慢,怎么办?

先同时打开一个本地网站对比。如果本地网站也慢,问题在你自己的网络(Wi-Fi 信号、路由器、家里有人在大量下载),换节点没用;如果只有海外网站慢,换一个不同地区的节点试试,不同节点走的线路不同,晚高峰的拥堵程度也不同。

手机流量晚上也会变慢吗?

会,但原因可能不一样。手机信号所在的基站同样是附近的人共用的,人多时会变慢;访问海外网站时还要叠加跨地区线路的拥堵。可以用 Wi-Fi 和流量各试一次,判断慢在哪一段。

还没有安装穿山甲?

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

下载客户端
← 全部文章