数据包经过 BGP与域间路由 的策略选路,又由 BGP安全与路由信任 的 RPKI 机制确认路由可信,终于安全地跨越了 AS 边界。但进入一个大型 ISP 的骨干网后,纯 IP 逐跳转发的问题暴露出来——最短路径不等于最优路径,一条链路可能拥塞到丢包,而旁路的链路却空闲着;运营商需要在成百上千台核心路由器之间精确调度流量,IP 路由表做不了这件事。
答案是 MPLS(多协议标签交换)和流量工程(Traffic Engineering)。MPLS 用固定长度的标签替代最长前缀匹配,让转发效率飞跃;流量工程让运营商摆脱”IGP 说走哪就走哪”的被动局面,主动把流量引导到带宽充足的路径上。本章从 ISP 的层次结构出发,深入 MPLS 标签交换、段路由(SR-MPLS/SRv6)、流量工程隧道、MPLS VPN 和运营商 QoS,最后用 GNS3 搭建 MPLS 拓扑亲手验证。
一、ISP的层次结构
1.1 Tier 1/2/3运营商
全球互联网的运营商按规模和互联关系分为三个层次:
| 维度 | Tier 1 | Tier 2 | Tier 3 |
|---|---|---|---|
| 定义 | 不需要从任何人购买 transit 即可到达全球路由表 | 需要购买部分 transit,但也有对等互联 | 完全依赖上游 transit 提供商 |
| 典型代表 | Lumen、NTT、Telia、Cogent、GTT | 中国电信、中国联通、Comcast、DT | 地方宽带运营商、企业专线提供商 |
| 互联方式 | 纯对等互联(免费互通) | 混合(对等 + transit) | 纯 transit(付费购买) |
| 覆盖范围 | 全球骨干网 | 区域/国家骨干网 | 城市/区域接入网 |
| AS 数量 | 几十个 | 几百个 | 数千个 |
Tier 1 运营商之间通过免费对等互联实现全球可达——谁也不向谁付费。Tier 2 向 Tier 1 购买 transit 获得全球可达性,同时也与其他 Tier 2 对等互联节省 transit 费用。Tier 3 则完全依赖上游。
中国的情况比较特殊:中国电信(AS4134)、中国联通(AS4837)在国内是 Tier 1 级别的骨干运营商,但到全球路由表仍需通过国际出口与其他 Tier 1 互联。严格来说它们是 Tier 2,但体量已接近 Tier 1。
1.2 运营商网络架构
一个大型 ISP 的网络通常分为三层:
- 接入层:用户接入的第一跳设备,BRAS 负责认证计费和地址分配,OLT/DSLAM 负责物理层终结
- 汇聚层:汇聚接入层流量,执行 QoS 策略、ACL 过滤、路由聚合
- 核心层:纯转发,追求极致速度。核心路由器之间用 MPLS 标签交换,不做 IP 最长前缀匹配
核心层的设计原则是”快而不慢”——只做转发,不做策略。所有策略在汇聚层和边缘路由器(PE)上执行。
1.3 POP与骨干节点
POP(Point of Presence)是运营商在城市或区域部署的网络接入点。一个 POP 通常包含:
- 边缘路由器(PE):连接客户 CE 路由器,终结 VPN 和接入服务
- 核心路由器(P):连接其他 POP 的骨干链路
- 交换矩阵:POP 内部设备互联
- 传输设备:DWDM/OTN 光传输系统
骨干链路连接不同 POP 的核心路由器,通常采用 DWDM 密集波分复用——一根光纤上跑几十到上百个波长,单波长 100G/400G,总带宽可达几十 Tbps。这些链路是运营商最昂贵的资产,也是流量工程要优化的核心目标。
二、MPLS:多协议标签交换
2.1 为什么需要MPLS
IP 转发的核心操作是最长前缀匹配——路由器收到一个包,提取目的 IP,在路由表中逐条比对前缀长度,找到最长匹配的条目。这个操作在软件路由器上很慢(O(W),W 是前缀长度),在硬件上虽然可以用 TCAM 加速,但 TCAM 容量有限、功耗大、成本高。
MPLS 的思路完全不同:在 IP 包前面加一个固定长度的标签,路由器根据标签值查表转发。标签是 20 位整数,查表是精确匹配(O(1)),比最长前缀匹配快得多。
# IP 转发:最长前缀匹配# 路由表有 50 万条前缀,每个包都要比对show ip route summary# Total routes: 834567# Connected: 12# OSPF: 2345# BGP: 832000 ← BGP 路由表巨大
# MPLS 转发:精确匹配标签# 标签转发表只有几千条,精确匹配show mpls forwarding-table# Local Outgoing Prefix Outgoing Next Hop# Label Label or Tunnel Id Interface# 10016 20016 10.0.0.1/32 eth0 10.0.1.2# 10017 20017 10.0.0.2/32 eth1 10.0.2.2MPLS 的”多协议”体现在:标签交换和底层协议无关——可以承载 IPv4、IPv6、以太网帧甚至 ATM 信元。标签操作在链路层和网络层之间进行,所以 MPLS 也被称为”2.5 层”协议。
2.2 MPLS标签格式
MPLS 标签是 4 字节(32 位)的固定长度头部,结构如下:
| 字段 | 位数 | 含义 |
|---|---|---|
| Label | 20 | 标签值,范围 0~1048575 |
| TC | 3 | 流量类别(原 EXP),用于 QoS |
| S | 1 | 栈底标志(1=栈底,0=还有更多标签) |
| TTL | 8 | 生存时间,每跳减 1,防止环路 |
几个特殊标签值:
- 0:IPv4 显式空标签(Explicit Null),PE 发给下游表示”请保留 QoS 信息”
- 1:路由器告警标签,路由器必须本地处理此包
- 2:IPv6 显式空标签
- 3:隐式空标签(Implicit Null),倒数第二跳弹出(PHP,Penultimate Hop Popping)
S 位是 MPLS 标签栈的关键——MPLS 支持标签嵌套,一个包可以携带多个标签。标签栈从栈顶开始处理,S=1 表示这是栈底标签。
2.3 LSP与标签操作
LSP(Label Switched Path,标签交换路径)是 MPLS 转发的核心概念。一条 LSP 是从入口 LER(Label Edge Router)到出口 LER 的一条有标签的路径,中间的 LSR(Label Switching Router)只根据标签转发。
MPLS 定义了三种标签操作:
- Push:压入一个新标签(入口 LER 执行)
- Swap:交换标签——弹出旧标签,压入新标签(中间 LSR 执行)
- Pop:弹出标签(出口 LER 或倒数第二跳执行)
PHP(Penultimate Hop Popping,倒数第二跳弹出)是一个优化:出口 LER 如果还要弹出标签再查 IP 路由表,需要两次查表。让倒数第二跳直接弹出标签,出口 LER 只需一次 IP 查表。出口 LER 向上游通告标签 3(隐式空标签),倒数第二跳收到标签 3 的映射就知道自己该弹出。
2.4 LDP标签分发
LDP(Label Distribution Protocol,RFC 5036)是 MPLS 最基础的标签分发协议。LDP 的工作很简单:沿着 IGP 路径逐跳分发标签映射。
LDP 会话建立过程:
- 路由器向 224.0.0.2(All Routers)发送 LDP Hello(UDP 646)
- 邻居收到后建立 TCP 会话(TCP 646)
- 交换 LDP Initialization 消息协商参数
- 进入 Operational 状态,开始交换标签映射
# FRR 中配置 LDPvtyshconfigure terminal
mpls ldp router-id 1.1.1.1
# 在接口上启用 MPLS + LDPinterface eth0 mpls enable mpls ldp enable
# 查看 LDP 邻居与标签绑定show mpls ldp neighbor# Peer LDP Ident: 2.2.2.2:0; State: opershow mpls ldp binding# Destination Local Label Remote Label# 1.1.1.1/32 imp-null 10016# 2.2.2.2/32 10017 imp-nullLDP 的标签分发是下游自主分发(Downstream Unsolicited)——不需要上游请求,下游主动把标签映射发给邻居。LDP 分发的标签严格跟随 IGP 路径——IGP 说走哪,LDP 的标签就指向哪。这意味着 LDP 本身不做流量工程,它只是让 MPLS 转发跟上 IGP 的步伐。
2.5 MPLS与IP转发对比
| 维度 | IP 转发 | MPLS 转发 |
|---|---|---|
| 查表方式 | 最长前缀匹配 | 精确匹配标签 |
| 查表复杂度 | O(W),W=前缀长度 | O(1) |
| 硬件需求 | TCAM(贵、功耗大) | SRAM(便宜、功耗低) |
| 路由表规模 | 几十万到上百万条 | 几千到几万条 |
| 路径决定 | 每跳独立决定 | 入口决定,中间只查标签 |
| 流量工程 | 困难(需修改 IGP 度量) | 原生支持(TE 隧道) |
| VPN 支持 | 需要额外机制 | 原生支持(L3VPN/L2VPN) |
| 故障恢复 | IGP 收敛(百毫秒级) | FRR(50ms 以下) |
MPLS 的核心优势不是”更快”——现代 ASIC 做 IP 最长前缀匹配也很快——而是路径可控和功能丰富。入口路由器决定标签,就决定了数据包的路径;标签栈可以嵌套,就能实现 VPN、流量工程等复杂功能。
三、段路由:SR-MPLS与SRv6
3.1 段路由的设计动机
传统 MPLS 需要 LDP 或 RSVP-TE 来分发标签——LDP 跟着 IGP 走,RSVP-TE 自己建隧道。两个协议意味着两套控制平面、两套邻居关系、两套故障检测机制。运营商维护起来很痛苦。
段路由(Segment Routing,SR)的思路是:消除独立的信令协议,把标签信息直接编码进 IGP(OSPF/IS-IS)。IGP 通告的不仅是拓扑信息,还有每台路由器的标签(SID,Segment Identifier)。这样 IGP 既是拓扑发现协议,也是标签分发协议——控制平面从两个协议简化为一个。
SR 的核心概念是段(Segment):一条端到端路径被拆成若干段,每段对应一个 SID。入口路由器把 SID 列表压入标签栈,中间路由器逐个弹出——这就是源路由(Source Routing),路径由入口决定,中间不需要信令。
3.2 SR-MPLS
SR-MPLS 用 MPLS 标签承载 SID。SID 有两种类型:
- Prefix SID:全局唯一的标签,标识一台路由器。由 IGP 通告,所有路由器对同一个 Prefix SID 的标签值达成一致
- Adjacency SID:本地有效的标签,标识一条链路。只在本路由器上有意义
SR-MPLS 的标签栈操作:入口 PE 压入整个标签栈(最内层是最终目的的 SID,最外层是第一跳的 SID),中间路由器每次弹出栈顶标签,直到露出最终目的的 SID。实际部署中,倒数第二跳弹出(PHP)同样适用——P2 会直接弹出 16003,PE2 收到的是纯 IP 包。
# FRR 中配置 SR-MPLS(基于 IS-IS)vtyshconfigure terminal
# 全局配置段路由segment-routing global-block 16000 23999 # SRGB 范围
# 配置 Prefix SIDrouter isis BACKBONE net 49.0001.0000.0000.0001.00 is-type level-1-2 segment-routing on segment-routing prefix 1.1.1.1/32 index 1 # index 1 → 标签 = 16000 + 1 = 16001
# 配置 Adjacency SIDinterface eth0 ip router isis BACKBONE isis segment-routing adjacency-sid index 10Prefix SID 的标签值 = SRGB 起始值 + index。所有路由器的 SRGB 必须一致(推荐使用默认范围 16000~23999),这样同一个 Prefix SID 在所有路由器上的标签值相同。
3.3 SRv6
SRv6 用 IPv6 扩展头部承载 SID,彻底摆脱 MPLS 标签。SRv6 的 SID 是 128 位的 IPv6 地址,封装在 SRH(Segment Routing Header)中:
# SRv6 SRH 结构(简化)# IPv6 头部: Next Header=43, Dest=SRH[0]# SRH: Segments Left=2, First Segment=3# Segment List[0] = fc00:0:4::1 ← 最后执行(PE2)# Segment List[1] = fc00:0:3::1 ← 第二跳(P2)# Segment List[2] = fc00:0:2::1 ← 第一跳(P1)SRv6 的工作方式:入口 PE 将 SID 列表写入 SRH,IPv6 目的地址设为第一个活跃 SID。每经过一个 SRv6 节点,Segments Left 减 1,IPv6 目的地址更新为下一个 SID。当 Segments Left = 0 时,到达最终目的地。
# Linux 内核配置 SRv6(实验性)sysctl -w net.ipv6.conf.all.seg6_enabled=1ip -6 route add fc00:0:2::1/128 encap seg6 mode inline segs fc00:0:3::1,fc00:0:4::1 dev eth0ip -6 route show fc00:0:2::1/128# fc00:0:2::1 encap seg6 mode inline segs fc00:0:3::1,fc00:0:4::1 dev eth0SRv6 的 SID 不仅是转发标识,还可以编码行为(Behavior):End 表示普通转发,End.X 表示指定出接口(等价于 Adjacency SID),End.DT4 表示解封装并查 VRF 路由表(VPN 场景)。这种”指令化”的 SID 让 SRv6 比 SR-MPLS 更灵活。
3.4 SR-MPLS vs SRv6 vs 传统MPLS
| 维度 | 传统 MPLS (LDP) | SR-MPLS | SRv6 |
|---|---|---|---|
| 控制平面 | LDP + IGP | 仅 IGP | 仅 IGP |
| 信令协议 | LDP(需维护邻居) | 无(IGP 携带 SID) | 无(IGP 携带 SID) |
| 标签/SID | 本地意义 | 全局(Prefix SID)+ 本地(Adj SID) | 全局(128 位 IPv6 地址) |
| 标签栈深度 | 通常 2~3 层 | 通常 2~5 层 | SRH 可携带任意数量 SID |
| 封装开销 | 4 字节/标签 | 4 字节/标签 | 128 位/SID + SRH 头部 |
| IPv6 支持 | 需 LDPv6 | 需 IGPv6 | 原生 IPv6 |
| 可编程性 | 低 | 中 | 高(SID 编码行为) |
| 硬件要求 | MPLS 转发面 | MPLS 转发面 | IPv6 扩展头处理 |
| 部署成熟度 | 最成熟 | 成熟 | 快速发展中 |
SRv6 的封装开销是个实际问题:每个 SID 占 128 位(16 字节),而 MPLS 标签只占 4 字节。一条经过 5 个节点的 SRv6 路径,SRH 就要 80+ 字节。在 MTU 受限的场景(如 1500 字节以太网)中,这可能触发分片。SRv6 压缩(SRv6 uSID)将多个 SID 压缩到一个 128 位地址中,是解决这个问题的方向。
四、流量工程
4.1 为什么需要流量工程
IGP 选路的唯一标准是最短路径——代价最小的路径胜出。但最短路径不等于最优路径:
IGP 选路:R1→R2→R4(总代价 20)。但 R1→R2 和 R2→R4 的链路只有 10Gbps,而 R1→R3→R4 的链路有 100Gbps。当 R1→R2→R4 的流量超过 10Gbps 时,链路拥塞丢包,而 R1→R3→R4 的 100Gbps 链路却几乎空闲。
流量工程解决的就是这个问题:不按最短路径走,按带宽最充足的路径走。具体来说,流量工程要实现:
- 避免拥塞:把流量从拥塞链路转移到空闲链路
- 带宽保证:为特定流量预留带宽
- 路径优化:全局优化链路利用率,而非局部最优
- 快速故障恢复:链路故障时 50ms 内切换到备用路径
4.2 RSVP-TE隧道
RSVP-TE(Resource Reservation Protocol - Traffic Engineering,RFC 3209)是传统 MPLS 流量工程的信令协议。它在 RSVP 的基础上扩展了以下能力:
- 显式路径:入口路由器指定数据包必须经过的节点列表
- 带宽预留:沿路径逐跳预留带宽资源
- 快速重路由(FRR):为隧道预先计算备份路径
# FRR 中配置 RSVP-TE 隧道vtyshconfigure terminal
mpls te router-id 1.1.1.1
interface eth0 mpls te link metric 10 mpls te link max-bw 10000 # 最大带宽 10Mbps
# 创建 TE 隧道interface tunnel0 ip address 10.99.0.1/30 tunnel mode mpls-te tunnel destination 4.4.4.4 tunnel mpls te path-option 1 explicit name PATH1 tunnel mpls te bandwidth 5000 # 预留 5Mbps
# 定义显式路径ip explicit-path name PATH1 next-address 2.2.2.2 next-address 3.3.3.3 next-address 4.4.4.4
show mpls te tunnel# Tunnel0: dest 4.4.4.4, up, bandwidth 5000 kbpsRSVP-TE 的 FRR(Fast Reroute)机制可以做到 50ms 以内的故障切换:
FRR 有两种保护方式:- **Facility 保护**(1:1):为每条链路预建一条绕行隧道,链路故障时把整条隧道切换到绕行路径- **Detour 保护**(1:1):为每条 LSP 预建一条端到端备份路径
### 4.3 SR-TE策略
SR-TE(Segment Routing Traffic Engineering)用段路由替代 RSVP-TE,不需要逐跳信令,入口路由器压入标签栈即可:
```bash
SR-TE 的优势:
1. **无逐跳状态**:RSVP-TE 在每台中间路由器上维护软状态,SR-TE 只在入口维护策略2. **无信令开销**:不需要 RSVP 的 Path/Resv 刷新消息3. **扩展性好**:中间路由器不需要为每条隧道维护状态,支持更多隧道4. **与 BGP 集成**:BGP 可以通告 SR-TE 策略(BGP SR-TE),实现跨域流量工程
### 4.4 流量工程度量
流量工程的核心是**度量网络状态**,然后根据度量做出决策:
| 度量指标 | 采集方式 | 用途 ||---------|---------|------|| 链路利用率 | SNMP/SFlow/NetFlow | 判断拥塞程度 || 链路可用带宽 | IGP-TE 扩展(OSPF-TE/IS-IS-TE) | CSPF 计算路径 || 端到端延迟 | TWAMP/STAMP | 延迟敏感业务选路 || 丢包率 | SNMP/PM | 路径质量评估 || 链路延迟变化 | PTP/NTP 时间戳 | 抖动敏感业务选路 |
IGP-TE 扩展让路由器在 LSA/LSP 中携带链路的 TE 属性(最大带宽、可用带宽、延迟等),CSPF(约束最短路径优先)算法据此计算满足约束的路径。
```bash# 查看 IGP-TE 链路信息show mpls te link# Link ID: 10.0.1.2, Max BW: 1000000 kbps, Avail BW: 750000 kbps, TE Metric: 10五、MPLS VPN
5.1 L3VPN
MPLS L3VPN(RFC 4364)是运营商最广泛部署的 VPN 技术。核心思想:用 VRF 隔离不同客户的路由表,用 MPLS 标签栈在骨干网中传输 VPN 数据。
注意客户 A 和客户 B 都使用 192.168.1.0/24——地址空间重叠在 L3VPN 中完全合法,因为每个客户的路由表在独立的 VRF 中。
L3VPN 的三个核心概念:
- VRF(Virtual Routing and Forwarding):每台 PE 上为每个客户维护独立的路由表
- RD(Route Distinguisher):8 字节标识符,把重叠的 IPv4 地址变成全局唯一的 VPNv4 地址。格式:
RD:IPv4,如65001:100:192.168.1.0/24 - RT(Route Target):BGP 扩展团体属性,控制 VPN 路由的导入导出。PE1 用 RT 导出路由,PE2 用 RT 导入路由
# FRR 中配置 L3VPN(PE1)vtyshconfigure terminal
# 配置 VRFvrf VRF_A vni 100vrf VRF_B vni 200
# 接口绑定 VRFinterface eth0 ip vrf forwarding VRF_A ip address 192.168.1.1/24interface eth1 ip vrf forwarding VRF_B ip address 192.168.1.1/24
# BGP VPNv4 + VRF 路由router bgp 65001 address-family vpnv4 neighbor 4.4.4.4 activate neighbor 4.4.4.4 send-community extended address-family ipv4 vrf VRF_A redistribute connected route-target import 65001:100 route-target export 65001:100 address-family ipv4 vrf VRF_B redistribute connected route-target import 65001:200 route-target export 65001:200数据包从 CE-A1 到 CE-A2 的转发过程:
- CE-A1 发纯 IP 包到 PE1
- PE1 查 VRF-A 路由表,找到下一跳是 PE2(4.4.4.4)
- PE1 压入两层标签:内层是 VPN 标签(由 BGP 分配),外层是 LDP/SR 标签(到 PE2 的骨干网标签)
- P 路由器只看外层标签转发,不知道 VPN 的存在
- PE2 弹出外层标签,根据内层 VPN 标签查 VRF-A 路由表
- PE2 将纯 IP 包转发给 CE-A2
5.2 L2VPN
L2VPN 在骨干网上透传二层数据帧,客户自己运行路由协议。两种主要技术:
| 维度 | L3VPN | L2VPN |
|---|---|---|
| 客户路由 | 运营商 PE 参与(PE-CE 路由交换) | 运营商不参与(透传二层帧) |
| 地址空间 | PE 上需要 VRF 和客户 IP | PE 不需要客户 IP 信息 |
| 客户协议 | PE 需要支持客户的路由协议 | 客户随意运行任何协议 |
| 典型技术 | BGP/MPLS L3VPN | VPLS、EVPN |
| 部署复杂度 | 中(需配置 PE-CE 路由) | 低(二层透传) |
| 扩展性 | 好(BGP 路由聚合) | 一般(MAC 学习开销) |
VPLS(Virtual Private LAN Service)用 MPLS 在骨干网上模拟一台交换机——所有站点像接在同一台交换机上一样。VPLS 需要全连接的伪线(Pseudowire),N 个站点需要 N×(N-1)/2 条伪线,扩展性差。
EVPN(Ethernet VPN,RFC 7432)用 BGP 传递 MAC 地址信息,取代了 VPLS 的泛洪学习。PE 只向其他 PE 通告自己学到的 MAC 地址,不需要泛洪——扩展性大幅提升。
5.3 EVPN-VXLAN融合
现代数据中心互联(DCI)的主流方案是 EVPN + VXLAN:
- VXLAN:在 UDP 中封装二层帧,用 VNI 标识租户。支持跨三层网络的大二层
- EVPN:作为 VXLAN 的控制平面,用 BGP 传递 MAC/IP 信息,取代泛洪学习
# EVPN-VXLAN 配置示例(FRR)vtyshconfigure terminal
interface vxlan0 vxlan vni 10010 vxlan local 1.1.1.1 vxlan remote 4.4.4.4
router bgp 65001 address-family l2vpn evpn neighbor 4.4.4.4 activate advertise-all-vnis
# 查看 EVPN 路由show bgp l2vpn evpn# [2]:[0]:[10010]:[48]:[00:11:22:33:44:55] Next: 4.4.4.4 Path: 65002 i# ↑ Type 2 路由:MAC/IP 通告EVPN 定义了 5 种路由类型,最常用的是 Type 2(MAC/IP 通告)和 Type 3(包容多播以太标签路由,用于 BUM 流量处理)。EVPN-VXLAN 融合了数据中心的灵活性和运营商骨干网的规模——这是当前网络虚拟化的主流方向。
六、运营商QoS
6.1 DiffServ模型
运营商骨干网采用 DiffServ(Differentiated Services,RFC 2475)模型——在域的边缘对流量分类和标记,在核心根据标记执行差异化转发。核心路由器不需要维护每流状态,只看 DSCP 值决定调度策略。
| DSCP 值 | 十进制 | PHB | 典型用途 | 丢弃优先级 |
|---|---|---|---|---|
| 101110 | 46 | EF(Expedited Forwarding) | VoIP、实时视频 | 低延迟、低抖动 |
| 100010 | 34 | AF41 | 视频会议 | 高优先级,可少量丢包 |
| 100000 | 32 | AF32 | 信令流量 | 中优先级 |
| 010000 | 16 | CS2 | 管理流量 | 确保转发 |
| 000000 | 0 | BE(Best Effort) | 普通数据 | 尽力而为 |
DSCP 占 IPv4 头部 ToS 字段的前 6 位(RFC 2474 重定义了 ToS 为 DSCP + ECN)。MPLS 标签的 TC 字段(3 位)映射 DSCP 的前 3 位,这样 MPLS 骨干网也能区分流量等级。
# Linux 中设置 DSCP + 流量分类tc qdisc add dev eth0 root handle 1: htbtc class add dev eth0 parent 1: classid 1:1 htb rate 1gbittc class add dev eth0 parent 1:1 classid 1:10 htb rate 100mbit ceil 1gbit # EFtc class add dev eth0 parent 1:1 classid 1:20 htb rate 200mbit ceil 1gbit # AF4xtc class add dev eth0 parent 1:1 classid 1:30 htb rate 500mbit ceil 1gbit # BE
# 用 iptables 标记 DSCPiptables -t mangle -A FORWARD -p udp --dport 5060 -j DSCP --set-dscp 46 # SIP=EFiptables -t mangle -A FORWARD -p udp --dport 5004 -j DSCP --set-dscp 34 # RTP=AF416.2 流量整形与监管
流量监管(Policing)和流量整形(Shaping)都控制流量速率,但行为不同:
- 监管:超速直接丢弃或降级(硬限制)
- 整形:超速缓存延迟发送(软限制,平滑突发)
两者都基于令牌桶(Token Bucket)算法:
# Linux tc 配置令牌桶监管 + 流量整形tc qdisc add dev eth0 root handle 1: htb default 30tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbittc class add dev eth0 parent 1:1 classid 1:10 htb rate 100mbit ceil 200mbit # EFtc class add dev eth0 parent 1:1 classid 1:20 htb rate 300mbit ceil 500mbit # AFtc class add dev eth0 parent 1:1 classid 1:30 htb rate 600mbit ceil 1gbit # BE
# 监管:CIR=100Mbps, 超速丢弃tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 10.0.0.0/8 \ action police rate 100mbit burst 25kbit conform-action pass exceed-action drop
# 查看整形效果tc -s class show dev eth0令牌桶的三个参数:
- CIR(Committed Information Rate):承诺速率,令牌生成的速度
- CBS(Committed Burst Size):承诺突发大小,桶的容量
- EBS(Excess Burst Size):超额突发大小,第二个桶的容量
6.3 拥塞管理
当链路拥塞时,路由器需要决定哪些包先发、哪些包丢弃——这就是队列调度。
常见的队列调度算法:
| 算法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| FIFO | 先进先出 | 简单 | 无法区分流量 |
| PQ(Priority Queuing) | 高优先级队列先发 | 延迟最低 | 低优先级可能饿死 |
| WFQ(Weighted Fair Queuing) | 按权重公平分配带宽 | 公平、不饿死 | 计算开销大 |
| CBWFQ | 按类分配带宽 | 灵活可控 | 配置复杂 |
| PQ + CBWFQ | EF 用 PQ,其余用 CBWFQ | 兼顾延迟和公平 | 配置更复杂 |
运营商骨干网通常采用 PQ + CBWFQ 的组合:EF 流量进严格优先队列(保证延迟),AF 流量进带宽保证队列(保证带宽),BE 流量进默认队列(尽力而为)。
队列长度的设置很关键:太短导致不必要的丢包(尾丢弃),太长导致延迟增大。现代路由器支持 WRED(Weighted Random Early Detection)——队列未满时就开始按概率随机丢弃,让 TCP 提前降速,避免全局同步导致的带宽崩溃。
七、动手实践:GNS3搭建MPLS拓扑
7.1 实验拓扑
用 GNS3 + FRR 搭建一个 5 路由器的 MPLS 骨干网:
PE1 和 PE2 是边缘路由器(LER),P1 和 P2 是核心路由器(LSR)。CE1 和 CE2 是客户路由器。
7.2 FRR MPLS配置
每台路由器的配置模式相同:接口启用 MPLS + LDP,OSPF 通告直连网段和 Loopback 地址。以 PE1 和 P1 为例:
# ===== PE1 配置 =====vtyshconfigure terminal
interface eth0 ip address 10.0.12.1/24 mpls enable mpls ldp enableinterface eth1 ip address 10.0.14.1/24 mpls enable mpls ldp enableinterface lo ip address 1.1.1.1/32
router ospf ospf router-id 1.1.1.1 network 10.0.12.0/24 area 0 network 10.0.14.0/24 area 0 network 1.1.1.1/32 area 0
mpls ldp router-id 1.1.1.1
# ===== P1 配置 =====# 接口:eth0 10.0.12.2/24 + eth1 10.0.23.2/24,均启用 mpls + ldp# Loopback:2.2.2.2/32# OSPF:network 10.0.12.0/24 + 10.0.23.0/24 + 2.2.2.2/32 area 0# LDP:router-id 2.2.2.2
# P2 和 PE2 配置模式相同,只需修改 IP 和 Router-ID# P2: 10.0.23.3/24 + 10.0.34.3/24, router-id 3.3.3.3# PE2: 10.0.34.4/24 + 10.0.14.4/24, router-id 4.4.4.47.3 观察标签交换
# 在 PE1 上查看 MPLS 转发表show mpls forwarding-table# Local Outgoing Prefix Out-If Next Hop# 10017 20017 2.2.2.2/32 eth0 10.0.12.2# 10018 20018 3.3.3.3/32 eth0 10.0.12.2# 10019 20019 4.4.4.4/32 eth0 10.0.12.2# 10020 imp-null 10.0.14.0/24 eth1 10.0.14.4# ↑ imp-null = 隐式空标签(PHP 倒数第二跳弹出)
# 在 P1 上查看标签操作show mpls forwarding-table# 20018 30018 3.3.3.3/32 eth1 10.0.23.3# 20019 30019 4.4.4.4/32 eth1 10.0.23.3# ↑ 到 4.4.4.4 的标签路径:PE1 push 10019 → P1 swap 30019 → P2 swap imp-null → PE2 收到纯IP
# 用 tcpdump 抓 MPLS 包sudo tcpdump -i eth0 -w mpls_capture.pcap mpls
# tshark 解码 MPLStshark -r mpls_capture.pcap -V -Y mpls# MPLS Label: 10019, Exp: 0, S: 1, TTL: 253
# 从 CE1 ping CE2,观察标签路径ping 192.168.2.1
# 在 PE1 上 traceroute MPLS 路径traceroute -m 10 4.4.4.4# 1 10.0.12.2 (P1) 1.2ms → 2 10.0.23.3 (P2) 2.3ms → 3 10.0.34.4 (PE2) 3.4ms
# 查看 LDP 邻居show mpls ldp neighbor# Peer LDP Ident: 2.2.2.2:0; State: oper; Up time: 01:23:45Wireshark 默认不解析 MPLS 标签,需要在 Edit → Preferences → Protocols → MPLS 中启用。抓包时注意:MPLS 包的以太网类型是 0x8847(单播)或 0x8848(多播),不是 0x0800(IPv4)。tcpdump 的 mpls 过滤器可以直接捕获 MPLS 包。
八、本章小结
| 概念 | 要点 |
|---|---|
| ISP 层次 | Tier 1/2/3 按互联关系分层;网络分接入/汇聚/核心三层;POP 是区域接入点 |
| MPLS 标签 | 4 字节固定头部(20 位标签 + 3 位 TC + 1 位 S + 8 位 TTL);标签栈支持嵌套 |
| LSP | 标签交换路径;Push/Swap/Pop 三种操作;PHP 倒数第二跳弹出优化 |
| LDP | 下游自主分发标签,严格跟随 IGP 路径;不做流量工程 |
| SR-MPLS | IGP 携带 SID,消除 LDP/RSVP;Prefix SID 全局,Adjacency SID 本地 |
| SRv6 | IPv6 SRH 承载 128 位 SID;SID 可编码行为(End/End.X/End.DT4) |
| 流量工程 | 最短路径 ≠ 最优路径;RSVP-TE 显式路径+带宽预留;SR-TE 无信令源路由 |
| MPLS FRR | 50ms 故障切换;Facility 保护(链路级)或 Detour 保护(LSP 级) |
| L3VPN | VRF 隔离 + RD 唯一化 + RT 控制导入导出;两层标签(VPN+骨干) |
| L2VPN | VPLS 全连接伪线(扩展性差);EVPN 用 BGP 传 MAC(扩展性好) |
| EVPN-VXLAN | 数据中心互联主流方案;EVPN 控制平面 + VXLAN 数据平面 |
| DiffServ | 边缘标记 DSCP,核心按 PHB 调度;EF 低延迟、AF 带宽保证、BE 尽力而为 |
| 令牌桶 | CIR/CBS/EBS 三参数;监管超速丢弃,整形超速缓存 |
| 队列调度 | PQ+CBWFQ 组合;WRED 随机早检测避免 TCP 全局同步 |
数据包离开运营商骨干网后,接下来要经过 IXP(互联网交换中心)在不同运营商之间交换——那是 IXP与互联网交换 的内容。
参考
- RFC 2474 — Definition of the Differentiated Services Field (DS Field)
- RFC 2475 — An Architecture for Differentiated Services
- RFC 3209 — RSVP-TE: Extensions to RSVP for LSP Tunnels
- RFC 4364 — BGP/MPLS IP Virtual Private Networks (VPNs)
- RFC 5036 — Convergence of Forwarding and Routing in MPLS
- RFC 7432 — BGP MPLS-Based Ethernet VPN
- Cloudflare RPKI Dashboard
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时






