MPLS多协议标签交换技术

332 阅读9分钟

发展背景

  1. mpls采用短而定长的标签进行数据转发,大大提高了硬件限制下的转发能力,而且mpls可以扩展多种网络协议
  2. 原有ip转发采用最长匹配,需多次查表,算法效率不高,且当时多采用cpu进行转发处理,性能有限
  3. ATM转发采用唯一匹配,一次查表,效率很高。但ATM控制信令复杂,成本高昂,难以普及
  4. mpls采用了ATM的一次查表,简单快速的标签交换。将全局意义的路由表改为只有本地意义的标签表

Multi-Protocol Label Switching

  1. mpls协议封装在链路层与网络层之间 定位为2.5层位置
  2. 一种标签转发技术
  3. 可以承载在各种链路层协议之上,如PPP、ATM、帧中继、以太网
  4. 可以承载各种网络层报文,如IPV4,IPV6
  5. 采用无链接的控制平面,实现路由信息的传递和标签的分发
  6. 采用面向连接的数据平面,实现报文在建立的标签转发路径上传送

R-C.png

图片.png

MPLS报文结构

图片.png

图片.png

字段备注
label20bit 用于报文转发
exp3bit 用于承载ip报文中的优先级
s1bit 栈底标志,表明是否是最后一个标签(mpls标签可以多层嵌套)
ttl8bit 类似ip头部ttl 用来防止报文环路

标签label

  • 较短,定长,只有本地意义,用于唯一标识去往同一目的地址的报文分组
标签空间备注
0-15特殊保留标签
16-1023静态lsp和静态cr-lsp共享的标签空间
1024以上ldp、rsvp-te、mp-bgp等动态信令协议的标签空间

标签多层嵌套

  • 对于一个lsr标签处理路由器来说,只处理第一个(最顶层)标签
  • 主要应用于mpls-vpn、mpls-te

排查与维护

查看标签表

图片.png

查看静态lsp状态

图片.png

查看lsp邻居

  • 如果lsr-id为环回口 需要配置到达环回口的路由 建立tcp连接后邻居建立成功
  • 如果只要单方向的静态lsp也会导致邻居建立失败

图片.png

tracert查看标签信息

图片.png

mpls报文处理的三种行为*

push 打标签

  • 在入节点(Ingress)设备打上Out-Label的标签

swap 转发标签

  • 中间节点(Transit)设备转发数据时将标签改变为Out-Label标签并且转发出去

pop 剥离标签

  • 在出节点(Egress)设备剥离数据包In-Label的标签

设备是如何确定入方向标签和出方向标签的?

  • 标签分发由下游设备依次往上游设备分发 数据转发为上游设备往下游设备转发

图片.png

总结

  • 报文进入mpls网络,ingress lsr设备发现报文目的ip地址有与其关联的标签转发表项时,进行压标签操作
  • 报文在mpls网络中间进行转发时,进行标签交换,设备只需查询转发表即可完成报文转发
  • 报文在转出mpls网络时,发现自己为该lsp的最下游设备,完成弹出标签的操作

报文分析 mpls-ping报文

ping mpls ipv4 2.2.2.2

图片.png

lsp的建立*

  • mpls需要为报文事先分配好标签,建立一条lsp,才能进行报文转发 标签分配方向和数据转发方向是相反的

图片.png

方式备注
静态lsp通过手动方式为各个FEC分配标签建立转发隧道
动态lsp通过标签发布协议动态建立转发隧道

静态lsp

  • 不使用标签发布协议,不需要交互控制报文,资源消耗比较小
  • 通过静态方式建立的lsp不能根据网络拓扑变换动态调整,需要管理员干预
  • 适用于拓扑简单并且稳定的小型网络
  • 配置原则:上游节点出标签=下游节点入标签

动态lsp

  • 通过标签发布协议(ldp、mp-bgp、rsvp-te)动态建立
  • 实现对FEC的分类、标签的分配以及lsp的建立和维护等
  • 组网配置简单,易于管理与维护
  • 网络拓扑发生变化时,能及时反应网络状况
  • 标签由下游lsr分配,按从下游到上游的方向分发
  • 倒数第二跳为标签为3 即 3>1024+>1024+>1024+>.... 理论上为出节点弹出标签 但实际上倒数第二跳设备弹出标签

MPLS防环机制

机制备注
IGP环路检测机制RIP、OSPF各自的防环机制
TTL环路检测帧模式的MPLS使用TTL 信元模式的MPLS中无TTL,使用LDP环路检测机制
LDP环路检测机制距离向量法,最大跳数法

MPLS对TTL的处理模式

模式备注
UniformMPLS TTL和IP TTL相互同步,中间节点只处理MPLS TTL 默认
PipeMPLS TTL设置为固定值,IP TTL只在入和出节点分别减1 可以隐藏mpls网络细节

图片.png

mpls ttl propagate public   // 全局修改为pipe模式

图片.png

LDP环路检测

机制备注
距离向量法LSR发送标签请求时,添加自己的LSR ID,如果收到的LSR如何发现了自己的LSR ID,丢弃
最大跳数法LSR发送标签请求时,更新Hop Count, 如果到达预设最大值,丢弃

图片.png

静态LSP配置

#
mpls lsr-id 1.1.1.1  // 配置lsr-id 必须手工配置 推荐环回口地址
mpls enable          // 全局开启mpls
int g0/0
 mpls enable         // 接口使能mpls

#
static-lsp ingress lsp1 destination 3.3.3.3 32 nexthop 12.1.1.2 out-label 100  入节点
static-lsp transit lsp1 in-label 100 nexthop 23.1.1.3 out-label 200  // 中间节点
static-lsp egress lsp1 in-label 200 destination 3.3.3.3 32   // 出节点

静态MPLS配置实验

LDP 标签分发协议*

  • 在LSR之间建立LDP Session(LDP会话)
  • 建立了LDP Session的两台设备称为LDP Peer(LDP邻居)
  • 在LDP peers间交换Label/FEC映射

图片.png

LDP消息类型

  • 封装在UDP或TCP之上,端口号646
类型备注协议
discovery发现,邻居的发现和维护UDP
session会话,会话的建立、维护、终止TCP
advertisement宣告,创建、改变和删除FEC标签映射TCP
notification通知,告警和错误信息TCP

图片.png

LDP发现机制

机制备注
LDP基本发现机制发现直连的邻居,使用组播 周期性5s的发送LDP-LINK-HELLO,建立本地LDP会话
LDP扩展发现协议发现非直连的邻居,使用单播 周期性5s的发送LDP-targeted-hello,建立远端LDP会话

224.0.0.1 发送所有地址 224.0.0.2发送所有路由器 图片.png

LDP邻居发现过程

  • hello消息使用UDP封装,发送周期为5s,使用组播地址224.0.0.2
  • hello消息中,携带有transport address(传输地址)字段,该字段默认与lsr-id一致,表明与对端建立邻居关系时所用的ip地址(保证路由可达)

图片.png

#
interface GigabitEthernet0/1
 mpls ldp transport-address interface   // 修改传输地址为接口地址

LDP协商报文

图片.png

协商成功后 发送keepalive报文 会话建立

  • 参数包括LDP协议版本,标签分发方式,keepalive保持定时器的值,最大PDU长度和标签空间等
  • 如果不能接受相关参数,则发送Notification消息终止LDP会话的建立

图片.png

图片.png

标签的发布与管理

  • LDP会话建立后,LDP协议开始交换标签映射等信息用于建立LSP。RFC5036分别定义了标签发布方式标签分配控制方式标签保持方式来决定LSR如何发布和管理标签
术语备注
标签发布方式DU、DOD
标签分配控制方式Ordered、Independent
标签保持方式Liberal、Conservative
  • 设备的上下游,与数据转发的方向相对,数据先到达的地方是上游,后到达的地方是下游

标签的发布方式[发送给上游邻居标签的时机]

  • 将标签给邻居的前提条件[是等上游设备请求后分配标签还是无需等待直接给上游设备标签]
类型备注
DU*Downstream Unsolicited 下游自主 LSR无需从上游获得标签请求消息即可进行标签分配与分发
DoDDistribution on Demand 下游按需 LSR必须从上游获取标签请求消息之后进行标签分配与分发
  • 备注 华为和思科设备默认DU,因为在网络拓扑发生变化时,采用DU可以快速反应为新的拓扑分发标签,收敛时间相对于DOD较短

图片.png

图片.png

标签分配控制方式[设备本身产生标签的方式]

  • 为一条路由前缀分配标签的前提条件。标签由设备自动随机生成 [标签是你自己随机生成还是下游设备发送给你]
类型备注
Independent独立,LSR可以主动分配标签,无需等待下游的标签
Ordered*有序,LSR只有收到下游的标签后,才能分配标签
  • 备注 华为设备默认采用Ordered,这样是为了避免下游IP分组的标签未分配或收敛时间较长,上游的标签已经分配,数据开始转发造成的数据丢失。思科默认采用Independent

图片.png

图片.png

组合

图片.png

标签保持模式

  • 如何保留从邻居接受到的标签

  • Liberal 自由

    • 保留邻居所有的标签,无论邻居是否是自己的下一跳
    • 优点:路由发生变化时能够快速建立新的LSP进行数据转发
    • 缺点:消耗更多内存与标签空间
  • Conservative 保守

    • 只保留来自下一跳邻居的标签
    • 优点:节省内存和标签空间
    • 缺点:路由发生变化时必须从新的下一跳那里获得标签然后才能够转发数据,收敛较慢
    • 通常与DoD方式一起
  • 备注 华为和思科设备默认采用Liberal

图片.png

自由模式会保留所有的标签 保守模式只会根据路由表去选择标签

倒数第二跳弹出

  • 在最后一跳节点,标签已经没有使用价值。这种情况下,在倒数第二跳节点将标签弹出,减少最后一跳的负担

特殊保留标签

图片.png

MPLS相关配置命令

mpls lsr-id 地址               // 配置lsr-id 必须手工配置 全局唯一 推荐loopback
mpls                           // 全局使能mpls
mpls ldp                       // 全局使能ldp
mpls ldp transport-address     // 配置传输地址
undo ttl propagate             // 配置mpls ttl处理模式为pipe
reset mpls ldp                 // 重启ldp

mpls ldp
 lsp-trigger {all | ip-prefix}   // 配置lsp触发策略 默认/32主机路由


# 华为
mpls ldp remote-peer 名称      // 创建远端邻居 [hello使用单播]
 remote-ip 地址                // 配置远端邻居IP
 
label advertise {explict-null|implict-null-non-null}  // 配置PHP,默认支持PHP
mpls ldp advertisement {dod|du}

dis mpls lsp


# 华三
mpls ldp
 targeted-peer 远端地址
  mpls ldp transport-address  // 配置传输地址

故障排查 lsp-trigger后报文没有mpls包头

排查原因 ip prefix使用白名单形式 导致对端地址被过滤

图片.png

图片.png