路由算法之——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('链路带宽使用率');
其中,ECMP路由算法比传统的SPF算法要好,链路负载均衡性更好,网络传输性能更强。
0 0
- 路由算法之——ECMP算法
- 路由算法之——ECMP算法的改进方向
- 路由算法之——传统SPF路由
- 浅析ECMP等价路由
- 计算机网络——路由算法
- 半路算法之Dijkstra——以路由算法的角度进行理解
- 路由模拟——路由算法1的构想
- 路由模拟——路由算法2的实现
- ECMP
- 网络层——路由算法
- Linux日常——路由算法调研
- 网络层—广播路由选择算法
- 路由算法
- 路由算法
- 路由算法
- 路由算法
- 路由算法
- 路由算法
- itas109的Github项目汇总
- mycat日志分析
- SPELL-DBC
- 用canvas给界面添加文字水印
- jeesite框架的代码生成原理
- 路由算法之——ECMP算法
- Java学习笔记之String类
- 查找算法及二叉平衡树
- Tomcat服务器启动闪退,非jdk原因
- iOS消息推送
- unbantu下php 中smarty模板配置过程
- 想涨工资吗?那就学习Scala,Golang或Python吧
- Java反射学习总结
- Redis 哈希(Hash)