传统IP路由依赖路由器查询路由表,硬件性能限制导致查表转发成为网络数据转发的瓶颈,MPLS在网络内部采用更高效的标签(Label)转发,节约了处理时间。 现今硬件性能提升。MPLS在提高数据转发速度上的优势逐渐弱化,但其支持多层标签嵌套和设备内转控分离的特点,使其在VPN、QoS等新兴技术中有了广泛应用。
::: tip 私网在公网转发时不能直接封装,私网信息需要通过隧道转发重新封装。 MPLS在IP之上进行数据封装,MPLS在数据链路层和网络层之间增加MPLS头部,向网络层给提供服务。 数据的封装可以使用多种隧道的实现,MPLS的封装只是隧道的一种形式。 :::
MPLS结构
MPLS domin:运行了MPLS的设备组成的区域。
LSR:标签交换设备(支持MPLS的设备)。
Ingress LSR(LER):入节点 设备报文处理动作:向IP报文中压入MPLS头部并生成MPLS报文 设备标签处理动作:push(压入标签) Transit LSR(Core LSR):中间节点 设备报文处理动作:将MPLS报文进行例如标签置换操作,并将报文继续在MPLS域中转发 设备标签处理动作:swap(替换标签) Egress LSR(LER):出节点 设备报文处理动作:将MPLS报文中MPLS头部移除,还原为IP报文 设备标签处理动作:pop(弹出标签)
::: tip 上下游出入节点通过流量方向判断,上游为流量发起,下游为流量接收,即入节点是出节点的上游。 位于MPLS域边缘、连接其它网络的LSR称为边沿路由器LER,区域内部的LSR称为核心LSR。 ::: 3. FEC:转发等价类。MPLS作为一种分类转发技术,FEC是将具有相同转发处理方式的分组归为一类。相同FEC的分组在MPLS网络中将获得完全相同的处理。 如到同一个目的地址的所有报文就是一个FEC。 使用标签唯一标识一个分组所属的FEC,一台设备上一个标签只能代表一个FEC。 进行负载分担等时,对应一个FEC可能会有多个入标签。
FEC可以通过源地址、目标地址、源端口、目标端口、VPN、DSCP等要素判断是否为同一组流量,对于同一条流量,有固定的处理动作。 4. LSP:标签交换路径。 LSP是标签报文穿越MPLS网络到达目的地所走的路径,由一个入节点和一个出节点组成,是单项路径。 参考IP网络负载分担浮动路由等概念,在MPLS中称为负载、浮动LSP(FEC作为流量匹配方式,判断负载分担情况下LSP路径的选择)。 入标签确定后即可确定一个FEC的唯一转发路径。LSP由各LSR为一条FEC唯一分配的入标签(由各LSR分段建立)和由下游节点为本地节点分配FEC出标签映射组成。 LSP路径上可以存在0个或多个中间节点,但一定要有入节点和出节点。 ::: tip 同一个FEC的报文通常采用相同的LSP穿越MPLS域,即对同一个FEC,LSR总是用相同的标签转发。 ::: 5. MPLS的体系结构:
如上FIB表的生成需要通过RIB和LDP同时生成。 如OSPF协议生成路由,LDP学习到OSPF的路由后,再生成LIB。 FIB需要融合RIB和LDP的信息。 入节点设备接收到IP报文后,根据FIB进行数据处理时,需要判断数据是通过IP转发还是MPLS转发。
控制平面:负责产生和维护路由信息以及标签信息
路由信息表RIB:由IP路由协议(IP Routing Protocol)生成,用于选择路由
标签分发协议LDP:负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作
标签信息表LIB:由标签分发协议生成,用于管理标签信息
转发平面:即数据平面,负责普通IP报文的转发以及带MPLS标签报文的转发
转发信息表FIB:从RIB提取必要的路由信息生成,负责普通IP报文的转发
标签转发信息表LFIB:简称标签转发表,由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发
MPLS标签
MPLS标签长度为32bit: ::: tip 可以生成标签协议:
- LDP协议
- MP-BGP协议
- RSVP-TE协议
上述协议产生的标签都由MPLS转发。 :::
Label:携带标签值,长度20bit,范围0-20bit,即标签值的取值范围:0-2^20。
1.特殊标签 0-15:每一个标签都存在独立作用 3号标签:隐式空标签。倒数第二跳设备将数据转发至最后一跳设备时,标签封装的值为3(存在特殊含义:PHP),倒数第二跳设备不封装标签信息(即将3号标签解封装),发送没有标签的空IP报文给最后一跳设备,供最后一跳设备直接按照IP转发。 2.静态标签 16-1023:是一段管理员手工配置的MPLS标签 3.动态标签 1024-最大:是一段通过动态协议自动获取的标签值
- EXP:用于流分类,长度3bit,范围21-23bit。 用于QoS的服务调度,通过EXP字段对数据进行标识。 EXP只在MPLS头部中存在,不能完成QoS端到端的调度。
- S:长度1bit,即24bit。 标识该标签是否为栈底位标签(紧挨着IP头部的MPLS标签)。 S = 1,表示该MPLS头部是栈底标签;S = 0,表示下面封装的还是MPLS头部,该MPLS头部不是栈底标签 (MPLS可以封装一个或者多个)。
- TTL:长度8bit,范围25-32bit。 和IP报头中的TTL作用相等,每经过一台设备-1,用于防止环路。
::: tip 标签栈:多个MPLS标签头部的集合。 标签栈的第一个称之为栈顶标签。标签栈的最后一个称之为栈底标签。 :::
MPLS的生成依赖路由,标签的转发不依赖路由。 静态方式:管理员手工配置静态标签,设备不需要存在路由信息。即AR1上不需要有到达AR4的静态路由。 上述拓扑路由器只配置接口IP不配置IGP协议。
以下操作表示设备开启支持MPLS能力:
[AR1]mpls lsr-id 1.1.1.1 供LDP使用
[AR1]mpls
Info: Mpls starting, please wait... OK!
接口使能MPLS功能:
[AR1-GigabitEthernet0/0/0]mpls
配置静态标签交换路径(针对一条FEC)
[AR1]static-lsp ?
egress Egress node
ingress Ingress node
transit Transit node
[AR1]static-lsp ingress AR1 destination 4.4.4.4 32 outgoing-interface gi 0/0/0 nexthop 10.1.12.2 out-label ?
INTEGER<16-1048575> Out label
[AR1]static-lsp ingress AR1_AR4 destination 4.4.4.4 32 outgoing-interface gi 0/0/0 nexthop 10.1.12.2 out-label 102
如上配置后,AR1到AR4的数据会加上102的标签发到AR2
[AR2]static-lsp transit AR1_AR2_AR4 incoming-interface gi 0/0/0 in-label 102 outgoing-interface gi 0/0/1 nexthop 10.1.23.3 out-label 203
[AR3]static-lsp transit AR1_AR2_AR3_AR4 incoming-interface gi 0/0/0 in-label 203 outgoing-interface gi 0/0/1 nexthop 10.1.34.4 out-label 304
[AR4]static-lsp egress AR4 incoming-interface gi 0/0/0 in-label 304 AR4只需要做入方向的接收
查看AR1的FIB表:
[AR1]ip route-static 4.4.4.4 32 10.1.12.2
[AR1]ping -a 1.1.1.1 4.4.4.4
配置静态后AR1的转发表出现4.4.4.4的表项,标示走隧道转发: ::: warning tunnel ID为0时表示走IP转发,不为0时表示走隧道转发。 ::: 配置静态后可以查看到路由被打上标签: AR2上不需要配置到AR4的静态路由,也可以替换标签后继续向下发送: ::: tip AR1是入节点ingress,连接了IP网络,后续中间节点AR2、AR3是MPLS网络,不需要存在路由。 AR1上需要存在路由以便于判断该流量走IP网络还是MPLS网络。 ::: 查看静态LSP信息: ::: warning 上图中查看AR1的LSP,AR1去往AR4的FEC只在入节点AR1上可以判断,这条FEC的入方向是空的,在出方向封装标签102,AR1认为去往4.4.4.4的FEC发出后下一跳就是AR4,而实际上下一跳发给AR2。 AR2收到后,查看LSP信息如下: 严格对应接口和标签,如果入接口和标签对应不上,则认为是错误信息。 R2认为封装203标签从GE0/0/1发出,下一跳为AR4。 AR2上没有FEC,只按照标签转发。如果要实现AR2访问AR4,需要把AR2当成入节点,新建静态路由将流量送入隧道,使用新的FEC匹配类,打标签向后转发。AR3会认为AR1和AR2发来的两条FEC都是去往AR4的相同的类。 :::
配置AR1-AR4的回程标签:
[AR4]static-lsp ingress AR4_AR1 destination 1.1.1.1 32 outgoing-interface gi 0/0/0 nexthop 10.1.34.3 out-label 403
[AR3]static-lsp transit AR4_AR3_AR1 incoming-interface gi 0/0/1 in-label 403 outgoing-interface gi 0/0/0 nexthop 10.1.23.2 out-label 302
[AR2]static-lsp transit AR4_AR3_AR2_AR1 incoming-interface gi 0/0/1 in-label 302 outgoing-interface gi 0/0/0 nexthop 10.1.12.1 out-label 201
[AR1]static-lsp egress AR1 incoming-interface gi 0/0/0 in-label 201
[AR4]ip route-static 1.1.1.1 32 10.1.34.3 回程时AR4变为入节点,需要存在路由。
配置完成后AR1和AR4通过MPLS网络通信:
MPLS转发过程
MPLS使用的重要参数
- tunnel id:系统分配的隧道ID。表示是否需要进行隧道转发。
- NHLFE:下一跳标签转发表项。包含tunnel id、出接口、下一跳、出标签、标签动作。
- ILM:入标签映射表。包含tunnel id、入接口、入标签、标签动作。
报文转发过程:
IP报文进入MPLS域时:
1.入节点查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0(如果Tunnel ID值为0x0,则进入正常的IP转发流程)
2.如果Tunnel ID值不为0x0,根据FIB表的Tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项关联起来
3.查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型
4.在IP报文中压入出标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳
MPLS报文在MPLS域转发时:
5.中间节点根据MPLS的标签值查看对应的ILM表,得到Tunnel ID
6.根据ILM表的Tunnel ID找到对应的NHLFE表项
7.查看NHLFE表项,得到出接口、下一跳、出标签和标签操作类型,标签操作类型为Swap,则交换标签
MPLS报文需要离开MPLS域时:
8.出节点根据ILM查询到该标签对应的操作为Pop,说明需要剥离该标签
9.根据当前标签头部的下一层报文头部进行下一步处理
::: tip 管理员视角:入节点收到数据后,通过Tunnel ID判断数据走IP还是MPLS隧道。Tunnel ID不为0走MPLS,通过Tunnel ID找到NHLFE表项,将NHLFE表中的出接口、下一跳、出标签、标签动作等封装在标签信息内发给中间节点,中间节点收到后根据标签值(ILM表的入标签)找到Tunnel ID,根据Tunnel ID找到NHLFE表,再根据NHLFE表中的出接口、下一跳、出标签、标签动作等封装在标签信息内发给下一个节点,如此反复。
MPLS转发过程中,FIB、ILM和NHLFE表项是通过Tunnel ID关联,设备内处理时为索引值。 :::
MPLS对于TTL的处理
MPLS的TTL和IP报文的TTL作用相同,两种TTL的关联:
- MPLS的TTL只在MPLS域中存在,进入IP网络还需要使用IP的TTL进行防环。
- 在MPLS域中,MPLS的封装优先于IP报文,如果出现了环路,IP报文的TTL不能实现防环。
MPLS中TTL的作用
处理模式
1.Uniform(统一模式) IP网络中报文进入MPLS网络时,TTL通过CE设备传递给PE设备,IP的TTL值-1,并将该值映射给MPLS的TTL。在MPLS网络中每经过一台设备,MPLS的TTL值-1。MPLS网络的报文进入IP网络时,将MPLS的TTL值-1映射给IP的TTL (MPLS网络中最后一跳虽然会剥离MPLS标签,但实际上也会TTL-1) 即相当于IP的TTL值在MPLS网络中每经过一台设备也-1,如此处理IP网络中的设备可以知道报文在MPLS隧道中转发经过的设备数量 2.Pipe(管道模式) IP网络中报文进入MPLS网络时,TTL通过CE设备传递给PE设备,IP的TTL值-1,MPLS的TTL和IP的TTL没有关系。在MPLS网络中每经过一台设备,MPLS的TTL值-1。MPLS网络的报文进入IP网络时,将MPLS的TTL值-1后直接弹出标签栈,IP的TTL值-1 (MPLS网络对于IP网络来说只是一台设备,经过MPLS网络,IP的TTL值-1) 即相当于IP网络的设备不关心报文在MPLS隧道中转发经过的设备数量, MPLS网络架构会更安全
Uniform模式下入方向TTL的处理: Pipe模式下入方向TTL的处理:
响应报文
在MPLS网络中,LSR设备收到TTL=1的报文需要向源地址回复TTL超时消息,回包的源地址是接收tracert报文LSR设备的接口地址,目标地址是发送tracert报文的源地址。
tracert route回复的信息有两种处理动作:
1.中间设备都存在源地址的路由信息
如果中间设备收到TTL值等于1的消息,则向源地址回复TTL超时,使用IP报文进行封装
2.中间设备不存在源地址的路由信息(涉及MPLS VPN)
如果中间设备收到TTL=1的消息,并且设备不存在去往源地址的路由信息,中间设备不会直接丢弃该报文,而是将报文重新封装,按照原有信息的替换动作,替换信息的标签,新的MPLS TTL赋值255(也可能是其他值),报文内携带ICMP的TTL超时消息,向下一个节点转发,直至转发到出节点,出节点弹出标签后,根据目标IP地址将TTL值超时的消息回复给源设备(出节点有路由)
::: tip MPLS报文中TTL传播模式为uniform统一模式。 ::: 修改MPLS TTL的处理模式:
[AR1-mpls]ttl propagate ?
public Public network 默认是公网下的统一模式
vpn Virtual private network
[AR1-mpls]undo ttl propagate public 公网下的管道模式
::: warning 一定是在入节点配置MPLS TTL的处理模式。 配置修改MPLS TTL的处理模式只影响此后新建立的LSP,如果需要对之前建立的LSP也生效,应执行reset mpls ldp命令重建LSP。 :::