MPLS协议原理与配置详解
多协议标签交换MPLS(Multiprotocol Label Switching ),MPLS在无连接的IP网络上引入面向连接的标签交换概念,将第三层路由技术和第二层交换技术相结合,充分发挥了IP路由的灵活性和二层交换的便捷性
MPLS并不是一种业务或者应用,它实际上是一种隧道技术。这种技术不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性
MPLS
-
MP:多协议
-
LS:标签交换(label switch)
应用场景
- 用于早期提高转发效率
- 用于MPLS VPN(二层或三层标签)
- 用于MPLS TE流量工程
- 用于解决路由黑洞:route recursive-lookup tunnel
MPLS是工作在“2.5”层的协议
- 在二层头部和IP头部之间插入MPLS头部(短而定长的4字节)
- MPLS头部可以插入多层,普通的MPLS插入一层头部,MPLS VPN插入2层MPLS头部
一、MPLS基本结构
1.MPLS域
能够进行标签转发的区域
2.MPLS 设备角色
LER(label edge router):处于MPLS网络的边界设备,负责标签的压入push和弹出pop
LSR(label switch router):处于MPLS网络的中间区域,负责标签的交换swap
3.LSP标签转发路径
到达同一目的地址的报文在mpls网络中经过的路径
数据转发过程中的LSP是单向的
LSP需要构建成功后才能进行标签转发
- 构建方式:静态、动态
LSP的建立过程时间就是将FEC和标签进行绑定
4.FEC转发等价类
-
具有相同转发处理方式的报文,在MPLS网络中,到达同一目的地址的所有报文就是一个FEC
-
MPLS中,一条FEC对应着一条路由
-
FEC的划分方式
- 以源地址、目的地址、源端口、目的端口、协议类型或VPN等为划分依据
-
设备为FEC进行标签分配;设备对一条FEC完成标签分配后(FEC和标签绑定),建立一条LSP
- 设备为FEC分发的标签作为入标签
- 设备收到FEC对应的标签作为出标签
- 标签值只具有本地意义(不同设备的标签分发是可以一致的)
5.数据流向
上游:数据源方向
下游:数据目的方向
ingress入节点:负责压入标签
transit中间节点:负责标签交换
egress出节点:负责弹出标签
标签分发是从下游往上游方向分发
标签动作
动作 | 解释 |
---|---|
push | 压入 |
swap | 交换 |
pop | 弹出 |
null | 剥离标签,出空标签 |
二、MPLS体系结构
控制层面
负责生成和维护路由信息和标签信息
1.IP路由协议
- 产生路由信息
2.RIB路由信息表
- 存放路由信息
3.LDP标签分发协议
- Label Distribution Protocol
- 为FEC分发标签
4.LIB标签信息表
-
Label Information Base
-
由LDP生成,存放FEC和标签的映射关系,管理标签信息
数据层面
负责IP报文的转发和带MPLS标签报文的转发
从控制层面下发得到,形成最优表项,直接指导数据转发
1.FIB转发信息表
-
Forwarding Information Base
-
基于RIB生成,指导IP报文转发
-
判断数据是否需要标签转发
- tunnel ID为0x0:进行IP转发
- tunnel ID为非0x0:查看LFIB表,进行标签转发
2.LFIB标签转发信息表
-
Label Forwarding Information Base
-
基于LIB表和IP路由表生成,指导标签报文转发
-
由ILM表(入标签映射表)和NHLFE(下一跳标签转发表)构成
NHLFE表(下一跳转发表项)
-
内容
-
出接口
-
下一跳
-
出标签
-
-
查看方式
-
display tunnel-info tunnel-id xxx display mpls lsp include x.x.x.x 32 verbose
-
ILM表(入标签映射表)
-
内容
- 入标签
- 入接口
- tunnel ID(token)
- 标签操作类型
-
查看
-
display mpls lsp in-label xxxx verbose display mpls lsp
-
FIB表通过tunnel ID关联到LFIB表,ILM表通过tunnel ID关联到NHLFE表
3.转发方式
-
接收到IP数据包,查看目的地址对应的tunnel ID
- tunnel ID为0x0:进行IP转发
- tunnel ID为非0x0:查看LFIB表,进行标签转发
-
接收到带MPLS标签的数据包,直接查看LFIB表
- LFIB出标签为普通标签进行标签交换
- LFIB出标签为空标签查看FIB进行IP转发
三、MPLS的数据转发流程
当数据进入MPLS域时:
根据FIB表查找相对应的转发条目,转发条目中包含tunnel ID字段**
查看tunnel ID字段
- tunnel ID为0x0,进行IP转发
- tunnelID为非0x0,进行MPLS转发
查看二层头部信息中的TYPE字段
- type=0x0800表示上层为IP
- type=0x8847表示上层为MPLS
1.ingress的处理
查询FIB表和NHLFE表指导报文转发
-
查看FIB表,根据目的IP地址找到对应tunnel ID
-
display fib ##可以找到相关目的地的tunnel ID
-
-
根据tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项相关联起来(FTN)
-
##查看详细信息(出接口、下一跳、出标签) display tunnel-info tunnel-id 0x3 ##查看详细信息(出接口、下一跳、出标签,标签操作类型) display mpls lsp include 4.4.4.4 32 verbose
-
-
查看NHLFE表项得出接口、下一跳、出标签和标签操作类型
-
在IP报文中压入出标签、同时处理TTL,然后将封装好的MPLS报文从相应出接口发给下一跳
2.transit的处理
通过查询ILM和NHLFE表指导MPLS报文转发
-
根据MPLS的标签值查看对应的ILM表,可以得到tunnel ID。
-
display mpls lsp in-label 1025 verbose ##根据标签查找tunnel id
-
-
根据ILM表的tunnel ID找到对应的NHLFE表项
-
查看NHLFE表项,得出出接口、下一跳、出标签和标签操作类型
-
在IP报文中压入出标签、同时处理TTL,然后将封装好的MPLS报文从相应出接口发给下一跳
transit节点上MPLS对不同的label有不同的处理方式
- 如果label>=16,则用新标签替换替换旧标签,同时处理TTL,然后将替换完标签的报文发送给下一跳
- 如果label=3,直接弹出标签,同时处理TTL,然后进行IP转发或下一层标签转发(mpls vpn还有私网标签)
3.egress的处理
通过查询ILM表指导MPLS报文转发,或者查找IP路由表指导IP报文转发
- 如果egress节点收到IP报文,查看路由表,进行IP转发。(上游路由器有次末跳弹出3号标签)
- 如果egress节点收到MPLS报文,查看ILM表查看标签操作类型,同时处理TTL
- 如果标签中栈底标识S=1,表明该标签是栈底标签,直接进行IP转发
- 如果标签中的栈底标识S=0,表明还有下一层标签,继续进行下一层标签转发
NHLFE表项为什么存在下一跳?
正常情况下,根据出标签值和出接口即可完成数据转发
存在下一跳主要是为了完成二层头部 目的MAC地址封装
ILM表项为什么存在入接口?
正常情况下,根据入标签即可查找到对应的ILM表项
但是设备中的标签一般会有很多,添加入接口是为了加快标签的查找时间
tunnel ID的作用?
1.在ingress节点根据tunnel id判断是进行IP转发还是MPLS转发2.通过tunnel id查找NHLFE标签
3.标识隧道
四、MPLS的数据报文结构
标签:短而定长,4字节
MPLS报文(32bit)
内容:
1.label
-
标签值;20bit;范围:0-2^20
-
0—15:特殊标签、保留位
- 0:显示空标签
- 3:隐式空标签
-
16—1023:静态分配的标签
-
1024—2^20:动态分配的标签
路由器为FEC分发标签作为自身入标签,同一个设备为不同FEC分发的标签是不能相同的
路由器收到标签作为自身出标签,入标签和出标签可以相同的也可以不同
标签值只具有本地意义(不同设备的标签分发是可以一致的)
2.EXP
- 实验位;3bit;范围:0-7
- 表示数据优先级,用于QoS
3.S
- 栈底位;1bit
- 表示是否是最后一层标签
- S=1:表示是最后一层标签
- S=0:表示不是最后一层标签
4.TTL
- 生存时间;8bit;范围:0-255
- 用于MPLS数据防环
- 两种模式
- uniform统一模式(默认)
- 在入接点将IP报文TTL复制到MPLS报文的TTL中,在MPLS域中IP报文TTL不变
- MPLS报文在MPLS域内经过一台路由器MPLS报文TTL-1
- 最后在出节点将MPLS报文TTL重新复制回IP报文TTL
- pipe管道模式(隐藏MPLS域设备路径)
- 在入接点将IP报文TTL复制到MPLS报文的TTL中,在MPLS域中IP报文TTL不变
- MPLS报文在MPLS域内经过一台路由器MPLS报文TTL-1
- 最后在出节点,IP报文TTL-1
- uniform统一模式(默认)
管道模式下,报文将MPLS域看作一台设备,不会将MPLS报文TTL映射到IP报文TTL。报文经过MPLS域,无论MPLS域内有多少台设备,对于IP报文来说TTL只会减一。这样可以更好的隐藏MPLS域,保证安全性
mpls ##进入MPLS视图
entropy-label ttl-mode {uniform | pipe} ##修改模式为 统一/管道
防环
控制层面防环
- IGP防环
- LDP防环(默认不开启)
数据层面防环
依靠TTL防环
五、LSP建立
静态LSP、动态LSP两种建立方式
静态LSP
由用户通过手工建立的方式为FEC分发标签建立LSP隧道
优点:不需要交互控制报文,设备资源消耗比较小
缺点:配置麻烦、易出错;网络拓扑发送改变,无法动态感知,需要管理员调整
适用于拓扑结构简单,网络稳定场景
配置:
##配置底层路由协议
##全局视图下配置
mpls lsr-id 2.2.2.2 //配置该设备的LSR-ID(该地址需要路由可达)
mpls
##接口视图下配置
interface g0/0/1
mpls //接口激活MPLS,使得接口能够发送、接收MPLS报文
##入接点设备AR2配置
static-lsp ingress 4 destination 4.4.4.4 32 outgoing-interface g0/0/1 nexthop 23.1.1.3 out-label 1020
##传输结点AR3配置
static -lsp transit 4 incoming-interface g0/0/0 in-label 1020 outgoing-interface g0/0/1 nexthop 34.1.1.4 out-label 1021
##出节点设备AR4配置
static-lsp egress 4 incoming-interface g0/0/0 in-label 1021
检查命令
display mpls static-lsp
动态LSP
通过交互报文形式为FEC分配标签,并进行维护
优点:方便管理,可动态感知拓扑发生变化
缺点:交互报文,资源消耗大
有LDP协议、MP-BGP协议
- LDP标签分发协议,主要是为静态以及IGP协议路由分配标签(默认只是为32位的主机路由分发标签)
- MP-BGP多协议BGP,主要位BGP VPNv4路由分配标签(主要用于MPLS VPN)
LDP会话建立过程
LDP协议的配置
##1.底层IGP配置(ospf,static等)
##2.全局视图下配置
MPLS lsr-id x.x.x.x //配置该设备的LSR-ID
mpls //开启MPLS
mpls ldp //激活LDP协议
##3.接口视图下配置
interface g0/0/1
mpls
mpls ldp //是接口有自动分发的能力
检查命令
display mpls lsp //查看LSP
display mpls ldp
display mpls ldp session //查看邻居会话
1.LDP邻居发现
使用hello message报文
设备激活LDP后,互相发送hello message报文
- DIP为224.0.0.2发送
- 基于UDP,端口号646
- 报文携带LSR-ID和传输地址(transport address),默认一致
- 发送间隔5s,15超时
- 报文内容
- LSR ID
- label space标签空间
- 0 基于平面标签分发:所有接口使用同一套标签值进行分发
- 1 基于接口标签分发:每个接口都存在一套独立的标签
- hold time超时时间:默认15s
- transport address传输地址:用来建立TCP连接
hello message报文主要用于对等体间的互相发现,互相学习传输地址,以便建立TCP连接
2.TCP连接
基于TCP,端口号646,保证标签传递时是可靠
传输地址大的作为主动端发起TCP连接
以hello报文协商的传输地址做连接
3.LDP会话建立
使用Initialization message报文和keepalive报文
1.由主动端先发出init报文进行参数协商
- init报文内容包含:LSR ID、标签空间ID,标签分发方式、PDU长度、keepalive的计时器
2.被动端收到init报文。如果协商成功发送keepalive报文确认+init报文进行参数协商;如果协商失败,发送notification报文终止会话
- keepalive的计时器:周期15S,超时45S
3.主动端收到init报文。如果协商成功发送keepalive报文确认,会话建立成功;如果协商失败,发送notification报文终止会话
keepalive报文
4.通告阶段
使用address message报文、label mapping message报文
用来请求、通告及撤销标签绑定
Address Withdraw message、Label request message、Label mapping message、Label withdraw message、Label release message、Label abort request message
相互发送address报文
- 用于给邻居设备生成表项的下一跳
相互发送maping message报文
- 用于给邻居发送FEC+标签的映射关系
六、MPLS标签管理
数据从上游(ingress)去往下游(egress)
标签的分发是下游设备向上游设备发布,下游设备将分配的标签作为入标签,上游设备将收到的标签作为出标签
1.标签发布方式
决定是否主动分发标签
DU方式
- 下游自主,下游不需要接收上游请求就可以主动向上游发送标签映射
- 优点:标签分配速度快
- 缺点:浪费内容存储部分无用标签
DOD方式
- 下游按需,下游需要收到上游请求(label request报文)才会主动向上游发送标签映射
- 优点:只针对有用路由进行标签请求,不会存在无用标签
- 缺点:分配速度较慢
修改
##两台设备都要配置
interface g0/0/0
mpls ldp advertisement dod ##修改接口标签分发方式为DOD
2.标签分配控制方式
决定LSP隧道是否有序建立
independent方式
- 独立方式,不需要收到下游分配的标签可以往上游分配标签
- 优点:LSP隧道建立速度快
- 缺点:可能造成LSP隧道断裂
order方式
- 有序方式,需要收到下游分配的标签才可以往上游分配标签
- FEC的出标签不为null才会向上游分配标签
- 优点:保证隧道的完整性
3.标签保持方式
Liberal方式
- 自由方式,会保存不是最优的标签
- 优点:存在备份标签,收敛速度快
conservation方式
- 保守方式,只保存最优的标签
- 优点:减少内存消耗
- 缺点:当最优标签链路断开。若存在备份链路,需要重新分配标签,收敛速度忙
案例场景:
R1、R2、R3、R4在同一MPLS域,R1上会收到3.3.3.3/32这条FEC的从两个方向(R2和R3)来的标签
1.如果是liberal方式,只保存一个最优的 1025或者1027
2.如果是conservation方式,两个都保存,选择最优的作为主标签用于转发数据,另一个作为备份标签,当主标签链路断开,备份标签会浮现出来
华为默认:DU+ordered+liberal
七、PHP次末跳弹出
隐式空标签
用于解决最后一跳设备负担大的问题
在数据发送给最后一跳路由器前提前弹出标签,使最后一跳路由器只查看一次FIB表,减少最后一条的负担
实现方式
- 最后一跳路由器为上游分发特殊3号标签
- 最后一跳路由器:一条FEC在MPLS中的egress节点
- 3号标签作为倒数第二跳的出标签
- 当转发MPLS数据包时,倒数第二跳发现出标签为特殊3号标签,提前弹出标签,在与最后一条路由器之间的链路上使用IP转发
0号标签
显示空白标签
最后一跳弹出
用于QoS,保证QoS在整个链路中不丢失
- MPLS报文中EXP位
实现:
- 最后一跳路由器为上游分发特殊0号标签
- 0号标签作为倒数第二跳的出标签
- 倒数第二跳LSR将值为0的标签正常压入标签值顶部,转发给最后一跳路由器,最后一跳路由器发现报文标签值为0,则标签弹出
0号标签和3号标签区别
0号标签 | 3号标签 | |
---|---|---|
名称 | 显示空标签 | 隐式空标签 |
弹出设备 | 最后一跳弹出 | 次末跳弹出 |
备注 | 用于有配置QoS的mpls域 |
华为LDP协议默认情况下置位32位的主机路由分配标签
修改可以为不是32位的主机路由分配标签
mpls
lsp-trigger all