目录
为什么晚上网速会变慢?晚高峰线路拥堵的原理
白天打开海外网站很快,一到晚上就转圈、视频降画质?问题通常不在你家的宽带,而在大家共用的跨地区线路。本文用晚高峰的跨海大桥打比方,讲清排队、丢包和 TCP 降速,配时序图和估算表,最后说明你能做什么。
网络原理系列:① 打开一个网页时发生了什么 → ② 网络分层模型 → ③ 常见网络协议 → ④ 代理是什么 → ⑤ 加密隧道是什么 → ⑥ 加密隧道与代理的区别 → ⑦ HTTPS 加密了什么 → ⑧ 系统代理与 TUN 模式 → ⑨ 分流是什么 → ⑩ DNS 污染与泄漏 → ⑪ 晚高峰为什么变慢 → ⑫ 延迟、丢包与带宽
晚上网速变慢,通常不是你家宽带的问题,而是大家共用的「跨地区线路」被挤满了。白天用的人少,线路有富余;晚上八点到十二点,大家同时下班回家看视频、玩游戏,需求超过了线路容量。路由器来不及转发,数据包开始排队、排满了就被丢弃;而网页、视频依赖的 TCP 协议一旦发现丢包,就会主动降速,跨地区的距离又越远、恢复得越慢。所以你会感觉「白天秒开,晚上转圈」。
- ① 大家同时上网晚上看视频、刷网页的人一起上线
- ② 车道固定的大桥共享的跨地区线路被挤满
- ③ 停车场排满、劝返路由器缓冲区满了,开始丢包
- ④ 调度员放慢发车TCP 发现丢包,发送量减半
- ⑤ 车少的快速桥优化线路,晚高峰也有余量
- ⑥ 本地小路畅通本地网站直连,不受影响
用一座跨海大桥来理解
把跨地区的网络线路想象成一座连接两岸的大桥,网上传输的数据就是桥上来回的货车:
| 生活中的晚高峰 | 网络里的对应 |
|---|---|
| 小镇居民下班回家,同时网购、寄件 | 晚上大家同时看视频、刷网页 |
| 连接两岸的大桥,车道数是固定的 | 跨地区线路,带宽是固定的 |
| 桥头的停车场排满了,交警劝返新来的车 | 路由器的缓冲区排满,新数据包被丢弃 |
| 对岸的调度员看到车没送到,放慢发车节奏 | 发送方发现丢包,TCP 主动降低发送速度 |
| 另一座收费更贵、车更少的快速桥 | 运营商的优化线路,晚高峰也留有余量 |
| 小镇里的本地小路,畅通无阻 | 本地网站直连,不经过跨地区线路 |
你家门口的路再宽(千兆宽带),也只能决定货车多快开到桥头;桥上堵不堵,取决于这座桥有多少车道、此刻有多少车。
为什么偏偏是晚上:共享的带宽
你买的宽带,保证的只是从你家到运营商机房的这一段。再往外,所有用户的流量会汇聚到少数几条跨地区的线路上,这些线路是共享的。
运营商不会按「所有人同时满速使用」来建设线路,那样成本太高、平时大部分时间闲置。线路通常按日常的平均用量、再留一些余量来规划。白天大家在上班上学,线路有富余;到了晚上,看视频、玩游戏、下载更新的人同时上线,需求可能是白天的好几倍,一旦超过线路容量,多出来的数据就只能排队。
这也是为什么同样的网站,凌晨打开往往比晚上九点快得多:线路还是那条线路,只是车少了。
排队与丢包:路由器忙不过来时会发生什么
每台路由器都有一块缓冲区,用来临时存放来不及转发的数据包,就像桥头的停车场:
- 刚开始拥堵:数据包在缓冲区里排队,等前面的发出去再走。你感觉到的是延迟变高,网页打开要多等一会儿,游戏开始卡顿。
- 缓冲区排满:新到的数据包没地方放,路由器只能直接丢弃它们,这就是丢包。丢掉的数据要由发送方重新发送,又要多等一个来回。
所以晚高峰的典型症状是两个一起出现:延迟升高、丢包增多。单看延迟,可能只是从 150 毫秒变成 250 毫秒;真正让速度掉下来的,是丢包。
TCP 降速:一点丢包,为什么速度掉这么多
网页、视频、下载用的大多是 TCP 协议(见 常见网络协议)。TCP 不会一开始就满速发送,而是边发边试探:每收到一轮「确认收到」,就把发送量加大一些;一旦发现丢包,就认为路上堵了,立刻把发送量减半,再慢慢往上加。这个机制叫拥塞控制,它的本意是让大家互相礼让、别把线路彻底堵死。
下面的时序图展开了一次晚高峰的传输过程:
| 步骤 | 发生了什么 |
|---|---|
| ①–③ 起步 | 服务器先发少量数据,收到确认后加倍发送,速度越来越快 |
| ④–⑥ 路由器排满 | 发送量继续加大,跨地区线路上的路由器缓冲区排满,丢弃了一部分数据包,只有一部分送到 |
| ⑦ 发现缺包 | 你的设备收到的数据中间缺了一段,反复确认「我还在等这一个」,服务器由此知道发生了丢包 |
| ⑧ 降速 | 服务器判断线路拥堵,把发送量直接减半 |
| ⑨–⑩ 重发、慢慢恢复 | 补发丢失的数据,再从一半的速度开始一点点往上加 |
关键在于恢复的快慢取决于来回一趟的时间:发送量每一轮才能加一点,而一轮就是一个往返。跨地区访问一个来回动辄一两百毫秒,比访问本地网站慢好几倍,所以同样的丢包,访问远方网站时速度掉得更多、回升得更慢。
用一个常用的估算公式可以感受一下数量级。单条 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 和流量各试一次,判断慢在哪一段。