
1. 从一个实验环境说起为什么要在实验室里折腾 MPLS TE很多做网络的朋友第一次听到 MPLS TE 这个词反应基本是两种一种是哦流量工程嘛运营商玩的东西另一种是标签交换我懂但 TE 到底解决什么问题。我当年也差不多直到有一次在一个模拟的骨干网环境里被一条链路拥塞、另一条链路空跑的问题折腾了整整两天才真正意识到 MPLS TE 的价值不是多一种转发方式而是让流量走它该走的路。这篇内容就是围绕一个叫 Lab MPLS TE 的实验项目展开的。说白了它是一套在实验室或模拟环境里搭建 MPLS TE 的完整实践方案核心目标是让你亲手把一条流量从默认的最短路径强行引导到一条你指定的、带宽更充裕的路径上去。它解决的是传统 IGP 最短路径转发带来的局部拥塞、全局浪费问题适合已经掌握基础路由交换、想往运营商级流量工程方向进阶的网络工程师也适合准备相关认证实验考试的同学。我下面讲的东西不是照本宣科地念协议文档而是把我在这个 Lab 里踩过的坑、想明白的原理、以及可以直接抄作业的配置步骤按从业者交流的方式摊开来讲。你会看到为什么 RSVP 要配、显式路径怎么写、隧道怎么建、流量怎么引以及那些文档里不会写但实际一配就出问题的地方。2. 整体设计思路这个 Lab 到底在模拟什么2.1 核心矛盾最短路径不等于最优路径先说清楚这个 Lab 要复现的真实场景。假设你有一个骨干网五台路由器连成一个类似日字或者田字的拓扑。IGP比如 OSPF 或 IS-IS算出来的路径永远是最短路径也就是 cost 最小的那条。问题来了如果所有流量都往这条最短路径上挤它就会拥塞而旁边那条 cost 稍大但带宽充足的链路却闲得发慌。这就是经典的拥塞链路旁边就是空闲链路现象。传统解决办法要么是调 cost但会影响所有流量按下葫芦浮起瓢要么是加链路费钱。MPLS TE 的思路完全不同它不改变 IGP 的选路结果而是在 IGP 之上再叠一层隧道让特定流量走特定隧道隧道走哪条路是我自己说了算的。提示这个 Lab 的核心不是让你背命令而是让你理解IGP 负责可达性TE 负责路径选择这个分层思想。想通这一点后面所有配置都是顺理成章。2.2 为什么选 MPLS TE 而不是别的方案你可能会问策略路由PBR也能指定路径为什么非要上 MPLS TE我当初也这么想后来发现两者根本不是一个量级的东西。PBR 是逐跳、无状态的你只能控制下一跳往哪走控制不了整条路径更没法保证带宽。而 MPLS TE 有几个 PBR 给不了的能力显式路径控制可以精确指定流量经过哪几台路由器甚至指定必须经过或必须避开某条链路。带宽预留建隧道时可以声明我要 50M 带宽RSVP 会沿途检查并预留不够就建不起来。快速重路由主路径断了可以毫秒级切到备份路径这是 PBR 做不到的。与 IGP 联动TE 隧道本身可以参与 IGP 计算作为逻辑链路被使用。所以这个 Lab 选择 MPLS TE是因为它要模拟的是有服务质量要求的骨干流量调度而不是简单的让某个包走某条路。2.3 Lab 拓扑的整体规划基于常见实践这个 Lab 的拓扑一般会设计成 5 到 6 台路由器形成一个有冗余路径的网状结构。我建议的规划是这样的设备角色数量作用头端路由器1 台隧道的起点负责发起 RSVP 信令尾端路由器1 台隧道的终点中间路由器2 到 3 台转发标签参与 RSVP 预留边缘接入1 到 2 台模拟客户流量注入点拓扑上要保证头端到尾端至少有两条物理路径一条是 IGP 最短路径我们故意让它拥塞另一条是稍长的路径我们用它建 TE 隧道。这样你才能直观看到流量被从最短路径拽到了隧道上。2.4 协议栈的分层理解这个 Lab 涉及好几个协议协同工作新手最容易晕的就是到底谁依赖谁。我用一个生活化的类比帮你理清把整个网络想象成城市交通。IGPOSPF/IS-IS负责画地图告诉大家哪些路是通的但它只关心路短不短不关心堵不堵。MPLS负责给每辆车发一个通行证编号转发时只看编号不看目的地速度快。RSVP-TE负责预订车道建隧道时沿途跟每台路由器打招呼给我留条道。CSPF负责算路线结合 IGP 地图和带宽信息算出一条满足约束的路径。TE 隧道就是那条预订好的专用车道流量从这走。理解了这层关系你就知道为什么配置顺序是先 IGP、再 MPLS、再 RSVP、最后建隧道顺序错了后面全崩。3. 核心细节解析每个组件到底在干什么3.1 MPLS 基础标签转发的关键点在碰 TE 之前MPLS 本身必须跑通。这个 Lab 里 MPLS 的作用是提供标签转发能力TE 隧道本质就是一条标签交换路径LSP。配置 MPLS 时有两个点必须注意第一是接口要同时开启 MPLS 和 IGP。很多人只开了 IGP 忘了开 MPLS结果标签分发不起来。第二是LDP 和 RSVP 的关系。普通 MPLS 用 LDP 分发标签但 TE 隧道用的是 RSVP 分发标签两者可以共存但作用不同。在这个 Lab 里TE 隧道走 RSVP普通流量走 LDP互不干扰。我实测下来MPLS 的 MTU 问题是个隐形杀手。标签会额外占 4 字节如果接口 MTU 没相应调整大包会被丢弃表现为ping 得通但传文件就断。这个坑我在 Lab 里踩过一次排查了半天才发现是 MTU。3.2 RSVP-TE隧道建立的信令过程RSVP-TE 是这个 Lab 的灵魂。它的工作过程可以拆成几步头端路由器根据配置的显式路径算出完整路径。头端发出 PATH 消息沿途每台路由器记录路径状态。尾端收到 PATH 后回发 RESV 消息沿途预留带宽、分配标签。头端收到 RESV隧道建立完成可以转发流量。这里的关键参数是带宽预留值。你声明多少RSVP 就沿途预留多少。如果某条链路剩余带宽不够RESV 会失败隧道建不起来。这个机制保证了建起来的隧道一定有带宽但也意味着你声明太大就会建不起来。注意RSVP 的预留是软状态需要周期性刷新。如果刷新消息丢了隧道可能被拆除。Lab 环境里一般不会出问题但真实网络里要关注刷新定时器。3.3 显式路径手动指定 vs 动态计算建 TE 隧道时路径有两种来源一种是手动写死的显式路径Explicit Path一种是让 CSPF 动态算。这个 Lab 我建议两种都试一遍因为它们的适用场景不同。手动显式路径适合我明确知道要走哪条路的场景比如必须经过某台特定设备。配置时用next-address逐跳指定或者用exclude-address排除某条链路。动态 CSPF 适合我只要满足带宽和约束具体走哪条你算的场景配置更简单但可控性差。我个人的经验是Lab 里先用动态 CSPF 把隧道建起来确认基础没问题再改成手动显式路径这样排查问题时能快速定位是信令问题还是路径问题。3.4 流量引导怎么让流量真的走隧道隧道建好了不代表流量就会走它这是新手最大的误区。隧道只是一条空管子你得想办法把流量灌进去。常见的方法有三种静态路由把去往某目的地的路由指向隧道接口。简单粗暴适合 Lab。自动路由让 IGP 把隧道当成一条逻辑链路自动参与选路。配置简单但影响面大。策略路由用 PBR 把特定流量引到隧道。灵活但配置复杂。这个 Lab 里我推荐用静态路由因为最直观你能清楚看到这条路由指向隧道所以流量走隧道。等理解了再试自动路由。4. 实操过程一步步把 Lab 跑起来4.1 基础环境搭建与 IGP 配置第一步是把底层打通。先给所有接口配 IP然后跑 OSPF 或 IS-IS。这里有个细节Loopback 接口一定要配因为 TE 隧道的源和目的通常用 Loopback 地址这样隧道不会因为某个物理接口 down 而断掉。配置 IGP 时我建议把 TE 相关的扩展也一起开上。以 OSPF 为例需要在 OSPF 进程下开启mpls traffic-eng支持这样 IGP 才会把 TE 需要的链路信息比如带宽、亲和属性泛洪出去。不开这个CSPF 就没有数据可算。# 以某厂商风格示意实际命令按设备调整 router ospf 1 mpls traffic-eng router-id Loopback0 mpls traffic-eng area 0配完检查一下邻居关系是否都起来了show ip ospf neighbor应该全是 FULL。这一步不牢后面全白搭。4.2 MPLS 与 RSVP 的启用IGP 通了之后全局开启 MPLS 和 RSVP然后在每个需要参与转发的接口上开启。这里要注意不是所有接口都要开只开那些在 TE 路径上的接口。但 Lab 里为了省事通常全开。# 全局 mpls traffic-eng tunnels ip rsvp bandwidth # 接口下 mpls traffic-eng tunnels ip rsvp bandwidth 100000ip rsvp bandwidth后面的数字是接口可预留的总带宽单位通常是 kbps。这个值要设得合理太小了隧道建不起来太大了又失去约束意义。我一般设成接口实际带宽的 80% 左右留点余量给普通流量。4.3 显式路径与隧道接口配置这是 Lab 的核心步骤。先定义显式路径再建隧道接口引用它。# 定义显式路径逐跳指定 ip explicit-path name TO-TAIL enable next-address 10.0.1.2 next-address 10.0.2.2 next-address 10.0.3.2 # 建隧道接口 interface Tunnel0 ip unnumbered Loopback0 tunnel mode mpls traffic-eng tunnel destination 2.2.2.2 tunnel mpls traffic-eng path-option 10 explicit name TO-TAIL tunnel mpls traffic-eng bandwidth 50000这里每个参数都有讲究。ip unnumbered Loopback0让隧道借用 Loopback 的地址省得单独分配。tunnel destination是尾端的 Loopback 地址。path-option 10里的 10 是优先级数字小的优先。bandwidth 50000声明预留 50M。配完用show mpls traffic-eng tunnels看隧道状态应该是 UP。如果是 DOWN先看 RSVP 邻居通不通再看路径上的地址写对没有。4.4 流量引入与验证隧道 UP 之后加一条静态路由把流量引进去ip route 192.168.100.0 255.255.255.0 Tunnel0然后从边缘设备 ping 目标网段同时在中间路由器上用show mpls forwarding-table看标签转发用show mpls traffic-eng tunnels看隧道的流量统计。如果统计在涨说明流量真的走隧道了。我建议做个对比实验先不加静态路由traceroute 看走的是最短路径加上之后再看路径应该变成你指定的那条。这个对比能让你直观感受到 TE 的作用。4.5 带宽约束的验证实验这个 Lab 最精彩的部分是验证带宽预留。你可以故意把隧道带宽声明得很大超过某条链路的剩余带宽然后看隧道是不是建不起来。再把带宽调小隧道就 UP 了。这个过程能让你彻底理解 RSVP 的准入控制机制。具体操作先show ip rsvp interface看每条链路的可预留带宽然后建一个超过它的隧道观察show mpls traffic-eng tunnels里的失败原因。常见原因是 RSVP reservation failed说明带宽不够。5. 常见问题与排查技巧实录5.1 隧道建不起来的排查顺序这是 Lab 里最高频的问题。我总结了一个排查顺序按这个走基本能定位排查步骤检查命令常见问题1. IGP 邻居show ip ospf neighbor邻居没起来底层不通2. MPLS 标签show mpls ldp neighborLDP 没建起来3. RSVP 邻居show ip rsvp neighborRSVP 没启用或接口没开4. TE 数据库show mpls traffic-eng topologyIGP 没泛洪 TE 信息5. 路径可达traceroute 逐跳显式路径地址写错6. 带宽show ip rsvp interface预留带宽不足我踩过最坑的一次是第 4 步IGP 里忘了开mpls traffic-eng area导致 TE 拓扑数据库是空的CSPF 算不出路径隧道一直 DOWN。这个错误很隐蔽因为 IGP 本身是好的ping 也通就是 TE 不工作。5.2 流量不走隧道的几种原因隧道 UP 了但流量不走也是常见问题。原因通常有路由没指对静态路由的目的网段写错了或者被更优的路由覆盖了。自动路由没开如果用自动路由方式忘了在隧道接口下开tunnel mpls traffic-eng autoroute announce。转发 adjacency 问题隧道接口的 forwarding adjacency 没建立IGP 不认这条逻辑链路。我的经验是先用show ip route确认去往目标的下一跳是不是 Tunnel0如果不是那就是路由问题跟 TE 无关。5.3 MTU 与分片的隐形坑前面提过 MTU 问题这里展开说。MPLS 标签占 4 字节如果叠加两层标签TE 隧道里再跑普通 MPLS就是 8 字节。如果接口 MTU 是标准的 1500实际能承载的净荷就少了。大包会被分片或丢弃表现为小包通、大包断。解决办法是调大接口 MTU或者调小 TCP MSS。Lab 里我一般直接把核心接口 MTU 调到 1600一劳永逸。5.4 隧道震荡与刷新问题RSVP 是软状态靠周期性刷新维持。如果刷新定时器设得太短网络一抖动隧道就断设得太长故障发现慢。Lab 里默认值一般够用但如果你的模拟环境性能差、丢包多可能会看到隧道反复 UP/DOWN。这种情况我建议先检查模拟环境的资源占用别急着改协议参数。很多时候是模拟器 CPU 跑满了导致信令消息延迟不是配置问题。5.5 常见问题速查表现象可能原因解决方向隧道 DOWNRSVP 邻居不通检查接口 RSVP 配置隧道 DOWN带宽不足调小 tunnel bandwidth隧道 DOWN路径不可达检查显式路径地址流量不走隧道路由未指向隧道检查静态路由或 autoroute大包不通MTU 问题调大 MTU 或调小 MSS隧道震荡刷新超时检查模拟环境性能6. 进阶玩法让这个 Lab 更接近真实场景6.1 快速重路由的配置与验证基础 Lab 跑通后强烈建议加上快速重路由FRR。它的作用是主路径断了之后流量毫秒级切到备份路径。配置上需要指定备份路径然后故意断掉主路径的一条链路观察流量切换速度。这个实验能让你理解 TE 的可靠性价值。普通路由收敛通常要秒级FRR 能做到 50ms 以内对语音、视频这类业务是刚需。6.2 亲和属性实现路径偏好亲和属性Affinity是 TE 里很实用的功能。你可以给链路打上颜色标签然后规定隧道只能走某种颜色的链路。比如给高带宽链路打上红色规定视频流量隧道只能走红色链路。配置分两步接口下设置mpls traffic-eng attribute-flags隧道下设置tunnel mpls traffic-eng affinity和掩码。这个功能在真实网络里用来做业务隔离非常常见。6.3 与 IGP 联动的自动路由自动路由让 TE 隧道参与 IGP 计算相当于把隧道变成一条逻辑链路。配置简单但要注意它会影响所有经过这条隧道的流量可能引发次优路径。Lab 里可以对比开与不开的区别理解它的影响范围。我个人的建议是自动路由适合我希望这条隧道被全网使用的场景如果只是想引导特定流量还是用静态路由或 PBR 更可控。7. 我在这个 Lab 里攒下的几条实操心得折腾完这一整套有几个体会是文档里不会写的分享给你。第一配置顺序真的不能乱。IGP → MPLS → RSVP → 隧道这个顺序是依赖关系决定的。我见过有人先建隧道再开 RSVP然后对着 DOWN 的状态发呆。按顺序来能省掉一大半排查时间。第二先用动态 CSPF 跑通再改手动路径。动态方式配置少、出错点少能快速验证底层是否正常。等底层确认没问题再改手动路径做精细控制。反过来做一旦出问题你分不清是信令问题还是路径问题。第三带宽参数宁小勿大。Lab 里为了看到效果很多人喜欢把带宽设得很大结果隧道建不起来还找不到原因。我建议从接口带宽的 10% 开始试确认能建起来再逐步调大这样你能清楚看到带宽约束的边界在哪。第四验证要看数据面不能只看控制面。隧道 UP 只是控制面成功流量真的走了才算数。一定要用show mpls forwarding-table和隧道流量统计来确认数据面。我吃过只看状态不看统计的亏以为隧道在工作其实流量还在走老路。第五模拟环境的性能会影响实验结果。如果模拟器资源不足RSVP 刷新可能超时隧道会莫名震荡。遇到这种情况先看资源占用别一头扎进协议配置里。这个 Lab 后续还可以往几个方向扩展加上 FRR 做可靠性实验加上亲和属性做业务隔离或者把拓扑扩大做多区域 TE。每加一个维度你对 MPLS TE 的理解就深一层。等你把这些都跑通了再回头看运营商网络里的流量工程就会发现那些复杂的配置背后逻辑其实很清晰。