MPLS 基础

传统的IP路由方式时基于目的IP的,有以下三种基本的方式:

  • 进程转发(process switching) — 路由表驱动
    • 每个数据包都要经过完整的路由表查找(最长匹配、递归查找)
  • 快速转发(fast switching)— cache驱动(新的IOS已将其废弃)
    • 第一个包永远是process-switched。
    • 大多数最近的目的地址会进入cache储存。
  • CEF(cisco express forwarding)— 拓扑驱动
    • 由FIB(转发信息库)和Adjacency Table(邻接表)组成。
    • 有了路由表就产生了FIB表。

MPLS的架构

  • 控制平面(control plane)
    • 运行路由协议,分发拓扑信息,构建路由表(RIB)
    • 运行标签分发协议,来分配、分发、保留标签,构建标签信息库(LIB)— 如TDP/LDP/RSVP/MBGP
  • 数据平面(data plane)
    • IP包基于FIB(转发信息库)进行转发
    • 标签包基于LFIB(标签转发信息库)进行转发

LDP建立邻居的过程

  • 两台路由器在建立LDP邻居之前,会通过UDP来发送discovery报文,里面携带LDP router-id、Transport Address、Discovery 的 Holdtime。
    • 默认情况下,Transport Address就是LDP的router-id。
      • 可以在全局更改LDP的router-id,来更改Transport Address。全局下,mpls ldp router-id lo1 force,通过force命令使命令立即生效。
      • 可以接口下,在不更改LDP router-id的情况下,更改Transport Address。mpls ldp discovery transport-address x.x.x.x / interface。
    • Transport Address要可达,才可以建立邻居。
    • 更改discovery的holdtime后不会立即生效,需要清一下LDP邻居。
  • 两台路由器在协商完discovery里的参数后,通过TCP建立邻居,使用646号端口。端口大的访问646号端口。

MPLS标签

  • MPLS可以用于任何地方,无论一层是什么介质、二层是什么协议。
  • LDP默认为FIB表中的每一条路由都分配标签。
  • MPLS使用32bits的Label插在二层帧头与三层包头之间(frame-mode MPLS)帧模式的MPLS。32bits的标签分为以下4个部分:
    • 20bits label — 代表标签范围。0-15是保留作为其他用途,默认从16开始分配标签。IOS XR默认是从24000开始分配标签,16000~23999建议给Segment Routing使用。
    • 3bits 实验为(experimental field)— 用于做QoS
    • 1bit的栈底位 — 用于标识紧跟着标签的下一个头部是另外一个标签(0),还是IP包(1)
    • 8bits的TTL位 — 用于防环
  • MPLS over ATM使用的ATM头部的VPI/VCI(cell-mode MPLS)信元模式的MPLS。
  • 标签堆栈
    • 二层帧头的type字段(以太的type=0x8847)标识单播的标签包
    • 栈底位 — 用于标识紧跟着标签的下一个头部是另外一个标签(0),还是IP包(1)
    • 每个路由器收到标签包以后只对顶层标签进行操作

标签交换路由器(Label Switch Routers)

  • LSR:MPLS域内的核心设备,主要执行标签交换(Label swapping)
  • Edge LSR:MPLS域的边界设备
    • 将IP包转发进入MPLS域:压标签(impose)
    • 将MPLS域内传来的报文转发到MPLS域外(pop)
  • FEC(转发等价类)
    • 拥有相同标签转发路径的一组数据包的集合
    • 在MPLS单播IP转发中,FEC=路由
  • LSP(标签交换路径)
    • 标签包从上游到下游经过的一组路由器的集合
    • 在MPLS单播IP转发中,LSP基于路由协议,所以是单向的
    • LSP也可以和路由协议选择的路径不一致(MPLS流量工程)
  • PHP(次末跳弹出)
    • Penultimate hop popping — 次末跳弹出,主要用于优化帧模式的MPLS的转发性能
    • 最末跳路由器使用POP或者implicit nul(隐含空)标签。使用保留的label-value公告给邻居(LDP=3)
    • 每个路由器会为自己的直连路由分配imp-null标签
    • 在MPLS域的倒数第二跳将标签弹掉以后,在最后一跳只需进行一次查找就可以

帧模式的MPLS的标签分配、分发、保留

  • 帧模式的MPLS的标签分配、分发、保留分为以下几个步骤:
    • 运行路由协议,分发拓扑信息,构建路由表,但是这时并没有label信息
    • 每个LSR会为FIB中的每条路由分配一个标签
    • LSR会将自己分配的标签发给邻居
    • 每个LSR构建自己的数据库信息(LIB/LFIB/FIB)
  • 标签分配 — 独立分配
    • 只要满足标签分配的条件,每个LSR都可以独立分配标签。MPLS over ATM的是信元模式的MPLS,是按序分配,意思是下一跳分配完了,上一跳分配,逐步分配的标签。
    • 默认情况下为FIB表中每一条路由都分配一个标签(可以手工控制)
      • mpls ldp label
      • allocate global hosts-route (只为32位路由分标签) / prefix-list NAME
    • 标签本地有效
  • 标签分发 — 自主分发
    • LSR不需要邻居请求就可以自主的将自己分配的标签分发给邻居
    • 默认情况下将自己分配的所有标签都发送给所有邻居(可以手工配置)
      • mpls ldp advertise-label for 1 to 2
    • 基于平台的标签分发方式 — 优点:快,数据库小; 缺点:不安全
  • 标签保留 — 自由保留
    • 不仅保留自己分配和下一跳分配的标签,所有邻居发来的标签都保留,叫自由保留。保守保留,则只保留自己分配的和下一跳分配的标签。
    • 自由保留数据库更大、更占内存;自由保留收敛速度更快,譬如下一跳不可达时,会迅速找到下一个可达的下一跳的标签。
  • 帧模式的MPLS的问题
    • 帧模式的MPLS核心网络中出现untagged或者no label表示有问题,可能有以下原因:
    • LDP邻居关系的建立
      • 协议不匹配(一边LDP,一边TDP)
      • 协议激活(接口、进程、全局)
      • 数据包被过滤(UDP/TCP)
      • 传输地址不可达
    • 标签的分配
      • CEF
      • 标签范围
      • 有选择性的标签分配
    • 标签的分发
      • 有选择性的标签分发
      • 有选择性的标签接收

帧模式的MPLS基本feature

  • Loop Detection — 环路检测
    • LDP依靠IGP的防环机制来防止路径的环路
    • 但是接入配置了错误的静态路由等,造成了路径的环路,就需要通过标签头部的TTL来防止数据包在网络中一直传播
    • 标签头部的TTL和IP头部的TTL功能一样
    • MPLS的操作会将IP头部的TTL拷贝到标签头部,这种现象称之为TTL传输(TTL Propagation)
      • Cisco路由器默认激活TTL传输功能
        • no mpls ip propagate-ttl #关闭TTL传输功能,默认关闭穿越和域内流量。后面加参数 forwarded,可以只关闭穿越流量的TTL传输功能
      • 在MPLS域的入口:将IP头部的TTL值拷贝到标签头部
      • 在MPLS域的出口:将标签头部的TTL值拷贝回IP头部
  • MPLS MTU
    • 接口下:mpls mtu bytes
    • 因为在二层头部与三层头部之间插入了标签,所以在标签交换过程中,需要在接口加大或减小MTU
    • 配置MPLS MTU可以增加局域网接口支持巨型帧的能力,从而阻止数据包分片
    • 并不是所有交换机都支持巨型帧的转发
  • 在OSPF环境中部署MPLS
  • 在BGP环境部署MPLS
    • LDP默认不会为BGP路由分配标签,默认压下一跳的标签。
    • 部署了MPLS,核心的路由器可以不运行BGP。
    • 核心网,边界设备建邻居的时候,要么使用环回接口,要么使用域外接口,一旦用域内接口建立邻居就可以将标签提前弹出。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注