简介
- OSPF(开放式最短路由优先协议)
- IGP
- LS 发送的是LSA(链路状态通告Link Status Advertisement),包含的是拓扑信息。加入LSDB,用SPF计算出Routing Table
- VLSM/CIDR
- 四层协议 三层报头中的上层协议号为89
- 7中邻接关系
- 7中LSA
- 5中报文
- 3张表
- 邻居表(邻接数据库)
- 拓扑表(LSDB)
- 路由表(转发数据库)
链路状态协议特点
- 链路状态路由协议比距离矢量路由协议更加了解网络拓扑
- 每台路由器都会保存同一区域的拓扑
- 不会产生环路
OSPF区域
- 两个层次
- 骨干区域(area 0),或者叫传输区域
- 非骨干区域
- 减少路由表表项
- OSPF中没有自动汇总的概念,因为OSPF中传递的是LSA,而不是路由条目。
- 不能进行域内汇总,只能进行域间汇总和域外汇总。
- 将拓扑变更的影响限制在一个区域内
- 特定LSA泛洪停止在域边界上,不同类型的LSA有不同的传递性
名词
骨干路由
backbone routers
ABR
area border router
区域边界路由器
将其他区域连接到area 0
OSPF邻接关系
在OSFP中,对邻居关系(Neighbor)和邻接关系(Adjacency)严格区分。
邻居关系是指三层直连,邻接是指7层FULL邻接关系。
- P2P WAN
- 两端邻居成为FULL邻接关系
- LAN
- 邻居与DR和BDR形成FULL邻接关系
- DROTHER之间形成two-way state
- 只有当邻接关系建立起来了,才能交换LSA,并同步LSDB。
- LSA是泛洪的。
OSPF算法计算
也叫Dijkstra算法
- 同一个区域内的所有路由器拥有相同的LSDB
- 度量值称为cost,将每段路径用10^8/BW(bit/s)计算,然后求和,得到整条路径的cost
LSA
OSPF和RIP一样,既支持周期发送,也支持触发发送。
序列号
最小值
0x8000 0001
最大值
0x7FFF FFFF
序列号使用的最右边的棒棒糖型空间
OSPF报文类型
- HELLO
- Hello timer:10s或者30s,取决于接口类型。
- Dead timer是发送周期的4倍,修改hello时间,dead时间将自动变为4倍,反过来,修改了dead不会改变hello。
- DBD(Database Description)
- LSDB的摘要信息,防止不必要的LSA交换
- LSR(Link-State Request)
- 请求自己没有的LSA
- LSU(Link-State Update)
- 包含LSR请求的LSA信息
- LSAck(Link-State Acknowledgment)
- 确认收到了LSU中的LSA,有多少条LSA,就有多少LSAck进行确认
OSPF的确认机制
- 显示确认 使用LSU确认LSR使用LSAck确认LSU
- 隐式确认(基于序列号的确认机制) 不使用额外的报文确认,而是用相同序列的同类型报文进行确认。如DBD
OSPF包封装
Router ID的选择:
- 手工配置
- 所有状态为UP UP的环回口中选举最大的IP地址
- 所有状态为UP UP的物理接口最大的IP地址
Router ID和Area ID都可以用点分十进制表示。
HELLO报文
- Router ID
- Hello and dead intervals *
- Neighbors 包含邻居的RID
- Area ID *
- Router priority 在P2P接口中,这个字段是没有意义的
- DR IP address
- BDR IP address
- Authentication password *
- Stub area flag *
*表示建立邻接关系必须协调成功的条目
邻接关系建立过程的7种状态
- Down 初始状态,接口被宣告进OSPF,没有发送任何报文
- Init 通过接口发送一份Hello
- Two-Way 通过接口收到了一份Neighbor字段包含自身RID的Hello
- Exstart 交互3个不带LSA报头的DBD,选择Master/Slave
- Exchange 由Master发起的带有LSA报头的DBD信息交互
- Loading 交互LSR LSU以及LSAck实现LSDB的同步
- Full 一旦LSDB同步,邻接关系到达Full
Two-Way状态并不是同时到达的。到达了Two-Way State之后,MA网段将进行DR选举。
在进入Exstart State之后,将交换3个DBD,以确立主从关系(Master/Slave),由RID更大的作为Master。