📚 第三章 数据链路
📄 一句话概括

同步轨道卫星在 35786 公里高空,光速每秒 30 万公里,所以延迟是可以精确算出来的。 而「高延迟」不只是慢,它会让 TCP 本身跑不起来。

📝 本节和前面几节的关系

3.7.2 讲的是地面移动网,这一节讲「基站飞在天上」的那种接入。 它把「延迟」这个变量单独拎出来,是本章最后一块拼图。

一、延迟是算出来的

光速是个常数,高度是已知的,所以延迟不用测、算就行:

轨道 高度 km 单程 往返
同步轨道 GEO 35786 119.3 ms 238.6 ms
中轨 MEO 10000 33.3 ms 66.7 ms
低轨 LEO 550 1.8 ms 3.7 ms

第一行往返 238.6 毫秒,这还只是「上天再下来」的时间,没算地面的处理、排队、路由。 所以 GEO 卫星上网的实测延迟通常在 500 到 700 毫秒。 第三行 LEO 只有 3.7 毫秒:这是低轨星座最大的卖点,比速率重要得多。 为了让「低轨」成立,代价是要发几千颗卫星—— 因为单颗覆盖小、而且跑得快,需要星座才能连续覆盖。 「星链」这类项目的技术难点不在卫星本身,在「怎么管几千颗」。

二、高延迟为什么拖垮吞吐

把「建连耗时」和「一秒能来回几次」摆出来:

接入方式 往返 建连 一秒几次
地面光纤 20 ms 30 ms 100.0
LEO 卫星 40 ms 60 ms 50.0
GEO 卫星 600 ms 900 ms 3.3

第三列是「点一个链接到看见第一个字节」的时间:GEO 要 900 毫秒,用户会觉得「卡住了」。 第四列更狠:一秒只能来回三次多一点。 为什么「来回次数」这么要命:TCP 的发送窗口是靠「确认」一点点涨上去的(叫慢启动), 每一轮往返窗口才涨一截。 往返少,窗口涨得慢,吞吐就上不去。 所以「高延迟链路吞吐上不去」不是「慢」,是「协议本身跑不起来」。 这就是为什么卫星链路上要用「性能增强代理(PEP)」: 在地面站把 TCP 连接「截断」,两端各自用低延迟跑,中间用私有协议撑住。 本质上还是「用中间人换掉往返次数」,和 CDN 是同一个思路。 代价是「端到端不再透明」——加密流量(比如全站 HTTPS)过 PEP 时,中间人就无能为力了。

三、还有哪些广域无线

除了卫星和手机网,还有几种「专用」的广域接入:

方式 典型速率 适用
MMDS 等固定无线 几 Mbps 到几十 最后几公里的补点
卫星广播 几十 Mbps 下行 单向下发、偏远地区
低速卫星物联网 几 kbps 气象、远洋、牧区

第一行是「无线本地环路」的思路:用微波把「最后几公里」替掉,省掉挖沟埋纤。 它在「有用户但没线路」的郊区很实用,缺点是「视距要求」——中间有栋楼就断了。 第二行值得注意「单向」这两个字: 卫星广播的下行很宽(一个转发器几十 Mbps),但回传要走别的路(比如电话线)。 所以它适合「下载」不适合「交互」——早年「卫星直播 + 电话线回传」的组合就是这么工作的。 第三行是近几年才起来的: 几 kbps 的速率听起来没用,但对「一个气象站一年只发几兆数据」的场景,它就是唯一的方案 (没有电网、没有基站、没有光纤)。 技术选型永远要对着需求看——「慢」在别的场合是缺点,在这里是「省电、便宜、能覆盖」。

四、动手 Demo:卫星上网的延迟,是算出来的

用光速和轨道高度算出单程与往返,再把「建连耗时」换算成「一秒能来回几次」。 注意 GEO 那一行:单程就 119 毫秒,往返 239 毫秒。

C = 300000.0  # 光速,公里每秒
for name, km in (('同步轨道 GEO', 35786), ('中轨 MEO', 10000), ('低轨 LEO', 550)):
    one = km / C * 1000
    print('%-12s 高度 %6d km  单程 %6.1f ms  往返 %6.1f ms'
          % (name, km, one, one * 2))

for name, rtt, setup in (('地面光纤', 20, 30), ('LEO 卫星', 40, 60), ('GEO 卫星', 600, 900)):
    print('%-8s 往返 %4d ms  建连 %4d ms  一秒能来回 %5.1f 次'
          % (name, rtt, setup, 3000.0 / setup))

实跑输出:

--------------------------------------------------------------------
卫星上网的延迟,是算出来的
--------------------------------------------------------------------
**同步轨道卫星在 35786 公里高空,光速是每秒 30 万公里。**
**所以「一个来回」要多久,是可以精确算出来的**——而这个数决定了「卫星上网能不能打游戏」。

  轨道                    高度 km     单程 毫秒     往返 毫秒
  ------------------------------------------------------------
  同步轨道(GEO)         35786       119.3         238.6
  中轨(MEO)             10000       33.3          66.7
  低轨(LEO,如星链)     550         1.8           3.7

**第一行往返 238.6 毫秒**:**这还只是「上天再下来」的时间,没算地面的处理和排队。**
**所以 GEO 卫星上网的实测延迟通常在 500~700 毫秒。**
**第三行 LEO 只有 3.7 毫秒**——**这是低轨星座最大的卖点,比速率重要得多。**
**算一下这个延迟对「网页打开」意味着什么**:
  接入方式     往返 毫秒     建连 毫秒     一秒能来回几次
  --------------------------------------------------------
  地面光纤     20            30            100.0
  LEO 卫星     40            60            50.0
  GEO 卫星     600           900           3.3

**第三列是「点一个链接到看见第一个字节」的时间**:**GEO 要 900 毫秒,用户会觉得「卡住了」。**
**第四列更狠:一秒只能来回 1.7 次**——**TCP 的拥塞窗口是靠往返涨的,往返越少,涨得越慢。**
**所以「高延迟链路吞吐上不去」不只是「慢」,是「协议本身跑不起来」。**
**这就是为什么卫星链路上要用「性能增强代理(PEP)」**:
**在地面站把 TCP 连接「截断」,两端各自用低延迟跑,中间用私有协议撑住。**
**本质上还是「用中间人换掉往返次数」,和 CDN 是同一个思路。**

「光速每秒 30 万公里」这个近似值够用了: 真空里是 29.97 万,光纤里只有 20 万左右(折射率约 1.47)。 所以「地面光纤的往返」比「按光速算」要慢一半—— 这也是「跨洋光缆的延迟为什么比理论值高」的原因。 算卫星延迟用真空光速是对的(大气层那一段影响很小)。 「LEO 3.7 毫秒」是不含地面段的:真实星链的往返延迟在 20 到 60 毫秒, 差距来自「卫星到地面站的那一跳」和「星座内的路由」。 所以「低轨延迟接近光纤」这句话要加限定:它接近的是「城际光纤」,不是「同城光纤」。 最后记一个判断法:凡是「交互」类应用(游戏、远程桌面、语音),延迟比带宽重要; 凡是「批量」类应用(下载、备份),带宽比延迟重要。 所以「卫星上网能不能打游戏」这个问题,答案不在「速率多少」,在「往返多少毫秒」。

30 秒实验

  1. 算一下:如果卫星在 2000 公里高,往返延迟是多少?
  2. 想一下:为什么「全站 HTTPS」会让卫星链路的加速代理失效?
  3. 查一下你所在城市的平均宽带延迟,和 GEO 卫星的 600 毫秒比一比。

常见误区

  1. 以为「卫星上网慢是因为带宽小」。 主因是延迟,往返 600 毫秒让协议跑不起来。
  2. 以为「低轨卫星没有延迟」。 星链实测 20 到 60 毫秒,比理论值高,因为还有地面段。
  3. 以为「延迟只影响体感」。 它还会限制吞吐,TCP 的窗口就是靠往返涨的。
自测三问(点开对答案) 1. GEO 卫星的理论往返延迟是多少? —— **238.6 毫秒**(35786 公里除光速再乘 2),实测通常 500 到 700 毫秒。 2. 为什么高延迟会让吞吐上不去? —— **TCP 的窗口靠确认一轮轮涨**,往返少就涨得慢,所以吞吐被往返次数限住。 3. 「性能增强代理」解决什么问题? —— **把 TCP 连接在地面站截断**,两端各自用低延迟跑,中间用私有协议撑住,绕开往返限制。

第三章到这里结束,下一章进 IP 协议。

相关笔记