路由算法之——ECMP算法

摘要

本文主要讲述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
    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算法要好,链路负载均衡性更好,网络传输性能更强。



评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值