建立LSP有静态和动态两种方法,动态建立LSP需要路由器运行标签分发协议,LDP协议就是最重要的一个标签分发协议;
在MPLS网络中,路由器通过运行LDP协议为每条内部路由映射一个标签,然后再将标签信息通告给所有邻居,路由器之间通过这种方式来建立标签转发表,最终形成LSP,当网络拓扑发生变化时,LDP还会实时地响应这种变化;
一、LDP的基本概念
1、标签空间
LDP分配的标签空间有两种:
(1)基于接口的标签空间
每个接口通告的标签范围是唯一的,同一条FEC在不同接口通告的标签是不同的;
(2)基于平台的标签空间,缺省采用此方式
标签分配时并不是在每个接口下唯一,而是从整台LSR中来分配标签的,同一条FEC在不同接口通告的标签相同;
2、上/下游LSR
上游和下游是根据数据报文的流向来定义的,数据流总是由上游发往下游;
3、PHP倒数第二跳弹出
在MPLS网络的egress节点,首先需要对接收的报文查找标签转发表进行标签移除,然后查找FIB表进行转发,由于进行了两次查表操作,所以过程比较耗时,如果到达egress节点的流量较大,会对设备性能造成一定影响;
为减轻egress节点的负担,标签在到达出站LER之前就被弹出,这样在报文到达egress节点时已经是IP报文了,只需要查找IP转发表就转发出去,提高了egress节点的工作效率;
为使标签在到达egress节点之前就被弹出,使用了一个特殊的标签3,也叫隐式空标签,代表一种弹出操作而不是实际需要携带的标签;
二、LDP报文
LDP报文(除Hello报文外)是基于TCP的,端口号646,报文格式基于TLV的方式来封装,LDP报文分为头部和报文内容两部分;
1、LDP报头及报文格式
(1)Version:2字节,表示LDP协议版本号,目前LDP协议版本号为0x01;
(2)PDU Length:2字节,表示PDU长度,不包括版本号和PDU长度字段;
(3)LDP Identifier:6字节,前4字节表示LSR-ID地址,后2字节表示特定的标签空间;
(1)U:1bit,未知TLV比特为0返回通知,为1忽略报文;
(2)Message Type:14bit,表示报文所属的类型;
(3)Message Length:2字节,表示报文长度,包括报文标识符、必选参数、可选参数;
(4)Message ID:4字节,报文标识符,用于标识报文;
(5)Mandatory Parameters:必选参数集;
(6)Option Parameters:可选参数集;
2、Hello报文
LDP的Hello报文基于UDP来发送,发送目标地址224.0.0.2;
用于发现邻居并用作后期邻居关系的维护;
启用LDP的接口会周期性5s的发送,连续3次没有收到hello报文,认为邻居故障;
hello报文携带保持时间等通用参数和发送方的传输地址,传输地址用于建立TCP连接;
默认传输地址与LSR-ID相同,所以需要保证各自的LSR-ID一定要路由可达;
3、Initialization报文
Initialization报文用来协商LDP邻居会话参数,如标签的分发方式、防环机制和标签空间;
4、Address报文
用来向LDP邻居通告本端所有接口的IP地址,邻居可以通告IP转发表的下一跳地址来决定出站标签;
5、标签通告报文
用来向LDP邻居发布FEC和标签的绑定内容;
一个标签通告可以发布多个标签消息;
标签通告报文包括标签请求、标签撤销和标签释放报文;
6、KeepAalive报文
用来检测TCP会话的连通性,默认检测周期为15s,超时时间为45s;
7、Notification报文
用于向邻居报文具体的差错类型;
三、LDP会话的建立过程
LDP会话是基于TCP连接的,所以建立TCP连接之前必须知道邻居的IP地址,根据获知邻居IP地址的方式将LDP会话分成两类:
(1)本地LDP会话 组播hello报文自动发现,建立会话的两个LSR之间是直连的;
(2)远端LDP会话 手工指定邻居地址,单播发送hello,可以直连,也可以非直连;
LDP状态机和邻居建立过程
1、non-existent 周期性发送Hello报文,地址大的一方发起TCP连接,建立成功进入Initialized;
2、initialized 发送Initial报文,进入Opensent;
3、opensent 收到对方Initial报文,进入Openrec;
4、openrec 发送KeepAlive报文,收到KeepAlive进入Operational;
5、Operational 可以交换标签通告报文了;
在会话建立后,双方会周期(5s)发送Hello报文以检测邻居状态,也会周期(15s)发送KeepAlive报文来检测TCP连接状态;
四、LDP标签的发布和管理
LDP会话建立后,LDP协议开始交换标签映射等报文,用于建立LSP;
1、标签发布方式
标签发布方式指下游LSR发布标签映射通告时,是否需要上游LSR先发送请求;
标签发布方式分为DU下游自主和DoD下游按需两种方式;
(1)DU下游自主 Downstream Unsolicited 缺省此方式
在DU下游自主模式下,建立LDP会话后,下游主动向上游发布标签映射通告报文,不需要上游先发送标签请求;
DU下游自主模式下,下游主动发送标签,因此会建立大量的LSP,这些LSP中有可能是不需要的,会有更多的LDP报文和占用更多的存储空间;
华为默认情况下只对路由表中的32为掩码路由进行标签映射并通告,可以使用命令lsp-trigger修改触发标签的策略;
(2)DoD下游按需 Downstream On Demand
在DoD下游按需模式下,下游LSR必须收到上游LSR的标签请求报文后,才会发送上游LSR所请求FEC对应的标签映射信息;
DoD下游按需模式需要进行标签请求,所以会带来额外的资源开销;
2、标签分配的控制方式 可以保证LSP是否连续
标签分配的控制指下游给上游发布标签时的条件,是否要求下游LSR在向上游LSR发布标签时一定要收到自己下游LSR的标签;
标签控制方式有两种:独立控制方式和有序控制方式;
(1)独立控制方式
在独立控制方式下,LSR在没有收到自己下游LSR标签的情况下,就能向上游通告标签映射消息;
因为LSR没有收到自己下游LSR标签就能向上游通告标签,所以可能出现到目地网络的LSP不连续问题;
(2)有序控制方式 缺省此方式
有序控制方式下,LSR必须收到下游LSR的标签,才可以向上游通告标签映射信息;
建立LSP的效率会受影响,但是可以确保整条LSP是连续的;
3、标签的保持方式 可以提高收敛速度
标签保持方式指当一台LSR收到来自多个LDP邻居的标签映射通告时,是否将这些标签信息都保存到数据库中;
标签的保持方式有两种:保守保存和自由保存;
(1)保守方式
对于特定一条FEC,即使从多个LDP邻居都收到了标签映射,该LSR只会将最优的标签保留下来;
拥有IP转发表中下一跳地址的LDP邻居通告的标签为最优标签,也是最终保留的标签;
(2)自由方式 缺省此方式
保存下所有的标签,这样做的好处是当网络发生故障时,可以立刻使用新的标签计算出新的LSP,收敛比较快,缺点是占用更多的数据库空间;
五、LDP的环路检测
在三层网络中使用的每种动态路由技术都有各自的防环机制,LDP协议也有防环机制;
因为三层路由技术已经避免了路由环路,LDP协议又是基于路由来分配标签和建立LSP的,所以这时报文通过LSP进行转发是不会出现环路的,华为VRP系统默认也不开启LDP防环功能;
1、规定最大跳数
LDP报文没经过一个LSR,LSR都在跳数TLV中增加一跳,当跳数达到最大值后,环路就被检测到,从而终止LSP的建立;
2、路径矢量法
当一台LSR收到LDP报文后,就会将自己的LSR-ID添加到报文中,如果收到的LDP报文已经有了本地的LSR-ID,则认为出现了环路,终止建立LSP;
3、TTL
MPLS报文每经过一台LSR,标签中的TTL减1,当TTL减少到0的时候,报文最终被丢弃,通过这种方法防止数据包无限循环转发;
六、LDP和IGP同步
存在主备链路组网的环境中,当主链路出现故障又从故障中恢复后,业务流量会从备用链路切换到主链路,在这个过程中,IGP协议收敛速度要快于LDP协议,这就会导致旧的LSP已经删除,而新的LSP还没建立好,这期间MPLS业务将会中断数秒的问题;
LDP和IGP同步就是为解决主链路故障恢复后流量回切的问题,为使LDP和IGP同步,在新的LSP建立好之前,继续保留旧的LSP,流量继续在旧的LSP上转发,只有在新的LSP建立好之后流量才完全切换过来;
LDP和IGP同步过程需要使用以下三个定时器:
1、hold-down
2、hold-max-cost
3、delay
在主链路故障恢复后,
(1)启动hold-down定时器,IGP不收发hello报文,抑制邻居关系的建立;
(2)hold-down定时器超时后,启动hold-max-cost定时器,IGP建立邻居并在主链路通告接口的最大metric值;
(3)故障链路LDP会话建立后,启动delay定时器等待LSP的建立,delay定时器超时后,LDP通知IGP同步流程结束;
配置命令:
int gi0/0/0
ospf ldp-sync