Skip to main content

LDP 标签分配协议

·405 words·2 mins
Rory
Author
Rory
Step by step the ladder is ascended

标签发布方式(Label Advertisement Mode)
#

下游自主方式 DU(Downstream Unsolicited):对于一个特定的 FEC,LSR 无需从上游获得标签请求消息即进行标签分配与分发。

下游按需方式 DoD(Downstream on Demand):对于一个特定的 FEC,LSR 获得标签请求消息之后才进行标签分配与分发。

标签分配控制方式(Label Distribution Control Mode)
#

独立标签分配控制方式(Independent):本地 LSR 可以自主地分配一个标签绑定到某个 FEC,并通告给上游 LSR,而无需等待下游的标
签。

有序标签分配控制方式(Ordered):对于 LSR 上某个 FEC 的标签映射,只有当该 LSR 已经具有此 FEC 下一跳的标签映射消息、或者
该 LSR 就是此 FEC 的出节点时,该 LSR 才可以向上游发送此 FEC 的标签映射。

标签保持方式(Label Retention Mode)
#

自由标签保持方式(Liberal):对于从邻居 LSR 收到的标签映射,无论邻居 LSR 是不是自己的下一跳都保留。

保守标签保持方式(Conservative):对于从邻居 LSR 收到的标签映射,只有当邻居 LSR 是自己的下一跳时才保留。

华为
#

默认为/32 的 IGP 路由分标签,采用下游自主方式(DU)+ 有序标签分配控制方式(Ordered)+ 自由标签保持方式(Liberal)。

思科
#

默认为非 BGP 路由分配标签,采用下游自主方式(DU) + 独立标签分配控制方式(Independent) + 自由标签保持方式(Liberal)。

LDP 会话的建立过程
#

Hello 消息中携带传输地址,双方使用传输地址建立 LDP 会话,传输地址较大的一方为主动发,主动发送 TCP 连接。

LDP 会话存在两种关系,邻接和邻居关系。

  • LDP 对等体之间,通过周期性发送 Hello 消息表明自己希望继续维持这种邻接关系。如果 Hello 保持定时器超时仍没有收到新的 Hello 消息,则删除 Hello 邻接关系。邻接关系被删除后,本端 LSR 将发送 Notification 消息,结束该 LDP 会话。
  • LDP 对等体之间通过 LDP 会话连接上传送的 Keepalive 消息来维持 LDP 会话。如果会话保持定时器(Keepalive 保持定时器)超时仍没有收到任何 Keepalive 消息,则关闭 TCP 连接,本端 LSR 将发送 Notification 消息,结束 LDP 会话。

Hello 报文是 UDP 报文,src 为接口地址,dst 为 224.0.0.2,TTL=1. Hello 数据包中总是携带 transport address.

Keepalive 报文基于 TCP,src 为本端 transport 地址,dst 为对端宣告的 transport 地址,TTL =255

RP/0/0/CPU0:R2#show mpls ldp parameters
Mon Dec 20 03:38:08.447 UTC

LDP Parameters:
  Role: Active
  Protocol Version: 1
  Router ID: 10.1.2.2
  Null Label:
    IPv4: Implicit
  Session:
    Hold time: 180 sec
    Keepalive interval: 60 sec
    Backoff: Initial:15 sec, Maximum:120 sec
    Global MD5 password: Disabled
  Discovery:
    Link Hellos:     Holdtime:15 sec, Interval:5 sec
    Targeted Hellos: Holdtime:90 sec, Interval:10 sec
    Quick-start: Enabled (by default)
    Transport address:
      IPv4: 10.1.2.2
  Graceful Restart:
    Disabled
  NSR: Disabled, Not Sync-ed
  Timeouts:
    Housekeeping periodic timer: 10 sec
    Local binding: 300 sec
    Forwarding state in LSD: 15 sec
  Delay in AF Binding Withdrawl from peer: 180 sec
  Max:
    1500 interfaces (1200 attached, 300 TE tunnel), 2000 peers
  OOR state
    Memory: Normal

如上所示,hello 的 interval 是 5s,holdtime 是 15s;keeplive 的默认 interval 是 60s,holdtime 是 180s。

Note:

1.如果直连 link 存在 acl, block 了 udp 的 hello 包,将会 trigger 邻接关系 15s 内 down 进而邻居关系也会被 shutdown:

RP/0/0/CPU0:Dec 20 03:04:00.467 : mpls_ldp[1181]: %ROUTING-LDP-5-HELLO_ADJ_CHANGE : VRF 'default' (0x60000000), Link hello adjacency (10.1.23.3, GigabitEthernet0/0/0/1) with Nbr 10.1.3.3:0 is DOWN (Discovery Hello Hold Timer expired)
RP/0/0/CPU0:Dec 20 03:04:00.477 : mpls_ldp[1181]: %ROUTING-LDP-5-NBR_CHANGE : VRF 'default' (0x60000000), Neighbor 10.1.3.3:0 is DOWN (Discovery Hello Hold Timer expired)

2. 可以通过直连 link 建立邻接关系,非直连绕路建立邻居关系;因为是存在这种现象,建立邻居关系的 transport 的路由不是通过直连学到的。

3. 关于 IGP ldp sync, 除了通过检查配置和 ldp 邻居关系, 还可以通过以下命令检查 ldp sync 的状态.

mpls_ldp_sync.im_attr_ldp_sync_info_notify_handle,非 0 代表配置 igp ldp sync.

mpls_ldp_sync.ldp_sync_info,TRUE 代表 LDP 邻居关系正常建立了

RP/0/0/CPU0:BR01#show isis private all | include "Interface|mpls_ldp_sync"
Tue Dec 14 13:22:29.276 UTC
+++++++++++++++++++++++ IS-IS 1 Interface Private Data ++++++++++++++++++++++++
Interface GigabitEthernet0/0/0/0
mpls_ldp_sync.im_attr_ldp_sync_info_notify_handle : 303302848
mpls_ldp_sync.ldp_sync_info : TRUE
mpls_ldp_sync.is_ldp_sync_info_ok : 1
Interface GigabitEthernet0/0/0/2
mpls_ldp_sync.im_attr_ldp_sync_info_notify_handle : 0
mpls_ldp_sync.ldp_sync_info : FALSE
mpls_ldp_sync.is_ldp_sync_info_ok : 1
Interface Loopback0
mpls_ldp_sync.im_attr_ldp_sync_info_notify_handle : 0
mpls_ldp_sync.ldp_sync_info : FALSE
mpls_ldp_sync.is_ldp_sync_info_ok : 0