一、概念
华为ldp是mpls动态的标签分发、存储、控制协议,工作时在2.5层; 默认为只为32位主机路由且存在于路由表中的地址分标签
名词:
MPLS domain
LSR:Label Switching Router
LER:Label Edge Router
LSP:Label Switching Path
LDP:Label Distribution Protocol
RIB:Routing Information Base #路由信息库
LIB:Label Information Base #标签信息库
FIB:Forwarding Information Base #转发信息库
LFIB:Label Forwarding Information Base(ILM+NHLFE) #标签转发信息库
ILM:Token+ Incomping Interface+Incoming Label=Incoming Label Mapping
NHLFE:Next Hop Label Forwarding Entry下一跳标签转发出口(包括:Token、Next Hop、Out Label、Out Interface、LSRtype)
Bottom of Label Stack:标签栈底位
DS:DownStream下游
PHP:Penultimate Hop Popping次末跳弹出
LDP动作:
Ingress Push
Transport Swap
Egress Pop
LDP邻居建立过程(邻居建立时在传输层上方):
1、起用mpls ldp的端口向224.0.0.2的646端口广播hello message,双方互相收到
2、lsr-id大的(端口号n)向小的一方的lsr-id 646端口,发起TCP三次握手,建立邻居关系
3、lsr-id大的port n向小的一方的lsr-id 646端口,发起Initialization Message初始化信息
4、lsr-id小的一方确认信息无误,用646端口向大的一方port n回复Initialization Message Keep Alive Message
5、lsr-id大的port n向小的一方的lsr-id 646端口,发送Keep Alive Message Address Message
6、lsr-id小的用646端口向大的一方的port n,发送Address Message,包含自己有32位路由的IP地址
7、lsr-id大的进行tcp ack确认
8、lsr-id小的用646端口向大的一方的port n,发送Label Mapping Message Label,包含FEC和标签
9、lsr-id大的用port n向小的一方的646端口,也发送Label Mapping Message Label,包含FEC和标签
10、lsr-id小的进行tcp ack确认
然后,启用ldp的直连端口也重复上述过程
LDP LIB标签建立过程:
1、在egress的路由器上,发现新的路由(32位主机路由),为始发的FEC分配3的标签,并给上游发Label Mapping消息,包含FEC和自己分发的标签
2、上游收到了下游分的Label Mapping消息,检查是否本地有FEC、是否是下一跳发送。是则保存、并分配标签,用Lable Mapping发给上下游邻居(体现有序分发)
3、Ingress,收到Label Mapping消息,检查是否是下一跳,是则存储、分配标签、发送给上游,上游检查,发现路由不可达,自由保留并在前边打星号
二、拓朴背景
BGP100和BGP234是EBGP邻居关系; BGP500和BGP234是EBGP邻居关系;
BGP234内,R2和R4建立IBGP邻居关系; 全域起IGP邻居关系OSPF,全域起MPLS域
三、要求
要求1:
R1能否访问R5的业务地址?如果不通,是什么原因?怎么解决?
要求2:
BGP234全域关闭mpls后,测试是否可以通?如果不通,怎么解决?
四、答案
1、要求1答案:
不能访问,原因是IBGP路由黑洞:当数据包到R2时,走FIB表,将172.16.5.5通过IGP传递,但R3上没有R5的路由,导致数据包被丢弃
解决方法:
R2和R4敲命令route recursive-lookup tunnel命令,当数据包到R2时,叠代查询到MPLS隧道:下一跳10.1.4.4,走0x3,分配标签1025给R3; R3查询LFIB表,走MPLS隧道,发现替换标签是3(隐含空标签),次末跳弹出,走路由到下一跳到达R4; R4走EBGP路由到达R5,如下:
<R2>dis fib 10.1.4.4
Route Entry Count: 1
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
10.1.4.4/32 10.1.23.3 DGHU t[68] GE0/0/1 0x3
#
[R2-bgp]dis tunnel-info tunnel-id 0x3
Tunnel ID: 0x3
Tunnel Token: 3
Type: lsp
Destination: 10.1.4.4
Out Slot: 0
Instance ID: 0
Out Interface: GigabitEthernet0/0/1
Out Label: 1025
Next Hop: 10.1.23.3
Lsp Index: 14339
#
#
<R3>dis mpls lsp in-label 1025
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.1.4.4/32 1025/3 -/GE0/0/1
2、要求2答案:
关闭BGP234的MPLS域后,R1到R5不通,原因是路由黑洞:当R2走FIB表转发到R3时,R3由于未起IBGP,导致没有R5的路由,丢弃数据包
解决方法是:
1、R3也起IBGP,全域IBGP互联,同样能获取到R5的路由,用路由传递(或者R3起路由反射器,也能获取到R5的路由);
2、BGP234全域起MPLS,如要求1答案相同,或者走隧道如GRE
3、R2和R4上做EBGP和IGP的双向引入,全程走路由
*这里不用PE设备对域内peer不用敲peer x.x.x.x next-hop-local命令,因为不管下一跳是走哪个,已经进lsp tunnel里面、物理上的下一跳了
五、主要配置命令:
mpls lsr-id <lsr-id> #配置mpls lsr-id,一般为环回口(必须为可用且可达的IP地址)
mpls #全局|接口使能mpls
mpls ldp #全局|接口下使能ldp
mpls ldp transport-address interface <接口> #如果lsr-id不可达,则更换为物理接口
lsp-trigger all | host | ip-prefix ip-prefix-name | none #为所有|指定路由分标签(华为ldp默认只为32位主机路由分标签)
route recursive-lookup tunnel #全局模式下,开启叠代隧道查询(如在ibgp场景下,通过叠代进标签隧道的方式,解决路由黑洞问题)dis mpls ldp lsp #查lib表(控制层面)
dis mpls lsp |verbose #查lfib表(数据层面)
dis mpls lsp in-label|out-label <label_name> |verbose
dis mpls interface #查使能mpls的接口列表
dis mpls ldp interface | G0/0/0 #查看接口的mpls ldp详细信息
dis mpls ldp session #查ldp会话表
dis tunnel-info all|tunnel-id <tunnel_id号> #查隧道信息表
dis fib <ip> #查fib表
tracert lsp -a <sip> ip <dip> <dip掩码位数> #跟踪lsp路径(包括本机压入标签信息条目)
tracert -v -a <sip> <dip> #跟踪目标路径详细信息(不包括本机压入标签信息条目)