MPLS_LDP

似梦清欢
• 阅读 202

LDP基础

标签分发协议LDP是MPLS体系中的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。

标签分发协议LDP:在LSR之间建立LDP session,向邻居通告标签和FEC消息,以此达到为路由动态分配标签的能力。

LDP的邻接体:收到对方发送的He11o报文就认为和对方建立了邻接体。类似OSPF收到Hello即认为建立邻居关系。

  • 本地邻接体:直连,组播发送协议报文。
  • 远端邻接体:非直连,单播发送协议报文,手工指定。

邻接体交互LDP会话消息,会形成LDP对等体。

::: warning 如果对等体存在,一定会存在邻接体。如果邻接体存在,不一定存在对等体。 :::

LDP的会话(发现、建立、维护)

  1. 本地LDP会话:要求建立会话的两个LSR之间是直连的。
  2. 远端LDP会话:建立会话的两个LSR之间可以是直连也可以是非直连。

LDP的对等体:

收到了对方的会话消息、标签消息、地址消息等都认为自己和对方建立了对等体。

每一台运行了LDP的LSR必须配置LSR ID和LDP ID。 LDP ID长度为48 bit,由32bit的LSR ID与16bit的标签空间标识符构成。 LDP ID以“LSR ID : 标签空间标识”的形式呈现。例如2.2.2.2:0。 标签空间标识一般存在两种形态: 值为0:表示基于设备(或基于平台)的标签空间; 值非0:表示基于接口的标签空间。

LDP标签空间:

  1. 基于设备的标签空间 标签在设备上基于不同的FEC是唯一的。 标签在转发时,只依赖标签进行转发。
  2. 基于接口的标签空间 标签在接口上基于不同的FEC可以分配相同的标签。 标签在转发时,根据入标签和出标签进行转发。 ::: warning 基于设备和接口的标签空间的区别在:

基于设备的转发,不同的FEC的出标签不同,可以通过出标签唯一的判断转发的接口和目的。基于接口的转发,可能存在多个FEC,从不同的源去往相同的目的,不同的出接口转发时使用相同的出标签,需要再通过入接口标签判断。 :::

MPLS_LDP

LDP发现机制

MPLS_LDP

[AR2]mpls    
[AR2]mpls ldp 
[AR2-GigabitEthernet0/0/0]mpls ld    
[AR2-GigabitEthernet0/0/0]mpls ldp 

MPLS_LDP

通过LDP的Discover消息完成LSR发现(使用Hello报文)。

  1. 基本的发现机制 LSR周期发送LDP链路的Hello消息建立本地LDP邻接体,Hello消息使用UDP报文(源目端口为646),目标地址224.0.0.2。
  2. 扩展的发现机制 LSR周期发送LDP链路的Hello消息建立远端LDP邻接体,Hello消息使用UDP报文(源目端口为646),目标地址是指定的单播IP。 MPLS_LDP 如上LDP发送Hello报文时,使用UDP建立连接的源目端口号均为646。
    [AR1]mpls ldp remote-peer ?      指定对端邻居
    STRING<1-32>  Specify the remote peer name

LDP的会话消息

LDP会话消息包括Discover发现消息、session消息、advertise message通告消息、notification message差错消息。

发现消息通过UDP封装,后续消息封装通过TCP封装:

  • 设备通过周期性地发送LDP链路Hello报文(LDP Link Hello)实现LDP基本发现机制。
  • LDP链路Hello报文使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello报文,表明该接口存在LDP邻接体。
  • Hello报文中携带传输地址,建立TCP连接后LDP会话使用TCP报文。
Discover发现消息

Discover发现消息:宣告和维护网络中的LSR。 使用Hello消息发现维护邻接关系(5s周期发送,15s超时)。 Hello报文内携带传输地址(默认是Lsr-id地址)MPLS_LDP 如上,传输地址之间相互通信可以建立TCP连接,但发送Hello报文的源地址是物理接口地址10.1.12.1

Hello报文内传输地址的替换

MPLS_LDP

[AR1-GigabitEthernet0/0/0]mpls ldp transport-address ?     选择将自身发现消息Hello报文内的传输地址替换为其他接口地址
  Cellular         Cellular interface
  GigabitEthernet  GigabitEthernet interface
  LoopBack         LoopBack interface
  NULL             NULL interface
  interface        Specify Transport Address As One Of Interface
[AR1-GigabitEthernet0/0/0]mpls ldp transport-address LoopBack 2     

MPLS的lsr-id保持不变,传输地址变为lo 2地址: MPLS_LDP

[AR1-GigabitEthernet0/0/0]und mpls ldp transport-address
[AR1]mpls ldp 
[AR1-mpls-ldp]lsr-id 100.1.1.1      将自身发现消息Hello报文内的传输地址替换为100.1.1.1,MPLS lsr-id的值也替换为100.1.1.1

MPLS_LDP

::: warning 替换的传输地址和lsr-id要求路由可达,否则无法建立通信。 :::

此时再在接口下配置mpls ldp transport-address LoopBack 2,只有传输地址变为lo 2地址: MPLS_LDP 此时再在mpls ldp视图下修改lsr-id,对传输地址做了配置的情况下,默认lsr-id做传输地址不生效,只有lsr-id生效: MPLS_LDP ::: tip 即两条命令都配置,传输地址优选接口的配置,lsr-id优选LDP视图下的配置。 :::

TCP连接建立

Hello报文中携带传输地址,双方后续将使用传输地址建立LDP会话。 收到邻居的Hello消息后,LSR根据Hello报文携带的传输地址判断地址是否可达:

  • 如果地址不可达,则不会建立TCP连接,也不会出现任何报错消息,会继续发送Hello报文。
  • 如果地址可达,则由传输地址大的一方发起TCP连接通信,经过三层握手建立连接(源端口随机,目标端口646)。 MPLS_LDP 如上AR2的环回口2.2.2.2重新通告在OSPF中,TCP握手时,源端口随机,目标端口646。
  • 经过TCP三次握手之后,两者建立起TCP连接。*
session会话消息:建立、维护、终止邻居之间的会话
  1. initialization:TCP建立完成后,由传输地址大的一方发起初始化消息,协商LDP的参数。 MPLS_LDP
  2. keepalive消息:维护和终止邻居的会话。传输地址小的一方收到大的一方发送的初始化消息,会同时回复初始化消息和keepalive消息。 MPLS_LDP

keepalive消息(周期15s发送,45s超时)。

  1. address消息

传输地址大的一方回复传输地址小的一方一个keepalive报文,同时回复一个address消息: MPLS_LDP 地址消息存在更新和撤销,可通过增加和删除接口的子地址查看对应消息(ip address x.x.x.x sub)

  • 更新地址(接口的地址信息和LSR-id标识的地址信息): MPLS_LDP
  • 撤销地址: MPLS_LDP
  1. Lable message

LSR之间将自己所有的映射消息相互同步,该映射消息包含标签通告、标签撤销、标签终止、标签释放。

  • lable mapping:宣告FEC/标签映射信息(携带所有32位主机路由对应FEC) MPLS_LDP
  • lable request:请求FEC的标签信息(报文格式大全可查) MPLS_LDP
  • lable abort request:终止未完成的标签(报文格式大全可查) MPLS_LDP
  • lable withdraw:撤销FEC(将AR1的lo 0取消通告OSPF) MPLS_LDP
  • lable release:标签释放 MPLS_LDP ::: tip 设备自身可以做标签更新和撤销,但标签释放需要收到该标签的设备进行释放操作。
  • 如上AR1向AR2更新撤销标签,AR2向AR1释放标签。* :::
notification message:提供差错通知

在AR2的接口上undo mpls ldp: MPLS_LDP


LDP状态机

MPLS_LDP

Non-Existent状态:该状态为LDP Session最初的状态,在此状态双方发送HELLO消息,选举主动方,在收到TCP连接建立成功事件的触发后变为Initialized状态。

Initialized状态:该状态下分为主动方和被动方两种情况,主动方将主动发送Initialization消息,转向OpenSent状态,等待回应的Initialization消息;被动方在此状态等待主动方发给自己的Initialization消息,如果收到的Initialization消息的参数可以接受,则发送Initialization和Keepalive转向OpenRec状态。主动方和被动方在此状态下收到任何非Initialization消息或等待超时时,都会转向Non-Existent状态。

OpenSent状态:此状态为主动方发送Initialization消息后的状态,在此状态等待被动方回答Initialization消息和Keepalive消息,如果收到的Initialization消息中的参数可以接受则转向OpenRec状态,如果参数不能接受或Initialization消息超时则断开TCP连接转向Non-Existent状态。

OpenRec状态:在此状态不管主动方还是被动方都是发出Keepalive后的状态,在等待对方回应Keepalive,只要收到Keepalive消息就转向Operational状态;如果收到其它消息或Keepalive超时则转向Non-Existent状态。

Operational状态:该状态是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果Keepalive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。

::: tip 无论是主动方还是被动方,在任何状态下收到通知消息,或者该状态下的定时器超时,都会进入non-existent状态。 ::: MPLS_LDP 将AR1的lo 0口地址(lsr-id)取消在OSPF的宣告后,即报文传输地址不可达,状态迁移为NonExistent: MPLS_LDP 如上状态变化是


LDP标签分发

标签分配的方向和访问数据封装标签转发的方向是相反的(LSP的上游和下游方向和数据流发送的方向相同,和标签分发的方向相反)。 如AR2发送LSP去往AR1,AR2为上游,AR1为下游,标签分发是AR1发给AR2的。

  1. 标签发布方式:
  • 下游自主的方式(DU)
  • 不需要上游LSR请求标签信息,下游LSR自动根据一条FEC向上游进行标签的分配与分发。* MPLS_LDP ::: tip 标签发布方式为DU时,系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发布标签映射关系,不再区分上下游关系。 :::
  • 下游按需的方式(DoD)
  • 上游LSR对于一条FEC需要向下游发送标签请求消息,下游收到请求消息后会向上游发送一个标签信息。* ::: tip 设备默认不向下游发送标签请求,需要配置remote-peer auto-dod-request命令。 ::: MPLS_LDP
    [AR1-GigabitEthernet0/0/0]mpls ldp advertisement  du/dod     
    

[AR1-mpls-ldp]remote-peer auto-dod-request 采用DoD的标签发布方式时,自动向下游所有的远端对等体请求标签映射消息

::: warning
相邻的LSR对等体之间配置发布方式需要相同,否则无法建立邻居关系。(一条LSP上的设备发布方式应该相同)
:::
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/8cf680cbc6569c773e4cd68fbadab6e5.png)

2. 标签控制方式:
- 独立的方式
**不需要收到下游为这条FEC分配的标签,本地LSR自主的为一条FEC分配一个标签给上游。**
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/a5c6c61c030a43f2278b2d957bd1b463.png)

      1.DU + 独立:本地LSR不需要存在下游LSR给的标签,会直接向上游分配一个标签
      2.DoD + 独立:本地LSR不需要存在下游LSR给的标签,会自动为一条FEC产生一个标签;但需要接收到上游的请求消息后,才会向上游分配该标签
- 有序的方式(默认)
**必须收到下游为这条FEC分配的标签,本地LSR才能为一条FEC分配一个标签给上游。**
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/4e3997b0e30618cd51c5edf9f281628b.png)

      1.DU有序:本地LSR需要先收到下游LSR通告的标签,才能产生标签,并将标签信息直接通告上游
      2.DoD + 有序:本地LSR需要先收到下游LSR通告的标签,才能产生标签;但需要接收到上游的请求消息,才会向上游分配该标签
``` language
[AR1-mpls-ldp]lable distribution control-mode   independent/ordered
  1. 标签的保持方式:
  • 自由的方式:

  • 对于从邻居收到的标签信息,不管是不是最优的下一跳,都会进行保存,可以当作LSP的备份。* MPLS_LDP

     优点:路由发生变化时能够快速建立新的LSP进行数据转发,因为Liberal方式保留了所有的标签。
     缺点:需要分发和维护不必要的标签映射。
  • 保守的方式:

  • 对于从邻居收到的标签信息,只保留使用最优的下一跳。(通过底层IGP判断)* MPLS_LDP LSR根据路由信息,DU模式下,只保留下一跳发来的标签信息,DoD模式下,只向下一跳请求标签。

     优点:只需保留和维护用于转发数据的标签,以达到节约标签的目的。
     缺点:当网络拓扑信息发生变化,保守模式下LSP重建较慢,而自由模式LSR可以直接利用保存的非最优下一跳发来的标签迅速重建LSP

    ::: tip 华为默认分发的组合: DU(为了更加快速的标签分配)+有序(为了防止LSP出现断裂不完整)+自由(保留备份LSP,用于链路故障切换)。 :::

  • 最快的分发组合:DU + 独立 + 自由。*


标签分发实验

MPLS_LDP (路由方向与数据方向相反,可认为标签分发方向与路由方向相同)

所有设备均作如下配置:
[AR1]mpls lsr-id 1.1.1.1
[AR1]mpls 
[AR1-mpls]mpls ldp
[AR1-GigabitEthernet0/0/0]mpls
[AR1-GigabitEthernet0/0/0]mpls ldp

查看AR1所有设备的标签信息: MPLS_LDP ::: tip 出入标签均不为空,表示该节点为中间节点: MPLS_LDP 入标签不为空,出标签为空,表示去往自身路由: MPLS_LDP 入标签为空,出标签不为空,表示该节点为入节点: MPLS_LDP ::: ::: warning MPLS和MPLS LDP的使能只在互联接口做,环回口不做。 ::: AR2去往AR4有两条路径,两条路径都会有标签信息(4.4.4.4每条路径各有一个入节点和中间节点的处理,即针对两个出接口产生两种FEC): MPLS_LDP

::: tip 对于本地设备上的FEC,设备会分配于其对应的入标签,将入标签对应的FEC做为标签映射消息通告邻居,邻居收到标签消息后 将该标签做为出标签使用。 设备会将MPLS的所有邻居都当作上游设备。 ::: 如AR1为1.1.1.1的路由分配出标签3通告给AR2,AR2会把标签3当作访问1.1.1.1的出标签。AR2当作中间节点时,为1.1.1.1分配入标签1024,继续向上游(如AR3)发送时分配出标签3,上游(AR3)收到后将入标签1024当作去往1.1.1.1的出标签发到上游设备(AR2),AR2发给上游(AR1)时使用分配的出标签3。 AR5去往1.1.1.1使用的标签也是1024: MPLS_LDP ::: tip AR2虽然也会将下游(如AR3)发来的1.1.1.1.的标签信息给到AR1,但AR1上没有去往1.1.1.1的1024的标签,原因是dis mpls lsp表中显示的是正在使用最优的标签,AR1产生的自身的FEC的标签信息最优先。 ::: 查看AR1上最优的标签信息值: MPLS_LDP 查看AR1上所有的标签信息值: MPLS_LDP ::: warning

将标签分配方式改为DoD:
[AR1-GigabitEthernet0/0/0]mpls ldp advertisement dod
[AR2-GigabitEthernet0/0/0]mpls ldp advertisement dod
标签分发方式不影响FEC

MPLS_LDP 上述对于每一条FEC的理解,以AR1本地的1.1.1.1为例,AR1为其分配入标签为3,所以AR1去往1.1.1.1的FEC的入标签为3,不能理解成AR1接收的1.1.1.1的入标签为3。 MPLS_LDP 上游AR2收到该条入标签为3的FEC,将该FEC的入标签3当作自身的出标签使用,AR2同时为该条FEC产生1028的标签发送到上游。即将1.1.1.1的FEC的标签由3转变为1028。 DoD模式下,AR1不会请求自身产生的FEC,即AR1的MPLS LSP表中不会有去往1.1.1.1的标签为1028的FEC,AR2其他上游设备如AR3会收到下游AR2发来的标签1028的FEC。 MPLS_LDP ::: MPLS_LDP ::: warning 如上,对于一个标签的转发:

  1. 所有的FEC入标签一定不同。 上图中AR2发出的两条FEC入标签相同,原因是AR2中两条FEC相同,即是同一条路由。查看AR2的LSP表,只有一条FEC入标签为1028且入接口为空,即对应收到标签1028的只有一个FEC,无论哪个接口学习到的标签1028的FEC都认为是同一条。

  2. 对于相同的路由(下一跳也相同),出标签一定相同。 对于相同的路由(下一跳不同)出标签,可能相同。 如上拓扑,AR4访问AR1,下一跳可能是AR3和AR4。

  3. 对于不同的路由(下一跳相同),出标签一定不同。 如上拓扑,AR2访问AR5和AR4。

  4. 对于不同的路由(下一跳也不同),出标签可能相同。 如上拓扑,AR4访问AR3和AR5的出标签可能相同。

  5. 对于同一条路由,入标签和出标签有可能相同。 ::: tip 上述第4点,如果AR4访问AR3,AR3下有两个网段,AR4到两个网段的出标签一定不同。原因是AR3和AR4一定是连接了AR3的两个接口,AR3下的两个网段对应的入标签不能相同,AR3为AR4分配出标签时就不会相同。 :::

    <AR1>tracert -v -a 1.1.1.1 4.4.4.4       查看报文转发过程中封装的标签值
    traceroute to  4.4.4.4(4.4.4.4), max hops: 30 ,packet length: 40,press CTRL_C to break 
    1 10.1.12.2[MPLS Label=1028 Exp=0 S=1 TTL=1] 30 ms  30 ms  20 ms 
    
    2 10.1.23.3[MPLS Label=1028 Exp=0 S=1 TTL=1] 40 ms  30 ms  20 ms 
    
    3 10.1.34.4 80 ms  20 ms  20 ms 

设备对于学习到的32为主机路由信息,一般会产生两条FEC

  1. 只有出标签没有入标签(NULL),表示自身为ingress节点,即自身访问目标需要封装的标签。
  2. 存在入标签和出标签,表示自身为transit节点,即其他设备访问目标经过自身时自身收到的标签信息(入标签),继续发送给下游封装的标签(出标签)。

设备对于自身产生的路由信息,一般对应一条FEC

  • 该FEC只有入标签没有出标签,表示自身为egress节点,即自身做为目标地址被其他设备访问。

LDP基础应用

::: warning LDP只为32位的主机路由分配标签信息,对于非32位路由信息,不会产生入标签信息。 ::: 对于学习到主机路由的标签信息:

  • 本身已经学习到主机路由信息后,将收到的标签保留后,重新分配一个入标签发送给上游设备。(如AR3收到上游AR2发来的1.1.1.1入标签1028的FEC,查询IP路由表后AR3有去往1.1.1.1的路由,则AR3针对该路由生成入标签1028分配给上游邻居)
  • 本身不存在主机路由信息,将收到的标签通过自由的保留方式保留下来(作为备份路径),不生成入标签给上游设备。

对于学习到非主机路由的标签信息:

  • 本身已经存在非主机的直连路由信息,则将收到的标签通过自由的保留方式保留下来, 不会在生成入标签给上游设备。
  • 本身不存在非主机的直连路由信息,将收到的标签保留后,重新分配一个入标签发送给上游设备。 如下:为非32位的路由信息分发标签实验:
    将标签分发模式改为DU:
    [AR1-GigabitEthernet0/0/0]undo mpls ldp advertisement 
    [AR2-GigabitEthernet0/0/0]undo mpls ldp advertisement 
    

[AR1-mpls]lsp-trigger all 为所有路由都分配标签信息,只能指定自身直连路由 host 为所有主机路由分配标签信息(默认的) ip-prefix 为特定的路由分配标签信息,只能指定自身的直连网段、主机路由信息 none 所有自身的路由或者学习到的路由都不分配标签,设备只当作中间节点使用

AR1改成为自身所有标签分配: [AR1-mpls]lsp-trigger all

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/6277e247728327b953864518c783cb2d.png)
如上,执行lsp-trigger all后AR1的LSP表中多产生了一条自身直连的网段信息,其他学习到的路由不进入LSP表。
AR2查询dis mpls ldp lsp:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/2ed2824065d2aeafb5179c4037461bb0.png)
如上,由于AR2上有该路由的信息(直连路由),AR2再收到该路由标签为3的FEC,用自由的方式保留,不会转发。

AR2也改成为自身所有标签分配: [AR2-mpls]lsp-trigger all

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/667d5bb3e7f31b6e2e6eb3f61e8aac3b.png)
如上,**AR2改为支持为非32位路由分配标签后,才可以将其他设备发来的路由信息放入LSP表中转发。**
AR3没有支持为非32位路由分配标签,但由于AR3上没有该条非32位直连路由信息,就会将收到的标签3保留作为出标签,重新分配一个1029的入标签发送给上游设备。
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/2dd8110a04cf1005245353a470d87f07.png)
::: warning
**非主机路由和主机路由相反。**
**LSR会为主机路由分配标签,但不会为直连的非主机路由分配标签。**
:::

设置前缀列表: [AR1]ip ip-prefix 1 index 10 permit 1.1.1.1 32 [AR1]ip ip-prefix 2 index 10 permit 10.1.12.0 24

AR1为特定路由1.1.1.1/32分配标签: [AR1-mpls]lsp-trigger ip-prefix 1

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/477ffbc770d4d98576ffbec1611cc2d6.png)
如上,只有1.1.1.1/32作为入节点会生成标签信息,其他网段不会作为入节点生成相应标签信息。

------------------------------------
### MPLS汇总问题
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/ba470c70537909515b89f45c5d4ae0c9.png)
#### 特殊标签
如上拓扑只配置了MPLS和OSPF。
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/19bb3cf5fbefd78de1781b8a448be934.png)

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/f76dc31240045bf0c5248ef387dcf400.png)

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/4df9a53978dafe59404a63fd3986626c.png)

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/b19078ed1d32aaf95789cb7281184a60.png)

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/2f08f58a50a8de8edbaee4764e5625d8.png)
如上,AR1 ping AR4时,携带标签1026,与AR1 LSP表一致,AR4回包时不携带AR2 LSP表中到1.1.1.1的标签3,原因是标签3是特殊标签,即倒数第二跳AR2弹出(PHP),AR1收到时就不包含标签。
::: warning
  **PHP:通过标签3实现倒数第二跳弹出。**
如上拓扑中,AR2发往AR1时,判断需要将入标签1027转换为出标签3,会将标签栈直接弹出。
(AR2仍会按照标签3的出接口转发,只是发送时弹出标签)
:::


#### MPLS汇总
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/885321bb31a5b84987aa8848be1d90c1.png)

AR3上将AR4的32位路由汇总为24位路由: [AR3-ospf-1-area-0.0.0.1]abr-summary 4.4.4.0 255.255.255.0

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/58158643b5b8cad99c38f25f204e57c2.png)
查看数据包:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/fe46a36d958b926725ccceeef31626f5.png)
如上,**汇总后数据包走IP转发,不走MPLS,原因是LDP只为32位的主机路由分配标签信息。**

32位的主机路由汇总变为了24位的路由信息时,**汇总后的LSP会存在问题,汇总后的路由信息是24位,不满足LDP分配标签的模式(只为主机路由分配标签)。数据信息的访问没有问题(MPLS网络可以正常通信,MPLS VPN网络不能通信),原因是AR1中仍会存在AR4的路由信息,可以通过IP报文转发。** (数据访问过程:AR1-AR3通过IP报文进行转发,AR3-AR4通过MPLS标签转发。)       
**如上现象称为LSP断裂。**
**主要影响场景:在MPLS VPN中会出现业务中断。**

::: tip
路由汇总后的标签转发情况:
  AR3做汇总路由,通过下游AR4分配标签进行数据转发:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/6e1a27a7434668718a23c85179633cdd.png)
AR3做为中间节点,将下游给的标签重新产生一个标签信息发送给上游(AR2):
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/931bf63a83041610d1c45b9f0949db4f.png)
**AR2收到标签信息后判断对应的FEC是32位,自身不存在对应的32位路由,只存在24位路由信息,AR2会将该标签以自由方式进行保留,不会产生标签分配给上游(AR1)**:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/d85054dac69abb5f8c61a6fe4ca063a6.png)
:::

MPLS断裂解决:
1. **在汇总后的设备上配置一条明细的静态路由。**

[AR2]ip route-static 4.4.4.4 32 10.1.23.3

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/10e5ca65a130f4aa4cf45a0919fe3bd5.png)

[AR1]ip route-static 4.4.4.4 32 10.1.12.2

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/134c34a16026f55e3b84edee7f89f9b7.png)
配置后即可实现AR1-AR3的MPLS转发:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/21ba58355084d90a7fd5846aa01dbaae.png)
2. 在汇总后的设备(transit节点)配置:[AR2-mpls-ldp]longest-match      将收到的32位主机路由标签(不管自身是否存在对应32位的路由)

[AR1]undo ip rou 4.4.4.4 32 [AR2]undo ip rou 4.4.4.4 32

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/41206dde9137295d66c515e767270d4c.png)

[AR2]mpls ldp [AR2-mpls-ldp]longest-match

AR2将收到的1024的标签继续向下分配上游AR1:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/99b6201e1b983aa639f7bf3237da3bdf.png)   

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/06fef66f08a755f2ee337f9a9e9f62f3.png)
**如果AR1下还有上游设备,需要在AR1上也执行longest-match命令,将标签继续向下分配。**
::: tip
  **longest-match命令作用:只要是32位标签信息,无论是否存在明细路由都向下分配标签。**
:::                                                                 
::: warning
  设备可以直接封装标签的FEC会在使用的表项MPLS LSP表中显示,MPLS LDP LSP表中显示保留的FEC无法封装标签。
:::
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/05e94cbbf5ef89f09a1861ee82cd4a62.png)
如上,AR1访问4.4.4.4通过4.4.4.0转发,tunnel id为0,走IP转发,不进入隧道,AR1无法直接为该FEC分配标签。

[AR1]ip route-static 4.4.4.4 32 10.1.12.2

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/16ff3ab30b2c209ed2b429dc8264605d.png)

**总结:路由汇总后要继续向上游产生入标签分配,需要在汇总后的设备(ingress节点)配置静态主机路由,将数据信息送入MPLS隧道。**
出现4.4.4.4的入节点:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/96db945a6100dff33d7f216139ad973e.png)
有明细路由后就可以使用收到的标签1027:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/d75ba19ebcfb4f4b484b4d6e5ddae27f.png)
AR1-AR4数据包携带标签信息:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/80990c3ce9d55bdbfdce00dcac774915.png)
::: tip
  **汇总后的transit节点入AR2一定要存在汇总路由,才能将32位的标签FEC向上游分配。**
(AR1不需要存在汇总路由,原因是AR1存在明细路由。)
:::

------------------------------------
### LDP与IGP的同步
**IGP优先于LDP建立邻居关系。**
**LDP根据FEC分配的标签(FEC根据IGP得来的)。**

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/27fabcab6ad97c1ba7e3d9f83e0c6811.png)
如上拓扑底层使用OSPF建立连接,使能MPLS。
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/7052f415fedf0478353eda35987d7b87.png)
AR1带标签访问AR4:
![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/9808b9cb51859d53e94f1b69cee945e2.png)
断开AR1-AR2的LDP邻居:

[AR2-GigabitEthernet0/0/0]undo mpls ldp

此时AR1-AR4主路径为IP访问,备路径为MPLS访问。AR1访问AR4时应切换到备路径使用MPLS,但此时仍采用IP访问。

[AR2-GigabitEthernet0/0/0]mpls ldp [AR2-GigabitEthernet0/0/0]shutdown

[AR4-acl-basic-2000]rule 5 deny source 2.2.2.2 0 [AR4-acl-basic-2000]rule 10 permit [AR4-GigabitEthernet0/0/1]traffic-filter outbound acl 2000 AR2-AR4-AR1在AR4的出接口调用

[AR2-GigabitEthernet0/0/0]undo shutdown

![image](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/af419d7e416eefb72aa351ddc3b52c97.png)
::: tip
  AR4上配置ACL过滤AR2环回口的源访问,可以避免AR1环回口通过AR1-AR3-AR4-AR2访问AR2环回口。
:::
**AR4执行对2.2.2.2的过滤后,AR2接口undo shutdown,可以观察到AR1-AR4的访问先切换到主路径通过IP访问,等待AR1-AR2 LDP邻居重建后恢复标签转发的过程。**

**主备路径访问数据信息:**     
- **主路径的LDP失效,但是IGP正常,主路径会通过IP访问数据,不会切换备路径。**
- **主路径失效后恢复,由于IGP优先于LDP建立邻居,主路径一段时间内会通过IP访问数据,待LDP邻居建立完成后切换到MPLS通信,导致通过IP网络访问的这部分数据丢失。**

**在设备配置LDP与IGP同步的功能可以解决该问题:**
``` language
[AR1-GigabitEthernet0/0/0]ospf ldp-sync     接口开启LDP与IGP同步功能
[AR1-GigabitEthernet0/0/0]ospf timer ldp-sync hold-max-cost 1000      指代LDP失效时将IGP的开销设置为最大值,持续1000s(1000s后开销恢复)

MPLS_LDP

[AR4-GigabitEthernet0/0/1]undo traffic-filter outbound 

[AR2-GigabitEthernet0/0/1]undo mpls ldp

MPLS_LDP AR1-AR2的LDP邻居断开后,AR1-AR4的路径由AR2切换到AR3: MPLS_LDP ::: warning 同步功能会相互影响,如上AR1接口配置同步功能会影响访问AR2。 :::

[AR3-GigabitEthernet0/0/0]shutdown 

[AR1-GigabitEthernet0/0/0]undo ospf ldp-sync  
[AR1-GigabitEthernet0/0/0]undo ospf timer ldp-sync hold-max-cost 1000
[AR1-GigabitEthernet0/0/0]undo mpls ldp

[AR2-GigabitEthernet0/0/0]ospf ldp-sync  
[AR2-GigabitEthernet0/0/0]ospf timer ldp-sync hold-max-cost 1000
[AR2-GigabitEthernet0/0/0]mpls ldp

MPLS_LDP

MPLS_LDP 如上,shutdown AR1-AR3接口后,AR1的GE0/0/0接口undo mpls ldp会使得AR1-AR2的开销变为最大值65535,AR2-AR1的开销不变。

[AR3-GigabitEthernet0/0/0]undo shutdown 
AR1和AR2都配置同步命令:
[AR1-GigabitEthernet0/0/0]ospf ldp-sync  
[AR1-GigabitEthernet0/0/0]ospf timer ldp-sync hold-max-cost 1000
[AR1-GigabitEthernet0/0/0]mpls ldp

[AR2-GigabitEthernet0/0/0]ospf ldp-sync  
[AR2-GigabitEthernet0/0/0]ospf timer ldp-sync hold-max-cost 1000
[AR2-GigabitEthernet0/0/0]mpls ldp

AR1-AR4通过开销较低的主路径通信: MPLS_LDP MPLS_LDP AR1 GE0/0/0抓包,AR1-AR4走MPLS通信,标签1026: MPLS_LDP

断开AR1-AR2的LDP邻居:
[AR2-GigabitEthernet0/0/0]undo mpls ldp

AR1-AR4访问路径由AR2切换到AR3: MPLS_LDP

MPLS_LDP AR1 GE0/0/1抓包,AR1-AR4切换到备路径继续走MPLS通信,标签1026: MPLS_LDP

点赞
收藏
评论区
推荐文章

暂无数据

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