zoukankan      html  css  js  c++  java
  • MPLS

    Multi Protocol label switching 多协议标签交换

    MPLS最早由思科公司设计,是为了提高路由器的转发效率。因为早期没有硬件转发技术。

    MPLS通过在IP包中插入一个标签,利用标签在路由器上转发IP包,而不再是查路由表转发,提高了转发效率。

    MPLS可以支持非IP的技术,并且由于它是在二层和三层头之间插入一个标签,所以被称为2.5层技术

    MPLS的其它应用:

    1、MPLS-VPN

    2、MPLS-TE

    3、MPLS-QOS

    MPLS的本质---MPLS实际上是一种分类转发的技术,它将具有相同转发处理方式(目的地相同、使用的转发路径相同、有相同的服务等级)的分组归为一类,这种类别就叫转发等价类。同一类的数据包在路由器上有相同的转发决定。

    FEC(forwarding equivalence class 转发等价类)------就是具有相同特性的一类报文。其实就是一组按相同方式、经相同路径、每跳转发处理行为均一致的IP包。

    FEC的缺点:要求所有的路由器上去往特定目的地的路由必须相同,prefix和mask必须完全一致。当然就不能在网络内做汇总了。

    注意:在思科路由器上启用MPLS必须先启用CEF,因为要在CEF的FIB表中插入标签

    几个名词:

    Label Assign-------路由器为自已FIB中的路由分配标签

    Label Distribute-------路由器将自已产生的标签分发给自已的邻居

    LSP--------标签交换路径

    LSR(标签交换路由器)-------只要路由器运行了MPLS,就成为LSR路由器

    边界LSR路由器---------边界LSR路由器负责压标签和弹标签

    MPLS分帧模式和信元模式(ATM中使用)两种

    帧模式的MPLS就是在基于帧封装的接口上使用的MPLS

    标签控制模式:

    independent control(独立控制):LSR出现FEC,立即与Label关联,不等待下游的LSR的Label,以最快速度建立LSP。

    ordered control(有序控制):上游LSR要等待下游LSR的Label,才能建立LSP。

    标签分配模式:

    downstream-on-demand(自主分发):上游LSR通过Lable request向下游的LSR请求Label

    unsolicited downstream(按需分发):下游LSR自动将Label通知给邻居

    标签保留方式:

    Liberal Retention(自由保留):LSR会保留所有LSR分配的Label

    Conseviative Retention(保守保留):LSR只保留下游LSR(最优的)分配的Label

    MPLS的两种模式:

    帧方式的MPLS使用"独立控制/自主分发/自由保留",帧模式中一个标签32bit。

    ATM(信元模式)的MPLS使用"有序控制/按需分发/保守保留"

    per-platform

    per-interface

    标签字段的构成:

    MPLS的标签共32bit,分为四个字段

    Label     EXP      S    TTL

    1~19    20~22     23   24~31

    Label---------------------------------0~15号标签被保留,最小的可用标签是16

    EXP(实验/优先级位)-----------类似Qos

    S(栈底位)--------------------------MPLS可以打几层标签,此位置0表示本标签不是最后一个标签,置1表示本标签是最后一个标签

    TTL----------------------------------这个一看就知道啦,就是将IP包头中的TTL移到这里

    标签是打在二层帧头和三层IP包之间,所以MPLS也被称为2.5层技术

    正常情况下,二层帧的TYPE字段是0x0800,表示上层是IP

    在MPLS中,二层帧的TYPE字段是0x8847(单播包),0x8848(组播包)

    在以太帧中:type类型为ox8847 表示这是一个单播的标签帧

               type类型为0x8848  表示这是一个组播的标签帧

    LSR(标签交换路由器)

    LSR就是能够根据打在数据包上的标签进行3层包转发的MPLS节点

    LSR必须能同时工作于控制层面和数据层面。控制平面主要负责交换路由选择信息,数据平面主要负责实际的包转发操作。在MPLS中,包转发操作基于标签。虽然每台LSR都有路由表,但路由表并不用来做常规的路由选择操作。

    LSR分为两种:

    1、内部LSR

    2、边缘LSR

    对标签的处理有四种方法--

    1、PUSH         //压入,当数据进入MPLS Domain时压入标签

    2、SWAP         //当MPLS Domain内的路由器由到打了标签的数据包时,交换标签  

    3、POP          //弹出,当数据离开MPLS Domain时弹出标签

    4、untagged     //表示弹出所有标签

    LSP--label switching path    //标签交换路径

    用户的边界网关通常标注为CE

    SP的边界网关通常标注为PE,内部的路由器标注为P

    传递标签所用的协议:

    要实现标签交换,首先就要产生标签,并且在网络中将标签分发出去,用来产生标签,分发标签的协议有两种:

    TDP---cisco专有标准,以广播地址发包,使用UDP711端口

    LDP---标签分发协议,业界标准,基本上就是TDP一样的东东

    两者的特点与区别:

    TDP和LDP只能基于FIB表中的条目来打标签

    只对IGP路由分标签,不对BGP路由分标签

    TDP发现邻居用UDP-711端口,源目都是,建邻居用TCP-711,目的端口,源端口随机,以后发包都是TCP

    LDP发现邻居用UDP-646端口,源目都是,建邻居用TCP-646,目的端口,源端口随机,以后发包都是TCP

    TDP的hello包是发向广播地址

    LDP的hello包是发向组播地址224.0.0.2

    以下几个协议也可以分标签:

    BGP:

       是对BGP路由分标签

    MP-BGP:

       是对MPLS-VPN路由分标签

    RSVP-TE:

       是对MPLS TE分标签

    MPLS的运作过程

    1、在MPLS区域中,每一台LSR首先要运行路由协议,形成路由表

    2、接着运行LDP,之后LSR会为路由表中的每一个目的地分配一个标签,这些标签只有本地意义,并被存在LIB库中。

    3、接着每一个LSR会向其邻接对等体通告自已的标签。

    4、每一个LSR根据收到的标签(出标签)与自已发出的标签(出标签)关联起来,构成LFIB

    5、收到的标签还会被插入FIB表,与目的网络关联起来。

    注意:MPLS只为IGP路由分标签,不为BGP路由分标签,BGP路由使用下一跳地址的IGP标签来传递数据。

    LIB-FIB-LFIB

    注意LIB与FIB、LFIB的区别,重要

    FIB                                              //CEF技术自动生成的表项,在MPLS中,FIB表会为每个目的地对应上标签。

    LIB(标签信息库)                //路由条目和自已为路由所分配标签的对应表,还有邻居分配给我的标签。

    LFIB(标签转发信息库)     //每一个入标签和下一跳以及出标签的对应表,是标签的转换表,所以叫标签转发表。

    路由器会把LIB表中给每个路由条目分配的标签告诉自已的每一个邻居

    同时路由器会把别人给的标签也放入LIB表

    由此得出以下定理:

    自已的入标签是分配给别人用的,自已的出标签是别人给我用的。

    路由器会信任路由条目的下一跳给自已分配的标签,其实就是FIB表中的下一跳标签

            FIB on B

    network     next-hop      interface

    X                     C               47       去一个网络的下一跳

          LIB  on   B

    network  LSR  label 

    X                 C       47         自已分配出去的标签以及其它路由器给我的标签

       LFIB   on B

    label    action    next-hot

      25        47          C          标签的转换表

          POP|PUSH

    边界第一跳LSR路由器会查LIB表,最后一跳LSR路由器会查路由表进行转发。

    内部的LSR路由器只会查LFIB表

    上游和下游的概念是针对数据来说的:

    数据包的源:upstream  上游

    数据包的目地:downstream 下游(数据包的目地一定是路由的始发地)

    MPLS网络的转发过程:

    分三步:

    1、在网络的入口边缘LSR(标签交换路由器)收到IP分组后,将分组归为某个转发等价类(FEC),并使用该FEC对应的出站标签标记该分组。对于基于目标的单播IP路由选择,FEC对应于一个目标子网,分组分类工作是对转发表执行传统的第三层查找。

    2、核心LSR收到带标签的IP分组,并根据标签转发表,用相同的FEC对应的出站标签代替输入IP分组中的入站标签,也就是做标签交换。

    3、当该FEC的出口边缘LSR收到标签分组后,它删除标签并对得到的IP分组执行传统的第三层查找。

    PHP:倒数第二跳弹出

    一个优化技术

    在倒数第二跳就不再打标签,直接发给最后一个路由器,省得它再去查标签,去标签

    最后一个路由器会发一个值为3(保留)的标签给自已的邻居,就是POP的意思

    注意这个倒数第二跳是一个绝对的概念

    实际上PHP就是---路由器对自已的直连路由,会向自已的邻居发送一个POP标签。

    MTU值的修改

    修改二层的MTU会影响三层的MTU(实际上以太网的MTU固定的,改不了)

    修改三层的MTU不会影响二层的MTU

    int s0

      mtu 2000        //修改二层的MTU,以太口的二层MTU是固定的,改不了

    int e0

      ip mtu 1496    //修改三层MTU,不能超过二层的MTU

    int e0

      mpls mtu 1504    //在以太网上用这一命令指定二层帧大小,=TAG标签+三层包的字节数,其实应该就是开启了对小巨帧的支持,这时允许二层的MTU超过1500

    LDP介绍:

    LDP协议很类似于动态路由协议,它会让路由器之间先建立邻居关系,然后针对路由条目产生标签,再将标签分发出去。

    LDP的工作过程分几个阶段:

    1、LDP的第一阶段:Discovery     //LDP发现邻居用UDP-646端口,源目端口一样

    2、LDP的第二阶段:Sessions      //建邻居时目的端口用TCP-646,源端口随机,以后通信都是TCP

    3、Keeplive                    //邻居建立好以后,只要发keeplive维持TCP连接即可

    4、Notification

    router-id

    路由器运行LDP后,会自动产生一个router-id ,产生的规则如下:

    router-id产生的顺序:

    1、手工指定

    2、如果没有手工指定,会自动选择IP最大的环回接口

    3、如果没有环回接口,会自动选择IP最大的物理接口

    transport-address  

    transport-address类似于BGP中的更新源地址,在建立LDP的TCP连接时,是用双方的transport-address来建立的

    当一台路由器运行LDP后,每个接口都会自动选择一个transport-address地址,然后使用这个地址去和邻居建立联系,两个邻居之间的transport-address必须可达,否则建立不了邻居关系。默认情况下,transport-address是使用LDP router-id。你也可以为接口指定一个transport-address。

    LDP对等体之间建邻居关系时,一定是由地址大的一方去向地址小的一方发出连接来建立。

    注意:transport-address每个接口可以不同,并且被用作transport-address的接口可以不运行LDP,只需UP即可,但必须peer可达。

    在手工改动transport-address时,有可能还要把原来的接口down掉,否则可能改不过来

    在hello包中有一个optional TLV:

    Optional TLV:

       transport-address

    -----------------------------------------------------------------------------------------

    实验:配置MPLS

    配置MPLS的几个步骤:

    1、启用CEF

    2、指定使用的标签分发协议    (可选)

    3、MPLS LDP router-id lo0  (可选)

    4、MPLS label range 200 299  (可选)

    5、运行LDP

    6、修改MTU值   (可选)

    基本命令:

    ip cef

    int s0/0

      mpls ip               //在接口下启用MPLS

    扩展命令:

    rouer(config)#mpls label protocol ldp  //指定起用LDP(国际标准)

    rouer(config)#mpls ldp router-id lo0

    rouer(config)#mpls label range 200 299  //指定路由器分配标签的范围,需要重新建立TCP连接

    int s1/1

      mpls ldp discovery transport-address interface //指定用自已接口IP做transport-address,这个地址是用来和邻居建邻居关系的地址,也可以指定用别的接口,默认每个接口会使用router-id的接口IP去做transport-address,来建邻居关系。

    查询命令:

    show mpls interfaces       //查看启用MPLS的接口

    show mpls ldp neighbor     //查看LDP的邻居表

    show mpls ldp bindings     //查看LIB表,LIB(TIB) 这里的TIB是cisco自已的叫法,其实就是LIB

    show mpls forwarding-table    //查看标签转发表LFIB(TFIB)

    show ip cef detail         //查看详细信息

    注意:LFIB表中第二列显示POP tag表示只弹出顶层标签, untagged 表示弹出所有标签

                         

    只会显示最优下一跳路由器分配的标签

    show mpls ip binding       //可以直接看到一条路由的入标签和出标签 LIB

    show mpls forwarding-table  查看LFIB

    show ip cef                //查看FIB表

    show ip cef 2.2.2.0        //查看FIB表中一条明细

    show ip cef detail         //查看详细信息

    show adjacency             

    show adjacency detail

    show mpls ldp discovery detail      //可看到transport-address

    show mpls forwarding-talbe labels 304 detail

    show mpls ldp parameters           //查看LDP的配置参数

    show tag-switching tdp neighbor  原来在TDP中使用的命令

    show mpls ldp neighbor 查看MPLS邻居

  • 相关阅读:
    python
    python
    日常使用 小技巧 ~ (长期更新)
    日常的 小 bug ~(长期更新)
    BUUCTF Re部分wp(MIPS特别篇)
    [FlareOn5]FLEGGO
    [FlareOn6]BMPHIDE
    配置搭建单机rocketmq及rocketmq集群
    nessus服务安装与使用
    HTTP缓存技术详解
  • 原文地址:https://www.cnblogs.com/laixufie2046/p/8649384.html
Copyright © 2011-2022 走看看