在MPLS-TE隧道动态建立过程中,可以用于控制隧道路径选择的因素比较多,其中隧道的“亲和属性”和链路的“链路管理组”是两个非常重要的因素。但许多朋友认为这两方面技术的工作原理比较复杂、难懂,故在此以专文进行介绍。
1. 亲和属性和链路管理组
亲和属性(Affinity attribute)是描述新建的MPLS TE隧道所需链路属性的32位向量,以及一个32位的掩码,与IPv4地址和子网掩码的组合类似。每一位也代表一种属性,在隧道的Ingress节点的Tunnel接口下配置,并会随着RSVP-TE信令中携带,可以影响在当前设备为该隧道已建立的LSP,使得系统可以重新为该隧道计算、选择新的路径。
链路管理组也称链路颜色,或链路属性,是一个表示链路属性的32位向量,是在各链路的物理接口下配置。链路属性中每一位代表一种属性,都可以设置或不设置,也可以将其关联为任何需要的意义。比如用来表示链路带宽、性能或者管理策略。链路属性仅对通过本接口新创建的LSP生效,不影响已建立的LSP。
MPLS TE隧道的建立必须先通过RSVP-TE信令确定好隧道路径,并让路径中各节点设备为该隧道预留一定的带宽资源。在隧道路径选择方面,是隧道入节点发布的RSVP-TE信令随着OSPF TE或者ISIS TE路由信息的泛洪扩散,每经过一个节点都要根据本隧道配置的亲和属性选择一条继续向目的方向传输的适合路径。选择的方法是把信令中携带的隧道亲和属性值与当前节点设备上各条使能了MPLS TE能力的链路上配置的链路属性与进行比较,通过匹配选择的即作为该隧道在本节点所选择的路径。
亲和属性中的掩码用于确定在链路属性与亲和属性比较时需要比较的位:掩码为0时表示不需要比较两者对应的位(链路属性对应位的值可以任意),为1时需要比较两者对应的位(链路属性对应位的值必须与亲和属性对应位的值一致)。类似比较两个IP地址是否要同一IP网段时,仅需要比较子网掩码为1的“网络ID”部分是否相同即可,而对于子网掩码为0的“主机ID”不需要比较一样。
2. 链路属性与亲和属性的比较规则
我们知道,要比较两个IP地址是否在同一IP网段是通过把两个IP地址与该网段的子网掩码进行逻辑“与”运算,如果结果一样,则在同一IP网段,否则不在同一IP网段。链路属性与亲和属性比较方法也是一样的,也是把它们分别与掩码进行逻辑“与”运算,如果得到的结果相同,则认为这两种属性是匹配的,在该隧道选路时就选择对应路径,否则放弃选择该路径。具体的比较规则如下:
(1)在所有掩码中为1的位(表示对应链路的链路属性必须与隧道亲和属性必须进行匹配比较的位)中,链路属性中至少有1位与亲和属性中的对应位都为1(只有值为1的位才表示对应的位启用了某种链路属性),即两者至少有一种属性相同,不能完全不同。
(2)亲和属性为0的位(相当于没有启用对应链路属性)对应的链路属性位不能为1(即也只能为0,也不能启用对应链路属性),否则对应链路的链路属性不符合隧道的链路属性要求。
如亲和属性为0x0000FFFF,掩码为0xFFFFFFFF,则可用链路属性取值如下:
-
高16位只能取0,因为本示例中亲和属性的高16位全为0,而根据规定,亲和属性为0的位对应的链路属性位不能为1,也只能为0。
-
低16位至少有1位为1,因为本示例中亲和属性和掩码的低16位都全为1,而根据规定,在所有掩码为1的位中,链路属性中至少有1位与亲和属性中的相应位都为1。
由此可得出本示例中可使用的链路属性取值范围是0x00000001~0x0000FFFF。
(3)对于掩码为0的位,则不对链路属性的相应位进行检查,即对应的链路属性位的值可以任意。
如亲和属性为0xFFFFFFFF,掩码为0xFFFF0000,则可用链路属性取值如下:
-
高16位至少有1位为1,因为掩码的高16位也全为1,而根据规定,所有掩码为1的位中,链路属性中至少有1位与亲和属性中的相应位都为1。
-
低16位则可以任意取0或1,因为掩码的低16位全为0,而根据规定,对于掩码为0的位,不对链路属性的相应位进行检查,即可以任意是0或1。
由此可得出本示例中可用链路的管理组属性取值范围是0x00010000~0xFFFFFFFF。
以上内容摘自己华为官方唯一HCIE培训教材《华为MPLS技术学习指南》,配套教材还有《华为MPLS VPN学习指南》和《华为VPN学习指南》。
最后给大家出一道同步练习题,现假设某MPLS-TE隧道上配置的亲和属性为0xFFFFFFF0,掩码为0x0000FFFF,请计算在到达目的端的路径上各节点配置的链路属性取值范围。请把自己的答案写在评论中,下周公布答案。