MPLS LDP:标签分发协议

定义

  • 是MPLS的控制协议,类似于传统网络中的信令协议,负责FEC分类、标签分发以及LSP的建立和维护等一系列操作

MPLS可以使用多种标签分发协议

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

LDP的工作原理

  1. 发送hello报文发现邻居
  2. 建立TCP连接,基于TCP连接交互LDP会话消息,建立LDP会话
  3. 基于LDP会话交互标签分配信息,建立和维护LSP

术语解释

  • 邻接体:交互hello报文后,邻接体关系建立成功
  • 对等体:交互LDP会话消息后,LDP对等体关系建立成功
  • LSR ID:4B,在MPLS域中唯一标识一台运行了MPLS的路由器,通常采用loopback口地址(稳定)
  • LDP ID:6B,标识一台运行了LDP协议的LSR,由32bit的LSR id和16bit的label space id(标签空间标识符)组成
    • 表示形式:LSR ID:label space id

      • label space id

        • 决定本设备的入标签空间如何分配,是基于平台还是基于接口

          1. 基于平台(设备)标签空间:取值为0

            • 标签分配时不是在每个接口为唯一,对于同一条FEC从不同接口发布出去时,分配相同的标签
            • 帧模式下使用
            • 缺省情况下使用该模式,本课程也只是用该模式
          2. 基于接口标签空间:取值为非0
            • 每个接口通告的标签是唯一的,LSR为同一条FEC在不同接口通告的标签是不同的,极小概率会出现相同的情况
            • 信元模式下使用(如cell协议)

LDP报文格式

  • Ethernet-II头部 IP头 UDP/TCP头 LDP头部 LDP消息
    • LDP头部参数

      1. version:2B,版本号,此处为1
      2. PDU length:2B,表示除了LDP头部信息以外的LDP消息的长度
      3. LDP id:6B,用来标识LDP路由器,由LSR id和label space id组成
    • LDP消息报文参数
      1. u:1bit,unkno message,标识LDP路由器对于未知类型的LDP消息的处理方式

        • u=1时,对发送者发送通知报文
        • u=0时,忽略且不发送通知报文
      2. message length:2B,表示携带的参数的长度
      3. message id:4B,标识LDP报文
      4. mandatory parameters:可变长度的必须携带的参数
      5. optional parameters:可变长度的可选参数
      6. message type:2B,消息类型
        • 根据报文功能分类

          1. 发现报文

            • hello:用于邻居发现机制

              • 参数

                • lsr-id:本MPLS路由器的标识
                • label space id:当前必为0,表示基于平台标签空间
                • hello hold time(死亡间隔):15s
                • target hello
                  • 基本发现机制取值为0
                  • 扩展发现机制取值为1
                • transport address:传输地址
                  • 用于建立TCP连接的IP地址,默认为lsr-id
                • 注意:配置时需要保证传输地址可达,否则TCP无法建立

两种发现机制

  1. 基于发现机制

    • 用于发现直连的LSR,通过周期发送hello消息,建立本地LDP邻接关系,采用UDP封装,目的端口号646,目的IP地址224.0.0.2.如果LSR在特定接口接收到LDP hello消息,则表明该接口存在LDP对等体
    • hello间隔:5s
    • hello死亡间隔:15s
  2. 扩展发现机制
    • 用于发现非直连的LSR,周期发送LDP target hello消息,建立远端的LDP会话,采用UDP封装,端口号646,目的地址为指定的IP地址。如果LSR接收到target hello消息,则认为粗在LDP对等体
    • hello间隔:15s
    • hello死亡间隔:45s

会话报文

  • initialization:初始化报文,用于协商建立会话参数
  • keepalive:表示协商成功和用于周期性维护TCP会话连接

通告报文

  • address:用来宣告接口IP地址
  • address withdraw:用来撤销接口IP地址
  • label mapping:用来通告FEC和标签的映射关系
  • label request:用来请求FEC和标签的映射关系
  • label abort request:用来终止未完成的标签请求
  • label withdraw:用来插销FEC和标签的映射关系
  • label release:用来释放标签

差错报文

  • notification:通知LDP对等体错误信息

总结

  • 此处除了hello报文使用UDP封装,实现邻居的快速发现
  • 其他LDP报文都采用TCP封装,为了标签信息交互的可靠性

LDP的状态机

  1. non-existent:LDP最初状态

    • 在该状态下发送hello报文,建立TCP连接
  2. initialized:感知到TCP建立完成,进入该状态。传输地址大的一方成为主动方,主动方发送初始报文,用于协商参数(LDP协议版本、标签分发方式、keepalive定时器、最大的PDU长度、标签空间ID等)
  3. opensent:发送初始化报文后进入该状态
  4. openrec:当接收到初始化报文且认同携带的参数,发送keepalive报文后进入该状态
  5. operational:接收到keepalive报文后进入该状态,表示LDP会话建立完成,在该状态下才可以交互LDP其他报文

LDP会话建立过程

  • non-existent状态下

    1. 两台LSR之间互相发送hello报文触发LDP会话建立

      1. hello携带传输地址,用于建立TCP连接
      2. 传输地址大的一方作为主动发,主动发起TCP连接
    2. TCP连接建立完成后,进入initialized状态,由主动方主动发送初始化报文,协商建立LDP会话的相关参数,进入opensent状态
    3. 被动方接收到初始化报文后,如果接受相关参数,则恢复keepalive报文,同时发送自己的初始化报文,状态置为openrec;如果不接受参数,则发送notification报文,终止LDP会话的建立
    4. 主动方接收到被动方发送的初始化报文后
      • 如果接收则回复keepalve报文,状态置为openrec
      • 如果不接收则回复notification报文,终止LDP会话建立
    5. 当双方都收到对方的keepalive报文后,LDP会话建立完成,状态置为operational
  • 计时器
    • hello间隔

      • 基本:5s
      • 扩展:15s
    • hello死亡间隔
      • 基本:15s
      • 扩展:45s
    • keepalive:用于维护LDP会话和TCP连接
      • 发送间隔:15s
      • 死亡间隔:45s

上游和下游

  • MPLS根据数据传输的方向确定上游设备和下游设备
  • 上游:数据的起源方向的设备
  • 下游:数据目的方向的设备
  • 对于同一FEC,下游设备分配的入标签会作为上游设备的出标签

分配和发布

  • 分配

    • 运行了LDP的LSR从自身的标签空间中为FEC提取出一个空闲的标签,形成映射关系
  • 发布
    • 将自己为FEC分配好的标签映射信息形成映射表项通过label mapping消息通告给LDP对等体(上游设备)

★标签的发布和管理

  • 标签的发布和管理由标签的发布方式、标签的分配管理方式和标签的保持方式决定

    1. 标签的发布方式

      1. 下游自主方式:DU,华为默认的发布方式

        • 对于—特定FEC,下游设备无需等待上游设备的label request报文,主动将FEC和标签的映射信息通过label mapping消息通告给上游设备
      2. 下游按需方式:DOD,downstream on demand
        • 对于—特定FEC,由上游设备向下游设备发送标签请求消息(label request),下游设备接收到后才会向上游设备发送标签映射消息(label mapping)
        • label request消息由对特定FEC的访问需求触发
    2. 标签的分配管理方式
      1. 独立模式:independent

        • 对于一特定FEC,LSR在没有接收到下游设备给自己发送的标签映射信息的情况下,独立完成标签的分配
      2. 有序模式:order,华为默认
        • 对于一特定FEC。LSR只有在接收到下游设备发布的标签映射信息后本设备才会为该FEC分配标签
      3. 标签的保持方式
        1. 自由保持方式:liberal,华为默认

          • 所有下游设备通告给本设备的标签映射信息,本设备都会接收并保持在LIB表中
          • 优点
            • 当IP路由收敛或下一跳改变时,减少LSP的收敛时间
          • 缺点
            • 占用更多的设备内存资源和标签空间
        2. 保守保持方式:conservative
          • 只保留下一跳对等体给本设备发送的标签映射信息
          • 优点
            • 节约内存资源和标签空间
          • 缺点
            • 当IP路由收敛或者下一跳改变时,LSP收敛时间变慢,需要发送标签请求报文,重新建立LSP
    3. 缺省情况下
      • 如果发布方式为DU,那么保持方式为自由
      • 如果发布方式为DOD,那么保持方式为保守
    • 总结

      • 华为设备默认,DU+ordered+liberal
    • 注意

      • LDP缺省情况下只为32位主机路由分配标签,如果想要为所有的IGP路由和静态路由分标签,可以通过手工配置实现,命令如下

        • lsp-trigger all
          //不建议开启,一旦开启,需要占用更多的内存和消耗更多的标签空间
          

MPLS数据转发的过程

  • 当IP报文进入MPLS域中

    1. ingress:入节点接收到IP报文后,先查FIB表项,找到对应的tunnel id

      • 如果tunnel id为非0,查LFIB表项进行标签压入操作,形成MPLS报文并转发
      • 如果tunnel为全0,则IP转发
    2. transit:中转节点收到MPLS报文后,查找LFIB表对应的表项,执行swap动作,重新封装成MPLS报文并转发
    3. egress:出节点接收到MPLS报文后,先查LFIB表项,找到对应表项发现出标签为null,则执行pop动作,清除标签,再查FIB表,进行IP转发
  • 问题
    • 在出节点上,需要查两次表项,对出节点造成负担
  • 解决方法
    • 采用PHP特性减轻出节点的工作压力

      • PHP:次末跳弹出

        • 由于最后一跳LDP设备收到MPLS报文后,需要先查LFIB再查FIB,执行的工作过多,造成最后一跳路由器压力过大,可能影响业务转发效率,于是通过次末跳弹出缓解最后一跳LSR的压力

          • 实现原理

            • 最后一跳LSR产生标签值为3的标签,将其通告给次末跳设备,当次末跳设备发现标签为3时,执行标签弹出的动作

隐式空标签:3,默认通告

  • 当LSR发现出标签是3时,直接执行弹出动作
  • 导致的问题
    • 在部署了QOS的场景中,标签弹出会导致丢失标签信息中的EXP(优先级)字段
  • 解决的方法:
    • 使用显示空标签

      • 0:IPv4路由
      • 2:IPv6路由
    • 当次末跳设备发现出标签为0/2时,正常封装成MPLS报文转发给最后一跳LSR
    • 当出节点接收到MPLS报文中携带的标签为0/2时,无需查找LFIB表,直接执行弹出动作,因此既减轻了最后一跳LSR的压力,也不会因为次末跳弹出导致QOS信息丢失

MPLS防环机制

  1. 控制平面防环

    • IGP防环
  2. 转发平面
    • TTL防环,有两种模式:uniform模式和pipe模式

      1. uniform:统一模式

        • 当IP报文进入MPLS域时,将TTL值减1并粘贴仅MPLS头部中
        • 在MPLS域中转发时,MPLS头部中的TTL值递减,IP头部中的TTL不减
        • 当MPLS报文离开MPLS域时,MPLS头部中的TTL值减1并粘贴仅IP头部中
        • 优点:便于排障
        • 缺点:安全性低
      2. pipe模式:隧道模式
        • 当IP报文进入MPLS域时,将TTL减1并粘贴仅MPLS头部中
        • 在MPLS域中转发时,MPLS头部中的TTL递减,IP头部中的TTL值不减
        • 当MPLS报文离开MPLS域时,不会将MPLS头部中的TTL值粘贴到IP头部中,之江IP头部中的TTL值减1再转发
        • 优点:安全性高
        • 缺点:不易于排障

MPLS LDP的配置步骤

  1. 配置IGP,保证全网IGP可达
  2. 配置MPLS lsr-id,确保lsr-id唯一且全域IGP可达
  3. 全局使能MPLS
  4. 全局使能MPLS LDP
  5. 接口上使能MPLS
  6. 接口使能MPLS LDP

查看命令

dis mpls ldp lsp//查看LDP的LIB
dis mpls lsp//查看MPLS的LFIB
dis mplp ldp session//查看MPLS LDP会话信息
在接口视图下指定传输地址mpls ldp transport-address g/lo 0/null/intg:指定一个物理接口IP地址为传输地址lo 0:指定传输地址为换回测试接口IP地址null:指定传输地址为空int:指定传输地址为本接口IP地址
在接口视图下指定标签发布方式,默认为DUmpls ldp adverti DU\DOD
配置扩展邻居发现机制,建立远程LDP会话系统视图下配置mpls ldp rempte-peer name//创建远端对等体视图并命名remote-ip 1.1.1.1//指定远端对等体的传输地址为1.1.1.1(hello报文的目的IP地址)检测LSP转发路径的连通性ping lsp ip 目的地址 掩码(FEC)ping lsp ip 6.6.6.6 32

MPLS LDP:标签分发协议相关推荐

  1. LDP --- 标签分发协议

    目录 1,分配标签 LDP的标签分配方式: 2,传递标签 本地LDP会话的建立过程: 上下游关系 标签传递方式 数据层面流动过程 LDP的配置 LDP --- 标签分发协议 --- 主要应用在MPLS ...

  2. 标签分发协议(LDP)

    LDP --- 标签分发协议 主要应用在MPLS的控制层面 MPLS控制层面需要完成的工作主要就是分配标签和传递标签.分配标签的前提是本地路由表中得先存在标签,传递标签的前提也是得先具备路由基础.所以 ...

  3. HCIP11 MPLS的基本知识,静态LDP搭建,标签分发协议

    MPLS --- 多协议标签交换 包交换     --- 所谓包交换,数据组成数据包,在各个网络节点中不断传递,最终到达目标.  (可以简单的理解为是三层转发的过程)         其实,我们对于包 ...

  4. 标签分发协议php,MPLS标签分发协议

    LDP(Lable Distribution Protoco,标签分发协议),是MPLS的控制协议,负责FEC的分类,标签的分配以及LSP的建立和维护等一系列操作. MPLS可以使用多种标签发布协议, ...

  5. MPLS BGP标签分发过程——Vecloud

    MPLS第三种分配标签的方式也依赖现有协议-BGP.BGP支持多个地址族,扩展新的可达性信息与相关属性变得很简单.通过添加新的地址族,不仅可以通告前缀,还可以通告与该前缀关联的一个或多个标签.几种用于 ...

  6. JUNOS LDP标签分发过程详解

    场景分析: R1.R2.R3 分别开启OSPF协议,他们之间路由表是同步的.由于R4没有开启OSPF协议且只有到R3的静态路由(R4假如没有到R1.R2的IGP路由的时候,那么ldp database ...

  7. MPLS LDP简介-ielab

    标签分发协议LDP(Label Distribution Protocol)是多协议标签交换MPLS的一种控制协议,相当于传统网络中的信令协议,负责转发等价类FEC(Forwarding Equiva ...

  8. MPLS多协议标签交换

    目录 MPLS(多协议标签交换) 1.1 概念 1.1.1 MPLS出现的背景 1.1.2 工作原理 1.1.3 使用场景 2. MPLS体系结构 2.1 术语 2.2 标签操作类型 3. MPLS的 ...

  9. MPLS——LDP协议(工作过程、标签发布和管理方式)

    目录 建立LSP的两种方式 静态LSP 动态LSP LDP协议 LDP动态建立LSP涉及的基本概念 LDP工作过程--三个阶段.四种消息类型.五种状态 LDP建立LSP LDP标签发布和管理 PHP ...

最新文章

  1. h265player开发
  2. python读写json文件
  3. 从Folly源码学C++ 11的新特性
  4. tvpvar模型的建模步骤_3D游戏建模入门须知:次世代建模软件有哪些?零基础你都知道吗...
  5. 你绝对能懂的“机器学习”(四)
  6. 关于ASP.NET的web.config的小笔记
  7. 〖Python〗-- Django内置Admin
  8. OpenSSL(openssl-1.0.1h)编译与安装(Win7)
  9. 如何让 python 处理速度翻倍?内含代码
  10. 英国反垄断监管机构将对音乐流媒体市场展开调查
  11. 安装GPUtil包过程
  12. Android P Beta 3 现已发布!
  13. 普林斯顿大学计算机科学研究生条件,普林斯顿大学之计算机科学系
  14. 英老汉3000个空酒瓶造房子
  15. CSS 颜色代码大全
  16. android 圆形自定义进度条,Android 实现自定义圆形进度条的功能
  17. 山东计算机软考题库,软考习题库
  18. 关于Win8引导菜单风格切换
  19. PIKA trouble02 -- (error) ERR Syntax error, try CLIENT (LIST [order by [addr|idle]| KILL ip:port)
  20. 常见网络编程面试题答案征集与面试题(收集) ZZ 【网络编程】

热门文章

  1. 没有最低只有更低,暴风50吋AI电视1999元预约开启
  2. WordPress按自定义排序输出指定类别文章插件List category posts
  3. face72:真人试衣,体验购物
  4. 【个人笔记】14 图像几何形状绘制
  5. 对于未知个数的整数输入,以及输出不等于其中数的最小自然数。
  6. 数据分析岗_面试题整理总结
  7. greendao连接mysql_使用GreenDao操作数据库
  8. 计算机辅助教学时必不可少的,浅谈计算机辅助教学在中学语文教学中的应用
  9. MD、SHA、MAC消息摘要算法实现与应用
  10. transpose公式_excel中transpose的使用