发展背景
- mpls采用短而定长的标签进行数据转发,大大提高了硬件限制下的转发能力,而且mpls可以扩展多种网络协议
- 原有ip转发采用最长匹配,需多次查表,算法效率不高,且当时多采用cpu进行转发处理,性能有限
- ATM转发采用唯一匹配,一次查表,效率很高。但ATM控制信令复杂,成本高昂,难以普及
- mpls采用了ATM的一次查表,简单快速的标签交换。将全局意义的路由表改为只有本地意义的标签表
Multi-Protocol Label Switching
- mpls协议封装在链路层与网络层之间 定位为2.5层位置
- 一种标签转发技术
- 可以承载在各种链路层协议之上,如PPP、ATM、帧中继、以太网
- 可以承载各种网络层报文,如IPV4,IPV6
- 采用无链接的控制平面,实现路由信息的传递和标签的分发
- 采用面向连接的数据平面,实现报文在建立的标签转发路径上传送


MPLS报文结构


| 字段 | 备注 |
|---|
| label | 20bit 用于报文转发 |
| exp | 3bit 用于承载ip报文中的优先级 |
| s | 1bit 栈底标志,表明是否是最后一个标签(mpls标签可以多层嵌套) |
| ttl | 8bit 类似ip头部ttl 用来防止报文环路 |
标签label
- 较短,定长,只有本地意义,用于唯一标识去往同一目的地址的报文分组
| 标签空间 | 备注 |
|---|
| 0-15 | 特殊保留标签 |
| 16-1023 | 静态lsp和静态cr-lsp共享的标签空间 |
| 1024以上 | ldp、rsvp-te、mp-bgp等动态信令协议的标签空间 |
标签多层嵌套
- 对于一个lsr标签处理路由器来说,只处理第一个(最顶层)标签
- 主要应用于mpls-vpn、mpls-te
排查与维护
查看标签表

查看静态lsp状态

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

tracert查看标签信息

mpls报文处理的三种行为*
push 打标签
- 在入节点(Ingress)设备打上Out-Label的标签
swap 转发标签
- 中间节点(Transit)设备转发数据时将标签改变为Out-Label标签并且转发出去
pop 剥离标签
- 在出节点(Egress)设备剥离数据包In-Label的标签
设备是如何确定入方向标签和出方向标签的?
- 标签分发由下游设备依次往上游设备分发 数据转发为上游设备往下游设备转发

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

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

| 方式 | 备注 |
|---|
| 静态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的处理模式
| 模式 | 备注 |
|---|
| Uniform | MPLS TTL和IP TTL相互同步,中间节点只处理MPLS TTL 默认 |
| Pipe | MPLS TTL设置为固定值,IP TTL只在入和出节点分别减1 可以隐藏mpls网络细节 |

mpls ttl propagate public

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

静态LSP配置
#
mpls lsr-id 1.1.1.1
mpls enable
int g0/0
mpls enable
#
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映射

LDP消息类型
| 类型 | 备注 | 协议 |
|---|
| discovery | 发现,邻居的发现和维护 | UDP |
| session | 会话,会话的建立、维护、终止 | TCP |
| advertisement | 宣告,创建、改变和删除FEC标签映射 | TCP |
| notification | 通知,告警和错误信息 | TCP |

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

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

#
interface GigabitEthernet0/1
mpls ldp transport-address interface
LDP协商报文

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


标签的发布与管理
- LDP会话建立后,LDP协议开始交换标签映射等信息用于建立LSP。RFC5036分别定义了标签发布方式、标签分配控制方式、标签保持方式来决定LSR如何发布和管理标签
| 术语 | 备注 |
|---|
| 标签发布方式 | DU、DOD |
| 标签分配控制方式 | Ordered、Independent |
| 标签保持方式 | Liberal、Conservative |
- 设备的上下游,与数据转发的方向相对,数据先到达的地方是上游,后到达的地方是下游
标签的发布方式[发送给上游邻居标签的时机]
- 将标签给邻居的前提条件[是等上游设备请求后分配标签还是无需等待直接给上游设备标签]
| 类型 | 备注 |
|---|
| DU* | Downstream Unsolicited 下游自主 LSR无需从上游获得标签请求消息即可进行标签分配与分发 |
| DoD | Distribution on Demand 下游按需 LSR必须从上游获取标签请求消息之后进行标签分配与分发 |
- 备注 华为和思科设备默认DU,因为在网络拓扑发生变化时,采用DU可以快速反应为新的拓扑分发标签,收敛时间相对于DOD较短


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


组合

标签保持模式
-
如何保留从邻居接受到的标签
-
Liberal 自由
- 保留邻居所有的标签,无论邻居是否是自己的下一跳
- 优点:路由发生变化时能够快速建立新的LSP进行数据转发
- 缺点:消耗更多内存与标签空间
-
Conservative 保守
- 只保留来自下一跳邻居的标签
- 优点:节省内存和标签空间
- 缺点:路由发生变化时必须从新的下一跳那里获得标签然后才能够转发数据,收敛较慢
- 通常与DoD方式一起
-
备注 华为和思科设备默认采用Liberal

自由模式会保留所有的标签 保守模式只会根据路由表去选择标签
倒数第二跳弹出
- 在最后一跳节点,标签已经没有使用价值。这种情况下,在倒数第二跳节点将标签弹出,减少最后一跳的负担
特殊保留标签

MPLS相关配置命令
mpls lsr-id 地址
mpls
mpls ldp
mpls ldp transport-address
undo ttl propagate
reset mpls ldp
mpls ldp
lsp-trigger {all | ip-prefix}
# 华为
mpls ldp remote-peer 名称
remote-ip 地址
label advertise {explict-null|implict-null-non-null}
mpls ldp advertisement {dod|du}
dis mpls lsp
# 华三
mpls ldp
targeted-peer 远端地址
mpls ldp transport-address
故障排查 lsp-trigger后报文没有mpls包头
排查原因 ip prefix使用白名单形式 导致对端地址被过滤

