4.5 选路算法
一台主机通常直接与一台路由器相连接,该路由器即为该主机的默认路由器又称为该主机的第一跳路由器。每当某主机发送一个分组时,该分组都被传送给它的默认路由器。我们将源主机的默认路由称为源路由器,把目的主机的的默认路由器称为**目的路由器, 为一个分组从源主机到目的主机选路的问题显然可以归结为源路由器到目的路由器的选路问题。
给定一组路由器以及连接路由器的链路,选路算法要找到一条从源路由器到目的路由器的“好”路径。一条好路径是指具有最低费用的路径。
图论被用于形式化选路问题,图G=(N,E)是一个N个节点和E条边的集合,其中每条边是来自N的一对节点。在网络层选路的环境中,图中的节点表示路由器这是做分组转发决定的点;连接节点的边表示路由器之间的物理链路。
- 最低费用路径:找出源和目的之间具有最低费用的一条路径。最低费用路径也就是最短路径。
- 全局选路算法:用完整的、全局性的网络知识来计算从源到目的之间的最低费用路径。
- 具有全局状态信息的算法常被称作链路状态(Link-State, LS)算法
- 分布式选路算法:以迭代的、分布式的方式计算出最低费用路径。
距离向量(Distance-Vector, DV):每个节点维护到网络中的所以其他节点的费用(距离)估计的向量
选路算法的第二种广义分类方法是根据算法是静态还是动态来分类。在静态选路算法中,随着时间的推移,路由的变化是非常缓慢的,通常是由于人工干预进行调整。**动态选路算法能够在网络流量负载或拓扑发生变化时改变选路路径
- 选路算法的第三种分类方法是根据它是负载敏感的还是负载迟钝的进行划分。在**负载敏感算法中,链路费用会动态地变化以反映出底层链路的当前拥塞水平。
当今的因特网选路算法(如RIP、OSPF和BGP) 都是负载迟钝的,因为某条链路的费用不明显地反映其当前或最近拥塞水平。
4.5.1 链路状态选路算法
在链路状态算法中,网络拓扑和所有的链路费用都是已知的,也就是说可用作LS算法的输入。这是通过让每个节点向网络中的所有其他路由器广播链路状态分组来完成的,其中每个链路状态分组包含它所连接的链路的特征和费用。这经常由链路状态广播来完成
Dijkstra算法
Dijkstra算法计算某节点到网络中所有其他节点的最低费用路径。Dijkstra算法是迭代算法,其性质是经算法的第K次迭代后,可知道到k个目的节点的最低费用路径,在到所有目的节点的最低费用路径之中,这k条路径具有k个最低费用。我们定义下列记号:
- D(v):随着算法进行本次迭代,从源节点到目的节点v的最低费用路径的费用。
- P(v):从源节点到目的节点v沿着当前最低费用路径的前一节点(v的邻居)。
- N’:节点子集;如果从源节点到目的节点v的最低费用路径已确知,v在N’中。
4.5.2 距离向量选路算法
LS算法是一种使用全局信息的算法,而距离向量(Distance-Vector,DV)算法是一种迭代的,异步的和分布式的算法
- 距离向量算法:链路费用变化与链路故障
- 当一个运行DV算法的节点检测到从它自己到邻居的链路费用发生变化时,它就更新其距离向量,并且如果最低费用路径的费用发生了变化,则向邻居通知其新的距离向量。
- 距离向量算法:增加毒性逆转
- LS与DV选路算法的比较
DV和LS算法采用互补的方法来解决计算选路问题。在DV算法中,每个节点仅与它的直接相连邻居交谈,但它为它的邻居提供了从其自己到网络中所有其他节点的最低费用估计。在LS算法中,每个节点(经广播)与所有其他节点交谈,但它仅告诉它们与它直接相连链路的费用。我们使用快速比较它们各自属性的方式来总结我们所学的链路状态与距离向量算法。- 报文复杂性:LS算法要求每个节点都知道网络中每条链路的费用。这就要求发送O(|N||E|)个报文。无论何时一条链路的费用改变,都必须向所有节点发送新的链路费用。DV算法要求在每次迭代时,在两个字节相连邻居之间交换报文。
- 收敛速度:LS算法的实现是一个要求O(|N||E|)个报文的O(|N|^2)算法。DV算法收敛较慢而且在收敛时会遇到选路环路。DV算法还会遭受到计数到无穷的问题。
- 健壮性:对于LS算法路由器能够向其连接的一条链路广播不正确费用。作为LS广播的一部分,一个节点也可损坏或丢弃它收到的任何LS广播分组。但是一个LS节点仅计算自己的转发表,其他节点也自行执行类似的计算。这就意味着在LS算法下,路由计算在某种程度上是分离的,则提供了一定程度的健壮性。在DV算法下,一个节点可向任意或所有目的节点通告其不正确的最低费用路径。
4.5.3 层次选路
在LS和DV算法研究中,我们将网络只看作是一个互连路由器的集合。从所有路由器执行相同的选路算法以计算穿越整个网络的选路路径这个意义来说,一台路由器很难同另一台路由器区别开来。在实践中,该模型和关于一组执行同样选路算法的同质路由器集合的观点有一点简单化,至少出于两个重要原因:
- 规模
- 管理自治
在一个自治系统内运行的选路算法叫做自治系统内部选路协议(intra-autonomous system routing protocol)将AS彼此互连将是必需的,因此在一个AS内的一台或多台路由器将有另外的任务,来负责向本AS之外的目的地转发分组。咋接路由器被称为网关路由器(gateway router)
每台路由器能够配置它的转发表以处理外部AS目的地。从相邻AS获取可达性信息以及向该AS中的所有路由器传播可达性信息这两项任务由自治系统间选路协议负责。因为自治系统间选路协议设计连个AS之间的通信,所以这两个通信的AS必须运行相同的自治系统间选路协议。
热土豆方法:在热土豆选路中,AS尽可能快地摆脱分组。这通过让路由器向某网关路由器发送分组来完成,同时要求该网关路由器在到目的地路径上的所有网关路由器中具有最低费用。
4.6 因特网中的选路
4.6.1因特网中自治系统内部选路:RIP
AS内部选路协议用于确定在一个自治系统(AS)内执行选路的方式。AS内部选路协议又称为内部网关协议。历史上有两个选路协议曾被广泛用于因特网上自治系统内的选路:选路信息协议(Routing Information protocol RIP)与开放最短路径优先(Open Shortest Path First,OSPF)与OSPF密切相关的选路协议是IS-IS协议。
RIP是最早的AS内部因特网选路协议之一,目前仍在广泛使用。RIP是一种距离向量协议。
在RIP中,选路更新信息在邻居之间通过使用一种RIP响应报文(RIP response message)交换,大约30秒相互交换一次。由一台路由器或主机发出的响应报文包含了一个由多达25个AS内的目的子网列表,还有发送方到其中每个子网的距离。响应报文又被称作RIP通告(RIP advertisement)
每台路由器维护一张称为选路表的RIP表。一台路由器的选路表包括该路由器的距离向量和该路由器的转发表。
4.6.2 因特网中AS内部选路:OSPF
如同RIP一样,OSPF选路也被广泛用于因特网中的AS内部选路。OSPF和它的关系密切的兄弟IS-IS,通常被设置在较顶层的ISP中,而RIP却被设置在较低层ISP和企业网中。OSPF中的开放是指选路协议规约是公众可用的。
OSPF被认为是RIP的后继者,并且有许多先进特性。OSPF的核心就是一个使用洪泛链路状态信息的链路状态协议和一个Dijkstra最低消费用路径算法。
OSPF不强制使用如何设置链路权值的策略,但提供了一种机制,为给定链路权值集合确定最低费用路径选路。
OSPF的优点包括下列几方面:
- 安全:OSPF路由器之间的交换都是经过鉴别的。这意味着仅有受信任的路由器能参与一个AS内的OSPF协议,因此可阻止恶意入侵者将不正确的信息注入路由器表内。
- 多条相同费用的路径:当到达某目的地的多条路径具有相同的费用时,OSPF允许使用多条路径
- 对单播选路与多播选路的综合支持:多播OSPF(MOSPF)是对OSPF的简单扩展,以便提供多播选路。MOSPF使用现存的OSPF链路数据库,并为现有的OSPF链路状态广播机制增加了一种新型的链路状态通告。
- 支持在单个选路域内的层次结构:也许OSPF的最重要优点是具有按层次结构构造了一个自治系统的能力。
在一个区域内,一台或多台区域边界路由器负责为发送到该区域以外的分组选路。
四种OSPF路由器:
- 内部路由器:这些路由器位于非主干区域且只执行AS内部选路
- 区域边界路由器:这些路由器同时属于区域与主干两个区域
- 主干路由器(非边界路由器):这些路由器执行主干中的选路,但其自身不是区域边界路由器,在一个非主干区域内,内部路由器通过该区域中的主干路由器,从信息上是链路状态通告,但通告的是到另一个区域的路由费用,而不是链路费用)广播中知道存在通向其他区域的路由。
- 边界路由器:边界路由器与属于其他自治系统的路由器交换选路信息。例如这台路由器也许会使用BGP执行AS间选路。其他路由器正是通过这样的边界路由器才知道通向外部网络的路径。
4.6.3 自治系统间的选路:BGP
由RFC 4271 定义的边界网关协议(Broder Gateway Protocol ,BGP)版本4是当今因特网中域间选路协议事实上的标准。它通常被称为BGP4或简称BGP。作为一个自治系统间选路协议,BGP为每个AS提供一种手段,以处理:
1. 从相邻AS处获得子网可达性信息
2. 向该AS内部的所有路由器传播这些可达性信息
3. 基于可达性信息和AS策略,决定到达子网的“好”路由。
BGP基础
在BGP中,路由器对179端口的半永久TCP链接来交换选路信息。
路径属性和BGP路由
在BGP中,一个自治系统有其全局唯一的自治系统号(Autonomous System Number ,ASN)。(从技术上讲,并非每个AS都具有一个ASN,特殊情况下,有一种所谓桩AS通常就没有ASN,这种桩AS仅承载源地址或目的地址为本AS的流量)就像IP地址一样,AS号由ICANN地区注册机构分配