MPLS:多协议标签交换
概述
MPLS的历史背景
- 早期:90年代初期,由于硬件性能限制,路由器采取最长掩码匹配算法逐跳转发IP报文,当路由器表项过于庞大时,检索速度受限于硬件性能,短时间内无法得到提升,导致转发效率低,于是IETF组织提出MPLS作为快速转发技术
- 后期:硬件性能得到巨大的提升,MPLS快速转发的优势不再明显,MPLS逐渐被淘汰,但是由于MPLS支持多层嵌套和设备内转空分离的特点,再新兴领域得到广泛应用,如VPN、TE(流量工程)等而被保留下来
MPLS的网络架构
MPLS域:由一组连续的运行了MPLS的路由器集合构成的网络
LSR:标签交换路由器,运行了MPLS的路由器
LSR的角色
- 根据LSR位于MPLS域的未知,将LSR分为:
- LER:标签边缘路由器,位于MPLS域边缘的LSR,连接了其他网络,主要负责标签的压入和弹出
- core LSR:核心标签骄傲换路由器,位于MPLS域内的LSR主要负责标签的交换
- 根据对数据的处理的方式,将LSR分为
- ingress LSR:入站LSR(入节点)
- 对普通IP报文职系那个标签压入的动作,形成MPLS报文
- transit LSR:中转LSR(中间节点)
- 对MPLS报文进行标签交换
- egress LSR:出站LSR(出节点)
- 对MPLS报文执行标签弹出的动作,形成普通LIP报文
- ingress LSR:入站LSR(入节点)
FEC:转发等价类
定义
- 具有相同在那发特征的数据流,转发路径上的设备对于相同特性的数据流采用相同的处理方式
转发特征
- 数据流的五元组、DSCP、目的IP地址和掩码等等参数
- 在MPLS网络中,对FEC的划分方式为
- 对于到达同一目的地的所有报文就是一个FEC,也就是一条路由条目就是一个FEC
LSP:标签交换路径
定义
- 到达同一目的地的报文(FEC)在MPLS网络中经过的转发路径
- 一条FEC对应一条LSP,数据转发前需要先建立好LSP
特点
- LSP是单向的,是一组有序的标签的集合
- LSP的方向与数据流的方向一致
LSP的建立方式
- 静态LSP
- 手工配置
- 优点:无需交互协议报文,开销小且稳定
- 缺点:配置工作量大,无法适应网络变化,需要管理员手工干预,灵活性差,后期维护复杂
- 动态LSP
- 通过动态标签分发协议动态建立LSP
- LDP:标签分发协议
- MP-BGP:应用于MPLS VPN,为VPNv4路由分发标签
- RSVP-TE:应用于流量工程,RSVP的扩展协议(本课程不涉及)
- 通过动态标签分发协议动态建立LSP
- 手工配置
MPLS标签
-
MPLS头部封装在数据链路层和网络层中间,称为2.5层协议
-
MPLS头部参数:占32bit
-
label:标签值,20bit取值范围0~(2^20)-1
-
特殊标签
-
0~15
-
0:显示空标签,IPv4路由
-
2:显示空标签,IPv6路由
-
需要通告显示空标签时,配置命令:
-
在MPLS视图配置
label advertise explicit-null
-
-
3:隐式空标签,缺省通告
-
-
-
静态LSP使用
- 16~1023
-
动态LSP使用
- 1024~1048575
-
-
EXP:3bit,优先级字段,取值0~7,值越大优先级越高,越优先先被处理,用于QOS
-
s:1bit,栈底标识
- s=0时,表明该标签不是最后一个标签
- s=1时,表明该标签为栈底标签(最接近IP头部)
-
TTL:8bit,取值0~255,用于MPLS防环
-
MPLS标签的处理动作
- push:压入标签
- 入节点在二层和三层头部之间插入MPLS标签的行为,中间节点根据需要也可以执行该动作,在栈顶位压入一个新的标签
- swap:交换标签
- 中间节点根据标签在转发表,用下一跳分配的标签替换栈顶标签(最接近二层头部的标签)
- pop:弹出标签
- 出节点上将MPLS标签去掉
MPLS体系结构
-
控制平面
-
产生和维护路由信息和标签信息
-
RIB:路由信息表,通过运行路由协议学习到的路由存放在RIB中
-
LIB:标签信息表,通过LDP(标签分发协议)动态学习到的标签信息存放在LIB中
- 查看命令
display LDP LSP//查看LIB表信息
-
-
-
转发平面
-
负责转发普通IP报文和MPLS标签报文
-
FIB:转发信息表,由RIB映射生成,负责IP报文转发
-
LFIB:标签转发信息表,由ILM和NHLFE关联形成,负责MPLS标签报文转发
- 查看命令
display mpls lsp //查看LFIB表
-
-
MPLS转发的三张表
- FTN:FEC to NHLFE
- 由FIB和NHLFE关联产生,只在入节点存在,接收到的IP报文需要MPLS转发时,查该表以获得tunnel id
- 表中内容为
- FEC和tunnel id的映射关系
- NHLFE:下一跳标签转发表项
- 存在于入节点和中间节点,用于指导MPLS报文转发
- 表中内容为
- tunnel id、出接口、下一跳地址、出标签、标配前操作类型等
- ILM:入标签映射
- 存在于中间节点和出节点上,用于指导MPLS报文转发
- 表中内容为
- tunnel id、入标签、入接口、变迁操作类型等
- 表中内容为
- 存在于中间节点和出节点上,用于指导MPLS报文转发
MPLS数据标签转发的详细过程
- 当数据进入MPLS域时:
- 先查看FIB表项,找到对应的转发条目(FEC),查看转发条目包含的tunnel id字段
- 如果为0x0,则IP转发
- 如果为非0,则MPLS转发
- ingress的处理
- 通过查找FIB和NHLFE表项指导报文转发
- 先查找FIB,找到对应的tunnel id;
- 根据tunnel id查找到对应的NHLFE表项,将FIB和NHLFE关联起来(FTN)
- 查看NHLFE表项可以得出出接口、下一跳地址、出标签、和标签操作类型等信息
- 在IP报文中压入标签,同时处理TTL,封装MPLS报文后发送给下一跳
- 通过查找FIB和NHLFE表项指导报文转发
- transit的处理
- 通过查看ILM和NHLFE指导MPLS报文转发
- 根据MPLS的标签查看对应的额ILM表项,得到tunnel id;
- 根据获得的tunnel id找到对应的NHLFE表项
- 通过NHLFE表项可以的出处接口、下一跳地址、出标签和标签操作类型等信息
- MPLS报文的处理方式根据不同的出标签而不同
- 如果label>16,则用新标签替换MPLS报文中的旧标签
- 如果label=0,则用0标签替换MPLS报文中的旧标签(swap)
- 如果label=3,则直接弹出标签,同时哦处理TTL,封装好发送给下一跳(次末跳弹出)
- 通过查看ILM和NHLFE指导MPLS报文转发
- egress的处理
- 查询ILM指导MPLS报文或者FIB表指导IP报文转发
- 如果出节点接收到IP报文,则查FIB表转发
- 如果出节点接收到MPLS报文,则差ILM表获得标签操作类型,同时处理TTL(pop)
- 如果标签中s=1:表明该标签为占比标签,直接查FIB表IP转发
- 如果标签中s=0:表明还有下一层标签,则进行下一层标签转发
- 查询ILM指导MPLS报文或者FIB表指导IP报文转发
- 先查看FIB表项,找到对应的转发条目(FEC),查看转发条目包含的tunnel id字段