从零搞懂 BGP 跨境中继与物理内网专线的真实成本与架构差异

6070 字
16 分钟

从零搞懂 BGP 跨境中继与物理内网专线的真实成本与架构差异

发布于

从零搞懂 BGP 跨境中继与物理内网专线的真实成本与架构差异

这篇文章拖了快半年。起因是去年底帮一个做中文技术文档镜像站的客户做架构复盘,他们一开始迷信“物理专线一定比 BGP 中转稳”,结果花了大价钱拉了一条跨境专线,实际跑起来 TCP 吞吐还不如一条调优过的 BGP 中继隧道。账单出来那天客户在电话里沉默了很久。后来我们把两条链路的抓包、RTT 分布、重传率全摊开对比,才把问题讲清楚。

所以这篇不讲概念科普,讲我们踩过的坑、抓过的包、算过的账。核心结论先摆在这里:

  1. BGP 中转机房的价值不在“带宽大”,而在“入口汇聚 + 就近接入 + 多线冗余”,它解决的是最后一公里到海缆登陆站之间的路径质量问题,不是海缆本身。
  2. 物理内网专线(IPLC/IEPL)贵在“独占波长/独占电路”的确定性,但端到端时延并不会因为“专线”两个字就变低,物理距离和光在光纤里的传播速度(约 20 万 km/s,即每 1000km 单向约 5ms)是硬约束。
  3. 90% 的“专线跑不过中转”案例,问题出在 TCP 拥塞控制、MSS/MTU 分片、以及入口侧单一运营商出口,而不是链路本身。

下面按实测数据拆。


一、先把物理链路拆开:BGP 中继和物理专线到底差在哪一层

很多人把这两个东西放在一起比,其实它们不在同一个抽象层。我用一个简化的拓扑说明。

1.1 BGP 中继机房的真实链路结构

[用户本地 ISP]
      │  (最后一公里,电信/联通/移动/广电)
      ▼
[BGP 中转机房 - 入口汇聚层]
      │  多线接入:CN2 GIA / 9929 / CMIN2 / 4837 / HKIX
      ▼
[中转机房 - 出口 BGP 宣告]
      │  自有 ASN + IP Transit + 对等互联(Peering)
      ▼
[跨境海缆]  APG / AAE-1 / SMW3 / NCP
      ▼
[境外落地机房]
      │
      ▼
[目标站点 / 源站]

关键点:BGP 中继机房干的核心活是“入口汇聚”。它同时接入了国内多家运营商的优质线路(CN2 GIA、联通 9929、移动 CMIN2 这类),用户从哪个运营商进来,就走对应质量最好的出口。机房自己持有 ASN,向多个上游做 IP Transit 和多边对等,出口方向可以根据实时 BGP 路由表选路。

这条链路里,海缆是共享的。你买的“100M 中转”本质上是机房在共享海缆容量上给你切的一段带宽配额,高峰期会受同机房其他用户和整条海缆负载影响。

1.2 物理内网专线(IPLC/IEPL)的真实结构

[用户本地]
      │
      ▼
[本地运营商接入点 POP]
      │  本地段(城域接入)
      ▼
[跨境段:独占电路 / 独占波长]
      │  SDH / OTN / MPLS L2VPN,点对点
      ▼
[境外落地 POP]
      │
      ▼
[目标站点]

物理专线的核心是跨境段是点对点独占电路,中间不经过公网 BGP 选路,不和其他用户共享这段波长。所以它的抖动(jitter)和丢包在理论上更可控。

但注意两个被严重误解的点:

  • 专线不等于低延迟。延迟由物理距离决定。上海到洛杉矶海缆直线约 10500km,光在光纤中速度约 2×10⁸ m/s,单向理论下界约 52ms,加上设备转发、光电转换、两端接入,实测 RTT 普遍在 130~160ms。这个数字专线和中继没有本质差别,因为大家走的是同一批海缆。
  • 专线的“独占”只到跨境段为止。本地接入段(你家到运营商 POP)和境外落地段仍然是共享的,这两段出问题专线也救不了。

1.3 一张表说清楚差异维度

维度BGP 中转机房物理内网专线 (IPLC/IEPL)
跨境段是否独占否,共享海缆容量是,独占电路/波长
入口汇聚能力强(多运营商多线接入)弱(通常绑定单一运营商接入)
单点故障风险出口 BGP 可切换,冗余好电路单点,断缆即断
典型 RTT(沪-洛)135~165ms130~155ms
抖动 (jitter)3~15ms,高峰期放大1~5ms,相对稳定
计费方式按带宽/流量,月付按电路带宽,长周期合约
开通周期小时级~天级2~8 周
单位带宽成本低高(通常是中转的 5~20 倍)

二、真实环境实测数据

测试时间:连续三个自然周(含两个周末高峰),每晚 20:00~23:00 高峰期采样。测试点:上海电信家宽(1000M/100M)、上海联通企业专线(500M 对称)、深圳移动(500M)。对端:洛杉矶落地机房。

工具:mtr 长周期采样 + iperf3 单/多流 + 自建 TCP 探针(记录 cwnd、RTT、retrans)。

2.1 上海电信 → 洛杉矶,BGP 中继 vs 物理专线

指标BGP 中继(CN2 GIA 入口)BGP 中继(4837 入口)物理专线 (IPLC 100M)
平均 RTT148ms172ms142ms
RTT P95163ms210ms151ms
抖动 (jitter)6.2ms14.8ms2.8ms
高峰期丢包率0.4%2.1%0.1%
单流 TCP 吞吐78Mbps41Mbps92Mbps
多流(8) 吞吐310Mbps180Mbps98Mbps(受电路带宽限制)
首包时间 (TTFB)210ms265ms195ms

注意最后两行。单流场景专线赢,多流场景中继赢——因为专线电路带宽是硬上限(100M 就是 100M),而中继的带宽配额在非高峰期可以跑超。这就是为什么“专线一定更好”是个伪命题,取决于你的业务是单连接大流量还是多连接并发。

2.2 同一条中继链路,不同入口运营商的高峰期对比

入口运营商空闲期 RTT高峰期 RTT高峰期丢包备注
电信 CN2 GIA145ms152ms0.2%最稳,成本最高
联通 9929150ms168ms0.8%性价比好
移动 CMIN2155ms178ms1.5%高峰期波动明显
电信 163 普通160ms235ms4.2%高峰期基本不可用

这张表是“入口汇聚”价值的直接证据。同一个境外落地,用户从不同运营商进来,高峰期体验能差出 80ms 和 4% 丢包。中继机房多线接入的意义就在这里——它让不同运营商的用户都能就近走到质量最好的那条入口。

2.3 TCP 拥塞控制算法的影响(这条最容易被忽略)

同样的链路(BGP 中继 CN2 GIA,RTT 150ms,丢包 0.4%),只改客户端拥塞控制:

拥塞控制单流吞吐重传率说明
Cubic(默认)62Mbps1.8%高 BDP 链路下恢复慢
BBR v1118Mbps0.5%明显改善
BBR v3124Mbps0.4%略优于 v1
Hybla88Mbps1.1%对高 RTT 友好但激进度高

BDP 计算:150ms × 100Mbps = 1.875MB 在途数据。Cubic 在丢包后窗口减半恢复太慢,长肥管道(Long Fat Network)下这是致命伤。很多“专线跑不过中转”的案例,本质是专线两端用了 Cubic,而中转侧服务端开了 BBR。


三、成本拆解:钱到底花在哪

3.1 BGP 中继的成本结构

  • 入口多线接入费(按运营商和带宽)
  • 出口 IP Transit 费(按 95 峰值计费或包月)
  • 海缆容量分摊
  • 机房机位、电力、运维

一个中等规模中转机房,100M 共享配额对终端用户的月费通常在几百到一两千人民币区间,具体看入口线路等级(CN2 GIA 最贵)。

3.2 物理专线的成本结构

  • 本地接入段(城域电路)
  • 跨境段独占电路(成本大头)
  • 境外落地段
  • 通常要求 1~3 年合约

跨境 100M IPLC 沪-洛方向的月费,市场价普遍在 1.5 万4 万人民币区间,视运营商、SLA 等级、是否含备份电路而定。折算下来单位带宽成本是中继的 1030 倍。

3.3 一个反直觉的结论

如果你的业务是面向大量分散终端用户的内容分发/镜像站,BGP 中继的“入口汇聚 + 多线冗余 + 按需弹性”在成本和体验上大概率优于专线。专线适合的是固定点对点、对抖动极敏感、流量可预测的场景(比如两地数据库同步、实时音视频回传)。


四、客户端与系统层调优(可复现配置)

4.1 开启 BBR 并调优内核参数

# 加载 BBR 模块
modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf

# 内核参数
cat >> /etc/sysctl.d/99-net-tune.conf <<'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_notsent_lowat = 16384
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_mtu_probing = 1
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
EOF

sysctl --system
# 验证
sysctl net.ipv4.tcp_congestion_control

tcp_mtu_probing=1 这条在高 RTT 链路上很关键,PMTU 黑洞是跨境链路常见故障源,下面排查案例会讲。

4.2 MSS clamp 防止分片(中转/落地网关侧)

# 在转发网关上对跨境出口做 MSS clamp,避免 PMTU 黑洞
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
  -j TCPMSS --clamp-mss-to-pmtu
# 或强制指定(1500 MTU - 20 IP - 20 TCP = 1460,隧道场景再减)
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
  -j TCPMSS --set-mss 1360

4.3 客户端代理规则片段(Clash YAML)

proxies:
  - name: "relay-cn2"
    type: vmess
    server: relay.example.com
    port: 443
    uuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    alterId: 0
    cipher: auto
    tls: true
    skip-cert-verify: false
    network: ws
    ws-opts:
      path: "/ray"
      headers:
        Host: relay.example.com

proxy-groups:
  - name: "AUTO"
    type: url-test
    proxies: ["relay-cn2"]
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50

rules:
  - DOMAIN-SUFFIX,example-docs.org,AUTO
  - GEOIP,CN,DIRECT
  - MATCH,AUTO

tolerance: 50 避免频繁切换导致连接重建;interval: 300 别设太短,跨境探测本身会干扰业务。


五、典型异常排查链路(真实案例)

现象:客户反馈“专线开通后,大文件下载反而比之前的中继慢,且偶发卡死”。

排查链:

  1. mtr -rwzbc 100 target 长周期采样,发现中间某跳丢包 30% 但端到端吞吐正常——这是 ICMP 限速,不是真故障,排除。
  2. iperf3 -c target -t 60 -P 1 单流只有 12Mbps,但 -P 8 多流能到 90Mbps。单流慢多流快 = 典型 BDP/拥塞控制问题。
  3. 查两端 sysctl net.ipv4.tcp_congestion_control,发现专线两端都是 Cubic。
  4. 抓包 tcpdump -i eth0 -w cap.pcap 'tcp port 5201',Wireshark 分析发现大量 TCP Retransmission 且伴随 Fragmented IP protocol——存在分片。
  5. ping -M do -s 1472 target 逐步减小,发现 1400 就通不过。PMTU 黑洞。
  6. 在网关加 MSS clamp(见 4.2),两端切 BBR,复测单流恢复到 88Mbps。

结论:专线本身没问题,问题在 PMTU 黑洞导致分片重传 + Cubic 在高 BDP 下恢复慢。这类问题在中继侧因为服务端早就开了 BBR + MSS clamp 而被掩盖,所以“换专线反而变慢”。


六、深度问答与避坑

Q1:为什么同一台中继服务器,电信用户 RTT 145ms,移动用户 178ms,但两者物理路径几乎一样?

不是路径问题,是入口段和出口选路问题。移动 CMIN2 到海缆登陆站之间的骨干跳数更多,且移动国际出口在高峰期存在拥塞。实测中移动用户从 CMIN2 入口进,到登陆站前平均多 34 跳,每跳 58ms 累积。解决办法是中继机房对移动方向单独优化出口(比如走移动自有国际链路而非第三方 transit),这也是“入口汇聚”要按运营商分别调优的原因,不是接进来就完事。

Q2:物理专线的 SLA 写着“丢包 <0.1%”,为什么我实测高峰期还是能到 1%?

SLA 的测量口径通常是“跨境段电路本身”,不含本地接入段和境外落地段。你实测的端到端丢包包含了三段。我们抓包定位过:某次 1% 丢包全部发生在本地城域接入段(用户侧光猫到运营商 POP),跨境段实际 0.02%。签 SLA 前一定要问清楚测量边界(demarcation point),并要求运营商提供分段监测数据。

Q3:BGP 中继的“100M”和专线的“100M”是一回事吗?

不是。中继的 100M 通常是带宽配额/承诺速率,非高峰期可跑超,高峰期受同机房共享影响可能跑不满;专线的 100M 是电路物理速率上限,跑不满就是故障。所以中继适合弹性业务,专线适合确定性业务。别拿中继的峰值去对标专线的保底。

Q4:为什么开了 BBR 之后,某些跨境链路的吞吐反而下降了?

BBR 在高丢包 + 浅缓冲链路上会过度激进,导致 bufferbloat 和自身丢包上升。我们实测过一条丢包 3% 的劣质链路,BBR v1 吞吐反而不如 Cubic,因为 BBR 持续探测带宽把队列打满。这种情况要么换 BBR v3(对丢包更鲁棒),要么用 tc 做出口整形(fq_codel)配合。别迷信“开 BBR 一定快”。

Q5:中转机房的 ASN 和 IP Transit 对普通用户有感知吗?

有,但间接。机房持有的 ASN 和上游 transit 质量决定了出口方向的 BGP 选路。一个只有单上游 transit 的机房,出口故障时无法切换;有多个上游 + 多边 peering 的机房,出口可以自动收敛。用户感知到的是“高峰期是否稳定”“断缆时是否快速恢复”。选机房时问清楚上游数量和 peering 情况,比问“带宽多大”更有意义。

Q6:跨境海缆断缆时,BGP 中继和专线分别怎么表现?

中继:出口 BGP 路由自动收敛到备用海缆(比如 APG 断走 AAE-1),RTT 可能增加 20~40ms,但业务不断。专线:如果电路走的是断掉的那条海缆且没有备份电路,直接中断,恢复要等海缆修复(历史上动辄数周)。这是中继在冗余上的结构性优势。要专线达到同等冗余,得买双路由备份电路,成本直接翻倍——这也是为什么大多数内容型业务最终选回中继。


写到这里。最后一句实在话:架构选型没有银弹,把链路拆到物理层、把成本算到单位带宽、把故障定位到具体分段,答案自然就出来了。别被“专线”“BGP”这些词唬住,数据会说话。