MPLS概述

似梦清欢
• 阅读 155

传统IP路由依赖路由器查询路由表,硬件性能限制导致查表转发成为网络数据转发的瓶颈,MPLS在网络内部采用更高效的标签(Label)转发,节约了处理时间。 现今硬件性能提升。MPLS在提高数据转发速度上的优势逐渐弱化,但其支持多层标签嵌套和设备内转控分离的特点,使其在VPN、QoS等新兴技术中有了广泛应用。

::: tip 私网在公网转发时不能直接封装,私网信息需要通过隧道转发重新封装。 MPLS在IP之上进行数据封装,MPLS在数据链路层和网络层之间增加MPLS头部,向网络层给提供服务。 数据的封装可以使用多种隧道的实现,MPLS的封装只是隧道的一种形式。 :::


MPLS结构

  1. MPLS domin:运行了MPLS的设备组成的区域。

  2. 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。 MPLS概述 ::: 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总是用相同的标签转发。 MPLS概述 ::: 5. MPLS的体系结构:

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: MPLS概述 ::: tip 可以生成标签协议:

  1. LDP协议
  2. MP-BGP协议
  3. RSVP-TE协议

上述协议产生的标签都由MPLS转发。 :::

  1. Label:携带标签值,长度20bit,范围0-20bit,即标签值的取值范围:0-2^20。

    1.特殊标签 0-15:每一个标签都存在独立作用
       3号标签:隐式空标签。倒数第二跳设备将数据转发至最后一跳设备时,标签封装的值为3(存在特殊含义:PHP),倒数第二跳设备不封装标签信息(即将3号标签解封装),发送没有标签的空IP报文给最后一跳设备,供最后一跳设备直接按照IP转发。
    2.静态标签 16-1023:是一段管理员手工配置的MPLS标签
    3.动态标签 1024-最大:是一段通过动态协议自动获取的标签值
  1. EXP:用于流分类,长度3bit,范围21-23bit。 用于QoS的服务调度,通过EXP字段对数据进行标识。 EXP只在MPLS头部中存在,不能完成QoS端到端的调度。
  2. S:长度1bit,即24bit。 标识该标签是否为栈底位标签(紧挨着IP头部的MPLS标签)。 S = 1,表示该MPLS头部是栈底标签;S = 0,表示下面封装的还是MPLS头部,该MPLS头部不是栈底标签 (MPLS可以封装一个或者多个)
  3. TTL:长度8bit,范围25-32bit。 和IP报头中的TTL作用相等,每经过一台设备-1,用于防止环路。

::: tip 标签栈:多个MPLS标签头部的集合。 标签栈的第一个称之为栈顶标签。标签栈的最后一个称之为栈底标签。 :::


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表: MPLS概述

[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的表项,标示走隧道转发: MPLS概述 ::: warning tunnel ID为0时表示走IP转发,不为0时表示走隧道转发。 ::: 配置静态后可以查看到路由被打上标签: MPLS概述 AR2上不需要配置到AR4的静态路由,也可以替换标签后继续向下发送: MPLS概述 ::: tip AR1是入节点ingress,连接了IP网络,后续中间节点AR2、AR3是MPLS网络,不需要存在路由。 AR1上需要存在路由以便于判断该流量走IP网络还是MPLS网络。 ::: 查看静态LSP信息: MPLS概述 ::: warning 上图中查看AR1的LSP,AR1去往AR4的FEC只在入节点AR1上可以判断,这条FEC的入方向是空的,在出方向封装标签102,AR1认为去往4.4.4.4的FEC发出后下一跳就是AR4,而实际上下一跳发给AR2。 AR2收到后,查看LSP信息如下: MPLS概述 严格对应接口和标签,如果入接口和标签对应不上,则认为是错误信息。 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转发过程

MPLS使用的重要参数

  1. tunnel id:系统分配的隧道ID。表示是否需要进行隧道转发。
  2. NHLFE:下一跳标签转发表项。包含tunnel id、出接口、下一跳、出标签、标签动作。
  3. ILM:入标签映射表。包含tunnel id、入接口、入标签、标签动作。

MPLS概述

报文转发过程:
  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的关联:

  1. MPLS的TTL只在MPLS域中存在,进入IP网络还需要使用IP的TTL进行防环。
  2. 在MPLS域中,MPLS的封装优先于IP报文,如果出现了环路,IP报文的TTL不能实现防环。

MPLS中TTL的作用

  1. 处理模式

    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的处理: MPLS概述 Pipe模式下入方向TTL的处理: MPLS概述

  2. 响应报文

在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。 :::

点赞
收藏
评论区
推荐文章

暂无数据

似梦清欢
似梦清欢
Lv1
学海无涯
文章
17
粉丝
17
获赞
1