MPLS基础概念
MPLS(多协议标签交换协议),是一种应用于运营商IP骨干网的数据交换技术,采用短而定长的标签进行数据转发。
MPLS起源于IPv4网络,但目前其核心技术可通过扩展支持多种网络层协议,如IPv6、IPX(因特网包交换)、CLNP(无连接网络协议)等,在数据链路层上支持PPP、以太网、HDLC等多种协议
MPLS协议发展历程
20世纪90年代,互联网流量快速增长,由于路由器采用最长匹配算法逐跳转发数据包,转发效率低,成为网络数据转发的瓶颈,快速路由技术成为当时研究的热点,在各种方案中,IETF确定了MPLS协议作为标准的协议。
不过随着硬件技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈了,这使得MPLS在提高转发速度方面不再具备明显的优势。MPLS在设计时定位在TCP/UDP网路体系结构中的2.5层位置,即位于链路层和网络层之间,但是加上其“Multiprotocol”的设计理念,使得MPLS在VPN、TE(流量工程)、QoS等应用方面变得更加灵活
MPLS网络结构
路由器角色
LSR(标签交换路由器)
MPLS网络中的路由器,进行MPLS标签交换和报文转发的网络设备
LER(边缘路由器)
位于MPLS网络边缘,连接其它网络(如IP网络)的LSR,主要进行标签的分发和剥离
标签转发涉及的基本概念
LSP(标签交换路径)
IP报文在MPLS网路转发过程中所经过的路径
FEC(等价转发类)
一般具有相同特征的报文为同一FEC
这个特征可以是报文的源IP地址、目的IP地址、源端口、目的端口、VPN实例、QoS策略等要素中的一个或者多个(在MPLS网络中,常见的就是匹配相同路由的所有报文属于一条FEC)
对于一条FEC来说,沿途所有设备都必须具有相同的路由(前缀和掩码必须完全相同),才可以建立一条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称为入节点(剥离标签操作)
MPLS标签分配和交换的体系结构
MPLS体系主要是由控制平面和转发平面构成
控制平面(产生和维护路由信息以及标签信息)
RIB(Routing Information Base):由各种IP路由协议生成,用于进行路由选择
LDP:一种动态标签分发协议,负责MPLS标签的分配、LFIB的建立,LSP的建立与拆除等工作
LIB(Label Information Base):由LDP生成(每个LSR都会基于所收到的每个FEC的标签映射信息,建立LIB表项),用于管理标签信息,包含FEC网段、入标签、出标签等信息
转发平面(负责普通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报文的优先级,数值越小,优先级越低,当设别阻塞时,优先发送优先级高的报文
S(1bit):栈底标识,由于MPLS支持多层标签(即标签嵌套),当S值为1时表明为最底层标签,其它各层标签S值为0
TTL(8bit):和IP报文中的TTL(Time To Live)意义相同,用于限制MPLS报文的传输距离
MPLS报文转发
MPLS报文转发涉及的相关概念
Tunnel ID字段:32bit,就只是本地有效,需要在本地设备上唯一
NHLFE:下一跳标签转发表项,用于指导MPLS报文转发,包含Tunnel ID、出接口、出标签、标签操作类型等信息
ILM:入标签映射,入标签到下一跳标签转发表项的映射,包含Tunnel ID、入标签、入接口、标签操作类型等信息
在MPLS转发过程中,FIB、ILM和NHLFE表现是通过Tunnel ID关联的
可以将LFIB再细化为ILM表和NHLFE表
标签操作动作
Push:标签压入, 可能会在Ingress或Transit节点上发生,在二层协议头和IP头部之间插入一个MPLS标签,或者是在现有标签栈顶再增加一个新的出标签(标签嵌套)
Swap:标签交换,会在Transit节点上发生,通过ILM、Nhife表项查找下一台哦
用下一跳分配的标签交换MPLS报文中原有的栈顶标签。原有MPLS报文可以携带一层或多层标签,不过只会替换最外层标签
Pop:标签剥掉,会在倒数第二跳Transit节点(PHP特性-在LDP协议中有讲解)或者Egress节点发生。MPLS报文离开MPLS域时剥离标签,使得后续报文按照IP路由转发。
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表,获得标签操作类型
如果标签中的栈底标识S=1,则表明该标签是栈底标签,直接进行IP转发
如果标签中的栈底标识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字段为固定值
此后报文在MPLS网络中按照标准的TTL处理方式处理。
在出节点会将IP TTL字段的值减1。
即IP分组经过MPLS网络时,无论经过多少跳,IP TTL只在入节点和出节点分别减1
注意事项
在MPLS VPN应用中,
出于网络安全的考虑,需要隐藏MPLS骨干网络的结构,
这种情况下,对于私网报文,Ingress上使用Pipe模式。
入节点系统视图:undo ttl propagate 配置ttl模式为Pipe
ttl propagate 配置ttl模式为propagate