1.LDP基本概念
(1)LDP协议概述
(2)LDP会话、LDP邻接体、LDP对等体
(3)LSR ID 与LDP ID
(4)LDP消息
⦁ 按照消息的功能,LDP消息一共可以分为四大类型:发现消息(Discovery Message),会话消息(Session Message),通告消息(Advertisement Message)和通知消息(Notification Message)。
⦁ 发现消息:用来宣告和维护网络中一个LSR的存在;用于通告和维护网络中LSR的存在,如Hello报文。
⦁ 会话消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization报文、KeepAlive报文。
⦁ 通告消息:用来生成、改变和删除FEC的标签映射;
⦁ 通知消息:用来宣告告警和错误信息。
⦁ LDP消息承载在UDP或TCP之上,端口号均为646 。其中发现消息用来发现邻居,承载在UDP报文上。其他消息的传递要求可靠而有序,所以LDP使用TCP建立会话,会话、通告和通知消息都基于TCP传递。
(5)LDP报文封装
⦁ LDP头部长度为10Byte,包括Version,PDU Length和LDP Identifier三部分。
⦁ Version占用2Byte,表示LDP版本号,当前版本号为1。
⦁ PDU Length占用2Byte,以字节为单位表示除了Version和PDU Length以外的其他部分的总长度。
⦁ LDP Identifier,即LDP ID,长度6Byte,其中前4Byte用来唯一标识一个LSR,后2Byte用来表示LSR的标签空间。
⦁ LDP消息包含五个部分。
⦁ U占用1个bit,为Unknown Message bit。当LSR收到一个无法识别的消息时,该消息的U=0时,LSR会返回给该消息的生成者一个通告,当U=1时,忽略该无法识别的消息,不发送通告给生成者。
⦁ Message Length占用2个bytes,以字节为单位表示Message ID、Mandatory Parameters和Optional Parameters的总长度。
⦁ Message ID占用32个bit,用来标识一个消息。
⦁ Mandatory Parameters和Optional Parameters分别为可变长的该消息的必须的参数和可选的参数。
⦁ Message Type表示具体的消息类型,目前LDP定义的常用的消息有Notification,Hello,Initialization,KeepAlive,Address,Address Withdraw,Label Mapping,Label Request,Label Abort Request,Label Withdraw,Label Release。
2.LDP工作原理
(1)LDP会话状态机
LDP Session协商过程可以通过状态机来描述。如图所示,有5种状态。分别是Non-Existent,Initialized,OpenRec,OpenSent,Operational。
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状态。
LDP状态切换信息可以通过指令debug mpls ldp session看到。
(2)LDP会话建立 - 发现阶段与TCP连接建立
除了基本发现机制外,可以通过拓展发现机制发现非直连的远端邻接体,该内容不属于课程的重点,详细内容可以查阅RFC5036相关内容。
LDP的传输地址用于与邻居建立TCP连接。
两台LSR之间在建立LDP会话之前,需要先建立TCP连接,以便进行LDP协议报文的交换。
设备的传输地址被包含在LDP Hello报文中,LSR通过Hello报文知晓邻居的传输地址。
在使用Hello报文发现邻居并且知道了对方的传输地址后,邻居之间就会开始尝试TCP三次握手(基于传输地址),并且交互LDP的初始化报文、标签映射报文等,这些报文都使用双方的传输地址作为源、目的IP地址。
LSR必须拥有到达邻居的传输地址的路由。
缺省情况下,公网的LDP传输地址等于设备的LSR ID,私网的传输地址等于接口的主IP地址。
在接口视图下,使用mpls ldp transport-address命令,可以修改传输地址。
(3)LDP会话建立-会话建立与保持
(4)LDP邻居状态
(5)LDP会话状态
LDP会话的状态:
NonExistent:表示LDP会话的最初状态。在此状态双方互相发送Hello消息,在收到TCP连接建立成功事件的触发后变为Initialized状态。
Initialized:表示LDP会话处于初始化状态。
Open Sent:表示LDP会话进入初始化状态后,主动方给被动方发送了Initialized消息,并等待对方的回应。
Open Recv:表示LDP会话进入初始化状态后,当双方都收到了对方发送的KeepAlive消息后,LDP会话进入Operational状态。
Operational:表示LDP会话建立成功。
3.LDP标签分发
(1)标签的发布和管理
(2)上游与下游
(3)标签发布模式-DU模式
标签分配:LSR从本地标签空间中取出一个标签与FEC绑定。
标签分发:LSR将标签与FEC的绑定关系通知给上游LSR。
标签发布方式为DU时,系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发布标签映射关系,不再区分上下游关系。因为在只给上游对等体分标签情况下,发送标签映射消息的时候,要根据路由信息对会话的上下游关系进行确认。
(4)标签发布方式-DOD模式
只有上游邻居向自己请求标签映射时,LSR才会通告标签映射给该邻居
(5)标签分配控制方式-独立模式
标签分配控制方式需要与标签发布方式结合使用:
在使用DU作为标签分发方式的情况下,如图所示,R2和R3对192.168.4.0/24这条FEC,可以在上游LSR无请求,且自身没有收到下游LSR的标签绑定信息的情况下,主动向上游LSR通告标签绑定信息。
采用DoD作为标签发布方式时,如图所示,R2和R3对192.168.4.0/24这条FEC,只要收到上游LSR的标签请求消息,可以在自身没有收到下游LSR的标签绑定信息的情况下,向上游LSR通告标签绑定信息。
(6)标签分配控制方式-有序模式
当标签控制方式为Ordered,只有当LSR收到特定FEC下一跳发送的特定FEC标签映射消息或者LSR是LSP的出口节点时,LSR才可以向上游发送标签映射消息。
当标签分发方式为DU时,如图所示,对于192.168.4.0/24这条FEC,不论上游LSR是否有请求,必须收到下游LSR对此FEC的标签绑定信息才向上游LSR发布标签绑定信息,所以必须由Egress LSR,也就是R4作为LSP建立的“起点”。
当标签发布方式采用DoD时,如图所示,对于192.168.4.0/24这条FEC,只有收到上游LSR请求的请求,且自身已经收到下游LSR的标签绑定信息的情况下,才向上游LSR通告标签绑定信息。因此,必须由Ingress LSR(R1)发起请求,逐跳请求到Egress LSR(R4),最终由R4开始,向上游建立LSP。
(7)标签保留-自由模式
当基于IP网络部署MPLS时,LSR根据IP路由表判断接收到的标签映射是否来自下一跳。
Liberal方式的最大优点在于路由发生变化时能够快速建立新的LSP进行数据转发,因为Liberal方式保留了所有的标签。缺点是需要分发和维护不必要的标签映射。
DU标签分发方式下,如果采用Liberal保持方式,则R3保留所有LDP邻居 R2和R5发来的关于192.168.1.0/24这个FEC的标签,无论该R2和R5是否是IP路由表中到达192.168.1.0/24的下一跳。
DoD标签分发方式下,如果采用Liberal保持方式, LSR会向所有LDP邻居请求标签。但通常来说,DoD分发方式都会和Conservative保持方式搭配使用。
(8)标签保留-保守模式
Conservative方式的优点在于只需保留和维护用于转发数据的标签,以达到节约标签的目的。
当使用DU标签分发方式时,LSR可能从多个LDP邻居收到到同一网段的标签映射消息,如图中R3会分别从R2和R5收到网段192.168.1.0/24的标签映射消息。如果采用Conservative保持方式,则R3只保留下一跳R2发来的标签,丢弃非下一跳R5发来的标签。
当使用DoD标签分发方式时, LSR根据路由信息只向它的下一跳请求标签。
当网络拓扑变化引起下一跳邻居改变时:
使用自由标签保持方式,LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间。
使用保守标签保持方式,LSR只保留来自下一跳邻居的标签,节省了内存和标签空间,但LSP的重建会比较慢。
保守标签保持方式通常与DoD方式一起,用于标签空间有限的LSR。
(9)PHP特性
在标签发布时,R3为作为192.168.3.0/24这条FEC的Egress LSR。分配标签时,R3为该FEC分配了标签3,并将该标签绑定信息通告给R2。
在数据转发时,R2作为到达192.168.3.0的次末跳(倒数第二跳),发现出标签值为3,于是将标签头部弹出,将IP报文转发给R3,而R3则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升。
(10)隐式空标签与显式空标签(1)
(11)隐式空标签与显式空标签(2)
在MPLS视图下,执行命令label advertise { explicit-null | implicit-null | non-null },配置向倒数第二跳分配的标签。
根据参数的不同,可以配置Egress向倒数第二跳分配不同的标签。
缺省情况下,使用的是implicit-null,Egress向倒数第二跳节点分配隐式空标签,值为3。
如果配置的是explicit-null,Egress节点向倒数第二跳分配显式空标签,值为0。当需要支持MPLS QoS属性时,可以选用explicit-null。
如果配置的是non-null,Egress向倒数第二跳正常分配标签,即分配的标签值不小于16。
4.LDP工作过程详解
(1)组网介绍
华为设备目前缺省模式为下游自主方式(DU)+ 有序标签分配控制方式(Ordered)+ 自由标签保持方式(Liberal)。
对于从R1进入,到达192.168.4.0/24的数据,R1为Ingress LSR,R4为Egress LSR。
(2)标签分发-Egress LSR
注:缺省情况下,根据32位的主机IP路由触发LDP建立LSP。可以通过手工配置触发非32位路由的LSP建立。
(3)标签分发-Transit LSR
注:当R2发生故障时,OSPF路由将会重新收敛,此时R1的路由表中192.168.4.0/24路由的下一跳将会切换至R3,此时R1将启用R3所通告的、关于192.168.4.0/24的标签。
(4)标签分发-Ingress LSR
当R1收到发往192.168.4.1的IP报文时,首先在其FIB表中查询该目的IP地址,它发现所匹配的表项的Tunnel ID为非0,因此继续在NHLFE中查询该Tunnel ID,然后意识到需要将对该IP报文压入标签并进行标签转发,出接口为GE0/0/0、下一跳为R2、出站标签为1021,于是为报文插入标签头部并转发出去。
下一跳标签转发项(Next Hop Label Forwarding Entry) 下一跳标记转发入口NHLFE
(5)标签转发-Igress LSR
当R1收到发往192.168.4.1的IP报文时,首先在其FIB表中查询该目的IP地址,它发现所匹配的表项的Tunnel ID为非0,因此继续在NHLFE中查询该Tunnel ID,然后意识到需要将对该IP报文压入标签并进行标签转发,出接口为GE0/0/0、下一跳为R2、出站标签为1021,于是为报文插入标签头部并转发出去。
(6)标签转发-Transit LSR
当R2收到携带1021标签的标签报文时,查询ILM,根据ILM对应到NHLFE中的表项。于是,R2对该标签报文通过swap操作将标签更换为1041,并从相应的接口转发出去。
(7)标签转发-Engress LSR
当R4收到携带1041标签的标签报文时,查询ILM,根据ILM查询到操作为Pop。于是,R4对该标签报文通过Pop操作将最外层标签剥离,此时该报文已经变成了标准IP报文,R4将对该IP报文执行标准的IP转发流程。
R4在转发该报文时分别查询了LFIB和FIB表,作为最后Egress LSR,其存在转发效率提升的可能性,怎么做?
(8)在MPLS中,运行LDP协议的LSR的操作小结
5.LDP基础配置
(1)LDP基本配置命令(1)
(2)LDP基本配置命令(2)
(3)LDP基本配置命令(3)
6.案例拓扑
以AR1为例子
[czyAR1]mpls lsr-id 10.0.1.1
[czyAR1]mpls
[czyAR1]mpls ldp
[czyAR1]inter g0/0/0
[czyAR1-GigabitEthernet0/0/0]mpls ldp
因为192.168.1.0/24不是32掩码的路由,所以要额外配置触发LSP建立:
备注这里触发LSP建立的时候会导致AR4学不到AR1的10.0.1.1,目前我还没搞清楚是什么原理,如果需要让24位的网络和环回口都被学习到的话需要lsp-trigger all
[czyAR1]ip ip-prefix ldp permit 192.168.1.0 24
[czyAR1]mpls
[czyAR1-mpls]lsp-trigger ip-prefix ldp
同理AR4也是
[czyAR4]ip ip-prefix ldp permit 192.168.4.0 24
[czyAR4]mpls
[czyAR4-mpls]lsp-trigger ip-prefix ldp
验证