路由选择协议(RIP、OSPF、BGP)

路由选择协议(RIP、OSPF、BGP)

一种广义分类:

  • 全局式路由选择算法(GRA),用完整的、全局性的网络知识计算从源到目的地之间的最低费用路径,具有全局状态信息的算法常被称作 链路状态(Link State LS)算法
  • 分散式路由选择协议(DRA),以迭代、分布式的方式计算出最低费用路径,如 距离向量(Distance-Vector DV)算法——每个结点维护到网络中所有其他结点的费用(距离)估计的向量。

另一种广义分类:

  • 静态路由选择算法
  • 动态路由选择算法:能够当网络流量负载或拓扑发生变化时改变路由选择路径;

还有一种分类方式:

根据它是负载敏感的还是负载尺寸的进行划分。

  • 负载敏感算法:链路费用会动态地变化以反映出底层链路的当前拥塞水平;
  • 负载迟钝算法:当今大多数路由选择算法,某条链路的费用不明显的反映其当前的拥塞水平,如 RIP、OSPF、BGP。

链路状态路由选择算法

OFPS算法就是用的LS算法,DIjkstra算法

Dijkstra算法是迭代算法,性质是经算法的第k次迭代后,可知道到k个目的结点的最低费用路径,在到所有目的结点的最低费用路径之中,这k条路径具有k个最低费用。

当LS算法终止时,对于每个结点,都得到了从源结点沿着它的最低费用路径的前一结点,对于每个前一结点 又有它的前一结点,以此可以构造从源结点到所有目的结点的最短路径,从此可以构造路由器转发表。

复杂性

最差情况下为 O(n2)

可能出现的问题——振荡

链路费用其实就是链路上承载的负载,例如反映要历经的时延。

链路费用可能是非对称的,即沿着正方向和反方向传播的费用可能不同。

出现该现象最根本的原因是:链路费用和所承载的流量有关系。

简单来说就是,初始的路由选择完毕之后,路由器使用该转发表将流量引导到响应的链路和路由上,但当该链路上的流量变多后,该链路费用可能会发生变化,此时路由选择也会发生变化(比如本来选择的是顺时针,现在可能变为了逆时针更好)。这样一来,当路径上的流量发生变化之后路由选择也会总是发生变化,因此就出现了振荡。

解决方法:

  • 强制链路费用不依赖于所承载的流量(不可能)
  • 确保并非所有的路由器都同时运行LS算法,也就是路由器以一定周期来运行LS算法。

距离向量路由选择算法

特点:

  • 分布式:每个结点都要从一个或多个直接相连邻居接收到信息,执行计算,然后将其计算结果分发给邻居;
  • 迭代:此过程一直要持续到邻居之间无更多信息要交换为止;
  • 异步:它不要求所有结点相互之间步伐一致地操作。

Bellman-Ford方程:dx(y) = minv{c(x, v) + dv(y)}

v是x的所有邻居,即x到y的最短距离为,x到v加v到y的最短距离。若结点x的距离向量因这个更新步骤而改变,结点x接下来将向它的每个邻居发生其更新后的距离向量。

基本思想:Dx = [Dx(y) : y∈N] 是结点x的距离向量,该向量是从x到在N中的所有其他结点y的费用估计的向量。

  • 对于每个邻居v,从x到直接相连邻居v的费用为c(x, v);
  • 结点x的距离向量,即Dx = [Dx(y) : y∈N],包含了x到N中所有目的地y的费用的估计值;
  • 它的每个邻居的距离向量,即对x的每个邻居v,有Dv = [Dv(y) : y∈N]

具体过程举例

  • 初始化后,每个结点向它的两个邻居发送其距离向量;
  • 在结点重新计算它们的距离向量之后,它们再次向其邻居发送它们的更新距离向量(若发送改变);
  • 从邻居接收更新距离向量,重新计算路由选择表项和通知邻居到目的地的最低费用路径的费用已经变化的过程继续下去,直到无更新报文发送为止。

可能出现的问题——链路费用改变与链路故障

当好消息出现——x到y之间费用减少:

  • 在t0时刻,y检测到链路费用变化(4->1),更新其距离向量,并通知其邻居这个变化;
  • 在t1时刻,z收到来自y的更新报文并更新了其距离表。它计算出到x的新最低费用(5->2),它向邻居发送了它的新距离向量;
  • 在t2时刻,y收到来自z的更新并更新其距离表。y的最低费用未变,因此y不发送任何报文给z。算法进入静止状态。

当坏消息出现——x到y之间费用增加:

  • 在链路费用变化之前,Dy(x) = 4,Dy(z) = 1,Dz(y) = 1和 Dz(x) = 5。在t0时刻,y检测到链路费用变化(4->60):

    • y计算其到x的新最低费用路径的费用值为:Dy(x) = min{c(y, x) + Dx(x), c(y, z) + Dz(x)} = min{60 + 0, 1 + 5} = 6;
    • 在从全局来看,这个6是错的,因为它是根据z到x的最短路径为5算出来的,这个5又是根据x到y费用增多之前的4算出来的,现在变化了自然就不是这样了;
  • 在t1时刻,会遇到路由环路,即为到达x,y通过z路由,z又通过y路由。路由环路就像一个黑洞,目的地为x的分组在t1时刻到达y或z后,将在这两个结点之间不停地来回反复;

  • 接下来就会进入 无穷计数 阶段。由于y已经算出到x的心得最低费用(5),在t1时刻将通知z,当z收到y的新距离向量,它指示了y到x的新最低费用是6,则计算出z到x的心最低费用为 Dz(x) = min{50+0, 1+6} = 7,然后又通知y;

  • 类似的方式,z收到y的新距离向量,算出到x的新最低费用Dy(x) = 8,继续传播又算出 Dz(x) = 9;

  • 即我们的更新过程一直会进行,直到z将最终确定它到x的最短距离不是通过y,而是直接到x时(因为若是通过y,则链路费用会不停的变化)。

  • 增加毒性逆转:若z通过y路由选择到达目的地x,则z将通告y,它自己到x的距离是无穷大的 即Dz(x) = ∞。也就是说y永远不会试图通过z路由到达x路由。

LS和DV路由选择算法的比较

DV算法

  • 每个节点仅与它的直接相连的邻居交谈,但它为其邻居提供了从它自己到网络中(它所知道的)所有其他节点的最低开销估计;
  • DV算法要求在每次迭代时,在两个直接相连邻居之间交换报文,而且仅当在新的链路开销导致与该链路相连节点的最低开销路径发生改变时,才传播已改变的链路开销
  • DV算法收敛较慢,且在收敛时会遇到路由选择环路、无穷计数问题;
  • DV算法中一个不正确的节点计算值会扩散到整个网络

LS算法

  • LS算法需要全局信息,每个节点(经广播)与所有其他节点通信但仅告诉它们与它直接相连链路的开销
  • LS算法要求每个节点都知道网络中每条链路的开销,这就要求要发送O(|N||E|)个报文,而且无论何时一条链路的开销改变时,必须向所有节点发送新的链路开销;
  • LS算法是一个要求O(|N||E|)个报文的O(|N|2)算法;
  • 在LS算法下,路由计算在某种程度上是分离的,提供了一定程度的健壮性

层次路由选择

由于规模管理自治两个方面的原因,随着路由器数目变得很大,涉及路由选择信息的计算、存储及通信(例如LS更新或最低费用路径的变化)的开销将高得不可实现,以及公司要求按照自己的意愿运行路由器的话就需要管理自治。因此就出现了 通过将路由器组织进管理系统(AS) 的方法来解决。

  • 每个AS由一组通常处在相同管理控制下的路由器组成(如,由相同的ISP运营或属于相同的公司网络);
  • 在相同的AS中的路由器全部运行相同的路由选择算法,且拥有彼此的信息;
  • 在AS内部运行的路由选择算法叫做 自治系统内路由选择算法,间AS间运行的路由选择算法叫做 自治系统间路由选择算法
    • 相互通信的两个AS必须运行相同的自治系统间路由选择算法;
    • 实际上,因特网中所有AS都运行相同的;
  • AS间互联时,AS内的路由器需要想AS外的目的地转发分组,这些负责与其他AS通信的路由器成为 网关路由器

AS内部路由选择算法——RIP

  • RIP,路由选择信息协议,是一种距离向量协议;

  • 使用条数作为其费用度量,即每条链路费用为1;

  • 一条路径的最大费用被限制为15,因此若距离为16则为不可达;

  • 若有更新或30s内无更新,则路由器会向其邻居发送 RIP相应报文(RIP通告),内容为发送方路由器的距离向量和该路由器的转发表,邻居就会通过该信息来看是否更新自己的距离向量和路由表;

  • 若一台路由180s内未从某个邻居听到报文,则该邻居被认为是不可达的;

  • 路由器在UDP上用端口520相互发送RIP请求和相应报文,RIP被当作一个应用层进程来实现,能在标准套接字上发送和接收报文。

更新规则

  • 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;

  • 对修改后的 RIP 报文中的每一个项目,进行以下步骤:

    • 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
    • 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
  • 若 180s还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。

RIP优缺点

  1. RIP非常适合小型网络,它易于理解和配置,同时几乎所有路由器都支持它。但是 RIP的跳数限制为15,超出该距离则无法访问,限制了网络的规模。
  2. RIP网络收敛速度非常慢,当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。由于RIP中的任何路由更新都会占用大量带宽,因此关键IT流程的资源受到限制。
  3. RIP不支持同一路由上的多条路径,这可能会产生更多的路由环路。在使用固定跳数指标选择最佳路由时,RIP在基于实时数据比较路由时无法工作。

AS内部路由选择算法——OSPF

  • 向本自治系统中的所有路由器发送信息,这种方法是洪泛法;

  • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示;

  • 只有当链路状态发生变化时,路由器才会发送信息;

  • 所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快

RIP和OSPF比较

  • 路由协议类型: RIP是距离矢量协议,而OSPF是链路状态协议。距离矢量协议使用跳数来确定传输路径。链路状态协议分析不同的源,如速度,成本和路径拥塞,同时识别最短路径。

  • 路由表构造: RIP使用周围的路由器请求路由表。然后合并该信息并构造自己的路由表。该表定期发送到相邻设备,同时更新路由器的合并表。在OSPF中,路由器通过仅从相邻设备获取所需信息来合并路由表。它永远不会获得设备的整个路由表,并且路由表构造非常简单。

  • 跳数限制: RIP最多只允许15跳,而在OSPF中没有这样的限制。

  • 使用的算法: RIP使用距离向量算法,而OSPF使用最短路径算法Dijkstra来确定传输路由。

  • 网络分类:在RIP中,网络分为区域和表格。在OSPF中,网络被分类为区域,子区域,自治系统和骨干区域。

  • 复杂性级别: RIP相对简单,而OSPF则要复杂得多。

  • RIP与OSPF应用: RIP适用于较小的网络,因为它具有跳数限制。OSPF非常适合大型网络。

自治系统间路由选择

当源AS仅有一条通向外部AS的链路时,情况比较简单,不做讨论。

当有多条时,自治系统间路由选择算法就起作用了,它的主要作用有两个:

  • 从相邻AS获取可达性信息;
  • 向该AS中所有路由器传播可达性信息。

BGP

在每个AS内部产生了网状TCP连接。对于每条TCP连接,位于该连接端点的两台路由器成为BGP对等方,沿着该连接发送所有BGP报文的TCP连接被称为 BGP会话。此外,跨越两个AS的BGP会话成为外部BGP会话(eBGP),在同一个AS中的两台路由器之间的BGP会话成为内部BGP会话(iBGP)

BGP使得每个AS直到经过其相邻AS可达哪些目的地。在BGP中,目的地不是主机 而是CDIR化的前缀,每个前缀标识一个子网或一个子网的集合。

简要过程可以分为两步:

  • 首先两个AS的网关路由器使用eBGP会话交换其可达性信息;
  • 获取可达性信息后,用iBGP会话向本AS内其他路由器发布这些前缀。

BGP详解(有热土豆路由选择)

参考链接

1、RIP与OSPF协议详细对比

2、RIP和OSPF的区别

posted @ 2021-05-19 09:41  TRY0929  阅读(2637)  评论(0编辑  收藏  举报