从零搞懂 BGP 跨境中继与物理内网专线的真实成本与架构差异
发布于
从零搞懂 BGP 跨境中继与物理内网专线的真实成本与架构差异
这篇文章拖了快半年。起因是去年底帮一个做中文技术文档镜像站的客户做架构复盘,他们一开始迷信“物理专线一定比 BGP 中转稳”,结果花了大价钱拉了一条跨境专线,实际跑起来 TCP 吞吐还不如一条调优过的 BGP 中继隧道。账单出来那天客户在电话里沉默了很久。后来我们把两条链路的抓包、RTT 分布、重传率全摊开对比,才把问题讲清楚。
所以这篇不讲概念科普,讲我们踩过的坑、抓过的包、算过的账。核心结论先摆在这里:
- BGP 中转机房的价值不在“带宽大”,而在“入口汇聚 + 就近接入 + 多线冗余”,它解决的是最后一公里到海缆登陆站之间的路径质量问题,不是海缆本身。
- 物理内网专线(IPLC/IEPL)贵在“独占波长/独占电路”的确定性,但端到端时延并不会因为“专线”两个字就变低,物理距离和光在光纤里的传播速度(约 20 万 km/s,即每 1000km 单向约 5ms)是硬约束。
- 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~165ms | 130~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) |
|---|---|---|---|
| 平均 RTT | 148ms | 172ms | 142ms |
| RTT P95 | 163ms | 210ms | 151ms |
| 抖动 (jitter) | 6.2ms | 14.8ms | 2.8ms |
| 高峰期丢包率 | 0.4% | 2.1% | 0.1% |
| 单流 TCP 吞吐 | 78Mbps | 41Mbps | 92Mbps |
| 多流(8) 吞吐 | 310Mbps | 180Mbps | 98Mbps(受电路带宽限制) |
| 首包时间 (TTFB) | 210ms | 265ms | 195ms |
注意最后两行。单流场景专线赢,多流场景中继赢——因为专线电路带宽是硬上限(100M 就是 100M),而中继的带宽配额在非高峰期可以跑超。这就是为什么“专线一定更好”是个伪命题,取决于你的业务是单连接大流量还是多连接并发。
2.2 同一条中继链路,不同入口运营商的高峰期对比
| 入口运营商 | 空闲期 RTT | 高峰期 RTT | 高峰期丢包 | 备注 |
|---|---|---|---|---|
| 电信 CN2 GIA | 145ms | 152ms | 0.2% | 最稳,成本最高 |
| 联通 9929 | 150ms | 168ms | 0.8% | 性价比好 |
| 移动 CMIN2 | 155ms | 178ms | 1.5% | 高峰期波动明显 |
| 电信 163 普通 | 160ms | 235ms | 4.2% | 高峰期基本不可用 |
这张表是“入口汇聚”价值的直接证据。同一个境外落地,用户从不同运营商进来,高峰期体验能差出 80ms 和 4% 丢包。中继机房多线接入的意义就在这里——它让不同运营商的用户都能就近走到质量最好的那条入口。
2.3 TCP 拥塞控制算法的影响(这条最容易被忽略)
同样的链路(BGP 中继 CN2 GIA,RTT 150ms,丢包 0.4%),只改客户端拥塞控制:
| 拥塞控制 | 单流吞吐 | 重传率 | 说明 |
|---|---|---|---|
| Cubic(默认) | 62Mbps | 1.8% | 高 BDP 链路下恢复慢 |
| BBR v1 | 118Mbps | 0.5% | 明显改善 |
| BBR v3 | 124Mbps | 0.4% | 略优于 v1 |
| Hybla | 88Mbps | 1.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 别设太短,跨境探测本身会干扰业务。
五、典型异常排查链路(真实案例)
现象:客户反馈“专线开通后,大文件下载反而比之前的中继慢,且偶发卡死”。
排查链:
mtr -rwzbc 100 target长周期采样,发现中间某跳丢包 30% 但端到端吞吐正常——这是 ICMP 限速,不是真故障,排除。iperf3 -c target -t 60 -P 1单流只有 12Mbps,但-P 8多流能到 90Mbps。单流慢多流快 = 典型 BDP/拥塞控制问题。- 查两端
sysctl net.ipv4.tcp_congestion_control,发现专线两端都是 Cubic。 - 抓包
tcpdump -i eth0 -w cap.pcap 'tcp port 5201',Wireshark 分析发现大量TCP Retransmission且伴随Fragmented IP protocol——存在分片。 ping -M do -s 1472 target逐步减小,发现 1400 就通不过。PMTU 黑洞。- 在网关加 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”这些词唬住,数据会说话。