一种 TRILL 网络中路径损耗计算方法和装置 【技术领域】
本发明涉及通信技术领域, 特别涉及一种多链接透明互联 (TRILL, Transparent Interconnection of Lots of Links) 网络中路径损耗计算方法和装置。背景技术
TRILL 是互联网工程任务组 (IETF) 推荐的链路层 (L2) 网络标准, 用于解决大型数 据中心中生成树 (STP) 协议的不足。
在 TRILL 网络中, 运行 TRILL 协议的设备称为路由桥 (RB, Routing Bridge) 设备, 同一链路上直连的 RB 设备之间使用 Hello 报文进行信息交互。同一链路上的 RB 之间建立 双向连接后, 本端 RB 根据本地端口速率计算与对端 RB 之间的路径损耗, 并将计算得到的路 径损耗携带在链路状态报文 (LSP) 中发送出去。 LSP 报文是在整个 TRILL 网络传输的, 任一 RB 接收到其所在 TRILL 网络中其他所有 RB 的 LSP 报文后, 会组成 LSDB 数据库, 根据 LSDB 数据库中各 RB 间的连接信息进行拓扑计算, 并根据拓扑计算结果进行数据报文转发。因 此, 路经损耗的计算结果会影响拓扑计算结果。 为了便于描述, 以下将现有技术中仅根据本端 RB 的本地端口速率计算得到的与 对端 RB 间的路经损耗统称为本端 RB 的静态路径损耗。
下面结合图 1、 图 2 进行对现有技术中的路径损耗计算进行说明。
图 1 是现有技术同一链路上仅有两个 RB 时的路径损耗示意图, 包括 RBa 和 RBb, RBa 与 RBb 建立双向连接, 其中, RBa 与 RBb 间的路径损耗只与 RBa 的静态路径损耗相关 ( 图 1 所示的 Cost ∝ RBa, 表示 RBa 与 RBb 间的路径损耗与 RBa 的静态路径损耗相关, 其中, 用 RBa 表示 RBa 的静态路径损耗 ), RBb 与 RBa 间的路径损耗只与 RBb 的静态路径损耗相关。 这样, RBa 在发送的 LSP 报文中携带自身与 RBb 间的路径损耗, 而 RBb 则在发送的 LSP 报文 中携带自身与 RBa 间的路径损耗。
图 2 是现有技术同一链路上包括两个以上 RB 时的路径损耗示意图, 包括 RBc、 RBd、 RBe, 另外, 为了简化拓扑结构, 该链路上的 DRB( 假设为 RBc) 生成了一个虚拟的伪节点 RBc’ 作为分别与 RBc、 RBd、 RBe 直连的 RB, RBc、 RBd、 RBe 分别与 RBc’ 直连并建立双向连接, 其 中, RBc’ 分别与 RBc、 RBd、 RBe 间的路径损耗 Cost 均为 0, 而 RBc、 RBd、 RBe 与 RBc’ 间的路 径损耗 Cost 则分别与 RBc、 RBd、 RBe 自身的静态路径损耗相关。这样, RBc、 RBd、 RBe 分别 在各自发送的 LSP 报文中只携带自身与 RBc’ 间的路径损耗, 而 RBc’ 的 LSP 报文由该链路 上的 DRB 负责发送, 其中携带伪节点 RBc’ 与 RBc、 RBd、 RBe 间的路径损耗。
通过组网试验发现, 现有技术计算出来的转发路径有时候不是最有的。
发明内容 有鉴于此, 本发明的目的在于提供一种 TRILL 网络中路径损耗计算方法, 该方法 能够优化报文转发路径。
为了达到上述目的, 本发明提供了一种 TRILL 网络中路径损耗计算方法, 该方法
包括 : 向同一链路上的其他 RB 发送携带自身的路径损耗参数的 Hello 报文 ;
接收所述其他 RB 发来的携带所述其他 RB 的路径损耗参数的 Hello 报文 ;
根据自身的静态路径损耗, 以及所述其他 RB 的路径损耗参数, 计算与所述其他 RB 间的路径损耗。
本发明还提供了一种路由桥 RB, 该 RB 包括 : 收发单元、 路损计算单元 ;
所述收发单元, 用于向同一链路上的其他 RB 发送携带自身的路径损耗参数的 Hello 报文 ; 用于接收所述其他 RB 发来的携带所述其他 RB 的路径损耗参数的 Hello 报文 ;
所述路损计算单元, 用于根据自身的静态路径损耗, 以及收发单元接收到的所述 其他 RB 的 Hello 报文中携带的所述其他 RB 的路径损耗参数, 计算与所述其他 RB 间的路径 损耗。
由上面的技术方案可知, 本发明中, 当前 RB 在计算与其他 RB 间的路径损耗时, 将 自身的静态路径损耗, 以及所述其他 RB 的路径损耗参数考虑再内, 进行当前 RB 与其他 RB 间的路径损耗计算。根据本发明的路径损耗计算方法得到各 RB 间的路径损耗后, 可以将计 算得到的路径损耗携带在 LSP 报文在 TRILL 网络中传输, 从而能够影响各 RB 的拓扑计算结 果, 优化报文转发路径。
附图说明
图 1 是现有技术同一链路上仅有两个 RB 时的路径损耗示意图 ;
图 2 是现有技术同一链路上包括两个以上 RB 时的路径损耗示意图 ;
图 3 是本发明实施例 TRILL 网络中路径损耗计算方法的流程示意图 ;
图 4 是本发明实施例 Load-Info TLV 的格式示意图 ;
图 5 是本发明实施例基于图 1 所示的同一链路上仅有两个 RB 时的路径损耗示意 图;
图 6 是本发明实施例基于图 2 所示的同一链路上包含两个以上 RB 时的路径损耗 示意图 ;
图 7 是本发明实施例 RB 的结构示意图。 具体实施方式
为了使本发明的目的、 技术方案及优点更加清楚明白, 下面结合附图并举实施例, 对本发明的技术方案进行详细说明。
参见图 3, 图 3 是本发明实施例 TRILL 网络中路径损耗计算方法的流程示意图, 包 括以下步骤 :
步骤 301、 当前 RB 向同一链路上的其他 RB 发送携带自身的路径损耗参数的 Hello 报文。
在 TRILL 网络中, Hello 报文主要用于同一链路上的 RB 之间的信息交互。本实施 例中, 当前 RB 在向同一链路上的其他 RB 发送 Hello 报文时, 可以在 Hello 报文中携带路 径损耗参数, 所述路径损耗参数可以包括 : 负载以及静态路径损耗。这里, 所述静态路径损 耗, 是指现有技术中仅根据本地端口速率计算出的与直连的对端 RB 之间的路经损耗, 仅根据本地端口速率计算与直连的对端 RB 间的静态路径损耗的方法具体可以参见 TRILL 相关 标准中的定义。
可以在 Hello 报文中增加一个 Load-Info TLV, 使用 TLV(TLV 是一种编码格式, 其中 T 代表 Type、 L 代表 Length、 V 代表 value) 格式, 具体参见图 4 所示的本发明实施例 Load-Info TLV 的格式示意图, 其中, Type 占用 1 个字节, Type 值是 LoadInfo, 表明该 TLV 是 Load-Info TLV ; Length 占用 1 个字节, 具体值由后面的 Value 字段占用的总长度确定 ; Value 字段包括负载值 (LoadValue) 和静态路径损耗 (LinkCost)。
需要说明的是, 上述使用 Load-Info TLV 将 RB 的负载和静态路径损耗封装在 Hello 报文中的方法只是一个具体的例子, 也可以使用其他格式进行封装, 本发明对此不作 限制。
步骤 302、 当前 RB 接收所述其他 RB 发来的携带所述其他 RB 的路径损耗参数的 Hello 报文。
这里, 当前 RB 与同一链路上的其他 RB 执行相同的操作, 即: 既向其他 RB 发送携带 自身的路径损耗参数的 Hello 报文, 又接收所述其他 RB 发来的携带所述其他 RB 的路径损 耗参数的 Hello 报文。 步骤 303、 当前 RB 根据自身的静态路径损耗, 以及所述其他 RB 的路径损耗参数, 计 算与所述其他 RB 间的路径损耗。
本步骤中, 当前 RB 在计算与所述其他 RB 间的路径损耗 ( 为了便于区分, 也可以称 为动态路径损耗 ) 时, 将所述其他 RB 的负载和静态路径损耗考虑在内, 根据自身的静态路 径损耗、 以及所述其他 RB 的负载和静态路径损耗, 计算与所述其他 RB 间的路径损耗。所述 其他 RB 的负载越大, 计算得到的与所述其他 RB 间的路径损耗也越大, 则在进行拓扑计算时 将当前 RB 到所述其他 RB 的路径作为最优路径的几率就越小, 从而可以使数据报文沿着路 径损耗较小的路径转发。所述其他 RB 的负载越小, 计算得到的与所述其他 RB 间的路径损 耗也越小, 则在进行拓扑计算时将当前 RB 到所述其他 RB 的路径作为最优路径的几率就越 大, 从而可以使数据报文沿着路径损耗较小的路径转发。
对于同一链路中仅包含当前 RB 和所述其他 RB 的情况 ( 也即同一链路上仅包含两 个 RB), 由于不涉及伪节点, 可以采用以下公式计算当前 RB 与所述其他 RB 间的路经损耗 :
Cost = Cs+K*Cd, 其中, Cost 是当前 RB 与所述其他 RB 间的路经损耗 ; Cs 为当前 RB 的静态路径损耗 ; Cd 为所述其他 RB 的静态路经损耗 ; K 是根据所述其他 RB 的负载计算 得到的计算因子。
参见图 5, 图 5 是本发明实施例基于图 1 所示的同一链路上仅有两个 RB 时的路径 损耗示意图, RBa 与 RBb 间的路经损耗不仅与 RBa 的静态路径损耗相关, 还与 RBb 的负载以 及静态路径损耗相关 ( 如图 5 所示的 Cost ∝ {RBa, RBb, Lb}, 表示 RBa 与 RBb 间的路经损 耗与 RBa、 RBb 的静态路径损耗以及 RBb 负载相关, 其中, 用 RBa 表示 RBa 的静态路径损耗, 用 RBb 表示 RBb 的静态路径损耗, 用 Lb 表示 RBb 的负载 ) ; 同样, RBb 与 RBa 间的路经损耗 不仅与 RBb 的静态路径损耗相关, 还与 RBa 的负载以及静态路径损耗相关。
对于同一链路中包含当前 RB 和多个其他 RB 的情况 ( 也即同一链路上包含三个或 三个以上的 RB), 由于涉及到伪节点, 计算路径损耗的方法可以如下 :
如果当前 RB 为 DRB, 则将自身的静态路径损耗作为当前 RB 与当前 RB 生成的伪节
点间的路径损耗, 并采用以下公式计算所述伪节点与当前 RB、 以及所述其他 RB 间的路径损 耗:
Cost = K*Cd, 其中, Cost 是所述伪节点与当前 RB 或所述其他 RB 间的路经损耗 ; Cd 为当前 RB 或所述其他 RB 间的静态路径损耗 ; K 是根据当前 RB 或所述其他 RB 的负载计 算得到的计算因子 ;
如果当前 RB 不是 DRB, 则将自身的静态路径损耗作为当前 RB 与 DRB 生成的伪节点 间的路径损耗。
参见图 6, 图 6 是本发明实施例基于图 2 所示的同一链路上包含两个以上 RB 时的 路径损耗示意图, RBc、 RBd、 RBe 与伪节点 RBc’ 间的路经损耗均不变, 仍为现有技术中仅根 据本地端口速率计算得到的静态路径损耗 ; 而伪节点分别与 RBc、 RBd、 RBe 间的路径损耗则 分别与 RBc、 RBd、 RBe 各自的负载和静态路径损耗相关 ( 如图 6 所示的 Cost ∝ {RBc, Lc}, 表示伪节点 RBc’ 与 RBc 间的路经损耗与 RBc 的静态路径损耗以及负载相关, 其中, 用 RBc 表示 RBc 的静态路径损耗, 用 Lc 表示 RBc 的负载 )。这样, RBc 与 RBd 间的路径损耗, 也即 是 RBc 与 RBc’ 间的路经损耗和 RBc’ 与 RBd 间的路经损耗之和 ; RBc 与 RBe 间的路径损耗, 也即是 RBc 与 RBc’ 间的路经损耗和 RBc’ 与 RBe 间的路经损耗之和, 依次类推。 另外, 根据 RB 的负载计算得到计算因子 K 的方法可以有多种, 例如, 可以将 RB 的 负载可能落入的区间 [0, 1] 划分为多个子区间, 为每个子区间分配一个计算因子, 并根据 该 RB 的负载实际落入的子区间确定计算因子 K 的值 ; 另外, 也可以为负载变化设置步长, 当 负载变化超过步长时, 根据负载的增大或减小来确定 K 值的递增或递减等。
下面针对将 RB 的负载可能落入的区间 [0, 1] 划分为多个子区间, 为每个子区间分 配一个计算因子, 并根据该 RB 的负载实际落入的子区间确定计算因子 K 的值的方法进一步 详细说明 :
预先将 RB 的负载所在的区间 [0, 1] 划分为预设个数的子区间, 为每个子区间分配 一个计算因子 ; 当获知某个 RB 的负载后, 可以先确定该 RB 的负载所在的子区间, 然后将该 确定的子区间对应的计算因子作为计算因子 K 的值。这里, 子区间的预设个数可以根据实 际情况确定。以将区间 [0, 1] 划分为 [0, 0.5]、 (0.5, 0.9)、 [0.9, 1] 共 3 个子区间为例, 并 为子区间 [0, 0.5] 分配计算因子 0, 为子区间 (0.5, 0.9) 分配计算因子 10, 为子区间 [0.9, 1] 分配计算因子 100 ; 这样, 当 RB 的负载小于或等于 0.5 时, 可以确定计算因子 k 的值为 0, 当 RB 的负载大于 0.5 并且小于 0.9 时, 可以确定计算因子 k 的值为 10, 当 RB 的负载大于或 等于 0.9 时, 可以确定计算因子 k 的值为 100。
现有技术中, 直连的 RB 之间的路径损耗只与本端 RB 的静态路径损耗相关, 没有考 虑对端 RB 的负载和静态路径损耗等情况。由于本端 RB 的静态路径损耗只与本端 RB 的端 口速率相关, 路径损耗会一直保持不变, 相应的, 计算出来的转发路径也不会发生变化, 当 对端 RB 设备的负载较重时, 也无法改变流量的转发路径, 进而, 也无法减少通过对端 RB 的 报文来减小对端 RB 的负载, 这显然是不合理的。而在图 3 所示本发明实施例中, 在计算 RB 之间的路径损耗时, 不仅考虑了本端 RB 的静态路径损耗, 还考虑了对端 RB 的负载以及静态 路径损耗, 这样, 当对端 RB 的负载加重时, 相应计算得到的路经损耗也会变大, 当计算得到 的路径损耗携带在 LSP 报文中广播到 TRILL 网络中后, 每个 RB 可以根据 TRILL 网络中各 RB 间的路经损耗重新进行拓扑计算, 从而可以得到报文的最优转发路径, 进而也可以提高报
文的转发效率。
以上对本发明实施例 TRILL 网络中路径损耗计算方法进行了详细说明, 本发明还 提供了一种路由桥 RB, 应用于 TRILL 网络中, 该 RB 能够优化报文转发路径。
参见图 7, 图 7 是本发明实施例 RB 的结构示意图, 该 RB 包括 : 收发单元 701、 路损 计算单元 702 ; 其中,
收发单元 701, 用于向同一链路上的其他 RB 发送携带自身的路径损耗参数的 Hello 报文 ; 用于接收所述其他 RB 发来的携带所述其他 RB 的路径损耗参数的 Hello 报文 ;
路损计算单元 702, 用于根据自身的静态路径损耗, 以及收发单元接收到的所述其 他 RB 的 Hello 报文中携带的所述其他 RB 的路径损耗参数, 计算与所述其他 RB 间的路径损 耗。
所述同一链路上仅包含当前 RB 和所述其他 RB ;
所述收发单元 701 接收到的所述其他 RB 的 Hello 报文中携带的路径损耗参数包 括: 所述其他 RB 的负载以及静态路径损耗 ;
所述路损计算单元 702, 在根据自身的静态路径损耗, 以及收发单元接收到的所述 其他 RB 的 Hello 报文中携带的所述其他 RB 的路径损耗参数, 计算与所述其他 RB 间的路径 损耗时, 用于采用以下公式进行计算 : Cost = Cs+K*Cd, 其中, Cost 是当前 RB 与所述其他 RB 间的路经损耗 ; Cs 为当前 RB 的静态路径损耗 ; Cd 为所述其他 RB 的静态路经损耗 ; K 是路损计算单元根据所述其他 RB 的负载计算得到的计算因子。
所述同一链路上包含当前 RB 和多个其他 RB ;
所述收发单元 701 接收到的所述其他 RB 的 Hello 报文中携带的路径损耗参数包 括: 所述其他 RB 的负载以及静态路径损耗 ;
所述路损计算单元 702, 在根据自身的静态路径损耗, 以及收发单元接收到的所述 其他 RB 的 Hello 报文中携带的所述其他 RB 的路径损耗参数, 计算与所述其他 RB 间的路径 损耗时, 用于 :
如果当前 RB 为 DRB, 则将自身的静态路径损耗作为当前 RB 与当前 RB 生成的伪节点 间的路径损耗, 并采用以下公式计算所述伪节点与当前 RB、 以及所述其他 RB 间的路径损耗 :
Cost = K*Cd, 其中, Cost 是所述伪节点与当前 RB 或所述其他 RB 间的路经损耗 ; Cd 为当前 RB 或所述其他 RB 间的静态路径损耗 ; K 是路损计算单元根据当前 RB 或所述其他 RB 的负载计算得到的计算因子 ;
如果当前 RB 不是 DRB, 则将自身的静态路径损耗作为当前 RB 与 DRB 生成的伪节点 间的路径损耗。
该 RB 还包括配置单元 703 ;
所述配置单元 703, 用于预先将区间 [0, 1] 划分为预设个数的子区间, 并为每个子 区间分配一个计算因子 ;
所述路损计算单元 702, 在根据 RB 的负载计算得到计算因子 K 时, 用于 : 确定该 RB 的负载所在的子区间, 将配置单元 704 为该子区间分配的计算因子作为计算因子 K 的值。
以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明, 凡在本发明的精 神和原则之内, 所做的任何修改、 等同替换、 改进等, 均应包含在本发明保护的范围之内。