数学抽象
抽象成有权图的形式。这个权重可以是延迟,带宽,实际流量。点是路由器,边是链路。
尝试去对每个路由器,找到到每个点的最短路径(最小开销路径),并根这个得到转发的路由表
信息的获取
- 全局的:所有路由器都有完整的图的信息。可以获得最优解 → 链路状态算法
- 分布式的:路由器只能直接知道相邻的边的信息。需要反复交换信息。
静态&动态
路由变化很慢的时候,可以人工设置。动态则是目前互联网采用的
链路状态选路算法 LS
所有节点都要知道网络拓扑结构:通过把自己知道的信息广播出去,传递到每个节点上,这样就知道了完整的图的信息。通过 Dijkstra 算法 得到到每个点的最短路径,再根据这个计算路由表
可能产生震荡,复杂性较高
距离向量选路算法 DV
bellman-ford方程
定义 是从 x 到 y 的具有最低开销路径的开销值
有转移方程:
这样,每个节点仅仅将自己所知道的最短路径距离信息告诉邻居
路由器只知道自己直接相连的邻居的距离。当结点从它的任何一个邻居收到一个新的距离向量估值的时候,就使用 BF 方程更新自己的距离向量估值。网络结构不变的情况下,经过一段时间就会稳定,所有路由器的路由表都收敛为最短路径。
好消息传的快,坏消息传得慢:计数到无穷问题
1. 报文复杂性
- LS 算法:
- 在网络中有 ( n ) 个节点、( E ) 条链路时,每个节点需要向全网广播链路状态信息(LSA)。
- 报文复杂度为 ( O(nE) ),因为每个链路状态变化需被所有节点感知。
- 例如:若网络规模增大(如节点数或链路数增加),报文数量会显著上升。
- DV 算法:
- 仅与直接邻居交换路由信息(距离向量),报文仅在相邻节点间传递。
- 报文复杂度较低,但收敛时间不固定,可能因网络拓扑变化而波动。
核心区别: LS 的报文复杂度与网络规模正相关,而 DV 的报文开销更小,但信息更新可能滞后。
2. 健壮性
- LS 算法:
- 优点:
- 节点独立计算最短路径(如 Dijkstra 算法),仅依赖本地链路状态数据库。
- 若某节点广播错误链路开销,影响范围有限(其他节点可基于全局信息修正)。
- 缺点:
- 错误链路信息可能导致局部路径计算错误,但不会全网扩散。
- 优点:
- DV 算法:
- 缺点:
- 节点间传递的是“距离向量”(到其他节点的路径开销),错误信息会通过邻居逐步扩散到全网。
- 例如:若某节点误报路径开销,可能导致全网路由表错误(如“计数到无限”问题)。
- 优点:
- 邻居间直接交换信息,对局部故障有一定容错性(如 RIP 协议)。
- 缺点:
核心区别: LS 的健壮性更强,因错误影响局部化;DV 的健壮性较差,错误可能全网传播。
3. 收敛速度
- LS 算法:
- 收敛时间为 ( O(n^2) )(Dijkstra 算法复杂度),在网络稳定时快速收敛。
- 潜在问题:频繁链路状态变化可能导致路由振荡(如负载敏感场景)。
- DV 算法:
- 收敛时间不固定,依赖邻居间迭代更新。
- 典型问题:
- 循环路由:因路径信息传播延迟,可能出现路由环路。
- 计数到无限:错误路径开销被反复放大,导致路由表无法收敛。
核心区别: LS 收敛速度更快且稳定(适合动态网络),而 DV 可能因环路或错误传播导致收敛延迟。