目录
MPLS基础概念
MPLS协议发展历程
MPLS网络结构
建立LSP的标签操作动作
MPLS标签分配和交换的体系结构
MPLS标签结构
MPLS报文转发
MPLS报文转发涉及的相关概念
MPLS报文转发的基本流程
MPLS报文转发的具体流程
MPLS对TTL的处理
MPLS基础概念
MPLS(多协议标签交换协议),是一种应用于运营商IP骨干网的数据交换技术,采用短而定长的标签进行数据转发。
MPLS起源于IPv4网络,但目前其核心技术可通过扩展支持多种网络层协议,如IPv6、IPX(因特网包交换)、CLNP(无连接网络协议)等,在数据链路层上支持PPP、以太网、HDLC等多种协议
MPLS协议发展历程
20世纪90年代,互联网流量快速增长,基于CPU驱动的路由表数据转发模式在进行数据转发时占用了设备的CPU资源,转发效率低,成为网络数据转发的瓶颈,快速路由技术成为当时研究的热点,在各种方案中,IETF确定了MPLS协议作为标准的协议。
不过随着硬件技术的发展,路由查找速度和设备性能已经不是阻碍网络发展的瓶颈了,这使得MPLS在提高转发速度方面不再具备明显的优势。MPLS在设计时定位在TCP/UDP网路体系结构中的2.5层位置,即位于链路层和网络层之间,但是加上其“Multiprotocol”的设计理念,使得MPLS在VPN、TE(流量工程)、QoS等应用方面变得更加灵活
MPLS网络结构
路由器角色
LSR(Label Switch Router标签交换路由器)
MPLS网络中的路由器,进行MPLS标签交换和报文转发的网络设备
如果收到报文的二层协议字段为0x8847,则表示此报文为MPLS标签报文
LER---边界LSR(边缘路由器)
位于MPLS网络边缘,连接其它网络(如IP网络)的LSR,主要进行标签的分发和剥离
标签转发涉及的基本概念
LSP(Label Switched Path 标签交换路径)——具有方向性
- IP报文在MPLS网络转发过程中所经过的路径就为LSP
- LSP是从MPLS网络的入口到出口的一条单向路径
- 在一条LSP上,沿着数据包转发的方向,相邻的LSR分别称为上游LSR和下游LSR,下游LSP为路由始发方向
- 下游LSR给上游LSR分配标签(即标签分配方向与数据包转发方向相反,与路由发布的方向相同)
FEC(等价转发类)
- 一般具有相同特征的报文为同一FEC,相同的FEC报文在MPLS网络中将获得相同的处理方式
- 这个特征可以是报文的源IP地址、目的IP地址、源端口、目的端口、VPN实例、QoS策略等要素中的一个或者多个
- 在MPLS网络中,常见的就是基于目的IP地址来划分FEC,并为其分配标签
- 对于一条FEC来说,沿途所有设备都必须有此目的IP地址(并且前缀和掩码必须完全相同),才可以建立一条LSP(即不能随便做路由聚合的操作)
FEC与LSP的关系
同一FEC的报文走的是同一条LSP
可以理解为 相同特征的报文打上同一标记,同一标记的走同一条路径进行转发
建立LSP的两种标签类型
标签用来唯一标识一个FEC
入标签(In lable) —— 本地自己产生
出标签(Out lable)—— 由邻居分配(针对动态LSP)
FEC和出入标签之间的关系(同一台设备上)
相同FEC的入标签之间必须一致,出标签之间必须一致;但是出标签和入标签之间可以相同,也可以不同(因为入标签是由本地分配的,出标签是由下游节点分配的,之间没有唯一性要求)
不同FEC的入标签必须不同;不同FEC的出标签可以相同,也可以不同
下一跳和出入标签之间的关系
对于下一跳相同的不同路由,出标签必须不同(是同一下游节点为不同FEC下发的标签)
对于下一跳也不同的不同路由,出标签可以相同,也可以不同(是由不同下游节点为不同FEC下发的标签)
建立LSP的三种节点
一条LSP有且只有一个入节点和一个出节点,可以有0各或多个中间节点
需要先有LSP,才可以确定入节点、出节点等
入节点(Ingress)
LSP的入口LER称为入节点(打标签操作)
中间节点(Transit)
LSP的中间的LSR称为中间节点(进行标签交换和转发)
出节点(Egress)
LSP的出口LER称为入节点(剥离标签操作)
建立LSP的标签操作动作
Push:标签压入, 可能会在Ingress或Transit节点上发生,在二层协议头和IP头部之间插入一个MPLS标签,或者是在现有标签栈顶再增加一个新的出标签(标签嵌套)
Swap:标签交换,会在Transit节点上发生,根据标签转发表查找下一跳,用下一跳分配的标签(出标签)交换MPLS报文中原有的栈顶标签
原有MPLS报文可以携带一层或多层标签,不过只会替换最外层标签
Pop:标签剥掉,在当报文离开MPLS域时,将MPLS报文的标签剥离掉,使得后续报文按照IP路由转发
会在倒数第二跳Transit节点(PHP特性-在LDP协议中有讲解)或者最后一跳Egress节点发生
MPLS标签分配和交换的体系结构
MPLS体系主要是由控制平面和转发平面构成
控制平面(产生和维护路由信息以及标签信息)
RIB(Routing Information Base):又称为路由表,由各种IP路由协议生成的表项,用于进行路由选择
LDP:一种动态标签分发协议,负责MPLS标签的分配、LFIB的建立,LSP的建立与拆除等工作
LIB(Label Information Base):由LDP协议生成的表项(每个LSR都会基于所收到的每个FEC的标签映射信息,建立LIB表项),用于管理标签信息,包含FEC网段、入标签、出标签等信息
LDP和LIB的关系就类似于IP路由协议和路由表RIB的关系
转发平面(负责普通IP报文的转发以及MPLS标签报文的转发)
FIB(Forwarding Information Base):用于指导IP报文转发,从RIB提取必要的路由信息生成;包含目的网段、出接口、下一跳IP地址、路由标记、路由优先级等信息
LFIB(Label Forwarding Information Base):用于指导MPLS报文转发,从LIB提取必要的信息生成;包含目的网段、出接口、下一跳、入标签、出标签等信息
MPLS标签结构
MPLS标签封装在数据链路层和网络层之间,总共32Bit
标签(Label)是一个短而定长的、只有本地意义的表示,用于唯一标识一个FEC
Label(20bit):标签值字段
0~15:特殊标签
16~1023: 静态LSP和MPLS TE中静态CR-LSP共享的标签空间。
1024及以上:LDP、RSVP-TE、MP-BGP等动态信令协议的标签空间。
Exp(3bit):标识MPLS报文的优先级,数值越小,优先级越低,当设备阻塞时,优先发送优先级高的报文;主要用于Qos场景
S(1bit):栈底标识,由于MPLS支持多层标签(即标签嵌套),当S值为1时表明为最底层标签,其它各层标签S值为0
TTL(8bit):和IP报文中的TTL(Time To Live)意义相同,用于限制MPLS报文的传输距离
MPLS报文转发
MPLS报文转发涉及的相关概念
Tunnel ID字段:32bit,就只是本地有效,需要在本地设备上唯一
NHLFE(Next Hop Label Forwarding Entry):
下一跳标签转发表项,存储转发MPLS报文的下一跳信息,用于指导MPLS报文转发
包含Tunnel ID、报文出接口、报文出标签、标签操作类型、报文下一跳等信息
ILM(Incoming Label Map):
入标签映射,将每个入标签都映射到NHLFE表项上(如果单个标签映射到多个NHLFE则表示此入标签为多路径)
包含Tunnel ID、入标签、入接口、标签操作类型等信息
主要用于接收带标签的报文并对其进行转发
在MPLS转发过程中,FIB、ILM和NHLFE表项之间是通过Tunnel ID关联的(每个厂商对于MPLS控制层面的做法不同,以上介绍的是华为)
例如锐捷不是使用Tunnel来区分是IP转发还是MPLS转发,而是专门通过FTN表来实现,收到IP报文时,如果发现此目的IP在FTN表中,则直接将IP报文在转发时封装标签
华为可以将LFIB再细化为ILM表、NHLFE表
锐捷可以将LFIB表再细化为ILM表、NHLFE表、FTN表
MPLS报文转发的基本流程
IP报文和MPLS报文的转发主要是依靠FIB表和LFIB表项的
当收到普通IP报文时,查找FIB表,如果Tunnel ID为0x0,则进行普通报文IP转发(通过FIB表转发)。如果Tunnel ID为非0x0,则进行MPLS转发(通过LFIB表)
当收到带标签的报文时,查找LFIB表,如果对应的标签为普通标签,则进行MPLS转发。如果对应的标签为特殊标签(例如标签3),则将标签弹出,进行IP转发
MPLS报文转发的具体流程
将LFIB再细化为ILM表和NHLFE表,来讨论其转发流程
不同节点对标签不同的处理方式
Ingree:入节点,执行Push动作。
- 查看FIB表,根据目的IP地址找到对应的Tunnel ID
- 根据FIB表的Tunnel ID找到对应的Nhlfe表项,得到出接口、下一跳、出标签和标签操作类型
- 在IP报文中压入出标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳
Transit:中间节点,执行Swap动作。
- 根据MPLS的标签值查找对应的ILM表,得到对应入标签对应的Tunnel ID
- 根据Tunnel ID找到对应的Nhlfe表项,得到出接口、下一跳、出标签和标签操作类型
- 如果MPLS的标签值≥16,则用新标签替换MPLS报文中的旧标签,同时处理TTL,然后将封装好的MPLS报文通过LFIB表项发送给下一跳
- 如果标签值为3,则直接弹出标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳
Egress:出节点,执行Pop动作。
- 如果Egress收到IP报文,则根据FIB表转发
- 如果Egree收到MPLS报文,根据MPLS的标签值找到对应的ILM表,获得标签操作类型进行相应的标签操作,并处理TTL
- 对MPLS报文进行标签操作结束后,如果标签中的栈底标识S=1,则表明该标签是栈底标签,直接进行IP转发
- 对MPLS报文进行标签操作结束后,如果标签中的栈底标识S=0,则表明还有下一层标签,继续下一层标签转发
MPLS对TTL的处理
两种模式,Uniform和Pope模式
Uniform模式:(缺省)
在入节点,IP TTL减1映射到MPLS TTL字段
此后报文在MPLS网络中按照标准的TTL处理方式处理
在出节点将MPLS TTL减1后映射到IP TTL字段
Pipe模式:
在入节点,IP TTL值减1,MPLS TTL字段为固定值(255)
此后报文在MPLS网络中按照标准的TTL处理方式处理。
在出节点会将IP TTL字段的值减1。
即IP分组经过MPLS网络时,无论经过多少跳,IP TTL只在入节点和出节点分别减1
注意事项
在MPLS VPN应用中,出于网络安全的考虑,需要隐藏MPLS骨干网络的结构,这种情况下,对于私网报文,Ingress上使用Pipe模式。
当TTL到达0时,TTL过期的节点向数据包的源地址发送ICMP超时;不过产生该ICMP信息的界定啊并不是直接向源发送ICMP超时信息,而是将不可送达的数据包的原始标签栈压入到ICMP数据包,并根据新压入标签栈的顶层标签转发该数据包
入节点系统视图:undo ttl propagate 配置ttl模式为Pipe文章来源:https://www.toymoban.com/news/detail-491367.html
ttl propagate 配置ttl模式为propagate文章来源地址https://www.toymoban.com/news/detail-491367.html
到了这里,关于MPLS基本原理讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!