首页 > 编程语言 >计算机网络•自顶向下方法:路由选路算法

计算机网络•自顶向下方法:路由选路算法

时间:2025-01-01 12:27:45浏览次数:3  
标签:邻居 矢量 算法 自顶向下 选路 链路 节点 路由

路由选路算法

在网络层中,选路是指数据包从源主机到目的主机的传输过程中,如何通过网络中的路由器选择一条合适的路径。路由器根据网络拓扑、路由表、协议规则等来决定如何将数据包转发到下一跳,直到数据包到达目的地。

在这里插入图片描述

选路算法分类

静态算法or 动态算法

  • 静态算法:路由随时间不变或缓慢变化 (手工配置)
  • 动态算法:路由器根据拓扑及链路代价的变化而自动更新路由

全局算法 or 分布式算法

全局算法:

  • 所有路由器具有关于拓扑和链路代价的全部信息
  • 集中式计算

分布式算法:

  • 路由器仅知道邻居节点以及到邻居节点的链路代价
  • 通过与邻居交换信息,进行迭代计算

链路状态(LS)选路算法

链路状态选路算法为全局算法,其基本思想为:每个节点利用可靠方法获得全网拓扑信息,抽象成一个带权拓扑图,计算到各个节点的最短路径

最常见的链路状态路由协议是 OSPF(Open Shortest Path First)

链路状态选路算法包括五个步骤:

  • 发现邻居:有链路直接相连的节点为邻居
  • 探测链路代价:探测到每个邻居的代价
  • 构造链路状态(LS)分组:利用邻居及链路代价信息
  • 扩散LS分组:向网络中所有节点发送LS分组
  • 计算路由:利用收到的LS分组构造网络拓扑,计算从本节点到其它各个节点的最短路径

一旦路由器有了完整的网络拓扑图,它就可以使用 Dijkstra 最短路径算法 来计算到每个目标的最短路径。

Dijkstra算法
1  Initialization: 
2    N’ = {u}      // N’为已找到最短路径的节点集合,初始时只有u
3    for all nodes v    //标记源节点u到各个节点v的路径代价D(v)
4      if v adjacent to u
5          then D(v) = c(u,v)   //c(u,v)为链路(u,v)的代价
6      else D(v) = ∞ 
7 
8   Loop 
9     find w not in N’ such that D(w) is a minimum  //下一条最短路径
10    add w to N’     //将找到最短路径的节点加入N’
11    update D(v) for all v adjacent to w and not in N’ :
12       D(v) = min( D(v), D(w) + c(w,v) )    //更新到相关节点的路径代价
13    until all nodes in N' 

在这里插入图片描述

Bellman-Ford 方程

假设 x 和 y 分别为源节点和目的节点, N ( x ) N(x) N(x)是x 的邻居集合, c ( x , p ) c(x,p) c(x,p)为 x 到其邻居 p 的链路代价, d x ( y ) d_x(y) dx​(y)为从 x 到 y 的最小代价路径的代价,则:
d x ( y ) = m i n p { c ( x , p ) + d p ( y ) } , p ∈ N ( x ) ( B e l l m a n − F o r d 方程) d_x(y) = min_p\{{c(x,p) + d_p(y)}\},p∈N(x) \\(Bellman-Ford方程) dx​(y)=minp​{c(x,p)+dp​(y)},p∈N(x)(Bellman−Ford方程)
在这里插入图片描述

距离矢量(DV)算法

距离矢量算法:

  • 利用Bellman-Ford方程求解任意两个节点之间的最小代价路径
  • 主要贡献在于给出了分布式求解B-F方程的方法

算法的基本思想:

  • 节点 x 测量其到各个邻居 v 的链路代价 c ( x , v ) c(x,v) c(x,v)
  • 节点x 估计其到达各个节点 y 的最小代价 D x ( y ) D_x(y) Dx​(y),这些代价构成了自己的距离矢量 D x = [ D x ( y ) : y є N ] D_x = [D_x(y): y є N ] Dx​=[Dx​(y):yєN]
  • 每个节点x周期性地将它的距离矢量 D x D_x Dx​发送给邻居
  • 节点x拥有每个邻居v的距离矢量 D v = [ D v ( y ) : y є N ] D_v = [D_v(y): y є N ] Dv​=[Dv​(y):yєN]
  • 当节点 x 从各个邻居收到它们的距离矢量后,利用B-F方程更新自己的距离矢量: D x ( y ) ← m i n v { c ( x , v ) + D v ( y ) } D_x(y) ← min_v\{{c(x,v) +D_v(y)}\} Dx​(y)←minv​{c(x,v)+Dv​(y)}

距离矢量算法是迭代的、异步的、分布式算法。

RIP(Routing Information Protocol) 是最经典的基于 DV 算法的路由协议

特点
  • 好消息传播快
    • 当网络中某个链路代价变小时(例如,某条路径变得更短),节点通过距离矢量算法会迅速更新其路由表并通知邻居。由于每个节点都倾向于采用代价较小的路径,因此这个变化会以最快的方式沿着网络传播。
    • 原因:
      • Bellman-Ford 方程: D x ( y ) ← m i n v { c ( x , v ) + D v ( y ) } D_x(y)←min_v\{{c(x,v)+D_v(y)}\} Dx​(y)←minv​{c(x,v)+Dv​(y)}当某个链路代价 c ( x , v ) c(x,v) c(x,v) 减小时,所有受影响的节点会立刻采用新的较小代价进行更新。
      • 好消息无需额外验证,只需要简单比较,符合 Bellman-Ford 方程即可更新。
  • 坏消息传播慢
    • 当网络中某条链路断开或代价增加时,坏消息在距离矢量算法中传播较慢。这是因为距离矢量算法可能导致路由环路
    • 原因:
      • 节点在某些情况下无法立即获知链路断开的信息,会继续通过其邻居获取过时的距离矢量,误以为存在有效路径。
      • 更新代价遵循 Bellman-Ford 方程,但算法本身无法快速检测到全局无效路径的存在。

解决方法

  • 水平分割(Split Horizon):禁止节点将自己学到的信息传播回原来的来源。
  • 毒性逆转(Poisoned Reverse):若节点通过某个路径获知目标,则将该路径的代价设置为无穷大并通知邻居。

LS算法和DV算法的对比

通信复杂度

  • 链路状态(LS)算法
    • 链路状态信息需要在整个网络中传播
    • 每个节点向所有其他节点发送链路状态信息,通信复杂度较高
    • 传播范围:全网
  • 距离矢量(DV)算法
    • 距离矢量信息只需要发送给直接邻居。
    • 每个节点仅与其邻居交换信息,通信复杂度相对较低
    • 传播范围:仅邻居

收敛速度

  • 链路状态(LS)算法
    • 收敛速度快,所有节点在全网链路状态信息收集完毕后,利用 Dijkstra 算法进行路由计算
    • 收敛速度大致为 O ( ∣ N ∣ ∣ E ∣ ) O(|N||E|) O(∣N∣∣E∣) 个报文发送,主要取决于网络拓扑规模
  • 距离矢量(DV)算法
    • 收敛速度差异大,特别是在网络发生变化时,可能出现“坏消息传播慢”的现象
    • 可能出现路由环路,例如“计数到无穷问题”,导致收敛时间不确定

计算复杂度

  • 链路状态(LS)算法
    • 在链路状态收集完毕后,每个节点独立运行 Dijkstra 算法,计算复杂度为 O ( ∣ N ∣ 2 ) O(|N|^2) O(∣N∣2)
    • 适用于规模较小的网络,但对于大型网络计算代价会较高
  • 距离矢量(DV)算法
    • 计算复杂度较低,每个节点仅需简单地利用 Bellman-Ford 方程更新路由表
    • 计算复杂度大致为 O ( ∣ N ∣ ⋅ ∣ V ∣ ) O(|N| \cdot |V|) O(∣N∣⋅∣V∣),其中 ∣ V ∣ |V| ∣V∣ 是直接邻居数

健壮性

  • 链路状态(LS)算法
    • 每个节点仅传播自己测量的本地链路代价,这些信息可靠且不会传播计算错误
    • 节点独立计算路由,不依赖邻居的路由信息
    • 优点:错误不会扩散
  • 距离矢量(DV)算法
    • 节点依赖邻居的距离矢量进行路由计算,邻居的距离矢量可能包含错误信息(“道听途说”)
    • 节点计算的路由信息需要传播给邻居,错误可能扩散
      靠且不会传播计算错误
    • 节点独立计算路由,不依赖邻居的路由信息
    • 优点:错误不会扩散
  • 距离矢量(DV)算法
    • 节点依赖邻居的距离矢量进行路由计算,邻居的距离矢量可能包含错误信息(“道听途说”)
    • 节点计算的路由信息需要传播给邻居,错误可能扩散
    • 缺点:网络中的故障可能导致错误快速传播并引发路由环路

标签:邻居,矢量,算法,自顶向下,选路,链路,节点,路由
From: https://blog.csdn.net/2301_79744389/article/details/144865454

相关文章

  • 计算机网络•自顶向下方法:DHCP、NAT、IPV6
    获取IP地址路由器:管理员手工配置路由器各个接口的IP地址主机:管理员手工配置主机IP地址,服务器通常采用这种方法使用动态主机配置协议DHCP(DynamicHostConfigurationProtocol)获取IP地址、子网掩码、缺省路由器、本地DNS服务器等配置信息,个人终端通常采用这种方法使用DH......
  • 【无线充电车辆路线和速度预测】使用随机搜索优化方法同时具有路由和速度分配的模型研
    ......
  • lec7-路由与路由器
    lec7-路由与路由器1.路由器硬件路由器的硬件部分:断电失去:RAM断电不失去:NVRAM,Flash,ROMinterface也算是一部分路由器是特殊组件的计算机console口进行具体的调试辅助口(Auxiliary):一般不用,但是可能用到1.1.RAM路由器配置文件的临时存储,可以看作是内存断电/......
  • 联通 路由器 创维SK-WR9551X 联通华盛VS010 组mesh 和 锐捷X32 PRO 无缝漫游
    前言联通路由器:联通创维SK-WR9551X,联通华盛VS010组mesh,并与锐捷X32PRO混合组网,开启无限漫游。1、mesh≠无缝漫游mesh是实现路由器快速组网的一种方式,通过mesh组网后可以实现无缝漫游。mesh组网的设备要求必须是同品牌的才可以。无缝漫游‌是指在无线网络中,无线终端......
  • 深入解析:策略路由与路由策略的差异化应用
    对于企业网络搭建与优化过程中,策略路由与路由策略分别承担着不同的重要作用,对于实现高效、可靠的流量管理至关重要。本文将从应用层的角度出发,对两者进行解析,明确其差异化特点,并探讨在实际应用中的最佳实践。一、路由策略:全局视角下的网络资源优化路由策略,作为一种全局性的......
  • 5、RabbitMQ队列之路由【RabbitMQ官方教程】
    在前面的教程中,我们构建了一个简单的日志系统。我们能够向许多接收器广播日志消息。在本教程中,我们将为其添加一个功能——我们将使仅订阅消息的一个子集成为可能。例如,我们将能够仅将关键错误消息定向到日志文件(以节省磁盘空间),同时仍然能够在控制台上打印所有日志消息。 绑定......
  • Linux路由配置
    Linux路由配置文章目录Linux路由配置1.route命令介绍1.1嵌入式设备上执行route命令结果1.2网络/主机地址计算2.命令使用2.1添加主机路由2.2添加网络路由2.3添加默认路由2.4删除主机路由2.5删除网络路由2.6删除默认路由2.7添加屏蔽路由2.8删除屏蔽路由2.9......
  • 如何利用无线路由器实现水泵房远程监测管理
    水泵站广泛部署应用在工农业用水、防洪、排涝和抗旱减灾等方面,如果水泵站发生异常,往往会对生产生活造成诸多损失,甚至引发安全事故。因此,建立一套高效、可靠的泵站远程监测管理系统至关重要。  方案背景 目前,我国大部分水泵房的数字化、信息化、智能化水平仍然较低,需要依托......
  • 【Elasticsearch】数据分布与路由机制
    ......
  • 交换机与路由器的区别
    交换机和路由器是网络中的两种关键设备,它们各自承担不同的功能,主要区别体现在以下几个方面:一、工作层次与功能交换机:工作层次:交换机主要工作在OSI模型的第二层,即数据链路层。功能:交换机用于在局域网(LAN)内的不同设备之间进行数据的转发和交换。它通过学习和转发数据帧的方式......