目录
一、距离矢量和链路状态的区别
二、OSPF介绍
三、OSPF报文类型
四、OSPF配置
一、距离矢量和链路状态的区别
距离矢量:
只知道自己距离目标的距离和下一跳是谁,不清楚具体去往目标网络的路径如何,依照传闻的路由更新。
eg:你要去往某地,你的朋友告诉你从哪里坐车,大概有多远。
链路状态:
清楚的知道去往目标的每一条路径。拥有自己的链路状态数据库,通过SPF算法算出最佳路径,而在传递过程中通告的是LSA,每台路由器都有相同的链路状态数据库并相互同步。
eg:通过百度地图查找去往某地的所有路径,选择最优路径。
总结:
运行链路状态路由协议的路由器比运行距离矢量路由协议的路由器识别更多的网络信息 每一台路由器拥有整个拓扑结构 能够根据准确的网络拓扑信息独立地作出决策
二、OSPF介绍
1、链路状态数据库
邻居表
也被称为邻接数据库
包含邻居列表
拓扑表
通常被称为链路状态数据库(LSDB)
包含该区域或网络中的所有路由器及其连接链路
区域内的所有路由器有相同的LSDB
路由表
通常称为转发数据库(forwarding database)
包含到目的地的最佳路径
2、网络结构
链路状态路由协议通过OSPF协议执行具有层次网络结构。
两层的层次结构由以下部分组成:
中转区域 (骨干区域 0)
常规区域 (非骨干区域)
3、OSPF 区域特点
最大限度地减少路由表条目
本地区域内拓扑变化的影响
在区域边界阻止LSA的泛洪
需要分层网络设计
路由器A和B都是骨干路由器
骨干路由器属于区域0
路由器C,D和E被称为区域边界路由器
ABR连接着骨干区域和非骨干区域
4、OSPF邻接建立
在点对点WAN链路中
建立全互联的邻接关系(就是两两相互建立邻接)
LAN链路中
只会与DR和BDR建立全互联的邻接关系
DRother保持two-way状态
一旦建立邻接关系, 通过交互LSA开始同步LSDB
LSA将以可靠的方式在区域(或网络)中泛洪
DR、BDR的选举规则
首先比优先级,默认为1,范围0-255,如果优先级相同则比RID,选大的 。RID手工配置选最大 ,如果没有手工配置则优先选择ip地址大的环回口,没有环回口则选物理ip地址大的。
OSPF的算法
路由器通过将Dijkstra的SPF算法应用于链路状态数据库,找到目的地的最佳路径,如下所示:
同一区域的路由器拥有相同的 LSDB
在区域中的每个路由器将自己作为根
到特定目的地的链接总成本最低的路径优选
最佳路由放入转发数据库(路由表)中。
三、OSPF报文类型
5种类型的数据包
OSPF报文头部格式
OSPF分组封装在IP分组的有效负载中,不使用TCP,利用LSAck来实现自己的确认机制。
IP报头中,协议标示符89表示OSPF分组。
OSPF状态机
*此处需要注意OSPF邻居关系成功建立的几个条件:
- RID不同
- Hello、Dead时间
- Area id 相同
- Authentication
- Stub-area
- 在MA中mask需相同
- OSPF路由器接口up,发送Hello包,(NBMA模式时将进入Attempt状态)。
- OSPF路由器接口收到Hello包,进入Init状态;并将该Hello包的发送者的Router ID,添加到Hello包(自己将要从该接口发送出去的Hello包)的邻居列表中。
- OSPF路由器接口收到邻居列表中含有自己Router ID的Hello包,进入Two-way状态,形成OSPF邻居关系,并把该路由器的Router ID添加到自己的OSPF邻居表中。
- 在进入Two-way状态后,广播、非广播网络类型的链路,在DR选举等待时间内进行DR选举。点对点没有这个过程。
- 在DR选举完成或跳过DR选举后,建立OSPF邻接关系,进入exstart(准启动)状态;并选举DBD交换主从路由器,以及由主路由器定义DBD序列号,Router ID大的为主路由器。目的是为了解决DBD自身的可靠性。
- 主从路由器选举完成后,进入Exchange(交换)状态,交换DBD信息。
- DBD交换完成后,进入Loading状态,对链路状态数据库和收到的DBD的LSA头部进行比较,发现自己数据库中没有的LSA就发送LSR,向邻居请求该LSA;邻居收到LSR后,回应LSU;收到邻居发来的LSU,存储这些LSA到自己的链路状态数据库,并发送LSAck确认。
- LSA交换完成后,进入FULL状态,所有形成邻居的OSPF路由器都拥有相同链路状态数据库。
- 定期发送Hello包,维护邻居关系。
四、OSPF配置
基本配置
Router(config)#
router ospf process-id [vrf vpn-name]
//开启一个或多个OSPF进程
Router(config-router)#
network ip-address wildcard-mask area area-id
//定义哪些接口将参与OSPF
Router(config-if)#
ip ospf process-id area area-id [secondaries none]
//可选方式:在接口下定义
OSPF单区域配置
OSPF多区域
OSPF Router ID
在OSPF网络内通过OSPF Router ID标识路由器。
LSDBs 使用OSPF的 Router ID 区分不同的路由器。
使用Loopback接口或手动配置Router-id保持Router-ID稳定。
Router ID选举原则:
手动设置的Router ID
活跃的Loopback接口中IP地址较大的
活跃的物理接口中IP地址较大的
Router(config-router)#
router-id ip-address
//可以使用IP地址格式(点分十进制)中的任意一个
Router#
clear ip ospf process
//如果在已经处于活动状态的OSPF进程上使用此命令, 必须重启路由器或者重启OSPF进程才能生效
验证OSPF操作
Router# show ip route ospf [process-id ] //显示路由器学到的所有OSPF路由
Router# show ip ospf interface [type number] //显示OSPF的router ID、area ID和邻接关系
Router# show ip ospf neighbor [type number] [neighbor-id] [detail] //显示OSPF邻居信息,包括广播网络中的DR和BDR信息
Router# show ip protocols //验证配置的IP路由协议进程,参数和统计信息
Router# show ip ospf interface brief //显示接口在OSPF下的状态
Router# show ip ospf //显示OSPF的router ID、计时器和状态