导图社区 MPLS协议原理与配置
华为HCIE中的IENP及交换中的第一节,MPLS协议原理与配置,文档中大量引用与华为的IENP教材,此导图为自己归纳所得。
编辑于2019-08-23 16:23:31MPLS协议原理与配置
1 MPLS概述
1 MPLS的基本结构 多协议转发
背景
快速路由技术
提高了硬件限制下的转发能力
可以扩展多种网络协议
工作于数据链路层与网络层中间
基本网络结构
LSP ( Label Switched Path )
标签交换路径,即到达同一目的地址的报文在MPLS网络中经过的路径。
类似于OSPF的路由
FEC ( Forwarding Equivalent Class )
一般指具有相同转发处理方式的报文。 在MPLS网络中,到达同一目的地址的所有报文就是一个FEC.
类似于OSPF的报文
路由器的角色
LER ( Label Edge Router)
用于标签的压入或弹出,如上图中的RTB , RTD
LSR (Label Switched Router )
用于标签的交换,如图中的RTC
数据流的方向
(Ingress )
LSP的入口LER被称为入节点
( Transit)
位于LSP中间的LSR被称为中间节点
(Egress )
LSP的出口LER被称为出节点
2 MPLS体系结构
控制平面: 路由信息, 标签信息
路由信息表RIB ( Routing Information Base )
由IP路由协议(IP RoutingProtocol )生成,用于选择路由。
标签分发协议LDP ( Label Distribution Protocol )
负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作
标签信息表LIB ( Label Information Base )
由标签分发协议生成,用于管理标签信息
转发平面: 即数据平面( Data Plane ) 负责普通IP报文的转发 带MPLS标签报文的转发
转发信息表FIB ( Forwarding Information Base )
从RIB提取必要的路由信息生成,负责普通IP报文的转发。
标签转发信息表LFIB ( Label Forwarding Information Base )
简称标签转发表, 由标签分发协议建立LFIB ,负责带MPLS标签报文的转发。
报文的转发过程
当收到普通IP报文时,查找FIB表,
Tunnel ID为0x0,则进行普通IP转发
Tunnel ID为非0x0,则进行MPLS转发,
当收到带标签的报文时,查找LFIB表
如果对应的出标签是普通标签,则进行MPLS转发
如果对应的出标签是特殊标签,如标签3,则将报文的标签去掉进行IP转发。
3 MPLS数据报文结构
MPLS标签封装在链路层和网络层之间,可以支持任意的链路层协议,
MPLS标签的长度为4个字节,共分4个字段
Label
20bit,标签 短而定长 仅有本地意义, 用于唯一标识去往同一目的地的报文分组
Exp
3bit,用于扩展。流量控制 现在通常用做Cos ( Class of Service ) , 当设备发生阻塞时优先发送优先级高的报文
S
1bit,栈底标识 MPLS支持多层标签,即标签嵌套 S值为1时,表明为最底层标签
TTL
8bit,和IP报文中的TTL ( Time To Live )意义相同。
标签空间是指标签的取值范围
0~15
特殊标签。 如标签3,称为隐式空标签,用于倒数第二跳弹出;
16-1023
静态LSP和静态CR-LSP ( Constraint-based Routed Label SwitchedPath )共享的标签空间
1024及以上
LDP, RSVP-TE (Resource Reservation Protocol-Traffio Engineering ),MP-BGP (MultiProtocol Border Gateway Protocol )等动态信令协议的标签空间。
LSP的建立
建立LSP的方式
静态LSP
用户通过手工方式为各个转发等价类分配标签建立转发隧道
动态LSP
通过标签发布协议动态建立转发隧道
静态LSP
特点:
类似静态路由
1 不使用标签发布协议,不需要交互控制报文,资源消耗小
2 无法根据网络拓扑变化动态调整,需要手动干预
遵循原则:
前一节点出标签的值等于下一个节点入标签的值
配置过程
1 配置LSR ID
mpls Isr-id Isr-id
LSR ID用来在网络中唯一标识一个MPLS路由器
为了提高网络的可靠性,推荐使用LSR某个Loopback接口的地址作为LSRID
缺省没有配置LSRID,必须手工配置
2 在MPLS域的所有节点与相应的接口上开启MPLS协议
system-view mpls interface interface-type interface-number mpls
3 在Ingress进行以下配置
static-lsp ingress Isp-name destination ip-address (mask-length mask){ nexthop next-hop-address | outgoing-interface interface-type interface-number } * out-label out-label
4 在Transit进行以下配置
static-lsp transit Isp-name [ incoming-interface interface-type interface-number]in-label in-label { nexthop next-hop-address | outgoing-interface interface-typeinterface-number} * out-label out-label
5 在Egress进行以下配置
static-lsp egress Isp-name [incoming-interface interface-type interface-number in-label in-label [ Isrid ingress-lsr-id tunnel-id tunnel-id ]
完成上述配置后,只是完成了RTA到RTD的单条LSP , RTD返回RTA的LSP路径也需要配置才能实现RTA正常访问RTD100.1.1.1/32的路由
动态LSP
定义
通过LDP协议实现对FEC的分类、标签的分配以及LSP的建立和维护等操作
特点
1 组网配置简单,易于管理和维护
2 支持基于路由动态建立LSP,网络拓扑发生变化时,能即使反映网络状况
工作机制
Egress路由器RTD
为本地存在的路由分配标签,
发送内容:路由和标签的绑定关系
路由器RTC收到,
将其记录到LIB中,
发送内容:路由和标签的绑定关系
路由器RTB收到,
将其记录到LIB中,
发送内容:路由和标签的绑定关系
RTA为Ingress路由器
动态的LSP完成建立
控制层面
邻居建立过程
LDP邻居发现
周期性发送LDP链路Hello消息(LDP Link Hello)
实现LDP邻居的发现,并建立本地LDP会话
Hello消息
UDP封装
5S发送一次
组播,目的地址224.0.0.2
携带Transport Address字段
字段与设备配置的LSR ID一致
与对端建立邻居关系时所使用的IP地址
字段IP地址是直连接口IP地址
直接建立邻居关系
字段地址是LoopBack接口IP地址
保证该接口IP地址路由可达,才能建立邻居关系
LDP邻居建立
4类消息
发现( Discovery )消息
用于通告和维护网络中邻居的存在,,如Hello消息
会话( Session )消息
用于建立、维护和终止LDP对等体之间的会话,如Initialization消息、Keepalive消息
通告( Advertisement )消息
用于创建、改变和删除FEC的标签映射,如Address消息、Label Mapping消息
通知( Notification )消息
用于提供建议性的消息和差错通知
邻居建立过程
1 两个LSR之间互相发送Hello消息
Hello消息中携带传输地址,双方使用传输地址建立LDP会话
2 传输地址较大的一方作为主动方,发起TCP连接
RTB作为主动方发起TCP连接, RTA作为被动方等待对方发起连接
3 TCP连接建立成功后,由主动方RTB发送初始化消息,协商建立LDP会话的相关参数
LDP会话的相关参数包括LDP协议版本、 标签分发方式、Keepalive保持定时器的值、 最大PDU长度和标签空间等。
4 被动方RTA收到初始化消息后
如果RTA接受相关参数,则发送初始化消息,同时发送Keepalive消息给主动方RTB,
如果被动方RTA不能接受相关参数,则发送Notification消息终止LDP会话的建立
5 主动方RTB收到初始化消息后
接受相关参数,则发送Keepalive消息给被动方RTA.
不能接受相关参数,则发送Notification消息给被动方RTA终止LDP会话的建立
6 当双方都收到对端的Keepalive消息后, LDP会话建立成功。LDP会话建立成功后,进行FEC的创建与标签的分发
标签工作机制
标签的发布方式
DU ( Downstream Unsolicited ,下游自主方式)
对于一个到达同一目地址报文的分组, LSR无需从上游获得标签请求消息即可进行标签分配与分发
对于目的地址为100.1.1.1/32的分组, 下游RTD ( Egress )。 通过标签映射消息主动向上游RTC ( Transit )通告自己主机路由100.1.1.1/32的标签
DoD (Downstream on Demand ,下游按需方式)
对于一个到达同一目的地址报文的分组, LSR获得标签请求消息之后才进行标签分配与分发
对于目的地址为100.1.1.1/32的分组,上游RTC ( Transit )向下游发送标签请求消息,下游RTD ( Egress )收到标签请求消息后,才会向上游发送标签映射消息
华为设备默认采用DU的方式发布标签
DU无需等待上游的请求消息,可以直接向邻居分配标签。在网络拓扑发生变化时,采用DU方式可以快速反应为新的拓扑分发标签,收敛时间相对于DoD方式较短。
标签的分配控制方法
Independent (独立标签分配控制方式)
本地LSR可以自主地分配一个标签绑定到某个IP分组, 并通告给上游LSR ,而无需等待下游的标签
如果标签发布方式为DU,且标签分配控制方式为Independent,则RTC (Transit )无需等待下游RTD ( Egress )的标签,就会直接向上游RTB分发标签
如果标签发布方式为DoD,且标签分配控制方式为Independent ,则发送标签请求的RTB (Transit )的直连下游RTC (Transit )会直接回应标签,而不必等待来自下游RTD ( Egress )的标签
Ordered (有序标签分配控制方式)
只有当该LSR已经具有此IP分组的下一跳的标签, 或者该LSR就是该IP分组的出节点时, 该LSR才可以向上游发送此IP分组的标签.
如果标签发布方式为DU,且标签分配控制方式为Ordered ,则RTC ( Transit )只有收到下游RTD ( Egress )的标签,才会向上游RTB分发标签
如果标签发布方式为DoD,且标签分配控制方式为Ordered ,则发送标签请求的RTB ( Transit )的直连下游RTC ( Transit )只有收到下游RTD ( Egress )的标签,才会向上游RTB分发标签。
华为设备默认采用Ordered的方式分配标签。
采用Ordered方式,只有当该LSR已经具有此P分组的下一跳的标签时,才能向上游分发标签,这样是为了避免下游P分组的标签未分配或收敛时间较长,上游的标签已分配,数据开始转发造成的数据丢失。
标签的保持方式
路由表中, RTB通过RTD到达100.1.1.1/32的路径最优, RTB从RTC收到分配给100.1.1.1/32的标签处理方式有以下两种:
1 称为Liberal方式, RTB保留从RTC收到的标签信息
2 称为Conservative方式, RTB不保留从RTC收到的标签信息
1 Liberal (自由标签保持方式)
对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。
2 Conservative (保守标签保持方式)
对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。
网络拓扑变化引起下一跳邻居改变
使用自由标签保持方式, LSR可以直接利用原来非下一跳邻居发来的标签, 迅速重建LSP,但需要更多的内存和标签空间
使用保守标签保持方式, LSR只保留来自下一跳邻居的标签, 节省了内存和标签空间,但LSP的重建会比较慢
华为设备默认采用自由标签保持方式保存标签
LDP建立LSP过程
IGP协议负责实现MPLS网络内路由可达,为FEC的分组提供路由
LDP协议负责实现对FEC的分类、标签的分配以及LSP的建立和维护等操作。
LDP动态建立LSP的过程
RTD是Egress节点
上存在100.1.1.1/32的主机路由
发布100.1.1.132与标签的绑定关系
RTC
将标签记录在自己的LIB表中
同时RTC查看自己IP路由表中到达100.1.1.132的下一跳是否为RTD
下一跳为RTD,则RTC使用RTD分配的标签封装到达100.1.1.1/32的数据;
下一跳不是RTD.则RTC保留RTD分配的标签作为备用标签:
发布100.1.1.132与标签的绑定关系
RTB,执行与RTC相同的动作;
RTA,。
查看自己IP路由表中到达100.1.1.1/32的下一跳是否为RTB
下一跳为RTB,则RTA使用RTB分配的标签封装到达100.1.1.132的数据:
下一跳不是RTB,则RTA保留RTB分配的标签作为备用
因为RTA为Ingress ,最终到达 100.1.1.1/32的LSP完成建立,
LDP的基本配置
mpls Isr-id Isr-id //配置本节点的LSR ID
mpls //使能全局MPLS功能,并进入MPLS视图
mpls ldp //使能全局的LDP功能,并进入MPLS-LDP视图
interface interface-type interface-number //进入需要建立LDP会话的接口视图
mpls //使能接口的MPLS能力
mpls ldp //使能接口的MPLS LDP能力
MPLS数据转发过程
在MPLS网络中, 数据包在每台路由器上 根据已分配的标签 进行标签的封装和转发分析数据包
到达Egress节点RTD上怎么处理? 如果MPLS网络中业务量很大,Egress节点的处理方式有何不妥?
MPLS数据转发过程
RTA上收到访问100.1.1.1/32的数据包
普通的IP报文,查找FIB表,
Tunnel ID为非0x0,
封装已分配的标签1027进行MPLS转发
带标签的报文,查找LFIB表,;
封装已分配的标签1027进行MPLS转发
RTB收到RTA发送的带标签1027的报文,查找LFIB表
封装已分配的出标签1026进行MPLS转发给RTC
RTC收到RTB发送的带标签1026的报文,查找LFIB表
封装已分配的出标签1025进行MPLS转发给RTD
RTD收到RTC发送的带标签1025的报文,查找LFIB表,出标签为Null ,
出标签为Null:代表数据包已到Egress节点,标签信息去掉,并进行三层处理查找IP路由表
发现100.1.1.1/32的路由为本地的路由, 根据IP路由表的出接口进行封装并转发。
如果MPLS网络中的业务量很大, 则每次数据包在Egress节点都要进行两次处理才能进行正确的路由转发, 这样会导致Egress节点的处理压力增加,路由器的处理性能降低。
我们希望在Egress节点上只处理一次就能将数据包正确转发,以提高Egress的转发性能,所以提出了PHP技术。
Penultimate Hop Popping
PHP ( Penultimate Hop Popping , 倒数第二跳弹出),具体过程
RTC收到RTB发送的带标签1026的报文,查找LFIB表,
发现分配的出标签为隐式空标签3, 于是执行弹出标签的动作,并将IP数据包转发给RTD;
RTD收到RTC发送的IP报文,直接查找自己的FIB表,
根据FIB表中的出接口进行IP数据的封装并转发。