链路状态路由算法(LS算法)

工作原理

  • 每个路由器将自己的链路状态信息洪泛到网络上的所有路由器。tips:(每个路由器都洪泛会给网络带来负担)
  • 每个路由器最终会知道整个网络的拓扑结构(LSDB)。
  • 每个路由器使用Dijkstra最短路径算法计算本路由器到其他路由器的最短路径,更新路由表。
  • 路由器的链路状态发生变化时会继续洪泛自身的链路状态信息到其他路由器。
    链路与链路状态
    链路的本质上是路由器上的一个接口
    链路状态是有关各条链路的状态信息

    链路状态数据包洪泛
    路由器一旦接收到来自相邻路由器的LSP,立即将该LSP从除接收该LSP的接口以外的所有接口发出

Dijkstra算法(直接见图)

链路状态类型 ospf 链路状态定义_IP

Dijkstra算法分析
算法复杂度:n个节点

  • 每次迭代需要检查不在N的节点
  • 最差的复杂度:n*(n - 1)/2次比较:O(n^2)
  • 平均的复杂度:O(nlogn)
    路由振荡
  • 假设,link cost = amount of carried traffic(链路代价与流量和有关),且链路代价的具有方向性,LS算法可能会让分组一会逆时针转发,一会顺时针转发,形成振荡。
  • 本质:同时执行最短路径算法导致路由振荡,可以采用随机数解决同时问题
OSPF协议

概述

  • Open Shortest Path First,开放式最短路径优先路由协议
  • 链路状态路由算法,无路由自环
  • 用于AS内部,属于IGP
  • 使用区域划分,适用于大规模网络
  • 支持VLSM和CIDR
  • 使用组播方式发送协议报文
  • 支持验证
  • OSPF是基于IP的,协议号为89
  • OSPF是典型的停止等待协议,自身实现了可靠传输

路由器标识(Router ID)

  • 用于唯一确定OSPF路由器
  • 一个32位的无符号整数,整个自治系统内唯一
  • 若不手动配置,一般取该路由器的所有接口的IP地址的最大值(loopback地址优先)

OSPF的链路代价
一条OSPF链路的代价定义为:10^8/BandWidth
一条OSPF路由的代价为其经过的所有链路代价的总和

OSPF规定的网络类型

网络类型

举例

广播

以太网

非广播多路访问NBMA

帧中继、X.25

点到点

PPP,HDLC

点到多点

多个点到点链路的集合

链路状态类型 ospf 链路状态定义_OSPF_02


全连通网络的处理

选取DR和BDRDR:指定路由器 (村长)

BDR:备份指定路由器 (副村长)

DR负责通告路由

BDR备份

选取规则 选取优先级最大的
选取router id 最大的

选取方式 投票制和终身制

链路状态类型 ospf 链路状态定义_链路状态类型 ospf_03


OSPF的数据包格式

ODPF包类型

描述

Hello (不需要确认)

用户邻居路由器之间建立和维护邻接关系

数据库描述包DBD

描述每台OSPF路由器的链路状态数据库的内容

链路状态请求包LSR

请求链路状态数据库的部分内容

链路状态更新包LSU

传送链路状态数据通告LSA给邻居路由器

链路状态确认包LSAck(不需要确认)

确认邻居发过来的LSA已经收到

OSPF划分区域

目的:减少洪泛的范围

链路状态类型 ospf 链路状态定义_链路状态类型 ospf_04


工作方式:

  • 同一个区域内部路由器之间使用链路状态算法,洪泛的范围限于一个区域内部
  • 不同区域之间的路由通过ABR(区域边界路由器)负责通告(距离矢量算法)
  • 必须要有骨干区域(area 0),且所有区域应当和骨干区域物理上直连,保证不会出现路由环路问题
  • 区域划分可以和IP地址结合在ABR上通告汇总的路由。