hcnp-mpls ldp配置与管理
LDP基础以及工作原理
LDP(Label Distribution Protocol,标签分发协议)是MPLS的一种最主要的控制协议,负责FEC的分类,MPLS标签的分配以及LSP的动态建立和维护。LDP规定了标签分发过程中的各种消息以及相关处理过程。通过LDP协议,LSR可以把网络层信息的路由信息直接映射到数据链路层的LSP交换路径上,实现网络层动态建立LSP。目前LDP广泛应用于VPN服务上,具有组网配置简单,支持基于路由动态建立LSP,支持大容量LSP。
LDP基本概念
LDP邻接体
当一台LSR接收到对端发送的Hello消息后,两端之间就建立了LDP邻接体关系也就是邻居关系,LDP邻接体存在两种类型:
本地邻接体:通过组播形式(目的IP地址为224.0.0.3,代表本地子网中所有路由器)发送Hello消息(称之为链路hello消息)发现的邻接体叫做本地邻接体。
远端邻接体:以单播形式发送helloi消息(称之为目标hello消息)发现的邻接体叫做远端邻接体。
LDP对等体
LDP对等体是指互相之间存在直接的LSP会话,可直接使用LDP会话,可直接使用LDP来交换标签映射消息(包括标签请求消息和标签映射消息)的两个LSR。在LDP对等体中,通过他们之间的LDP会话可获得下游对等体为某FEC分配的MPLS入标签,以此作为本端对应的FEC的出标签。LDP对等体之间可以是直连的也可以是非直连的。
LDP通过邻接体来维护对等体的存在,对等体的类型取决于维护他的邻接体的类型。一个对等体可以由多个邻接体来维护,如果同时包括本地邻接体和远端邻接体,则该对等体为本远共存对等体
LDP会话
LDP会话用于在LSR之间交换标签映射,释放会话等消息。只有存在邻接体的两端对等体之间才能建立LDP会话。区分于本地邻接体和远端邻接体,在这两类邻接体之间建立的LDP会话也对应分为两种类型:
本地LDP会话:建立会话的两个LSR之间是直连的本地邻接体关系
远端LDP会话:建立会话的两个LSR之间可以是直连的本地邻接体关系,也可以是非直连的远端邻接体关系
本地LDP会话和远端LDP会话可以共存,也就是一个对等体上可以同时创建与直连对等体的会话以及非直连的对等体会话。
LPD会话消息和两个阶段
LDP会话消息
在LDP会话过程中,主要使用以下4类消息:
发现(discovery)消息:用于通告和维护网络中LSR的存在。比如hello消息。
会话(session)消息:用于建立,维护,终止LDP对等体之间的会话,如:Initialization(初始化)消息,Keepalive(保持活跃)消息。
通告(Advertisement)消息:用于创建,改变和删除FEC的标签映射,如标签映射消息
通知(Notification)消息:用于提供建议性的消息和差错通知
为保证LDP消息的可靠发送,除了Discovery消息使用UDP传输外,LDP的session消息,Advertisement消息,Notification消息都使用TCP传输。
Hello消息都是用UDP协议传输,源/目的端口都为646
在LDP会话,通告,通知消息中,主动方(对等体之间IP地址大的一方)发送的消息中的源端口为任意TCP端口,目的端口为TCP 646;被动方发送的消息中的源端口为TCP 646,目的端口为任意TCP端口。
LDP的两个工作阶段
LDP工作过程主要分为两个阶段:现在对等体之间建立LDP会话,然后才能在对等体之间建立LSP
LDP会话建立
在这个过程中LSR设备通过发送Hello消息来发现邻接体,然后在LSR之间建立LDP会话。会话建立后,LDP对等体之间通过周期性的发送Hello消息和Keepalive消息来保持这个会话
LDP对等体之间,通过周期性的发送Hello消息表明自己希望继续维持这种邻接关系。如果Hello保持定时器超时仍未收到对端发送来的新的Hello消息,则会删除他们之间的邻接关系,然后本端LSR想对端发送Notification消息,结束它们之间的LDP会话。
LDP对等体之间,通过LDP会话连接传送的Keepalive消息来维持LDP会话。如果会话保持定时器(Keepalive保持定时器)超时仍没有收到对端发送来的新的Keepalive消息,则本端LSR将向对端发送Notification消息,关闭它们之间的TCP连接,结束LDP会话。
LDP LSP建立
LDP会话建立成功后,LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立LSP。
LDP会话建立流程
通过LDP发现机制发现LDP对等体之后,就可以在对等体之间建立LDP会话,只有建立LDP会话后,才能建立LDP LSP来承载业务
LDP发现机制
LDP有两种用于LSR发现潜在的LDP对等体的机制
基本发现机制:用于发现直连链路上的LSR。LDP基本发现机制是LSR通过周期性的以组播方式发送LDP链路Hello消息(LDP Link Hello)进行的,发现的是直连链路上的LDP对等体,并与之建立本地LDP会话。LDP链路Hello消息使用UDP协议传输,目的IP地址是组播地址224.0.0.2,源/目的端口均为UDP 646。如果LSR在特定接口接收到邻居LSR发送来的LDP链路Hello消息,表明该接口存在LDP对等体。
扩展发现机制:用于发现非直连链路上的LSR。扩展发现机制是LSR周期性的以单播方式发送LDP目标Hello消息(LDP Targeted Hello)到指定IP地址进行的,发现的是非直连链路上的LDP对等体,并建立远端LDP会话。LDP目标Hello消息也使用UDP协议传输,目的IP地址是指定的对端单播IP地址,源/目的端口均为UDP 646.
LDP会话建立过程
在LSR之间建立LDP会话的过程总体可以划分三个阶段:第一阶段是通过交互Hello消息,相互建立TCP链接;第二阶段是通过交互LDP会话初始化消息(Initiazation Message),协商会话参数;第三阶段是相互交互Keepalive消息,建立LDP会话。
(1)两个LSR之间互相发送Hello消息,基于不同发现机制采用不同的发送方式。双方使用Hello消息‘源IP地址’字段中填充的IP地址(称之为传输地址)进行LDP会话建立
(2)传输地址较大的一方作为主动端,发起建立TCP链接。
(3)TCP链接建立成功后,首先由主动方LSR_1向被动方LSR_2发送初始化消息(源端口任意,目的端口为TCP 646),协商建立LDP会话的相关参数。初始化消息中包括LDP会话的相关参数,比如LDP协议版本,会话标签分发方式,Keepalive保持定时器,会话环路检测,最大PDU,会话接收方LSR ID,会话接收方标签空间。
(4)被动方收到主动方发送来的初始化消息后,如果接受相关初始化参数,则自己也向主动方发送初始化消息(包含的内容与前文相同)和Keepalive消息。Keepalive消息中主要包括消息类型(Message Type),消息长度(Message Length),消息ID。如果被动方不接受相关初始化参数,则发送Notification消息终止LDP会话的建立
(5)主动方收到被动方初始化消息和Keepalive消息后,如果接受则向被动方发送Keepalive消息和地址消息(Address Message)。地址消息是仅当双方通过初始化消息最终协商采用DU(下游自主方式)标签发布方式时双方才进行交互,以便向对方通告本地直连的32位掩码IP地址和启用了LDP协议的接口IP地址。如果主动方不接受相关参数,则发送Notification终止LDP会话建立。
当双方都收到对端的Keepalive消息后,LDP会话建立成功。但是如果双方协商采用的是DU标签发布方式,则在主动端发了地址消息后,被动端也会专门发送一个地址消息给主动端。
LDP的标签发布和管理
LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系来建立LSP。而标签的发布和管理由标签发布方式,标签分配控制方式和标签保持方式来决定。
标签发布方式
标签发布方式是指是否要等到上游向自己发送某FEC的标签请求消息才向上游发送该FEC的标签映射消息,并为之分配出标签。具有邻接关系的上下游LSR必须对所使用的标签发布方式达成一致。有如下两种方式。
下游自主方式(DU):对于一个特定的FEC,LSR无需从上游LSR获得标签请求消息即可自主进行标签分配和发布。即不管上游设备是否向本设备发出了标签请求,本设备在学习了新的FEC后可立即向上,下游对等体(注意:会向所有对等体发送,不仅限向上游对等体发送)发送该FEC的标签映射消息。
如下图示,各LSR上均配置DU方式,对于目的地址192.168.1.1/32的FEC,Egress会通过标签映射消息主动向其上游Transit通告该FEC的入标签。Transit再利用标签映射消息主动向上,下游通告192.168.1.1/32的FEC的入标签。但是向下游通告的标签映射消息不会生效。
华为路由器默认为DU模式,DU方式最大优势是简单,无需上游设备请求。但是这样会带来一个问题:一台设备上可能收到多个基于同一个FEC的相同或不同的出标签,因为可能有多个对等体(也有到达同一目的主机的路由表项)向其分配基于同一FEC的出标签。但同一时刻只有一个标签映射是有效的。
下游按需方式(DoD):对于一个特定的FEC,LSR只有在获得上游LSR发送的标签请求消息后才会向上游设备(不会向下游设备)发送标签映射消息,进行标签分配。
如下图示,各LSR均配置DoD方式,对于目的地址192.168.1.1/32的FEC,如果最上游的(Ingress)向其下游(Transit)发送标签请求消息,如果此时Transit还没有获取该FEC的出标签,则不会向Ingress发送分配标签的标签映射消息。以此类推,直到Egress向其上游设备发送标签映射消息。
DoD方式在节点向下游节点请求标签时会带来一些延时,但可以真正的按需获取每个FEC的标签,使得各LSR上不会出现太多无用的标签映射。
标签分配控制方式
标签分配控制方式是指是否要等到下游向自己发送了某FEC的标签映射消息才为该FEC分配入标签,并向上游发送该FEC的标签映射消息。有如下两种方式。
独立标签分配控制方式(Independent):本地LSR可以自主的分配一个入标签绑定到某个FEC,然后向上游LSR进行标签通告,为上游LSR分配对应FEC的出标签,而无需等待下游LSR给本地LSR分配该FEC的出标签。
这种分配控制方式下,LSR在路由表中发现一个路由(对应一个FEC)后,就会马上为该FEC分配一个标签,然后向上游LSR进行通告,根本无需考虑下游LSR是否已为该FEC分配了标签。这样就可能会因为下游LSR还没有为该FEC分配标签,没有成功建立该FEC的LSP,使其上游LSR即使已为该FEC分配了标签,建立了LSP,也无法与目的主机通信,造成数据丢失。
有序标签分配控制方式(Ordered):对于LSR上某个FEC的标签映射,只有当该LSR已经从其下一跳收到了基于此FEC的标签映射消息后,或者该LSR就是此FEC的出节点时,该LSR才可以为此FEC分配入标签,然后向上游LSR发送此FEC的标签映射。
标签分配控制方式与标签发布方式的组合
标签保持方式
标签保持方式是指LSR对收到的标签映射消息的处理方式,LSR收到的标签映射可能来自下一跳(本地对等体),也可能来自非下一跳(远端对等体)
目前华为设备支持如下组合方式:
下游自主(DU)+有序标签分配控制方式(Ordered)+自由标签保持方式(Liberal),该方式为缺省方式。即LSR在收到下游标签映射后,可自主向其上游分配标签,且收到的标签全部保留。
下游按需方式(DoD)+有序标签分配控制方式(Ordered)+保守标签保持方式(Conservative)。即LSR在同时收到上游标签请求和下游标签映射后,才向上游分配标签,且只保留自己下一跳分配的标签。
LDP LSP的建立过程
LSP的建立过程实际就是将FEC和标签进行绑定。并将这种绑定通告给LSP上游相邻LSR的过程。
LDP LSP建立的基本规则
(1)入标签的分配是按照由小到大(最小值为1024)的顺序分配的,分配当前未分配的最小标签
(2)同一链路上游设备为FEC分配的入标签一定要与下游设备为该FEC分配的出标签一致
(3)同一台设备上针对同一FEC所分配的出标签可能有多个(它们之间可以相同,也可不同),分别来自不同下游对等体,也就是一个FEC可以映射多个出标签和出接口。
(4)在一台设备上针对同一FEC只会分配一个入标签
每个路由表象都对应一个FEC,缺省时,通过标签映射消息的通告,每个FEC都可能会在整个MPLS域网络的所有节点上(包括本地设备)建立LSP。就像动态路由进行全网路由收敛一样。
LSP建立规则(缺省仅为32位掩码的主机路由分配标签)
(1)在直接连接某FEC对应的网段(缺省仅为32位掩码的主机路由)的节点上会为该FEC仅创建一个包含入标签的LSP(无出标签,也无入/出接口)
(2)在其他节点上都会对非直连网段FEC同时创建两个LSP:其中一个是用于指导从本地节点访问FEC所代表的目的主机的LSP,仅包含出标签和出接口;另一个则是以本地节点为中间节点(Transit)的LSP,用于指导上游设备访问FEC所代表的目的主机,同时包括入标签,出标签和出接口。
注意:cisco设备默认基于FIB表中所有学习到的路由条目生成标签号,华为设备默认仅基于FIB表中32位掩码的主机路由生成标签号;原因在于正常32位主机路由为ospf学习的环回接口,正常工程中只有BGP和MPLS VPN才会基于环回通讯,使用标签转发;其他普通流量还是基于特快包交换来进行;反观cisco在启动mpls以后,所有流量将基于标签转发,降低了转发效率(前提为默认)
示例
配置LDP必选基本功能
(1)配置LSR ID
(2)使能全局MPLS
(3)使能全局MPLS LDP
(4)配置LDP会话:配置本地LDP会话,配置远端LDP会话
<huawei>sys [huawei]mpls lsr-id 1.1.1.1 [huawei]mpls [huawei]mpls ldp #配置本地LDP会话 [huawei]int g0/0/0 [huawei-g0/0/0]mpls [huawei-g0/0/0]mpls ldp #配置远端LDP会话 [huawei]mpls ldp remote-peer name [huawei-mpls-ldp-remote-rtc]remote-ip 10.1.1.1
LDP维护管理命令
dis default-parameter mpls management #查看mpls管理的缺省配置 dis default-parameter mpls ldp #查看mpls ldp 的缺省配置 dis mpls interface xxx #查看指定或所有使能mpls的接口信息 dis mpls ldp [all][verbose] #查看LDP的配置信息 dis mpls ldp interface xxx #查看指定或者所有使能了LDP功能的接口信息 dis mpls ldp adjacency [interface|remote-peer]#查看指定或者所有LDP邻接体信息 dis mpls ldp adjacency statistics #查看LDP邻接体大的统计信息 dis mpls ldp session #查看LDP会话状态信息 dis mpls ldp session statistics #查看LDP对等体之间的会话个数统计信息 dis mpls ldp peer #查看LDP会话的对等体信息 dis mpls ldp peer statistics #查看LDP对等体个数统计信息 dis mpls ldp remote-peer #查看指定或所有LDP远端会话的对等体信息 dis mpls ldp lsp #查看指定或所有LDP LSP的建立信息 dis mpls ldp lsp statistics #查看LDP LSP 的统计信息 dis mpls route-state #查看指定或所有LSP对应的路由相关信息 dis mpls lsp #查看LSP的建立信息 dis mpls lsp statistics #查看当前处于Up状态的LSP数目 dis mpls label all summary #查看mpls所有标签的分配信息