HCIE - 2204-MPLS

在之前学习 BGP 的过程中,如下图:

配置如下:

R1
undo terminal monitor
system-view
sysname R1
interface g0/0/0
ip address 192.168.12.1 24
quit
interface loopback 0 
ip address 10.10.1.1 32
quit
bgp 100
router-id 1.1.1.1
network 10.10.1.1 32
peer 192.168.12.2 as-number 200
quit


R2

undo terminal monitor
system-view
sysname R2
interface g0/0/0
ip address 192.168.23.2 24
quit
interface g0/0/1
ip address 192.168.12.2 24
quit
interface loopback 0 
ip address 10.10.2.2 32
quit
ospf 1 router-id 2.2.2.2
area 0
network 192.168.23.0 0.0.0.255
network 192.168.12.0 0.0.0.255
network 10.10.2.2 0.0.0.0
quit
bgp 200
peer 192.168.12.1 as-number 100
peer 10.10.5.5 as-number 200
peer 10.10.5.5 next-hop-local 
peer 10.10.5.5 connect-interface loopback 0
quit


R3

undo terminal monitor
system-view
sysname R3
interface g0/0/0
ip address 192.168.34.3 24
quit
interface g0/0/1
ip address 192.168.23.3 24
quit
interface loopback 0 
ip address 10.10.3.3 32
quit
ospf 1 router-id 3.3.3.3
area 0
network 192.168.23.0 0.0.0.255
network 192.168.34.0 0.0.0.255
network 10.10.3.3 0.0.0.0
quit

R4

undo terminal monitor
system-view
sysname R4
interface g0/0/0
ip address 192.168.45.4 24
quit
interface g0/0/1
ip address 192.168.34.4 24
quit
interface loopback 0 
ip address 10.10.4.4 32
quit
ospf 1 router-id 4.4.4.4
area 0
network 192.168.45.0 0.0.0.255
network 192.168.34.0 0.0.0.255
network 10.10.4.4 0.0.0.0
quit

R5
undo terminal monitor
system-view
sysname R5
interface g0/0/0
ip address 192.168.56.5 24
quit
interface g0/0/1
ip address 192.168.45.5 24
quit
interface loopback 0 
ip address 10.10.5.5 32
quit
ospf 1 router-id 5.5.5.5
area 0
network 192.168.45.0 0.0.0.255
network 192.168.56.0 0.0.0.255
network 10.10.5.5 0.0.0.0
quit

bgp 200
peer 192.168.56.6 as-number 600
peer 10.10.2.2 as-number 200
peer 10.10.2.2 next-hop-local 
peer 10.10.2.2 connect-interface loopback 0
quit


R6
undo terminal monitor
system-view
sysname R6

interface g0/0/1
ip address 192.168.56.6 24
quit
interface loopback 0 
ip address 10.10.6.6 32
quit

bgp 600
router-id 6.6.6.6
peer 192.168.56.5 as-number 200
network 10.10.6.6 32
quit

 

      R1 的接口 地址,通过 BGP 宣告,然后传递给 R2 ,然后R2 传给 R5 ,最后传递个 R6;、

          R6 的接口地址,也通过 BGP ,最终也传给了 R1。此时 R1 和 R6都拥有了彼此的路由条目了,但是 2 个 IP 地址之间,是无法互通的。

          经过分析,原因是:中间的运营商 AS 200 的内部 路由器是没有 AS 100/ AS 600 的路由,层级的解决法是 :想办法让 AS 200 的内部路由器,学习到 AS 100/ AS 600 的路由,所以,我们陆续提出了以下解决方案:

  • 我们在 AS 200 的 内部路由器上,逐个添加 AS 100/AS 600 的路由
  • 我们在 AS 200 的内部路由器上,运行 IBGP 协议,将 BGP 宣告进入 IGP
  • 我们在 AS 200 的内部路由器上,运行 BGP 协议,通过该协议传递路由
    • 但是遇见了新的问题: IBGP 邻居之间因为水平分割,无法正常传递路由
    • 所以针对上述的问题,不断的提出以下解决方案(  虽然都很麻烦 )
      • BGP 全互联/ BGP 联盟 /  BGP 反射器

        但是,除了上述的解决办法以外,我们还有更好的解决办法:MPLS,通过在 AS 200 的内部路由器上,运行 MPLS ,可以让每个路由器变成 LSR。所谓的 LSR ,叫做 label switch router ,即标签交换路由器,此时仅关心标签;不像传统的路由器:仅仅关心路由表。

        既然 AS 200 内部的路由器,以后转发都靠标签,不靠路由。那么我们就没有必要在 AS 200 内部的所有路由器上运行  BGP 了,所以通过运行 MPLS ,就可以大大的简化 AS 200 内部的网络架构,让整个网络更加具有扩展性。那么接下来,我们就需要了解下:运行 MPLS 的路由器是如何干活的。

        传统的路由器靠“ 路由表  ” 的“ 路由 ” ,转发数据。标签交换路由器 (LSR)靠的是 “  标签转发表” 的 “ 标签 ” 转发数据。

        那么,标签从何而来呢?

        如果想要搞清楚这个问题,我们首先需要知道的是: 在 LDR 的" 标签转发表 "中,包含的是啥,其实,包含的是:路由条吧和标签对应条目,即一个 路由对应一个 标签,称之为: 标签绑定信息

        所以,我们就需要搞清楚“ 到底是什么 ” 可以为“ 每个路由 ” 分配一个“ 标签 ”,同时标签长得什么样子?

        其实,在 MPLS 这个“ 多协议标签交换 ” 机制中,完全是依靠 LDP 协议来工作的。

        LDP 的全称是 : label distribution protocol ,标签分发协议

        该协议工作过程如下:

  • 分配一个标签
    • 每个运行 MPLS 的协议,都会为自己本地路由表中的非 BGP 路由分配标签
    • 标签的样子,也是由该协议指定的:
      • MPLS 中 的 LDP 所分配的标签,很小:在报文中,仅仅占用 4个字节
      • 标签的结构也非常的简单:
        • Label :表示标签值,长度占用了 20 bit
        • Exp :experiment (  试验位),长度占用了 3 bit ,用来表示标签的 “ 优先级 ”
        • S :bottom of statck (  栈底位),长度占用了1 bit,永利来表示当前这个标签是不是“ 标签栈 ” 的底:这是不是“ 最后 1 个 ” 标签。
        • TTL ( time to  live ),占用了 8 bit ,用来表示标签的存活时间的,( 特点与 IP 头部中的 TTL 值是相同的 ),每经过 1 个 LSR ,TTL 值就会减 1 ,当减为 0 时,该标签就被丢弃了
  • 传输一个标签
    • 传给谁:--传输给自己的邻居,存在于 LDP 的邻居表,( 如何形成 LDP 邻居表呢)
    • 怎么传---因为路由和标签的对应对,很关键,所以传递这个标签,必须得很稳定( 靠TCP传输)
    • 存在哪?--本地生产的路由和标签信息,以及从邻居学习过来的,都保存在 LDP 数据库
  • 选择一个标签
    • 所谓的“ 选择 ” 标签,就是在 LDP 协议的数据库中,针对每个路由,选择一个“ 最好”的标签
    • 将最好的标签信息,存放在一个表中,专门用来转发带有标签的数据,该表叫做 :LDP 标签的转发表

        通过上面的工作过程分析,我们可以将 LDP 的工作原理,汇总为:

  • 建立 LDP 邻居表
    • LDP 协议虽然是每个启用了 MPLS 的路由器;给自己路由表中的那些非BGP 路由分配标签的。但是该协议在 OSI 模型中,依然是属于第 7  层的,即 应用层。
    • 所以,LDP 发送的报文,是要使用传输层协议的, LDP 在建立邻居表的时候,使用的是 UDP 协议,源端口号和目标端口号都是固定的 646;并且发送报文的方式,默认情况下是组播:224.0.0.2 ,表示该网段中的所有路由器。
    • IP 头部中的 TTL 字段,默认是 1 ,所以意味着默认情况下,LDP 的邻居只能在直接相连的 2  个设备之间建立。
    • 如果以后想要在没有直接相连的设备之间建立 LDP 的邻居关系,那么就只能采用 target hello 报文的方式【 后续介绍非直连设备建立 LDP邻居表 】 
    • 在 LDP 的hello 报文中,包含了以下几个重要的字段信息:
      • lsr-id ,即表示发送这个 LDP hello  报文的那个设备的 LSR-ID 
      • Hold-time ,默认取值是 15 s ,表示:如果在 15 S 内没有收到对方发送的 LDP hello   报文,就默认该邻居关系断开了
      • transport-address :该字段默认情况下,等于 LSR-ID .该字段非常重要,因为是要使用该字段表示的 IP 地址进行后续的 LDP 邻居之间的 TCP 回话的建立,为的是实现 LDP " 标签绑定信息 " 的传输,从而在设备之间形成“ 标签绑定信息 ” 数据库,最终形成“ 标签转发表 ”

        所以,经过上面的报文分析,我们简单的总结了以下“影响 LDP 邻居建立  ”的因素:

  1. 设备之间的互联接口的 IP 地址,必须互通
  2. 设备之间的 UDP  646 的报文,不能被策略/防火墙干掉
  3. 确保设备之间的 LSR-ID 不能相同
  4. 确保设备之间的 LDP 的认证,必须成功

        但是,需要注意的是;

                   即使报文中的 tansport-addrss  是无效的,或者是 两个 transport 地址是相同的,都不

        会影响到 LDP 邻居表的建立。因为 LDP 邻居建立,使用的是 UDP 报文;

        而这个transport 地址,是用来建立后续使用的 TCP 连接的;两者互不相干。

        如果想要查看一个设备上的所有的启用了 MPLS 的接口,可以使用命令:

        <R3>display  mpls  interface 
        Interface             Status    TE Attr   LSP Count  CRLSP Count Effective MTU
        GE0/0/0               Up        Dis       4          0           1500      
        GE0/0/1               Up        Dis       2          0           1500  

        如果想要查看一个设备上的所有启用了 LDP 的接口,可以使用命令:

        <R3>display mpls ldp interface

         LDP Interface Information in Public Network
         Codes:LAM(Label Advertisement Mode), IFName(Interface name)
         A '*' before an interface means the entity is being deleted.
         ------------------------------------------------------------------------------
         IFName          Status       LAM   TransportAddress     HelloSent/Rcv
         ------------------------------------------------------------------------------
         GE0/0/0         Active       DU    10.10.3.3            2175/2159
         GE0/0/1         Active       DU    10.10.3.3            2174/2168
         --------------------------------------------------

        如果查看一个设备上的 LDP 邻居表,可以使用:


        <R3>display mpls ldp peer 
 
         LDP Peer Information in Public network
         A '*' before a peer means the peer is being deleted.
         ------------------------------------------------------------------------------
         PeerID                 TransportAddress   DiscoverySource
         ------------------------------------------------------------------------------
         10.10.2.2:0            10.10.2.2          GigabitEthernet0/0/1
         10.10.4.4:0            10.10.4.4          GigabitEthernet0/0/0
                 ------------------------------------------------------------------------------
         TOTAL: 2 Peer(s) Found.

        如果想要查看 LDP 邻居表中某个特定的邻居设备信息:


        <R3>display mpls ldp peer 10.10.4.4
 
         LDP Peer Information in Public network
         ------------------------------------------------------------------------------
          Peer LDP ID         : 10.10.4.4:0      # 邻居设备的 LSR-ID 
         Peer Max PDU Length : 4096         Peer Transport Address : 10.10.4.4   # 传输地址
         Peer Loop Detection : Off          Peer Path Vector Limit : ----
         Peer FT Flag        : Off          Peer Keepalive Timer   : 45 Sec  # 后续 TCP 连接最大的存                                                                                                                   活时间
         Recovery Timer      : ----         Reconnect Timer        : ----
         Peer Type           : Local    # 邻居的类型是“ 本地 ” ,即设备之间是通过组播的 hello 报                                                                         文,建立的邻居关系

         Peer Label Advertisement Mode : Downstream Unsolicited   # 邻居标签的分配模式
         Peer Discovery Source     : GigabitEthernet0/0/0    # 表示建立邻居的时候,所使用的端口
         Peer Deletion Status          : No
        Capability-Announcement       : Off
         Peer P2MP Capability          : Off
         ---------------------------------------

        如果要查看一个设备上的某接口的 LDP 的详细信息

        <R3>display mpls ldp interface GigabitEthernet 0/0/1

         LDP Interface Information
         ------------------------------------------------------------------------------
         Interface Name : GigabitEthernet0/0/1  
         LDP ID         : 10.10.3.3:0           Transport Address : 10.10.3.3    # 默认的关于 LSR-ID 
         Entity Status  : Active                Effective MTU     : 1500

         Configured Hello Hold Timer  : 15 Sec  # 本地接口上配置的 邻居的 hold 时间,默认是         15S
         Negotiated Hello Hold Timer     : 15 Sec  # 两个设备之间协商出来的 hold 时间,取值最小
         Configured Hello Send Timer     : ---
         Configured Keepalive Hold Timer : 45 Sec  # 设备之间配置 TCP 连接的存活时间
         Configured Keepalive Send Timer : ---
         Configured Delay Timer          : 10 Sec
         Label Advertisement Mode        : Downstream Unsolicited
         Hello Message Sent/Rcvd         : 2260/2255 (Message Count)
         Entity Deletion Status          : No
         -------------------------------------------------

        想要修改一个接口的LCP 的参数:

        [R4-GigabitEthernet0/0/0]mpls ldp ?
          advertisement      Specify Label Advertisement mode   # 修改标签的分配模式
          frr                Fast reroute configuration                                #    配置 LDP 的 FRR 特性
          timer              LDP Timer value                                        # 修改 LDP 的计时器
          transport-address  Specify Session Transport Address In TCP Connection  # 修改 LDP 的                                                                                                                                          传输地址 
          <cr>               Please press ENTER to execute command      # 在该端口上启用 LDP 协议
   

  • 同步 LDP 数据库

     在 LDP 的数据库中,包含的是 “ 标签 ”  和 “ 路由条目 ” 的绑定信息,或者叫 “ 对应关系 ”

    • 上游和下游的概念的区分:是按照“ 数据包  ”  的传输方向来确定的,源端叫上游,目标端叫下游
  • 这些“ 标签绑定信息 ” 分为两部分:

    • 自己产生的

    • 从邻居学习过来

    • 而最终的 LSR 用来转发数据,所用的 “ 标签转发表 ” 的条目,全部都来自与 “ LDP  数据库 ” 。所以说,LDP 数据库中的条目,非常重要。当一个  LSR 从其他的 LSR 学习/ 接收  这些 “ 标签绑定信息 ” 的时候,这个过程必须是稳定的,不能丢包,

    • 所以,在 LDP 协议中,为了实现“ 标签绑定信息 ” 的可靠传输,我们使用的方法是 :底层传输协议,使用 TCP

    • 在上个阶段中 ,;LSR 之间,通过 hello  报文,建立  LDP 邻居关系的时候,在 hello  报文中,包含了一个重要的地址 : transport-address ,该地址就是专门用来建立此处的 LDP  TCP连接的。

    • 该地址默认情况下等于 LSR-ID ,所以之前提刀 : LSR 的 LSR-ID 必须是一个非常稳定的,并且设备直接可以互相访问的接口,通常是 loopback 

    • 在建立 TCP 连接 ( 回话/ session  ) 的时候,都存在 “ 主动连接 ”  和 “ 被动连接 ” 的说法,在 LDP 的 TCP 回话中,主动发起 TCP 连接的一方,永远是 transport-address 大的一方,那么最终 TCP 的连接时:

      • 大的 transport-address   -随机端口-----》 小的 transport-address  :646

    • <R4>display mpls  ldp session 

       LDP Session(s) in Public Network
       Codes: LAM(Label Advertisement Mode), SsnAge Unit(DDDD:HH:MM)
       A '*' before a session means the session is being deleted.
       ------------------------------------------------------------------------------
       PeerID                 Status          L AM       SsnRole         SsnAge           KASent/Rcv
       ------------------------------------------------------------------------------
       10.10.3.3:0        Operational    DU            Active          0000:02:14       539/539
       10.10.5.5:0        Operational     DU          Passive         0000:02:14      537/537
       ------------------------------------------------------------------------------
       TOTAL: 2 session(s) Found.

      • <R4>display mpls ldp session verbose    # 查看回话的详细信息

         LDP Session(s) in Public Network
         ------------------------------------------------------------------------------
         Peer LDP ID     : 10.10.3.3:0        Local LDP ID   : 10.10.4.4:0
         TCP Connection  : 10.10.4.4 -> 10.10.3.3  
         Session State   : Operational        Session Role   : Active
         Session FT Flag : Off                MD5 Flag       : Off
         Reconnect Timer : ---                Recovery Timer : ---
         Keychain Name   : ---

         Negotiated Keepalive Hold Timer   : 45 Sec    # TCP 连接的最大保持时间是 45s                                                                                    每15 S 发送一次keepalive 报文
         Configured Keepalive Send Timer   : ---
         Keepalive Message Sent/Rcvd       : 546/545 (Message Count)   #设备之间发送                                                                                       和接收 keepalive 报文的数量
         Label Advertisement Mode          : Downstream Unsolicited
         Label Resource Status(Peer/Local) : Available/Available
         Session Age            : 0000:02:16 (DDDD:HH:MM)   #  当前 TCP 连接建立的时间
         Session Deletion Status           : No

         Capability:
           Capability-Announcement         : Off
           P2MP Capability                 : Off

         Outbound&Inbound Policies applied : NULL

         Addresses received from peer: (Count: 3)   # 以下这些地址是属于邻居设备 ---lsr-id : 10.10.3.3
         10.10.3.3           192.168.23.3        192.168.34.3       
         ------------------------------------------------------------------------------

        <R4>

    • <R4>display  tcp status    查看设备上,所有的 TCP 连接的状态
      TCPCB        Tid/Soid      Local Add:port           Foreign Add:port    VPNID          State
      b4aceaa8          6  /1          0.0.0.0:23                  0.0.0.0:0               23553       Listening
      b4acf894          167/6        10.10.4.4:646           10.10.5.5:51065       0           Established

      b4acf4c8           167/3        10.10.4.4:49258         10.10.3.3:646         0           Established

      <R4>

    • 建立了稳定的 TCP 连接/会话之后,设备之间就开始传输“ 自己的标签绑定信息 ” 了,进行互相分享,所以,我们接下来需要研究的是:

      • 每个 LSR 如何分配/产生标签?【  label advertise ( 发布 )   mode 】

        • DU ( downstrem  unsolicated ): 下游自主模式,即只要本地设备有路由骂自己就会 通过 LDP 协议为其分配一个标签。

        • DOD (downstrem  on demand ):下游按需分配,即只有当 “ 上游设备 ”需要这个标签的时候,当前设备才会为路由产生一个标签;我们要清楚的时候:什么时候“ 上游设备 ” 才会需要一个标签呢?

          • 当这个设备将要转发数据包的时候,才会使用到标签。发现自己没有,所以就像下游设备请求。

      • 如何传输标签?【 label distribution control ( 传输 ) mode   】

        • 独立的“ 分配控制 ”方式:即只要自己本地为路由分配了标签,就会立刻传输给自己的 LDP 会话的对端设备( 同时包含上游和下游设备 )

        • 有序的“ 分配控制 ”方式:即只有收到了 下游 LSR 设备发送的关于某个 FEC 的标签信息后,自己才会将这个 FEC 的标签信息继续转发给上游设备

      • 如何保留标签?

        • 自由保留

          • 表示从任何一个 LSR 对等体发送过来的标签绑定信息,都会保存在自己的标签数据库中,这种保留方式,会在 LSR 中占用了更多的内存空间。

          • 但是如果网络拓扑发生了变化,导致下一跳 IP 转发设备发生了变化,那么当前的 LSR 可以快速的在标签数据库中选择一个去往目标 地址的备份的最好的标签路径,快速的解决了标签数据转发路径的故障。

        • 保守保留

          • 表示仅仅接收“  该路由在路由表中”的下一跳 IP 地址所发送过来的标签绑定信息,即仅仅保留从该路由的“ 下游 LSR  ” 所发送过来的 标签绑定信息。

          • 这种保留方式下的标签数据库,在面对“ 下一跳 IP 转发设备变化 ” 的情况,需要自己重新计算一个新的 “ 下游 LSR ”,这个过程就有点长,导致故障恢复的比较慢。

      • 如何选择标签?

        • 该过程,指的是,针对任何一个  FEC / 路由条目,在 LDP 的标签数据库中,选择一个最好的标签,放入到 LSR 的核心转发表---. 标签转发表(display mpls lsp )

        • 所谓的最好的标签,是来自于: 该 FEC / 路由条目在路由表中的 下一跳 IP 地址,所发送过来的标签信息;即就是那些 “ 下游 LSR ”发送过来的标签绑定信息。

        • <R4>display  mpls  lsp 
          -------------------------------------------------------------------------------
           LSP Information: LDP LSP  # 表示下面的 (  LSP)条目都是 LDP 协议产生
          -------------------------------------------------------------------------------
          FEC                In/Out Label  In/Out IF                      Vrf Name       
          10.10.4.4/32       3/NULL        -/-                                           
          10.10.2.2/32       NULL/1024     -/GE0/0/1                                     
          10.10.2.2/32       1024/1024     -/GE0/0/1                                     
          10.10.3.3/32       NULL/3        -/GE0/0/1                                     
          10.10.3.3/32       1025/3        -/GE0/0/1                                     
          10.10.5.5/32       NULL/3        -/GE0/0/0                                     
          10.10.5.5/32       1026/3        -/GE0/0/0                                     
          <R4>

  • 计算 LDP 标签转发表
    • LDP 的标签转发表,就是 LSR 的核心转发表,收到标签数据包以后,都是直接来查看这个表的:
      • <R4>display  mpls  lsp 
        -------------------------------------------------------------------------------
                  LSP Information: LDP LSP#表示下面的 (  LSP)条目都是 LDP 协议产生
        -------------------------------------------------------------------------------
        FEC                In/Out Label  In/Out IF                      Vrf Name       
        10.10.4.4/32       3/NULL        -/-                                           
        10.10.2.2/32       NULL/1024     -/GE0/0/1                                     
        10.10.2.2/32       1024/1024     -/GE0/0/1                                     
        10.10.3.3/32       NULL/3        -/GE0/0/1                                     
        10.10.3.3/32       1025/3        -/GE0/0/1                                     
        10.10.5.5/32       NULL/3        -/GE0/0/0                                     
        10.10.5.5/32       1026/3        -/GE0/0/0                                     
        <R4>
    • 上述的显示信息,是 R4 的标签转发表中的每个 LSP 条目的“ 简要信息 ”
    • 此处的 LSP ,指的是: label switch path ,标签转发路径,即:标签数据张过程中所经过的路径。这个表中的每一个 LSP 条目,都是由于 LDP 协议产生的。
      • FEC:forwarding equal class ,转发等价类。即按照同一个路由条目转发的所有数据包,归为一类,称之为 FEC.
        • 从我们工程师应用和配置的角度来说,我们所关注的就是“ 这一类的数据包  ” 的路由,所以我们通常将 FEC 就看做是一个“ 路由条目 ”。
        • 但是,在华为官方文档中,FEC 是可以按照很多元素进行分类的:源地址、目标地址、源端口、目标端口、VPN 等要素进行划分
        • 同时我们也发现了,在 LSR 的标签转发表中,所有的 FEC 都是 /32 的主机路由,没有其他的掩码的路由条目。这是因为:在华为设备上 ,LDP 分配标签的时候,只为 /32 的主机路由分配标签。
        • 所以,我们以后在配置 MPLS 的时候,所有使用的 Loopback  的掩码,都强烈建议设置为  / 32.
      • In Label :表示的是入标签。
        • 即:当前这个设备为前面的这个 FEC ,所分配的标签信息
        • 当接收数据包的时候:要将标签数据包的标签提取出来,在标签转发表中的所有“ in label ”中进行查找,如果有相同的,则按照该条目的后续的 “ out  label  ” ,进行标签交换,然后转发出去
        • 如果没有相同的 in label ,则直接丢弃
      • Out Label:表示的是出标签.
        • 即:这个标签是由前面的这个 FEC ,在本地路由表中的下一跳转发设备所产生的,即下游设备产生的
        • 当发送数据包的时候:如果按照某个条目要转发出去,那么出去的时候,该数据包所需要的携带的标签是什么。
      • Label Operation:针对标签的操作:
        • PUSH:压入。指的是在边缘的LSR 上将 IP 数据包,添加一个 MPLS 标签,变成标签数据包
        • SWAP:交换:指的是传输LSR,将受到的标签数据包的标签,更换成另外一个,然后发送出去;
        • POP弹出。指的是 LSR ,将当前数据包中的顶层标签,弹掉,继续向后面的设备转发
        • Null:干掉。指的是,当前 LSR,将标签数据包的所有标签,全部干掉,变成IP 数据包;
        • 而上述的这些“ 标签操作行为 ”,体现在标签转发表中是通过 in label/ out lebel 之间的数值变化体现出来的:不同的标签组合,表示不同的标签动作
      • Label 的取值:在 MPLS 头部中 ( 32 bit ),仅仅有 20 BIT 表示 Label 
        • 0-15:系统保留标签;每个标签都有一定的特定的含义;
          • 标签 0.
            • 表示“ 显示的空标签 ”,即华为设备会为自己本地的之类的 /32 主机路由,分配一个 标签 0 ,那么其他设备在收到这样的标签绑定信息之后,就会进行普通的“ 标签交换 ” 行为,然后将其他标签变成 0。
            • 然后发送给最终的目标设备,该设备首先查找标签转发表,然后弹掉标签,变成 IP 数据包,然后再次查找 IP 路由表,最终确定数据包的出端口,转发出去,从而针对任何一个数据包,都要查 2 次表,效率低。
          • 标签 3
            • 表示“ 隐式的空标签 ”,即华为设备运行 LDP 后,默认情况下,会为自己的本地的直连的 /32 主机路由,分配标签 3,其他设备在收到一个标签 3 “ 标签绑定信息 ”之后,后续转发数据包的时候,就会在数据包达到最终目的之前设备之前的那个路由器上,提前将标签弹掉。从而节省最后一个目标设备上“ 查表 ” 的次数,提升效率
          • 标签2
            • 真的是 IPV6 的数据包的“ 显示空标签 ”
        • 16-1023:
          • 静态的 LSP
        • 1024以及以上:
          • 动态 LSP ,此时我们要知道的是:能够产生标签的协议
            • 不仅仅只有LDP,还有 MP-BGP, RSVP-TE.
      • 另外,针对 标签,我们需要知道的是:
        • 任何一个 LSR 所使用的标签空间都是相同的,即 2 的 20 次方;所以有可能我们会发现:不用的 LSR 针对同一个路由,所分配的标签的数值,是相同的
        • 一个标签的作用范围,仅仅是建立了 LDP 会话的两个设备之间。
      • In/Out If:表示的是标签数据包的入端口和出端口
        • In If:
          • 表示的是 incoming interface  ,即入端口,通常都是 -  ,表示不关心入端口到底是什么
        • Out If
          • 表示的是 outgoing interface ,即出端口,通常有两种取值
            • - , 表示没有明确的出端口
              • 如果当前的数据包依然是由标签的,并且还没有明确的出口,则直接丢弃这个数据包
              • 如果当前的数据包的标签已经被弹掉了,没标签。并且还没有明确的出口,则直接查看 IP 路由表
            • gi0/0/x ,表一个具体的端口,数据包应该从这歌端口上转发出去
        • VRF:virtual routing forwarding  ,表示的是虚拟路由表
          • 该字段的取值通常是两种
              • 表示如果需要查找路由表的话,那么就查找这歌设备上的大路由表:display ip routin-table 
            • 非空
              • 那么此时应该是一个名字,比如 ABC,那么此时在查找路由表的时候,就要查找这个虚拟路由器 ABC 的路由表了: display ip routing-table vpn-instance ABC
  • 案例:认识 LDP 的基本配置

    • 拓扑如下:

需求

  • 在 AS 200 中,仅仅在 R2和 R5 之间,建立 IBGP 邻居关系,其他路由器没有 BGP 
  • 在 AS 200 中,运行 MPLS 
  • 确保 R1 和 R6 的回环口互通

思路

  1. 在 AS 200 的 每个路由器上,全局开启 MPLS 功能
  2. 在 AS 200 的每个路由器上 ,全局开启 LDP 功能
  3. 在 AS 200 内的每个路由器之间的接口上,开启 MPLS 和 LDP 功能

配置

[R2]mpls lsr-id 10.10.2.2      # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且                                                              这个地址必须得宣告进入到 OPSF 协议才可以

[R2]mpls      # 全局开启 MPLS

[R2]quit
[R2]mpls ldp    # 全局开启 LDP
[R2-mpls-ldp]quit

[R2-GigabitEthernet0/0/0]mpls                   # 进入接口开启 MPLS 和 LDP功能
[R2-GigabitEthernet0/0/0]mpls  ldp 
[R2-GigabitEthernet0/0/0]quit
[R2]route recursive-lookup  tunnel 

R3

[R3]mpls lsr-id 10.10.3.3     # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且                                                              这个地址必须得宣告进入到 OPSF 协议才可以

[R3]mpls      # 全局开启 MPLS

[R3]quit
[R3]mpls ldp    # 全局开启 LDP
[R3]mpls-ldp]quit

[R3-GigabitEthernet0/0/0]mpls                   # 进入接口开启 MPLS 和 LDP功能
[R3-GigabitEthernet0/0/0]mpls  ldp 
[R3-GigabitEthernet0/0/0]quit

[R3-GigabitEthernet0/0/1]mpls                   # 进入接口开启 MPLS 和 LDP功能
[R3-GigabitEthernet0/0/1]mpls  ldp 
[R3-GigabitEthernet0/0/1]quit
 

R4

[R4]mpls lsr-id 10.10.4.4     # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且                                                              这个地址必须得宣告进入到 OPSF 协议才可以

[R4]mpls      # 全局开启 MPLS

[R4]quit
[R4]mpls ldp    # 全局开启 LDP
[R4]mpls-ldp]quit

[R4-GigabitEthernet0/0/0]mpls                   # 进入接口开启 MPLS 和 LDP功能
[R4-GigabitEthernet0/0/0]mpls  ldp 
[R4-GigabitEthernet0/0/0]quit

[R4-GigabitEthernet0/0/1]mpls                   # 进入接口开启 MPLS 和 LDP功能
[R4-GigabitEthernet0/0/1]mpls  ldp 
[R4-GigabitEthernet0/0/1]quit

R5

[R5]mpls lsr-id 10.10.5.5      # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且                                                              这个地址必须得宣告进入到 OPSF 协议才可以

[R5]mpls      # 全局开启 MPLS

[R5]quit
[R5]mpls ldp    # 全局开启 LDP
[R5-mpls-ldp]quit

[R5-GigabitEthernet0/0/0]mpls                   # 进入接口开启 MPLS 和 LDP功能
[R5-GigabitEthernet0/0/0]mpls  ldp 
[R5-GigabitEthernet0/0/0]quit
[R5]route recursive-lookup  tunnel    R2/R5 必须配置的命令

查看 LSR 设备上的核心“ 标签转发表”

<R3>display  mpls lsp 
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC                In/Out Label  In/Out IF                      Vrf Name       
10.10.2.2/32       NULL/3        -/GE0/0/1                                     
10.10.2.2/32       1024/3        -/GE0/0/1                                     
10.10.3.3/32       3/NULL        -/-                                           
10.10.4.4/32       NULL/3        -/GE0/0/0                                     
10.10.4.4/32       1025/3        -/GE0/0/0                                     
10.10.5.5/32       NULL/1026     -/GE0/0/0                                     
10.10.5.5/32       1026/1026     -/GE0/0/0    

分析数据转发: R1 ---> R6

1、R1 是一个传统的 IP 路由器,所以转发数据包,依靠的是 IP 路由表,所以:

<R1>display ip routing-table 10.10.6.6
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask    Proto   Pre  Cost      Flags           NextHop                Interface

      10.10.6.6/32  EBGP    255  0                          192.168.12.2    GigabitEthernet0/0/0

<R1>display  ip routing-table 10.10.6.6 verbose 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1

Destination: 10.10.6.6/32
     Protocol: EBGP             Process ID: 0
   Preference: 255                    Cost: 0
      NextHop: 192.168.12.2      Neighbour: 192.168.12.2
        State: Active Adv              Age: 00h40m44s
          Tag: 0                  Priority: low
        Label: NULL                QoSInfo: 0x0
   IndirectID: 0x1              
 RelayNextHop: 0.0.0.0           Interface: GigabitEthernet0/0/0
     TunnelID: 0x0                   Flags:  D

        在上述 显示的信息中,因为该路由条目的 tunnel ID  为 0x0,所以,数据包直接在结构 gi0/0/0 转发出去,不使用任何的标签

        【  rib = routing information base ,路由信息表,就是平时的路由表 】

        在设备上查看命令是:display ip routing-table

        【   FIB = forwarding information base :转发信息表】

        在设备上查看命令是:display fib

FIB 表的内容,其实就是 FIB 中的每个路由条目的“ 镜像 ”,但是解决了 RIB中的递归查询,更快了。

FIB 技术还产生了另外一个表,叫做FIB 邻接表,其内容是 ARP镜像,包含了从某个指定端口转发数据时,所使用的" 完整的MAC 地址头部 " 信息,所以通过 FIB 技术转发数据,就不需要额外的进行 ARP 请求了,所以通过 FIB 转发数据,比 RIB ,又快了

2、R2 在接口 gi0/0/1 上接收到一个数据包:

        首先需要判断该数据包,到底是 IP 数据包,还是标签数据包;

                原则:查看该数据包的 2 层头部中的 type 字段;

                        type 为 0x0800,表示后面的数据包是 IP 数据包

                        type  为 0x8847 ,表示后面的数据包标签数据包

                基于数据包的类型,查看不同的  ”  核心转发表 “

                        如果是 IP 数据包,则查看 FIB 表 (   display fib )

                        如果是 标签数据包,则查看标签转发表 (  display mpls  lsp )

        此时 R2 收到的是 R1 发送过来的 IP 数据包,所以,结果如下:

<R2>display  fib 10.10.6.6
  Route Entry Count: 1
Destination/Mask   Nexthop         Flag  TimeStamp     Interface      TunnelID
10.10.6.6/32       192.168.23.3    DGHU  t[1663]           GE0/0/0        0xf
<R2>

以上的显示信息中,必须关注 : tunnel ID 字段

        如果是 0 ,则从改条码关联的接口中发送出去,比如此处的: interface= ge0/0/0;

        如果不是 0 ,则需要继续查看该设备上的 MPLS 标签转发表中的条目:

                        每个条目,都是一个标签转发路径,也称之为“ 标签隧道 ”

                        每个“ 标签隧道 ” ,都对应着一个“ 隧道 ID ”,但是这个名字在 MPLS 标签转发表                    中,称之为 “ Token  ”,我们需要找到的就是那个“ Tunnel ID ” 和“ Token  ”字段的取值,                    相同的“ 标签转发条目 ”

<R2>display  mpls  lsp  verbose
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------

  No                  :  6
  VrfIndex            :        
  Fec                 :  10.10.5.5/32
  Nexthop             :  192.168.23.3
  In-Label            :  NULL
  Out-Label           :  1029    # 数据包出去的时候,需要携带着的标签
  In-Interface        :  ----------
  Out-Interface       :  GigabitEthernet0/0/0    # 数据包的出接口时 gi0/0/0
  LspIndex            :  6149
  Token               :  0xf    # 该字段要和 FIB 中的 Tunnel ID ,相同
  FrrToken            :  0x0
  LsrType             :  Ingress   #  当前值这个 LSR 的类型是“ 入向 LSR ” ,即 IP 数据包通过该设                                                                       备,正式进入到 MPLS 标签转发网路
  Outgoing token      :  0x0
  Label Operation     :  PUSH    # 标签的操作,称之为“ 压入 ,即讲一个 IP 数据包,标成一个标                                                                签数据包
  Mpls-Mtu            :  1500
  TimeStamp           :  6084sec
  Bfd-State           :  ---
  BGPKey              :  ------

所以。此时从 gi0/0/0 转发出去的数据包应该是这个样子的:

        2层头部:( 源 MAC ----目标 MAC --type :0x8847)

        MPLS 头部: 1029,    0  ,  1    254

        IP 头部:  10.10.1.1-----》 10.10.6.6

3、 R3 在 g0/0/1 接口上收到以上的数据包,通过分析其中的type 字段,判断该数据包为标签数据包,所以,R3 查看自己的MPLS 标签转发表,命令如下:

  [R3]display mpls lsp 
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC                In/Out Label              In/Out IF                      Vrf Name       
10.10.2.2/32       NULL/3                -/GE0/0/1                                     
10.10.2.2/32       1027/3                -/GE0/0/1                                     
10.10.3.3/32       3/NULL                -/-                                           
10.10.4.4/32       NULL/3                -/GE0/0/0                                     
10.10.4.4/32       1028/3                -/GE0/0/0                                     
10.10.5.5/32       NULL/1026             -/GE0/0/0                                     
10.10.5.5/32       1029/1026             -/GE0/0/0       

通过以上的信息可知:

        进来的数据包的标签,去匹配表中的条目“ 如标签 ”= 1029,对应这个“ 出标签 ” 的动作是 1026,这个对标签的处理动作,称之为“ 标签交换 ”--wap 

并且,该条目指明了数据包的出接口时 gi0/0/0

所以,此时从gi0/0/0 转发出去的数据包,因该是这样子的

        MPLS 头部: 1026,    0  ,  1    253

        IP 头部:  10.10.1.1-----》 10.10.6.6

4、R4在 gi0/0/0接口上收到以上的数据包,同分析其中的type 字段,判断该数据包为标签数据包,所以,R4在查看自己的 MPLS 标签转发表,命令如下:

<R4>display  mpls lsp 
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC                   In/Out Label          In/Out IF                      Vrf Name       
10.10.4.4/32       3/NULL                -/-                                           
10.10.2.2/32       NULL/1027             -/GE0/0/1                                     
10.10.2.2/32       1028/1027             -/GE0/0/1                                     
10.10.3.3/32       NULL/3                -/GE0/0/1                                     
10.10.3.3/32       1029/3                -/GE0/0/1                                     
10.10.5.5/32       NULL/3                -/GE0/0/0                                     
10.10.5.5/32       1026/3                -/GE0/0/0 

通过以上信息可知:

        进来的数据包的标签,去匹配表中的条目“ 入标签 ” 1026,对应的“ 出标签 ” 的动作是 3,这个标签的处理动作,称之为“ 标签交换 ”--wap ,并且

        该条指明了数据包的出接口时= gi0/0/0.但是,此时的标签“ 3 ”是一个特殊的“ 系统保留标签 ”改标签表示不仅仅是“ 数值3 ”,它有一定的系统含义:将刚才的标签弹掉。

        即将“ 收到的数据包所携带的标签中的最顶层的标签----1026  ” 弹掉【该场景下,数据包没有跟多的标签,所以顶层的标签就是此时的 1026】

        所以此时从g0/0/0 转发出去的数据包,应该是 “ 一个 IP 数据包 ”:

                2 层头部:(源 MAC---目标 MAC-type :0x8847)

                IP 层头部: 10.10.1.1 -----> 10.10.6.6

5、 R5 在接收到一个 IP 数据包以后,就直接查看自己的 FIB 表

<R5>display fib 10.10.6.6
  Route Entry Count: 1
Destination/Mask   Nexthop         Flag  TimeStamp     Interface      TunnelID
10.10.6.6/32       192.168.56.6    DGHU  t[1645]       GE0/0/0        0x0
 

        通过以上信息可知:数据包从 gi0/0/0 出去,发送给下一跳的 IP 地址 192.168.56.6,因为

Tunnel ID 是0x0,所以 :该数据包是不用标签的。

6、接收到了目标 IP 地址为自己的数据包,然后开始返回一个数据包给 10.10.1.1 。

<R6>display  ip routing-table 10.10.1.1
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

      10.10.1.1/32  EBGP    255  0           D   192.168.56.5    GigabitEthernet
0/0/1

<R6>

<R5>display  fib 10.10.1.1
  Route Entry Count: 1
Destination/Mask   Nexthop         Flag  TimeStamp     Interface      TunnelID
10.10.1.1/32       192.168.45.4    DGHU  t[9801]       GE0/0/1              0x9

<R5>display  mpls  lsp  verbose
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------
  No                  :  1
  VrfIndex            :        
  Fec                 :  10.10.2.2/32
  Nexthop             :  192.168.45.4
  In-Label            :  NULL
 
Out-Label           :  1028
  In-Interface        :  ----------
  Out-Interface       :  GigabitEthernet0/0/1
  LspIndex            :  6144

  Token               :  0x9
  FrrToken            :  0x0
  LsrType             :  Ingress
  Outgoing token      :  0x0
  Label Operation     :  PUSH
  Mpls-Mtu            :  1500
  TimeStamp           :  1367sec
  Bfd-State           :  ---
  BGPKey              :  ------

<R4>display mpls  lsp 
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC                In/Out Label  In/Out IF                      Vrf Name       
10.10.4.4/32       3/NULL        -/-                                           
10.10.2.2/32       NULL/1027     -/GE0/0/1                                     
10.10.2.2/32       1028/1027     -/GE0/0/1                                     
10.10.3.3/32       NULL/3        -/GE0/0/1                                     
10.10.3.3/32       1029/3        -/GE0/0/1                                     
10.10.5.5/32       NULL/3        -/GE0/0/0                                     
10.10.5.5/32       1026/3        -/GE0/0/0    

<R3>display  mpls  lsp 
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC                In/Out Label  In/Out IF                      Vrf Name       
10.10.2.2/32       NULL/3        -/GE0/0/1                                     
10.10.2.2/32       1027/3        -/GE0/0/1                                     
10.10.3.3/32       3/NULL        -/-                                           
10.10.4.4/32       NULL/3        -/GE0/0/0                                     
10.10.4.4/32       1028/3        -/GE0/0/0                                     
10.10.5.5/32       NULL/1026     -/GE0/0/0                                     
10.10.5.5/32       1029/1026     -/GE0/0/0    

<R2>display  mpls  lsp 
-------------------------------------------------------------------------------
                 LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC                In/Out Label  In/Out IF                      Vrf Name       
10.10.3.3/32       NULL/3        -/GE0/0/0                                     
10.10.3.3/32       1027/3        -/GE0/0/0                                     
10.10.4.4/32       NULL/1028     -/GE0/0/0                                     
10.10.4.4/32       1030/1028     -/GE0/0/0                                     
10.10.5.5/32       NULL/1029     -/GE0/0/0                                     
10.10.5.5/32       1031/1029     -/GE0/0/0                                     
10.10.2.2/32       3/NULL        -/-                                           
<R2>    

Route Entry Count: 1
Destination/Mask   Nexthop         Flag  TimeStamp     Interface      TunnelID
10.10.1.1/32       192.168.12.1    DGHU  t[9313]       GE0/0/1            0x0

<R2>display  ip routing-table 10.10.1.1 verbose 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1

Destination: 10.10.1.1/32
     Protocol: EBGP             Process ID: 0
   Preference: 255                    Cost: 0
      NextHop: 192.168.12.1      Neighbour: 192.168.12.1
        State: Active Adv              Age: 00h36m57s
          Tag: 0                  Priority: low
        Label: NULL                QoSInfo: 0x0
   IndirectID: 0x7              
 RelayNextHop: 0.0.0.0           Interface: GigabitEthernet0/0/1
     TunnelID: 0x0                   Flags:  D
<R2>

<R2>display  ip routing-table 10.10.1.1
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask    Proto   Pre  Cost      Flags     NextHop         Interface

      10.10.1.1/32  EBGP    255  0                        192.168.12.1    GigabitEthernet
0/0/1

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值