不要问为什么,现在的工作转向了网络路由协议的设计。

传统的网络拓朴结构可以形象的表示为树结构,我们称之为“有中心的网络拓扑结构”,简单地认为很多流量请求最终会汇聚到主干网这样的路由中心,才能转发到下一条路径。

传统的路由协议都是采用单路径路由的方式,简单地认为,从源到目的,所有的包都通过一条路径转发(如果某条最优路径出现了问题,再考虑下一条最优路径),其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间。

现在问题来了:

1)主干网总有一天会承受不了过多的流量请求;

2)单一的路径路由会使很多路由路径处于相对空闲的状态。

那么一个解决问题的办法就产生了,使用多路径路由,因为路由器是有多个端口的,所以这样的路由方式在硬件上是有支持的。好处就是,在网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。

多路径路由特点:(1)可以为不同的服务质量要求提供不同的路径。(2)多路可以为同一种类型的服务提供多条路径,经聚集可实现更高的服务质量。(3)由于主机对路径有自主的使用权,它可以通过探测各路径的状况(比如丢包率)猜测网络的拥塞程度,据此调整对各路径的使用,从而在得到优质服务的同时也提高了网络的利用率。因此,多路的正确使用还可以提高网络的利用率。

根据不相交性,多路径路由可以分为3种:节点不相交(Node-Disjoint)多路径、链路不相交(Link-Disjoint)多路径和相交多路径。节点不相交多路径,也称为完全不相关多路径,就是各条路径中除源节点和目的节点之外没有其他任何共用节点。链路不相交多路径是指各条路径间没有任何共用的链路,但有可能有共用的节点。相交多路径是指各条路径间既有共用的节点,又有共用的链路。表1是3种路径间的比较。

那下面的问题就是如何进行多路径路由。关键问题就两个:

1)多路径选择

2)流量的动态分配

---------------------------------------------------------------------------------

下面看一下目前的多路径选择算法都有哪些:

1)ECMP(Equal-Cost Multi-Path Routing,等价多路径路由)。

Equal-cost  multi-path  (ECMP)  [8]  is  a  routing  technique  for  routing  packets  along  multiple  paths  of 
equal cost.  Load is distributed equally over multiple equal-cost paths typically using simple round-robin 
distribution. Optimal splitting with ECMP has been researched in OSPF-Optimized Multi Path (OMP) [9]. 
OSPF-OMP  uses  ECMP,  but  instead  of  depending  upon  weight  assignments,  it  samples  traffic  load 
information  and  floods  it  via  opaque  LSAs.  This  information  is  used  to  change  local  load  splitting 
decisions.

ECMP是指,到达一个目的地有多条相同度量值的路由项(路由路径),这样就可以使用不超过3条这样的路径来转发流量。ECMP最大的特点是实现了等值情况下,多路径负载均衡和链路备份的目的,在静态路由和OSPF中基本上都支持ECMP功能。

但是实际情况是,各路径的带宽、时延和可靠性等不一样,把Cost认可成一样,不能很好地利用带宽,尤其在路径间差异大时,效果会非常不理想。例如,路由器两个出口,两路径,一个带宽是100M,一个是2M,如果部署是ECMP,则网络总带宽只能达到4M的利用率。(在RFC2991中讨论了一般的多路径路由。每一封包多路径路由的负载平衡通常不适用因为大辐变化的延迟、数据包重新排序,以及可以破坏许多互联网协定运作的最大传输单元(MTU)在网络流量的差异,最特别是传输控制协议(TCP)和path MTU discovery。)另外一种情况下等价多路径路由也不能提供真正的最佳路径路由的优点,例如,如果多个最佳的next-hop的路径到目的地重新汇聚到一个单一的低带宽的路径(一种常见的情形)下游,它只会增加到该目的地流量路径的复杂性,而无法提高带宽的能力。

有篇专利可供参考:http://www.google.com/patents/CN103607358A?cl=zh

我们可以看到,“等价路径的计算”妨碍了这个算法的使用。

2)WCMP(Weight-Cost Multi-Path Routing,加权多路径路由)。

WCMP能够非常灵活地按照比例在链路上传递流量,ECMP是它的特例。IGRP、EIGRP和部分静态路由也支持WCMP,但因为IGRP和EIGRP为非标准私有协议(Cisco的私有协议),不适宜扩展,因此只能采用静态路由,在中小网络部署。

貌似也不需要考虑。

3)MPA、DSPA、CRA、MDVA、MPDA/QMPDA、MPTAH、MARA、ST、NPMA等算法稍后讲解

关于流量的动态分配,即所谓的负载均衡问题:

1)负载分担方式有3种。

基于流负载分担:路由器根据IP报文的五元组信息(是指源IP地址,源端口,目的IP地址,目的端口,和传输层协议这五个量组成的一个集合。 例如:192.168.1.1 10000 TCP 121.14.88.76 80 就构成了一个五元组)将数据分成不同的流。具有相同五元组信息的IP报文属于同一个流。转发数据时,路由器把不同的数据流根据算法从多个路径上依次发送出去。

基于包负载分担:转发数据时,路由器把数据包从多个路径上依次发送出去。

基于带宽的非平衡负载分担:报文按接口物理带宽进行负载分担(即基于报文的负载分担)。当用户为接口配置了指定的负载带宽后,设备将按用户指定的接口带宽进行负载分担,即根据各接口物理带宽比例关系进行分配。

基于包转发能够做到更精确的负载分担。但是由于路由器要对每一个包进行路由查表与转发操作,所以无法使用快速转发缓存来转发数据,转发效率降低了。另外,Internet应用都是基于流的,如果路由器采用基于包的负载分担,一条流中的数据包会经过不同路径到达目的地,可能会造成接收方的乱序接收,从而影响应用程序的正常运行。

 

多路径路由算法选择(1)——ECMP、WCMP的更多相关文章

  1. RRT路径规划算法

    传统的路径规划算法有人工势场法.模糊规则法.遗传算法.神经网络.模拟退火算法.蚁群优化算法等.但这些方法都需要在一个确定的空间内对障碍物进行建模,计算复杂度与机器人自由度呈指数关系,不适合解决多自由度 ...

  2. 基础路径规划算法(Dijikstra、A*、D*)总结

    引言 在一张固定地图上选择一条路径,当存在多条可选的路径之时,需要选择代价最小的那条路径.我们称这类问题为最短路径的选择问题.解决这个问题最经典的算法为Dijikstra算法,其通过贪心选择的步骤从源 ...

  3. 全局路径规划算法Dijkstra(迪杰斯特拉算法)- matlab

    参考博客链接:https://www.cnblogs.com/kex1n/p/4178782.html Dijkstra是常用的全局路径规划算法,其本质上是一个最短路径寻优算法.算法的详细介绍参考上述 ...

  4. 排序算法--选择排序(Selection Sort)_C#程序实现

    排序算法--选择排序(Selection Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

  5. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)

    本文转自:http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A 谷歌大规模机器学习:模型训练.特征工程和算法选择 (32PPT下载) 2017-01-26  ...

  6. 域名检索&路由算法

    域名查询顺序: a. 浏览器缓存(本机hosts文件),浏览器会缓存DNS记录一段时间. b. 系统缓存 c. 路由器缓存 d. 检查ISP e. 递归搜索域名服务器 路由算法: 一.静态路由算法 a ...

  7. 【Memcached】原理、体系架构、基本操作及路由算法

    1. 什么是Memcached 要了解Memcached首先要到官网上去看官方对它的描述.Memcached的官网网站是:http://memcached.org/,官方对Memcached的描述如下 ...

  8. 路径规划: PRM 路径规划算法 (Probabilistic Roadmaps 随机路标图)

    随机路标图-Probabilistic Roadmaps (路径规划算法) 路径规划作为机器人完成各种任务的基础,一直是研究的热点.研究人员提出了许多规划方法如: 1. A* 2. Djstar 3. ...

  9. NPOI_winfrom导出Excel表格(一)(合并单元格、规定范围加外边框、存储路径弹框选择)

    1.导出 private void btn_print_Click(object sender, EventArgs e) { DataTable dtNew = new DataTable(); d ...

随机推荐

  1. [Python] dict字典的浅复制与深复制

    Python中针对dict字典有两种复制: (1)浅复制:利用 copy() 或者 dict() :复制后对原dict的内部子对象(方括号[]内元素)进行操作时,由浅复制得到的dict会受该操作影响 ...

  2. 开源中文检索引擎Coreseek简单使用

    Coreseek结合MySQL使用简单示例,如下所示: echo 北京 | iconv -f gbk -t utf-8 | search -c D:\web\coreseek\etc\csft_mys ...

  3. SEO - H标签

    前言 这两天在做网站的SEO.虽然之前SEO的资料看过很多,但是因为正职是美工的缘故,SEO的具体实施参与的较少.现在的公司有点特殊,SEO团队基本不懂代码,所以需要参与的比较多.以下内容主要是通过自 ...

  4. 利用ajax完成项目图册上传删除【实际项目】

    [项目页面效果] [前台jsp页面] jsp的js代码 <script type="text/javascript"> //上传项目图片 function upload ...

  5. CF1117A Best Subsegment

    CF1117A Best Subsegment 乍一看好像很难,仔细想一下发现就是弱智题... 任意一段平均数显然不会超过最大的数,若只取最大数即可达到平均数为最大数. 于是只用取最长的一段连续的最大 ...

  6. Appium+python (3) 元素定位(1)

    打开问价夹下面的uiautomatorviewer: 夜神模拟器里的App后,回到uiautomatorviewer: 点击左上角的Device Screenshot,这时你的夜神模拟器页面就会显示在 ...

  7. ubuntu qq安装

    安装最新版qq2016 qq2012下载链接: https://pan.baidu.com/s/1miFVc04 密码: 3g9w 先解压到自己所在的目录,解压命令自己百度在这个目录下,有三个解压包, ...

  8. 【java基础】java集合系列之HashMap

    Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论. 1.hashma ...

  9. 如何批处理多个MySQL文件

    @echo off CHCP 65001 --设置cmd编码for %%i in (E:\sql\*.sql) do (   --多个MySQL  SQL文件的存放目录echo excute %%i ...

  10. PADS VBA 编写笔记

    PADS VBA 编写笔记 由于 PADS 的中编码不是 utf8 的,所以在编写时放到 PADS 中会出现乱码. 有时会使用中文注释,但是当以中文注释结尾时就会出现错误,于是就如果结尾是以英文就没问 ...