路由算法之——ECMP算法

来源:互联网 发布:什么是java面向对象 编辑:程序博客网 时间:2024/04/28 00:58

摘要

本文主要讲述ECMP算法,Equal-CostMultipathRouting,即最大限度地使用最短路径,各条最短路径之间均分流量。比如,如下图所示,节点3到节点8之间的最短路有两条,分别是3,4,8;和3,10,8;那么,3到8之间的流量就均分1/2到相应的子链路上面去。即,均分总流量到各条最短路上(记住!拓扑图上两点之间的最短路(当然是等长且最短的了)一般有很多条)。


1. 背景


底层的拓扑结构如图所示,这里的所有相关拓扑数据全部来源于TOTEM工具箱,相关拓扑,请求数据本人已经上传,感兴趣的读者点击下载即可下载相关数据


2. 算法

%% ECMP链路(Multi-shortst path)使用率作图 ————ECMP路由算法bwAvl = bw;[path, cost]=kShortestPath(dist,1,7,5); % 计算两点之间前5跳的最短路[path, cost]=kShortestPath(dist,1,7,dijkstraSingle(dist,1,7)); % 节点1和节点7之间的所有的最短路径% 任意请求(两点之间)最短路径的条数spNumofReq = [];maxRound = 30;for i = 1:length(bw)    for j = 1:length(bw)        if req(i,j) ~= 0            [path, cost]=kShortestPath(dist,i,j,maxRound);            spNumofReq(i,j) = length(find(cost==dijkstraSingle(dist,i,j)))        end    endend% 映射上ECMP链路请求reqfor i = 1:length(bw)    for j = 1:length(bw)        if req(i,j) ~= 0            pathij = kShortestPath(dist,i,j,spNumofReq(i,j));            for k = 1:spNumofReq(i,j) % 一个req中的每一条最短路                % 第k条最短路pathij{k}                tempRoute = pathij{k};                for t = 1:(length(tempRoute)-1)                    bwAvl(tempRoute(t),tempRoute(t+1)) = bwAvl(tempRoute(t),tempRoute(t+1))-req(i,j)/spNumofReq(i,j);                end            end        end    endend%% 链路(ECMP路由)使用率temp = bw - bwAvl;ecmp = zeros(12,12);res=[];for i = 1:length(bw)    for j = 1:length(bw)        if bw(i,j) ~= 0            ecmp(i,j) = temp(i,j)/bw(i,j);            if ecmp(i,j) ~= 0                res = [res, ecmp(i,j)];            end        end    endendfigure('name','ECMP链路使用率');bar(res,0.2);title('ECMP链路使用率');xlabel('链路');ylabel('链路带宽使用率');


3. 测试结果

其中,ECMP路由算法比传统的SPF算法要好,链路负载均衡性更好,网络传输性能更强。



0 0
原创粉丝点击