链路状态路由算法(LS算法)
工作原理
- 每个路由器
将自己的链路状态信息洪泛
到网络上的所有路由器
。tips:(每个路由器都洪泛会给网络带来负担) - 每个路由器最终会知道
整个网络的拓扑结构
(LSDB)。 - 每个路由器
使用Dijkstra最短路径算法计算本路由器到其他路由器的最短路径
,更新路由表。 - 路由器的
链路状态发生变化时会继续洪泛自身的链路状态信息
到其他路由器。
链路与链路状态
链路
的本质上是路由器上的一个接口
链路状态
是有关各条链路的状态信息
链路状态数据包洪泛
路由器一旦接收到来自相邻路由器的LSP,立即
将该LSP从除接收该LSP的接口以外的所有接口发出
Dijkstra算法(直接见图)
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 |
点到多点 | 多个点到点链路的集合 |
全连通网络的处理
选取DR和BDR
DR:指定路由器 (村长)
BDR:备份指定路由器 (副村长)
DR负责通告路由
BDR备份
选取规则
选取优先级最大的
选取router id 最大的
选取方式
投票制和终身制
OSPF的数据包格式
ODPF包类型 | 描述 |
---|---|
Hello (不需要确认) | 用户邻居路由器之间建立和维护邻接关系 |
数据库描述包DBD | 描述每台OSPF路由器的链路状态数据库的内容 |
链路状态请求包LSR | 请求链路状态数据库的部分内容 |
链路状态更新包LSU | 传送链路状态数据通告LSA给邻居路由器 |
链路状态确认包LSAck(不需要确认) | 确认邻居发过来的LSA已经收到 |
OSPF划分区域
目的
:减少洪泛的范围
工作方式:
- 同一个区域内部路由器之间使用链路状态算法,
洪泛的范围限于一个区域内部
。 - 不同区域之间的路由通过
ABR
(区域边界路由器)负责通告(距离矢量算法) - 必须要有
骨干区域(area 0),且所有区域应当和骨干区域物理上直连,保证不会出现路由环路问题
。 - 区域划分可以和IP地址结合在ABR上通告汇总的路由。