路由算法之——ECMP算法

摘要

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


1. 背景

路由算法之——ECMP算法_第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
    end
end
% 映射上ECMP链路请求req
for 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
    end
end

%% 链路(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
    end
end
figure('name','ECMP链路使用率');
bar(res,0.2);
title('ECMP链路使用率');
xlabel('链路');
ylabel('链路带宽使用率');


3. 测试结果

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

路由算法之——ECMP算法_第2张图片

你可能感兴趣的:(计算机网络)