mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
4358 字
12 分钟
IXP与互联网交换:网络如何互联
2022-05-28

数据包在 运营商骨干网与流量工程 中穿越了单个 ISP 的 MPLS 隧道和 SR 路径,但互联网不是一个 ISP 的独角戏——中国电信的用户要访问挂在联通网络上的服务器,德国的 DTAG 用户要访问法国 Orange 的内容,这些跨网流量怎么走?

答案就是互联网交换点(IXP,Internet Exchange Point)。IXP 是不同网络相遇的地方——一个中立的二层交换基础设施,让参与的网络通过 BGP 对等互联直接交换流量,而不必绕道第三方 Transit 提供商。全球 80% 以上的域间流量在 IXP 处完成交换,可以说 IXP 是互联网的”交通枢纽”。

本章从互联的经济学出发,看 Transit 与 Peering 的商业逻辑,再深入 IXP 的物理架构和路由服务器机制,最后动手搭建一个模拟 IXP 环境,亲眼观察 BGP 路由交换的过程。

一、互联网互联的经济学#

1.1 Transit 与 Peering#

网络之间的互联关系本质上只有两种:Transit(中转)Peering(对等)

Transit 是买卖关系——你付钱给我,我把你的流量转发到整个互联网(包括我的客户和我能到达的其他网络)。Peering 是互换关系——你我之间免费交换各自用户产生的流量,但不承担向第三方转发的义务。

flowchart TB subgraph Transit模式["Transit 模式:付费买路"] T_CUST["客户 AS<br/>AS64500"] -->|"付费"| T_ISP["Transit 提供商<br/>AS64501"] T_ISP -->|"转发到全网"| T_REST["互联网其余部分"] end subgraph Peering模式["Peering 模式:免费互换"] P_A["AS64510<br/>运营商A"] <-->|"免费交换<br/>各自用户流量"| P_B["AS64520<br/>运营商B"] end style Transit模式 fill:#ffebee,stroke:#c62828 style Peering模式 fill:#e8f5e9,stroke:#2e7d32

用现实生活类比:Transit 好比你交高速公路费,收费站让你上高速并到达任何目的地;Peering 好比两家公司修了一条内部道路互通,只给彼此的员工用,不对外开放。

1.2 互联的商业动机#

为什么网络要 Peering?三个核心动机:

动机说明典型场景
降低成本Peering 流量不付 Transit 费用。一个中型 ISP 每月 Transit 费用可能数十万美元,Peering 可以省掉 30-60%区域 ISP 与大型内容商 Peering
改善延迟直接交换比绕道 Transit 少 1-2 跳,延迟降低 5-20ms游戏公司、CDN 与本地 ISP Peering
增加冗余多条 Peering 路径提供备份,Transit 链路故障时流量不中断运营商之间的多链路 Peering
维度TransitPeering
费用方向下游向上游付费免费(或双方分摊 IXP 端口费)
流量范围转发到全网(full table)只交换双方各自用户的流量
路由通告上游通告全表(默认路由+全部前缀)只通告自己的前缀和客户前缀
关系对称不对称(买方依赖卖方)对称(双方平等)
典型价格$0.5-5/Mbps/月(按带宽计费)IXP 端口费 $500-5000/月(固定)
Note

Peering “免费”是相对的——虽然不按流量计费,但双方都要承担 IXP 端口费、设备费和运维成本。对于流量大的网络,这些固定成本摊薄后远低于 Transit 按带宽计费,所以 Peering 仍然划算。

1.3 互联协议类型#

实际操作中,互联关系比”Transit 或 Peering”更复杂,存在多种中间形态:

协议类型全称关系费用路由通告范围
SFISettlement-Free Interconnection双方对等免费各自+客户前缀
BI-PeeringBilateral Peering双边协商免费协商确定的前缀集
Paid PeeringPaid Peering不完全对等一方向另一方付费有限前缀集
TransitIP Transit上下游下游付费全表(full table)

SFI 是大型网络之间的”门当户对”式互联——流量比大致均衡、网络规模相当,双方同意免费交换。Paid Peering 是一种灰色地带——通常发生在内容提供商(出流量远大于入流量)与接入 ISP 之间,ISP 认为对方流量不对等而要求付费,但又不提供全表转发。

二、IXP 架构#

2.1 IXP 的定义与功能#

IXP 是一个中立的二层交换基础设施,让多个网络在同一个局域网内通过 BGP 直接交换路由和流量。IXP 本身不产生路由、不转发流量、不参与互联网路由决策——它只是一个”会议室”,让各网络的边界路由器物理上连到同一台交换机。

IXP 的核心功能:

  1. 提供共享交换基础设施:一台(或一组)高性能以太网交换机,参与者通过 VLAN 接入
  2. 分配 Peering LAN 地址:每个参与者获得一个 Peering LAN 内的 IP 地址(通常 /24 或 /22)
  3. 提供路由服务器:简化多边 Peering 的 BGP 会话建立
  4. 提供增值服务:Route Collector、Looking Glass、sFlow 流量统计

2.2 IXP 物理架构#

一个典型的大型 IXP 由交换机矩阵组成——核心交换机提供高密度端口,分布交换机在不同机房提供接入点,通过光纤互联:

graph TB subgraph IXP核心["IXP 交换矩阵"] CORE1["核心交换机 A<br/>100G/400G 端口"] CORE2["核心交换机 B<br/>100G/400G 端口"] CORE1 <-->|"LACP 链路聚合<br/>400G"| CORE2 end subgraph 机房1["数据中心 DC1"] DIST1["分布交换机 1"] DIST1 <-->|"100G"| CORE1 end subgraph 机房2["数据中心 DC2"] DIST2["分布交换机 2"] DIST2 <-->|"100G"| CORE2 end subgraph 参与者["参与者路由器"] P1["AS64510<br/>运营商A<br/>10.0.0.1"] P2["AS64520<br/>运营商B<br/>10.0.0.2"] P3["AS64530<br/>CDN<br/>10.0.0.3"] P4["AS64540<br/>内容商<br/>10.0.0.4"] RS["路由服务器<br/>10.0.0.254"] end P1 -->|"1G/10G/100G"| DIST1 P2 -->|"1G/10G"| DIST1 P3 -->|"100G"| DIST2 P4 -->|"10G"| DIST2 RS -->|"控制平面"| CORE1 style IXP核心 fill:#e3f2fd,stroke:#1565c0 style 机房1 fill:#e8f5e9,stroke:#2e7d32 style 机房2 fill:#fff3e0,stroke:#e65100

关键设计要点:二层纯交换(只做 MAC 转发不参与 IP 路由)、多机房暗光纤互联、1G-400G 端口速率按需选择、路由服务器旁挂不参与数据转发。

2.3 全球主要 IXP#

IXP所在地峰值流量参与者数量Peering LAN特色
DE-CIX法兰克福~15 Tbps1100+185.1.220.0/22全球最大交换中心
AMS-IX阿姆斯特丹~10 Tbps850+80.249.211.0/22欧洲历史最悠久
LINX伦敦~6 Tbps800+195.66.224.0/22双站点 LON1/LON2
Equinix IX全球多地~8 Tbps400+各站点独立商业 IXP 运营模式
HKIX香港~800 Gbps300+202.40.162.0/24亚太重要交换节点
Warning

IXP 的峰值流量数据随时间变化,以上为 2025 年的大致量级。DE-CIX 法兰克福在 2020 年就突破了 10 Tbps,且每年持续增长。查询最新数据可访问各 IXP 官网或 PeeringDB。

2.4 中国 IXP#

中国的互联网互联格局与欧美有显著差异。早期中国互联网通过**国家交换中心(NAP,Network Access Point)**实现运营商间互联:

交换中心位置互联角色
北京国家交换中心北京电信、联通、移动、教育网互联
上海国家交换中心上海同上
广州国家交换中心广州同上

NAP 模式与 IXP 的关键区别:

维度国际 IXP中国 NAP
运营模式非营利/中立组织政府主导
互联方式自愿 Peering强制互联
计费模式端口费(固定)按流量结算
路由策略参与者自主决定监管要求互联
开放程度任何 ASN 可申请加入主要运营商间互联

中国三大运营商之间通过 NAP 互联,但互联带宽长期不足,导致跨网访问延迟高、丢包率高——这就是”南北互通”问题的根源。近年来随着 CDN 和云厂商的部署,大量内容通过在运营商内部署缓存解决,但底层互联架构未根本改变。

三、IXP 路由服务器#

3.1 路由服务器的作用#

在 IXP 上,如果 N 个参与者两两建立 BGP 会话,需要 N×(N-1)/2 个会话。当参与者达到数百个时,会话数量爆炸——这就是全网格 Peering 的可扩展性问题。

路由服务器(Route Server)解决这个问题:每个参与者只需与路由服务器建立一个 BGP 会话,路由服务器将收到的路由透明转发给其他参与者。N 个参与者只需要 N 个 BGP 会话。

sequenceDiagram participant AS1 as AS64510<br/>运营商A participant RS as 路由服务器<br/>10.0.0.254 participant AS2 as AS64520<br/>运营商B participant AS3 as AS64530<br/>CDN Note over AS1,RS: 建立 BGP 会话 AS1->>RS: BGP OPEN (AS64510) RS->>AS1: BGP OPEN (AS64510)<br/>注:RS 使用自身 ASN Note over AS2,RS: 建立 BGP 会话 AS2->>RS: BGP OPEN (AS64520) RS->>AS2: BGP OPEN (AS64520) Note over AS3,RS: 建立 BGP 会话 AS3->>RS: BGP OPEN (AS64530) RS->>AS3: BGP OPEN (AS64530) Note over AS1,AS3: 路由交换 AS1->>RS: UPDATE: 203.0.113.0/24 RS->>AS2: UPDATE: 203.0.113.0/24<br/>NEXT_HOP=10.0.0.1 RS->>AS3: UPDATE: 203.0.113.0/24<br/>NEXT_HOP=10.0.0.1 AS3->>RS: UPDATE: 198.51.100.0/24 RS->>AS1: UPDATE: 198.51.100.0/24<br/>NEXT_HOP=10.0.0.3 RS->>AS2: UPDATE: 198.51.100.0/24<br/>NEXT_HOP=10.0.0.3

关键点:路由服务器不修改 NEXT_HOP。AS2 收到 203.0.113.0/24 的路由后,下一跳是 10.0.0.1(AS1 在 Peering LAN 的地址),数据包直接发往 AS1 的路由器,不经过路由服务器。路由服务器只参与控制平面,不参与数据平面转发。

3.2 路由服务器工作原理#

路由服务器的核心原则是透明转发

  1. 不修改 AS_PATH:路由服务器在转发路由时,不把自己的 ASN 插入 AS_PATH。对参与者来说,路由就像直接从通告方收到的一样
  2. 不修改 NEXT_HOP:保留原始通告者的 Peering LAN 地址作为下一跳
  3. 不修改任何 BGP 属性:LOCAL_PREF、MED、Community 等属性原样转发
  4. 按策略过滤:路由服务器可以根据 IXP 策略过滤路由(如只接受 IRR 注册的前缀)

路由服务器通常运行在 FRR(Free Range Routing)或 BIRD 上,配置为 route-server 模式。与普通 BGP 路由器的区别在于:route-server 为每个邻居维护独立的 RIB(Loc-RIB),避免不同参与者的路由互相污染。

3.3 路由服务器配置#

以下是用 FRR 配置路由服务器的完整示例:

# FRR 路由服务器配置
vtysh
configure terminal
# 路由服务器 BGP 实例
router bgp 65534
bgp router-id 10.0.0.254
bgp cluster-id 10.0.0.254
# 邻居 AS64510
neighbor 10.0.0.1 remote-as 64510
neighbor 10.0.0.1 description "运营商A - AS64510"
neighbor 10.0.0.1 route-server-client
# 邻居 AS64520
neighbor 10.0.0.2 remote-as 64520
neighbor 10.0.0.2 description "运营商B - AS64520"
neighbor 10.0.0.2 route-server-client
# 邻居 AS64530
neighbor 10.0.0.3 remote-as 64530
neighbor 10.0.0.3 description "CDN - AS64530"
neighbor 10.0.0.3 route-server-client
# 地址族配置
address-family ipv4 unicast
neighbor 10.0.0.1 activate
neighbor 10.0.0.1 route-reflector-client
neighbor 10.0.0.2 activate
neighbor 10.0.0.2 route-reflector-client
neighbor 10.0.0.3 activate
neighbor 10.0.0.3 route-reflector-client
# 不通告自身路由
no network 0.0.0.0/0
exit-address-family

route-server-client 命令是关键——它告诉 FRR 对该邻居启用路由服务器行为:不修改 AS_PATH、不修改 NEXT_HOP、为该邻居维护独立的路由视图。

3.4 路由策略与过滤#

路由服务器必须对收到的路由进行过滤,防止路由劫持和泄漏。两种核心过滤机制:

IRR(Internet Routing Registry)过滤——基于 RADB 等路由注册数据库验证前缀归属:

# 生成 IRR 过滤配置(使用 bgpq4 工具)
bgpq4 -l AS64510_FILTER -S RADB,RIPE,ARIN 64510
# 输出示例:
# AS64510_FILTER = [
# 203.0.113.0/24, # AS64510 直接持有
# 198.51.100.0/24, # AS64510 客户
# 192.0.2.0/23 # AS64510 聚合前缀
# ];
# 在 FRR 中应用前缀列表
ip prefix-list AS64510_IN seq 5 permit 203.0.113.0/24 le 24
ip prefix-list AS64510_IN seq 10 permit 198.51.100.0/24 le 24
ip prefix-list AS64510_IN seq 15 permit 192.0.2.0/23 le 24
router bgp 65534
neighbor 10.0.0.1 prefix-list AS64510_IN in

RPKI 验证——基于资源公钥基础设施验证路由起源:

# FRR 配置 RPKI(RTR 协议连接 ROA 缓存)
rpki
rpki cache 192.0.2.10 8323 preference 100
rpki cache 2001:db8::10 8323 preference 200
!
# 根据 RPKI 验证结果设置社区属性
route-map RPKI-FILTER permit 10
match rpki valid
set community 65534:1
!
route-map RPKI-FILTER permit 20
match rpki not-found
set community 65534:2
!
route-map RPKI-FILTER deny 30
match rpki invalid
!
router bgp 65534
neighbor 10.0.0.1 route-map RPKI-FILTER in

RPKI 验证的三种结果:Valid(ROA 记录匹配,允许)、Invalid(ROA 记录不匹配,拒绝)、NotFound(无 ROA 记录,放行但标记)。关于 RPKI 的详细原理,参见 BGP安全与路由信任

四、IXP 流量交换#

4.1 流量交换流程#

当 AS64510 的用户访问 AS64530 的服务器时,数据包在 IXP 上的完整交换流程:

flowchart LR subgraph AS64510["AS64510 运营商A"] USER["用户<br/>203.0.113.100"] --> R_A["边界路由器<br/>10.0.0.1"] end subgraph IXP_FABRIC["IXP 交换矩阵"] SW["交换机"] end subgraph AS64530["AS64530 CDN"] R_C["边界路由器<br/>10.0.0.3"] --> SERVER["服务器<br/>198.51.100.10"] end R_A -->|"1. 数据包<br/>dst=198.51.100.10<br/>下一跳=10.0.0.3"| SW SW -->|"2. MAC转发<br/>dst=10.0.0.3的MAC"| R_C style AS64510 fill:#e3f2fd,stroke:#1565c0 style IXP_FABRIC fill:#fff3e0,stroke:#e65100 style AS64530 fill:#e8f5e9,stroke:#2e7d32

详细步骤:

  1. 路由学习:AS64510 的边界路由器通过路由服务器学到 198.51.100.0/24 → NEXT_HOP 10.0.0.3
  2. ARP 解析:路由器查询 10.0.0.3 的 MAC 地址(Peering LAN 内的 ARP)
  3. 数据转发:数据包以 10.0.0.3 的 MAC 为目的帧发往 IXP 交换机
  4. 二层交换:IXP 交换机根据 MAC 地址表将帧转发到 AS64530 的端口
  5. 路由查表:AS64530 的边界路由器根据目的 IP 198.51.100.10 查表,转发到内部服务器

整个过程 IXP 交换机只做 MAC 层转发,不修改 IP 头部,不参与路由决策。

4.2 流量监控与统计#

IXP 需要监控流量以支持计费、容量规划和故障排查。两种主流方案:

sFlow 采样——在交换机上以 1 比例采样数据包头部,发送到采集器:

# 交换机 sFlow 配置(以 OpenSwitch 为例)
sflow enable
sflow sampling-rate 1000 # 每 1000 个包采样 1 个
sflow polling-interval 30 # 每 30 秒发送接口计数器
sflow collector 10.0.0.100 6343 # sFlow 采集器地址
sflow agent-ip 10.0.0.254 # IXP 交换机管理地址
# 查看参与者的流量统计
sflow show participant AS64510
# 典型输出:
# Participant: AS64510 (10.0.0.1)
# In: 15.3 Gbps 12.8 Mpps
# Out: 8.7 Gbps 7.2 Mpps
# Top prefixes: 203.0.113.0/24 (45%), 192.0.2.0/23 (30%)

NetFlow/IPFIX——基于流的统计,记录每条流的五元组和字节数:

# 在参与者路由器上配置 NetFlow 导出
interface eth0
ip flow egress
ip flow ingress
flow-exporter IXPMON
destination 10.0.0.101
source 10.0.0.1
transport udp 2055
export-protocol ipfix
# 用 nfdump 分析流量
nfdump -R /var/netflow/ -s srcip/24 -n 20
# 典型输出:
# Top 20 src IP/24 ordered by flows:
# 203.0.113.0/24 15.3 G 12.8 M flows
# 198.51.100.0/24 8.7 G 7.2 M flows

4.3 流量工程在 IXP#

IXP 上的流量工程主要通过 BGP 属性实现:

MED(Multi-Exit Discriminator)调优——告诉对端从哪条路径入站更优:

# AS64510 向 AS64520 通告路由时设置 MED
router bgp 64510
neighbor 10.0.0.2 route-map SET-MED out
route-map SET-MED permit 10
set metric 50 # MED=50,对端优先选择 MED 值低的路径

BGP Community 属性——IXP 通常定义社区属性供参与者控制路由传播:

# DE-CIX 社区属性示例
# 65534:0 — 不向任何路由服务器邻居通告
# 65534:64520 — 不向 AS64520 通告
# 65534:64530 — 不向 AS64530 通告
# AS64510 不希望 AS64530 收到自己的路由
router bgp 64510
neighbor 10.0.0.254 route-map CONTROL-ANNOUNCE out
route-map CONTROL-ANNOUNCE permit 10
set community 65534:64530 additive
Tip

BGP Community 是 IXP 上最灵活的流量工程工具。大型 IXP 通常定义一套社区属性规范,参与者可以通过附加社区控制路由的通告范围、本地优先级和黑洞过滤。在配置前务必查阅 IXP 的社区属性文档。

五、IXP 的高级服务#

5.1 Route Collector#

Route Collector(路由收集器)被动收集 IXP 上所有参与者通告的路由,用于路由分析和故障排查。RIPE NCC 的 RIS(Routing Information Service)是最大的路由收集项目:

# 从 RIPE RIS 获取路由数据(使用 REST API)
curl -s "https://ris-live.ripe.net/v1/live/?format=json&peer=64510&type=UPDATE" | jq .
# 典型输出:
# {
# "type": "UPDATE",
# "peer": "64510",
# "peer_asn": 64510,
# "timestamp": 1715000000,
# "path": [64510, 64501, 174],
# "community": [[64510, 100], [64510, 200]],
# "prefix": "203.0.113.0/24"
# }
# 查询特定前缀的路由信息
curl -s "https://stat.ripe.net/data/looking-glass/data.json?resource=203.0.113.0/24" | jq .

Route Collector 与路由服务器的区别:Collector 只收路由不转发,相当于一个”窃听器”;路由服务器既收路由也转发路由,是”邮递员”。

5.2 Looking Glass#

Looking Glass 是 IXP 提供的 BGP 查询接口,允许参与者查看路由服务器上的路由信息:

# 通过 SSH 访问 Looking Glass(以 DE-CIX 为例)
ssh lg@looking-glass.de-cix.net
# 查看 AS64510 通告的路由
show bgp ipv4 unicast neighbor 10.0.0.1 advertised-routes
# 查看特定前缀的 BGP 路径
show bgp ipv4 unicast 198.51.100.0/24
# BGP routing table entry for 198.51.100.0/24
# Paths: (2 available, best #1)
# 64530
# 10.0.0.3 from 10.0.0.254 (10.0.0.254)
# Origin IGP, valid, external, best
# Community: 64530:100 64530:200
# Last update: 2d05h ago

5.3 IXP 上的 CDN 节点#

大型 CDN 和内容商(Google、Netflix、Cloudflare)在主要 IXP 部署边缘缓存节点,与本地 ISP 直接 Peering。这显著降低了 Transit 成本和用户延迟:

Netflix 的 Open Connect 计划是典型案例——Netflix 在全球 50+ 个 IXP 部署专用缓存服务器,ISP 通过在 IXP 与 Netflix Peering 即可为用户提供 4K 流媒体服务,无需经过 Transit 链路。Google 和 Cloudflare 也在 DE-CIX、AMS-IX 等主要 IXP 有大规模部署。

从数据包的角度看:用户请求 www.google.com,DNS 返回 Google 在本地 IXP 的任播 IP,数据包只需经过用户所在 ISP → IXP → Google 边缘节点,跳数可能只有 3-5 跳,延迟控制在 10ms 以内。

六、对等互联实践#

6.1 PeeringDB#

PeeringDB 是全球互联网互联信息的公开数据库,记录每个网络的 Peering 策略、IXP 接入信息和联系方式。在发起 Peering 请求前,必须先查 PeeringDB:

# 查询 AS64510 的 Peering 信息(PeeringDB API)
curl -s "https://www.peeringdb.com/api/net?asn=64510" | jq .
# 查询 DE-CIX 上的所有参与者
curl -s "https://www.peeringdb.com/api/ixlan/42?depth=2" | jq '.data[0].net_set | .[] | {asn, name, speed}'

Peering 策略的几种类型:

策略含义典型网络
Open欢迎任何网络 Peering,无需审批CDN、内容商
Selective有选择地 Peering,需满足一定条件大型运营商
Restrictive严格限制 Peering,通常只与对等规模的网络互联Tier-1 运营商
No Peering不提供 Peering,只卖 Transit部分 Transit-only 提供商

6.2 互联谈判#

Peering 谈判涉及商业条款和技术参数:

合同关键条款

  1. 流量比(Traffic Ratio):入站/出站流量比是否在合理范围(通常 1:1 到 1:4)
  2. SLA 保证:端口可用性(99.9%+)、故障响应时间(4 小时)
  3. 路由策略:通告哪些前缀、是否允许带 Community、MED 处理方式
  4. 终止条款:提前通知期(30-90 天)、终止后路由撤回流程
  5. 保密条款:Peering 协议内容通常保密

谈判流程

# 1. 在 PeeringDB 查询对方策略
curl -s "https://www.peeringdb.com/api/net?asn=64520" | jq '.data[0].policy_general'
# "Selective"
# 2. 发送 Peering 请求邮件
# 收件人:从 PeeringDB 获取的 peering@ 邮箱
# 主题:Peering Request - AS64510 <-> AS64520 at DE-CIX Frankfurt
# 内容:ASN、IXP 接入信息、预估流量、Peering 策略
# 3. 对方审核后回复配置参数
# - BGP 会话地址
# - 通告前缀列表
# - 路由策略要求
# 4. 双方配置 BGP 会话
# 5. 验证路由交换和流量转发

6.3 互联故障排查#

IXP 上的 BGP 会话故障排查步骤:

# 1. 检查 BGP 会话状态
show bgp ipv4 unicast summary
# 预期输出:
# Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
# 10.0.0.2 4 64520 1200 1150 50 0 0 01:23:45 150
# 10.0.0.254 4 65534 2300 2100 50 0 0 05:00:00 300
# 如果 State 列显示 Active 或 Idle:
# - Active: TCP 连接建立失败
# - Idle: BGP 被关闭或邻居配置错误
# 2. 检查 TCP 连通性
ping 10.0.0.2
traceroute 10.0.0.2
# 3. 检查 BGP 邻居配置
show running-config | include neighbor
# 4. 检查路由通告
show bgp ipv4 unicast neighbor 10.0.0.2 advertised-routes
show bgp ipv4 unicast neighbor 10.0.0.2 received-routes
# 5. 检查路由策略是否过滤了路由
show bgp ipv4 unicast neighbor 10.0.0.2 route-map in
show bgp ipv4 unicast neighbor 10.0.0.2 prefix-list in
# 6. 抓包分析 BGP 报文
sudo tcpdump -i eth0 -nn tcp port 179 -vv
# 观察 BGP OPEN、KEEPALIVE、UPDATE 报文
# 常见问题:
# - OPEN 报文 ASN 不匹配
# - HOLD_TIME 协商失败
# - BGP Identifier 冲突

常见故障模式:

症状可能原因排查方法
BGP 会话 Idle邻居配置缺失或 ASN 错误检查 neighbor 配置
BGP 会话 ActiveTCP 连不上(ACL/防火墙)ping + tcpdump port 179
会话建立但收不到路由前缀列表/路由策略过滤检查 prefix-list 和 route-map
收到路由但不通NEXT_HOP 不可达检查 Peering LAN ARP
路由抖动链路不稳定或 MTU 问题检查接口错误计数器

七、动手实践:模拟 IXP 环境#

7.1 GNS3 拓扑#

用 GNS3 + FRR 搭建一个包含 4 个 AS 和 1 个 IXP 交换机的模拟环境:

graph TB subgraph IXP["IXP Peering LAN<br/>10.0.0.0/24"] SW["IXP 交换机"] RS["路由服务器<br/>10.0.0.254<br/>AS65534"] end subgraph AS64510["AS64510 运营商A"] RA["边界路由器<br/>10.0.0.1<br/>203.0.113.0/24"] USER_A["用户网段<br/>203.0.113.0/24"] RA --- USER_A end subgraph AS64520["AS64520 运营商B"] RB["边界路由器<br/>10.0.0.2<br/>198.51.100.0/24"] USER_B["用户网段<br/>198.51.100.0/24"] RB --- USER_B end subgraph AS64530["AS64530 CDN"] RC["边界路由器<br/>10.0.0.3<br/>192.0.2.0/24"] SERVER_C["服务器<br/>192.0.2.0/24"] RC --- SERVER_C end subgraph AS64540["AS64540 内容商"] RD["边界路由器<br/>10.0.0.4<br/>172.16.0.0/16"] SERVER_D["服务器<br/>172.16.0.0/16"] RD --- SERVER_D end RA --- SW RB --- SW RC --- SW RD --- SW RS --- SW style IXP fill:#fff3e0,stroke:#e65100 style AS64510 fill:#e3f2fd,stroke:#1565c0 style AS64520 fill:#e8f5e9,stroke:#2e7d32 style AS64530 fill:#fce4ec,stroke:#c62828 style AS64540 fill:#f3e5f5,stroke:#6a1b9a

7.2 FRR 配置#

路由服务器配置

# RS - 路由服务器
vtysh
configure terminal
router bgp 65534
bgp router-id 10.0.0.254
bgp cluster-id 10.0.0.254
neighbor 10.0.0.1 remote-as 64510
neighbor 10.0.0.1 description "AS64510-运营商A"
neighbor 10.0.0.1 route-server-client
neighbor 10.0.0.2 remote-as 64520
neighbor 10.0.0.2 description "AS64520-运营商B"
neighbor 10.0.0.2 route-server-client
neighbor 10.0.0.3 remote-as 64530
neighbor 10.0.0.3 description "AS64530-CDN"
neighbor 10.0.0.3 route-server-client
neighbor 10.0.0.4 remote-as 64540
neighbor 10.0.0.4 description "AS64540-内容商"
neighbor 10.0.0.4 route-server-client
address-family ipv4 unicast
neighbor 10.0.0.1 activate
neighbor 10.0.0.1 route-reflector-client
neighbor 10.0.0.2 activate
neighbor 10.0.0.2 route-reflector-client
neighbor 10.0.0.3 activate
neighbor 10.0.0.3 route-reflector-client
neighbor 10.0.0.4 activate
neighbor 10.0.0.4 route-reflector-client
exit-address-family

AS64510 参与者配置

# AS64510 - 运营商A 边界路由器
vtysh
configure terminal
# 接口配置
interface eth0
ip address 10.0.0.1/24
description "IXP Peering LAN"
interface eth1
ip address 203.0.113.1/24
description "用户网段"
# BGP 配置
router bgp 64510
bgp router-id 10.0.0.1
# 与路由服务器的会话
neighbor 10.0.0.254 remote-as 65534
neighbor 10.0.0.254 description "IXP Route Server"
# 可选:与 AS64520 的双边 Peering
neighbor 10.0.0.2 remote-as 64520
neighbor 10.0.0.2 description "AS64520-运营商B"
address-family ipv4 unicast
network 203.0.113.0/24
neighbor 10.0.0.254 activate
neighbor 10.0.0.2 activate
# 防止向 IXP 通告默认路由
neighbor 10.0.0.254 prefix-list NO-DEFAULT out
neighbor 10.0.0.2 prefix-list NO-DEFAULT out
exit-address-family
ip prefix-list NO-DEFAULT seq 5 deny 0.0.0.0/0 le 1
ip prefix-list NO-DEFAULT seq 10 permit 0.0.0.0/0 le 32

7.3 观察路由交换#

配置完成后,验证路由交换和流量转发:

# 在 AS64510 上检查 BGP 邻居
show bgp ipv4 unicast summary
# 预期输出:
# Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
# 10.0.0.254 4 65534 50 45 10 0 0 00:05:30 3
# 10.0.0.2 4 64520 30 28 10 0 0 00:03:15 1
# 查看从路由服务器学到的路由
show bgp ipv4 unicast neighbor 10.0.0.254 received-routes
# 预期输出:
# Network Next Hop Metric LocPrf Weight Path
# *> 198.51.100.0/24 10.0.0.2 0 0 64520 i
# *> 192.0.2.0/24 10.0.0.3 0 0 64530 i
# *> 172.16.0.0/16 10.0.0.4 0 0 64540 i
# 注意 NEXT_HOP 是原始通告者的地址,不是路由服务器的地址
# 查看完整路由表
show ip route bgp
# O 198.51.100.0/24 [20/0] via 10.0.0.2, eth0, 00:05:30
# O 192.0.2.0/24 [20/0] via 10.0.0.3, eth0, 00:05:30
# O 172.16.0.0/16 [20/0] via 10.0.0.4, eth0, 00:05:30
# 从 AS64510 用户网段 traceroute 到 CDN 服务器
traceroute 192.0.2.10
# 预期输出:
# 1 203.0.113.1 0.5 ms (AS64510 边界路由器)
# 2 10.0.0.3 1.2 ms (AS64530 CDN 路由器,经 IXP 直达)
# 3 192.0.2.10 1.8 ms (CDN 服务器)
# 用 Wireshark 抓取 IXP 上的 BGP 报文
sudo tcpdump -i eth0 -nn tcp port 179 -w ixp_bgp.pcap
# 然后用 Wireshark 打开,过滤 BGP 协议
# 观察:
# 1. BGP OPEN 报文中的 ASN 和 Hold Time
# 2. UPDATE 报文中的 NLRI 和 Path Attributes
# 3. AS_PATH 是否包含路由服务器的 ASN(不应该包含)
# 4. NEXT_HOP 是否是原始通告者的地址(应该是)
Note

在模拟环境中,IXP 交换机可以用 GNS3 的以太网交换节点或 Linux bridge 代替。生产环境中 IXP 交换机通常是 Arista 7500 或 Cisco Nexus 9000 系列高性能交换机,支持 400G 端口和微秒级延迟。

八、本章小结#

概念要点
互联经济学Transit 付费买全表,Peering 免费换用户流量;SFI/BI-Peering/Paid Peering 三种协议
IXP 架构中立二层交换基础设施,交换机矩阵+多机房互联,全球 80%+ 域间流量经 IXP 交换
全球 IXPDE-CIX(法兰克福,15Tbps+)、AMS-IX(阿姆斯特丹)、LINX(伦敦)为欧洲三大
中国 NAP政府主导的强制互联,按流量结算,南北互通瓶颈的根源
路由服务器简化 N²→N 个 BGP 会话,透明转发(不改 AS_PATH/NEXT_HOP),IRR+RPKI 过滤
流量交换二层 MAC 转发,sFlow/NetFlow 监控,BGP Community 流量工程
高级服务Route Collector 被动收集路由,Looking Glass 查询 BGP,CDN 边缘缓存部署
对等实践PeeringDB 查策略,Open/Selective/Restrictive 三档,合同含流量比/SLA/终止条款
故障排查Idle→配置错误,Active→TCP 不通,收到路由不通→NEXT_HOP 不可达
模拟实验GNS3 + FRR 搭建 4AS+1IXP 环境,route-server-client 配置,Wireshark 抓包验证

数据包穿越了 IXP 的交换矩阵,从运营商 A 的边界路由器直达运营商 B 的网络——但互联网的旅程还没结束。下一章 UDP与传输基础 中,数据包将进入传输层,从最简单的 UDP 协议开始,理解端口号、校验和和多路复用如何让多个应用共享一条网络连接。


参考#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

IXP与互联网交换:网络如何互联
https://blog.souloss.com/posts/internet-architecture/ixp-and-internet-exchange/
作者
Souloss
发布于
2022-05-28
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时