缺省情况下,当网络路由发生变化时,如果边缘节点(Egress)发现新的主机路由出现在其路由表中,并且这一路由不属于任何现有的FEC,它需要为此路由建立新的FEC。
如果MPLS网络的Egress有标签可供分配,则为FEC分配标签,并主动向上游发送标签映射消息,其中包含分配的标签和绑定的FEC等信息。
Transit收到标签映射消息后,中转判断标签映射的Egress是否是FEC的下一跳。如果是,则在其标签转发表中添加相应的条目,然后主动向上游LSR发送指定FEC的标签映射消息。
Ingress收到标签映射消息后,判断标签映射的发送者(Transit)是否为该FEC的下一跳。若是,则在标签转发表中增加相应的条目。这时,就完成了LSP的建立,接下来就可以对该FEC对应的数据报文进行标签转发。
上面介绍的是普通LDP LSP的建立,还有一种代理Egress LSP。代理Egress(Proxy Egress)是能够针对非本地路由触发建立LSP的Egress节点,当路由器使能倒数第二跳弹出时,倒数第二跳节点实际上就是一种特殊的代理Egress。一般情况下,代理Egress由配置产生。代理Egress可以应用于网络中有不支持MPLS特性的路由器场景,也可用于解决BGP路由负载分担问题。
为了提高LDP报文的安全性,MPLS提供了三种保护机制:LDP MD5认证、LDP Keychain认证和LDP GTSM。
LDP Keychain认证是比LDP MD5认证更安全的加密认证,对于同一邻居,只能选择其中一个加密认证;而LDP GTSM用来防止设备受到非法LDP报文的攻击,其可以与前面两个配合使用。
MD5(Message-Digest Algorithm 5)是RFC1321定义的国际标准摘要密码算法。MD5的典型应用是针对一段信息计算出对应的信息摘要,从而防止信息被篡改。MD5信息摘要是通过不可逆的字符串变换算法产生的,结果唯一。因此,不管信息内容在传输过程中发生任何形式的改变,只要重新计算就会产生不同的信息摘要,接收端就可以由此判定收到的是一个不正确的报文。
LDP MD5应用其对同一信息段产生唯一摘要信息的特点来实现LDP报文防篡改校验,比一般意义上TCP校验和更为严格。其实现过程如下:
LDP会话消息在经TCP发出前,会在TCP头后面填充一个唯一的信息摘要再发出。而这个信息摘要就是把TCP头、LDP会话消息以及用户设置的密码一起作为原始信息,通过MD5算法计算出的。
当接收端收到这个TCP报文时,首先会取得报文的TCP头、信息摘要、LDP会话消息,并结合TCP头、LDP会话消息以及本地保存的密码,利用MD5计算出信息摘要,然后与报文携带的信息摘要进行比较,从而检验报文是否被篡改过。
Keychain是一种增强型加密算法,类似于MD5,Keychain也是针对同一段信息计算出对应的信息摘要,实现LDP报文防篡改校验。
Keychain允许用户定义一组密码,形成一个密码串,并且分别为每个密码指定加解密算法(包括MD5,SHA-1等)及密码使用的有效时间。在收发报文时,系统会按照用户的配置选出一个当前有效的密码,并按照与此密码相匹配的加密解密算法以及密码的有效时间,进行发送时加密和接收时解密报文。此外,系统可以依据密码使用的有效时间,自动完成有效密码的切换,避免了长时间不更改密码导致的密码易破解问题。
Keychain的密码、所使用的加解密算法以及密码使用的有效时间可以单独配置,形成一个Keychain配置节点,每个Keychain配置节点至少需要配置一个密码,并指定加解密算法。
通用TTL安全保护机制GTSM(Generalized TTL Security Mechanism)是一种通过检查IP报文头中的TTL值是否在一个预先定义好的范围内来实现对IP业务进行保护的机制。使用GTSM的两个前提:
设备之间正常报文的TTL值确定
报文的TTL值很难被修改
LDP GTSM是GTSM在LDP方面的具体应用。
GTSM通过判定报文的TTL值,确定报文是否有效,从而保护设备免受攻击。LDP GTSM是对相邻或相近(基于只要跳数确定的原则)设备间的LDP消息报文应用此种机制。用户预先在各设备上设定好针对其他设备报文的有效范围,使能GTSM,这样当相应设备之间应用LDP时,如果LDP消息报文的TTL不符合之前设置的范围要求,设备就认为此报文为非法攻击报文予以丢弃,进而实现对上层协议的保护。
LDP跨域扩展通过使能LDP按最长匹配原则查找路由,使LDP能够依据聚合后的路由建立起跨越多个IGP区域的LDP LSP。
当网络规模比较大时,通常需要部署多个IGP区域来达到灵活部署和快速收敛的目的。在这种情况下,IGP区域间进行路由通告时,为了避免路由数量多而引起的对资源的过多占用,区域边界路由器(ABR)需要将区域内路由聚合,再通告给相邻的IGP区域。然而,LDP在建立LSP的时候,会在路由表中查找与收到的标签映射消息中携带的FEC精确匹配的路由,对于聚合路由,LDP只能建立Liberal LSP,无法建立跨越IGP区域的LDP LSP。因此,引入LDP跨域扩展来解决这个问题。
注:已经被分配标签,但是没有建立成功的LSP叫做Liberal LSP。
存在Area10和Area20两个IGP区域。在Area10区域边缘的LSR_2的路由表中,存在到LSR_3和LSR_4的两条主机路由,为了避免路由数量多而引起的对资源的过多占用,在LSR_2上通过ISIS路由协议将这两条路由聚合为1.3.0.0/24发送到Area20区域。
LDP在建立LSP的时候,会在路由表中查找与收到的标签映射消息中携带的FEC精确匹配的路由,LSR_1的路由表中只有这条聚合后的路由,而没有32位的主机路由。
对于聚合路由,LDP只能建立Liberal LSP,无法建立跨越IGP区域的LDP LSP,以至于无法提供必要的骨干网隧道。
因此,在LSR_1上需要按照最长匹配方式查找路由建立LSP。在LSR_1的路由表中,已经存在聚合路由1.3.0.0/24。当LSR_1收到Area10区域的标签映射消息时(例如携带的FEC为1.3.0.1/32),按照最长匹配的查找方式,LSR_1能够找到聚合路由1.3.0.0/24的信息,把该路由的出接口和下一跳作为到FEC 1.3.0.1/32的出接口和下一跳。这样,LDP就可以建立跨越IGP区域的LDP LSP。
LDP是用来在LSR之间建立LDP Session并交换Label/FEC映射信息的协议。
LDP用UDP(协议ID=17)发现邻居,用TCP(协议ID=6)建立邻接(LDP协议的目的端口号:646)
LDP协议将hello报文发往224.0.0.2(所有开启组播功能的路由器)的组播组,用于发现直连链路上的LDP邻居。
LDP的hello报文发送间隔是5s,hold time是3倍的hello时间15s。
LDP的keepalive报文的发送间隔是15s,old timer是3倍的keepalive时间45s。
LDP的环路检测机制:
LDP路由向量法和最大跳数法分别通过两类TLV实现:Path Vector TLV和Hop Count TLV。如果配置使用者两类方法检测环路,那么在标签请求消息(Label Requset Message)和标签映射消息(Label Mapping MEssage)中都会携带者两种TLv。
距离向量法:每个LSR在发送标签请求消息(标签映射消息)中,包含一个Path Vector TLV,并且入口(出口)LSR产生的路由长度值为1,并且把自己的LSR ID加入到TLV的列表中,标签请求消息(标签映射消息)每经过一跳长度值加1,接收端LSR如果收到标签请求消息(标签映射消息),发现长度值达到预先设定的最大值或者发现LSR ID列表中有自己的LSR ID,认为发生环路,发出通告消息,拒绝LSP的建立。
LDP:可以为直连、静态和IGP路由分配标签。
RSVR-TE:为TE预留资源和分配标签。
MPBGP:可以为私网路由分配标签。
BGP:可以为BGP路由分配标签。
转发等价类FEC(Forwarding Equivalence Class)是一组具有某些共性的数据流的集合。这些数据流在转发过程中被LSR以相同的方式出。
FEC可以根据地质、业务类型、QoS等要素进行划分。例如,在传统的采用最常匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类。