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

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

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

现在问题来了:

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应用都是基于流的,如果路由器采用基于包的负载分担,一条流中的数据包会经过不同路径到达目的地,可能会造成接收方的乱序接收,从而影响应用程序的正常运行。