#集中式路由选择算法( centralized routing algorithm)
用完整的、全局性的网络知识计算出从源到目的地之间的最低开销路径。链路状态(LS)算法

  • D(v):到算法的本次迭代,从源节点到目的节点v的最低开销路径的开销。
  • p(v):从源到0沿着当前最低开销路径的前一节点(v的邻居)。
  • N’:节点子集;如果从源到v的最低开销路径已确知,v在N’中。
Initialization:
N' = {u}
for all nodes V
  if V is aneighbor of u
     then D(v) = c(u,V)
  else D(v) =∞
Loop
  find W not in N' such that D(W) is a minimum
  addwtoN'
  update D(V) for each neighbor V of w and not in N' :
     D(v) = min(D(v), D(W)+ C(W,v) )
/* new cost to V is either old cost to V or known
least path cost to w plus cost from w to V */
until N'= N

如何影响ospf选路_链路


如何影响ospf选路_路由选择_02


如何影响ospf选路_路由选择_03


###链路状态算法评价

  • 复杂性:若有N个节点则时间复杂度为O(N2)
  • 存在问题:
  • 算出来的结果并非最优值
  • 没有加权值,导致流量只会在一条路上,因此时延大
  • 没有达到等开销结果
  • 导致震荡
  • 时间复杂度高
    #在分散式路由选择算法( decentralized routing algorithm)
    路由器以迭代、分布式的方式计算出最低开销路径。没有节点拥有关于所有网络链路开销的完整信息。距离向量算法(DV)算法
    Bellman-Ford方程: dx(y)=min{c(x,y)+dv(y)}



    ##DV算法评价
    DV算法“好消息”传播速度快,“坏消息”传播速度慢。
    ##毒性逆转
    其思想较为简单:如果z通过y路由选择到目的地x,则z将通告y,它(即z)到x的距离是无穷大,也就是z将向y通告Dz(x)=∞ (即使z实际上知道Dz(x)=5)。只要z经y路由选择到x,z就持续地向y讲述这个善意的小谎言。因为y相信z没有到x的路径,故只要z继续经y路由选择到x (并这样去撒谎),y将永远不会试图经由z路由选择到x。
    毒性逆转解决了一般的无穷计数问题吗?没有。你应认识到涉及3个或更多节点(而
    不只是两个直接相连的邻居节点)的环路将无法用毒性逆转技术检测到。
    ##LS与DV比较
  • 报文复杂性。我们已经看到LS算法要求每个节点都知道网络中每条链路的开销。这就要求要发送O(|N||E|)个报文。而且无论何时一条链路的开销改变时,必须向所有节点发送新的链路开销。DV算法要求在每次迭代时,在两个直接相连邻居之间交换报文。我们已经看到,算法收敛所需时间依赖于许多因素。当链路开销改变时,DV算法仅当在新的链路开销导致与该链路相连节点的最低开销路径发生
    改变时,才传播已改变的链路开销。
  • 收敛速度。我们已经看到LS算法的实现是一个要求O(|N|E|)个报文的(|N|2)算法。DV算法收敛较慢,且在收敛时会遇到路由选择环路。DV算法还会遭遇无穷计数的问题。
  • 健壮性。当路由器损坏时,对于LS算法,路由器能够向其连接的链路(而不是其他链路)广播不正确的开销。作为LS广播的一部分,一个节点也可损坏或丢弃它收到的任何LS广播分组。但是一个 Ls节点仅计算自己的转发表;其他节点也自行执行类似的计算。这就意味着在LS算法下,路由计算在某种程度上是分离的,提供了一定程度的健壮性。在DV算法下,一个节点可向任意或所有目的节点通告其不正确的最低开销路径。更一般地,我们会注意到每次迭代时,在DV算法中一个节点的计算会传递给它的邻居,然后在下次迭代时再间接地传递给邻居的邻居。在此情况下,DV算法中一个不正确的节点计算值会扩散到整个网络。
    #层次路由选择
  • 自治系统(AS),每个AS由一组处于相同管理控制下的路由器组成。
  • 负责向在本AS之外的目的地转发分组的路由器称为网关路由器。
    #自治系统内部的路由选择
    ##RIP(路由选择信息协议)
    RIP是一种距离向量协议,RIP使用跳数作为其费用测度。
    一条路径的最大费用被限制为15,因此RIP被限制用在网络直径不超过15跳的自治系统内。前面讲过,在DV协议中,相邻路由器之间相互交换距离向量。对任何一台路由器的距离向量是从这台路由器到该AS中子网的最短路径距离的当前估计值。在RIP中,选路更新信息在邻居之间通过使用一种RIP响应报文(RIP response message)交换,大约30秒相互交换一次。由一台路由器或主机发出的响应报文包含了一个由多达25个AS内的目的子网列表,还有发送方到其中每个子网的距离。响应报文又被称作RIP通告(RIP advertisement)。每台路由器维护一张称为选路表(routingtable)的RIP表。一台路由器的选路表包括该路由器的距离向量和该路由器的转发表。
    如果一台路由器一旦超过180秒没有监听到其邻居,则该邻居不再被认为是可达的,即要么其邻居死机了,要么连接的链路中断了。当发生这种情况时,RIP修改本地选路表,然后通过向相邻路由器(那些仍然可达的路由器)发送通告来传播该信息。路由器也可通过使用RIP请求报文,请求其邻居到指定目的地的费用。路由器在UDP上使用端口520相互发送RIP请求与响应报文。该UDP报文段在标准IP数据报中承载在路由器之间。RIP使用一个位于网络层协议(IP)之上的运输层协议(UDP) 来实现网络层功能(一种选路算法),
    ##OSPF(开放最短路优先)
    OSPF的核心是一个使用洪泛链路状态信息的链路状态协议和一个Dijkstra最低费用路径算法。使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图(即一幅图)。于是,每台路由器在本地运行Djkstra的最短路径算法,以确定一个以自身为根节点到所有子网的最短路径树。各条链路开销是由网络管理员配置的(参见“实践原则:设置OSPF链路权值”)。OSPF不强制使用设置链路权值的策略(那是网络管理员的任务),而是提供了一种机制(协议),为给定链路权值集合确定最低开销路径的路由选择。每当一条链路的状态发生变化时(如开销的变化或连接/中断状态的变化),路由器就会广播链路状态信息。即使链路状态未发生变化,它也要周期性地(至少每隔30 min一次)广播链路状态。
    ##OSPF的优点
  • 安全。能够鉴别OSPF路由器之间的交换( 如链路状态更新)。使用鉴别,仅有受信任的路由器能参与一个AS内的OSPF协议,因此可防止恶意入侵者将不正确的信息注入路由器表内。在默认状态下,路由器间的OSPF报文是未被鉴别的并能被伪造。
  • 多条相同开销的路径。当到达某目的地的多条路径具有相同的开销时,OSPF允许使用多条路径( 这就是说,当存在多条相等开销的路径时,无须仅选择单一的路径来承载所有的流量)。
  • 对单播与多播路由选择的综合支持。多播OSPF (MOSPF) 提供对OSPF的简单扩展,以便提供多播路由选择。MOSPF使用现有的OSPF链路数据库并为现有的OSPF链路状态广播机制增加了一种新型的链路状态通告。
  • 支持在单个AS中的层次结构。一个OSPF自治系统能够层次化地配置多个区域。每个区域都运行自己的OSPF链路状态路由选择算法,区域内的每台路由器都向该区域内的所有其他路由器广播其链路状态。在每个区域内,一台或多台区域边界路由器负责为流向该区域以外的分组提供路由选择。最后,在AS中只有一个OSPF区域配置成主干区域。主干区域的主要作用是为该AS中其他区域之间的流量提供路由选择。该主干总是包含本AS中的所有区域边界路由器,并且可能还包含了一些非边界路由器。在AS中的区域间的路由选择要求分组先路由到一个区域边界路由器(区域内路由选择),然后通过主干路由到位于目的区域的区域边界路由器,进而再路由到最终目的地。
    #自治系统间的路由选择:BGP(边界网关协议)
    #广播路由选择算法
    网络层提供了一种从源结点到网络中的所有其他结点交付分组的服务
    ##最直接的方法
    发送结点向每个目的地分别发送分组的副本
    缺点:
  • 效率低
  • 增加更多的开销
    ##无控制洪泛
    源节点向它的所有邻居发送分组的副本
    结果:导致广播风暴——无休止的广播分组的复制
    ##受控洪泛
    在序号控制洪泛(sequence-number-controlled flooding)中,源节点将其地址(或其他的唯一标识符)以及广播序号(broadcast sequence number)放入广播分组,再向它的所有邻居发送该分组。每个节点维护它已经收到的、复制的和转发的源地址和每个广播分组的序号列表。当一个节点接收到一个广播分组时,它首先检查该分组是否在该列表中。如果在,丟弃该分组;如果不在,复制该分组并向该节点的所有邻居(除了从其接收到该分组的那个节点)转发。
    受控洪泛的第二种方法称为反向路径转发(Reverse Path Forwarding, RPF) ,有时也称为反向路径广播(RPB)。 RPF的基本思想简单。当一台路由器接收到具有给定源地址的广播分组时,仅当该分组到达的链路正好是位于它自己到其源的最短单播路径上,它才向其所有出链路(除了它接收分组的那个)传输分组。否则,该路由器只是丟弃入分组而不向任何它的出链路转发分组。因为该路由器知道它在这样一条链路(该链路位于它自到发送方的最短路径上)上或者将接收或者已经接收了该分组的一个拷贝,所以可以将这样的一个分组丢弃。注意,RPF不使用单播选路以实际将分组交付给目的地,它也不要求路由器知道从它自己到源的完整最短路径。RPF仅需要知道它到发送方的单播最短路径上的下一个邻居,它仅使用这个邻居的身份来决定是否洪泛一个接收到的广播分组。
    ##生成树广播

    如果广播分组仅沿着该树中的链路转发的话,每个网络节点将恰好接收到广播分组的一个拷贝,该树是一颗生成树。
    另一种提供广播的方法是首先对网络节点构造出一棵生成树。当一个源节点要发送一个广播分组时,它向所有属于该生成树的特定链路发送分组。接收广播分组的节点则向生成树中的所有邻居转发该分组(它接收该分组的邻居除外)。生成树不仅消除了冗余广播分组,而且一旦合适,该生成树便能够被任何节点用于开始广播分组。注意,一个节点不必知道整棵树,它只需要知道它在G中的哪些邻居是生成树邻居
    采用基于中心方法建立一棵生成树时,要定义一个中心节点(也称为汇合点(rendezvous point)或核(core))。 节点则向中心节点单播加入树(tree-join) 报文。加入树报文使用单播选路朝着中心节点转发,直到它到达一个已经属于生成树的节点或到达该中心。在任一种情况下,加入树报文经过的路径定义了发起加入树报文的边缘节点和中心之间的生成树分支。你可以认为这个新分支已被嫁接到现有的生成树上了。
    #多播路由选择
    使单个结点能够向其他网络结点的一个子集发送分组副本
    多播路由中的两个问题:
  • 怎样标识多播分组的接收方
  • 怎样为发送到这些接收方的分组编址
    由于这些原因,在因特网体系结构中,多播数据报使用**间接地址(address indirection) **来编址。这就是说,用一个标识来表示一组接收方,寻址到该组的分组的拷贝被交付给所有与该组相关的多播接收方。在因特网中,表示一组接收方的单一标识就是一个D类多播地址。与一个D类地址相关联的接收方组称为一个多播组(multicast group)。
    ##因特网组管理协议
    IGMP版本3运行在一台主机与其直接相连的路由器之间。
    IGMP为一台主机提供了手段,可让它通知与其相连的路由器,在本主机上运行的一个应用程序想加入一个特定的多播组。由于IGMP的交互范围被局限于主机与其相连的路由器间,因此显然需要其他协议来协调遍及因特网内的多播路由器(包括相连的路由器),以便多播数据报能路由到其最终目的地。后一个功能是由网络层多播选路算法完成的。因此,因特网中的网络层多播是由两个互补的组件组成的: IGMP与多播选路协议。
    IGMP只有三种报文类型。与ICMP类似,IGMP报文也是承载(封装)在一个IP数据报中,使用的IP协议号为2。由一台路由器向所有与主机相连的接口发送membership_ query报文,以确定该接口上的主机已加入的所有多播组集合。主机用一个membership_ report报文来响应membership_ query报文。当一个应用程序首次加入一个多播组时,也可由主机产生membership_ report报文, 而不用等待来自路由器的membership_ query报文。最后一种IGMP报文类型是leave_ group报文。有趣的是,这种报文是可选的!但如果它是可选的,那么路由器如何检测出一台主机是何时离开该多播组的呢?问题的答案就在于使用了membership_ query报文:当无主机响应一个含有给定组地址的membership_ query报文
    时,路由器就推断出已没有主机在这个多播组了。
    ##多播路由选择算法
    多播路由的选择的目标就是发现一颗链路的树,这些链路连接了所有具有属于该多播组相连主机的路由器。
  • 使用一棵组共享树进行多播选路。像在生成树厂播的场合中一样,跨越组共享树的多播选路基础是构建一棵树,该树包括所有具有属于该多播组相连主机的边缘路由器。在实践中,使用基于中心方法来构造多播选路树,具有属于多播组相连主机的边缘路由器向中心节点(经单播)发送加入报文。像在广播情况下一样,一个加入报文使用单播选路朝着中心转发,直到它到达已经属于多播树的一台路由器或到达该中心。沿着该加入报文击过路径的所有路由器。将向发起该名播加入的边缘路由器转发接收到的多播分组。
  • 使用一棵基于源的树进行多播选路。组共享树多播选路算法构建单一的、共享的选路树来路由所有发送方的分组,而第二种方法为多播组中的每个源构建一棵多播选路树。在实践中,使用RPF算法(具有源节点x)来构造一棵多播转发树,以用于来自源节点x的多播数据报。我们前面学习的RPF算法与其用于多播环境中的要求有些不同。为了理解其中的原因,考虑图4-51中的路由器D。在广播RPF情况下,它将向路由器G转发分组,即使路由器G没有加入该多播组的相连主机。对于D只有一个下游路由器G的情况来说,这还不算太坏。想象一下,若有上千台路由器在D下游时会出现什么情况?这数千台路由器中的每-台都将收到不想要的多播分组。(这种情景并不像看起来那么想当然。最初的MBone一全球第一个多播网络[Casner 1992; Macedonia 1994] 就遭遇了这样的问题。)解决在RPF下会收到不想要的多播分组这个问题的方法称为剪枝(pruning)。 一台接收到多播分组的多播路由器,如它无加入该组的相连主机,则它向其上游路由器发送一个剪枝报文。如果一台路由器从它的每个下游路由器收到剪枝报文,则它就向上游转发一个剪枝报文。

    ##因特网中的多播路由选择
    第一个用于因特网中的多播选路协议是距离向量多播选路协议(Distance Vector Multicast Routing Protocol, DVMRP) 。DVMRP实现了 具有反向路径转发与剪枝算法的基于源的树。如前面所讨论的那样,DVMRP使用一种具有剪枝的RFP算法。
    使用最广泛的多播选路协议是协议无关的多播(Protocol-Independent Multicast, PIM)选路协议,该协议明确辨识两种多播分布情形。在稠密模式(dense mode)中,多播组成员的位置分布稠密,即该区域内的许多或大多数路由器都需要参与到多播数据报选路过程之中。PIM稠密模式是一种洪泛与剪枝反向路径转发技术,类似于DVMRP的思想。
    在稀疏模式(sparse mode) 中,具有相连组成员的路由器数量相对于路由器总数来说很少,组成员极为分散。PIM稀疏模式使用汇合点来建立多播分布树。在源特定多播(Source-Specific Multicast, SSM) 中,仅允许单一发送方向多播树中发送流量从而大大简化了树的构造和维护。