Open  Shortest  Path  First  Protocol
开放式最短路径优先协议—— OSPF
一、距离矢量路由协议与链路状态路由协议对比
1. 距离矢量路由协议
处理的对象:路由
路由的获得:“听说的”
p_w_picpath
定期发送路由更新(所有路由信息)
衡量路径的好坏,主要依据“跳数”
适用“中小网络环境”
2. 链路状态路由协议
处理的对象:链路状态
路由的获得:自己计算得到
网络状态变化时,才发送更新信息,且只发送变化的网络信息
使用“开销”衡量路径
适用“大中型网络环境”
二、术语
1.LSA Link-State Advertisement ):链路状态通知
2.LSDB Link-State Database ):链路状态数据库,存放从邻居处收到的链路状态信息
3.LSU Link-State Update ):链路状态更新信息
4.LSR Link-State Request ):链路状态请求
5.AS :自治系统(管理员管理的区域)
6.area :区域(比自治域小)
p_w_picpath
7.neighbor :邻居
8.adjacency :邻接
三、 OSPF 的三张表
1. 邻居表( neighbor table ):存放邻居信息
// 邻居关系形成的条件:
物理直连
HELLO 协商通过
(协商包括: HELLO 包发送时间;死亡时间;区域 ID ;验证密码;末节区域标识)
2. 拓扑表 / 链路状态数据库( topology table/LSDB
存放从邻居处收到的链路状态信息
3. 路由表( router table
存放到达目的网络的最好路径
四、 SPF :最短路径优先算法
每台路由器以“自己”为树根,以“到达各目的网络的路径”为枝干,建立最短路径优先树,把“开销最小”的枝干作为到达网络的最好路径,放入路由表。
p_w_picpath 
p_w_picpath
 
五、链路状态信息 LSA 的处理
p_w_picpath
LSA 好坏的界定: LSA 序列号(十六进制数,范围: 0X80000001 0X7fffffff OSPF 发送 LSA 之前,会在源 LSA 序列号基础上加 1 ,并有加 1 0 特性,当 LSA 变为 0Xffffffff 时,加 1 变为 0X00000000 ,直到 0X7fffffff
// 特例:当序列号回到初始值时, OSPF 1 小时内,不发送 LSA ,不过这种情况发生概率较低
 
六、 OSPF 包类型
1.HELLO 包:建立和维护邻居关系
HELLO 包的封装:
路由器 ID :代表路由器身份的 IP 地址(默认没设置 IP 时,为所有端口 IP 最大值)
HELLO 发送时间:点对点链路下 10S
死亡时间:等同 EIGRP 保持时间,为发送时间的 4 倍, 10 × 4=40S
邻居 IP
区域 ID
优先级
DR IP 地址
BDR IP 地址
验证密码
末节区域标识
p_w_picpath
2. 数据库描述包( Database Description
封装链路状态信息
3. 链路状态请求包( Link-State Request
请求链路状态信息
4. 链路状态更新包( Link-State Update
发送链路状态更新
5. 确认包:发送确认信息
七、 OSPF 基本配置(单区域)
1. 启用协议
config #router OSPF 进程号
// 进程号: 是一个数值 范围: 1-65535 具有本地意义:在本地区分多个 OSPF 区域
2. 指定网络
config-router #network 网络号 / 子网号 / 具体 IP  匹配码 area 区域号
// 匹配码:格式 X.X.X.X 十进制
通常由 0 255 组成: 0 代表“必须匹配”, 255 代表“可以忽略”
1 192.168.10.1 匹配码: 0.0.0.255 代表 :192.168.10.0 网段
2 192.168.10.10 匹配码: 0.0.0.8 需要把 IP 和匹配码不为 0 的值换算成二进制数
10
00001010     8 00001000
二进制上,匹配码上 0 对应的 IP 值必须匹配, 1 对应的 IP 值可以忽略
也就是说值为: 0000?010     00001010    10/00000010    2
根据计算得到的结果为 2 个具体的 IP 地址:
192.168.10.10 
192.168.10.2
 
补充:
查看路由协议信息: show ip protocol
调试 OSPF 路由间邻接信息: debug ip ospf adj (链路状态信息)
调试 OSPF 路由间 hello 信息: debug ip ospf hello
八、 OSPF 网络类型
1. 点对点网络( point -to-point ): DDN, 帧中继的点对点子接口
特性:
不需要选举 DR BDR
使用组播发送通信(组播地址: 224.0.0.5
该类型网络,设备会自动感知
2. 广播网络( multiaccess broadcast network ):以太网
特性:
选举 DR BDR
//DR :指定路由器(接受所有路由器的链路状态信息,把收到的所有链路状态信息,发送给其他路由器)
//BDR :备份指定路由器(当 DR 正常时, BDR 会接收所有路由器的链路状态信息,但不把接受的信息发给其他路由器)当 DR 故障时, BDR 接替 DR 工作
// DR BDR 叫做 DRother
选举 DR BDR 所要参照的参数
1>HELLO 包中的优先级:范围 0 255  默认值: 1
值越大越优先,优先级为 0 的路由器,不会成为 DR BDR
配置优先级:( config-if #ip ospf priority
// 同一台路由器在不同广播环境下,可充当不同角色
下图中:路由器 A 既是区域 1 和区域 3 DR ,也是区域 2 DRother
p_w_picpath
2> 路由器 ID router ID ):代表路由器身份的 IP 地址
默认:活动物理端口上的最大 IP 作为路由器的 IP
建议:把环回口 IP 作为路由器 ID
配置路由器 ID:
config #interface lo0
config-if #ip  address  ip 地址 子网掩码
config-router #router-id  IP 地址
注意:路由器 ID 是在 OSPF 进程启动时选举,为使新配置生效,需要重启 OSPF 进程
#clear  ip  ospf  process
DR BDR 不抢占
DR 所在组的组播地址: 224.0.0.6 BDR 在同组中)
DRother 所在组的组播地址: 224.0.0.5
配置网络类型:广播网络
config-if #ip  ospf  network  broadcast
3. 点对多点广播网络( point-to-multipoint
配置:( config-if #ip  ospf  network  point-to-multipoint
4. 点对多点非广播网络( point-to-multipoint nonbroadcast
特性:
Cisco 私有属性
邻居关系需要手动配置
配置:指点网络类型
config-if #ip  ospf  network  point-to-multipoint  non-boradcast
静态配置邻居关系
config-router #neighbor  邻居 IP  priority  优先级
 
九、“邻居”与“邻接”的概念
1. 邻居:广播网络下 DRother 路由器之间的关系
2. 邻接:路由器与 DR BDR 之间的关系(发送链路状态信息)
// 在点对点环境下,邻居 = 邻接。下图中,区域 2 内各路由器之间的关系为“邻居”,区域 1 与区域 2 的关系为“邻接”
p_w_picpath
结论: 点对点环境下,邻居 = 邻接
路由器彼此建立邻居关系,未必相互发送链路状态信息。
路由器彼此建立邻接关系,一定相互发送链路状态信息。
 
十、 OSPF 调试命令
1.show ip route
2.show ip protocols
3.show ip ospf interface 端口     // 查看端口的 ospf 配置
该命令的执行结果:
OSPF 的进程号
路由器 ID
网络类型( network type
链路开销( cast 1
本台路由器的角色
优先级( priority
DR BDR IP 地址
Hello 包发送时间和死亡时间
邻居的个数,邻接的个数
邻接信息
区域号( area 0
4.show ip ospf     // 查看 ospf 配置
可查看进程号,区域号
5.show ip ospf neighbor    // 查看邻居信息
6.show ip ospf database    // 查看链路状态数据库
可查看:链路状态信息的序列号
 
十一、 OSPF 状态
1.down state (关闭状态) : 彼此没有收到对手 HELLO
2.init state (起始状态):一方收到另一方的 HELLO 包,并把对方信息加入邻居表
3.two-way state (双边状态):彼此收到对方的 HELLO 包,并把对方信息加入邻居表
// 如果两台路由器都是 DRother ,那么它们之间的最终状态就是“ two-way state
// 如果路由器中有一台是 DR BDR ,那么路由器将进入下一状态
p_w_picpath
4.exstart state (准启动状态):协商谁先发送链路状态信息
5.exchange state (交换状态):开始发送链路状态信息
p_w_picpath
6.loading state (加载状态):向邻居发送状态信息请求
7.full state (全状态):链路状态信息相互更新后,就处于该状态
p_w_picpath
注意: OSPF 路由器的最终状态为: two-way state full state
 
十二、 OSPF 区域
1. 单区域:所有路由器都在一个区域内
优点:连接配置简单
缺点:
大量 LSA 传输,占用过多带宽
增大正常数据传输延时
占用内存和 CPU 资源
路由表内路由条目比较多
备注:单区域的区域号为 0 (固定)
2. 多区域:解决单区域的缺点
设计原则
网络中必须存在骨干区域,最好只存在一个骨干区域
// 骨干区域:负责区域间通信
网络中可以存在多个非骨干区域
每个非骨干区域要与骨干区域物理直连
区域间的连接通过路由器来实现,不是通过链路实现
备注:骨干区域号为 0 ,非骨干区域号为非 0
多区域配置
p_w_picpath
Router A:
(config)#router ospf 100
(config-router)#network 192.168.10.0 0.0.0.255 area 1
(config-router)#network 202.110.100.1 0.0.0.0 area 1
Router B:
(config)#router ospf 100
(config-router)#network 202.110.100.2 0.0.0.0 area 1
(config-router)#network 202.110.101.1 0.0.0.0 area 0
Router C:
(config)#router ospf 100
(config-router)#network 202.110.101.2 0.0.0.0 area 0
(config-router)#network 192.168.20.0 0.0.0.255 area 0
 
十三、多区域下路由器的角色
1. 内部路由器( internal routers )所有端口都处于同一区域的路由器
2. 骨干路由器( backbone routers )一个或几个端口在骨干区域内的路由器
3. 边界路由器( ABR )端口处在多个区域内的路由器
4. 自治系统边界路由器( ASBR )连接 OSPF 环境与外部环境的路由器
p_w_picpath
 
十四、 LSA 的类型
1.LSA1 :用于同一区域内,路由器间链路状态信息的发送
2.LSA2 :同一区域内,由 DR 发送,声明链路状态信息
3.LSA3 :区域间的汇总路由
4.LSA4 :声明 ASBR 的存在(指明向外部发数据找谁)
5.LSA5 :通告外部路由(通知内部路由器外部路由有哪些)
p_w_picpath
 
十五、 OSPF 路由类型
1. 区域内路由,代码为 0
2. 区域间路由,代码为 0 IA
3. 外部路由,代码为 0 E1
// 外部路由的度量 = 本路由器到达 ASBR 的路由度量 +ASBR 到外部环境路由的度量
4. 外部路由,代码为 0 E2
// 外部路由的度量 =ABSR 到外部环境路由的度量,默认外部路由为 0 E2
p_w_picpath
 
十六、 OSPF 开销
默认:开销 = / 物理带宽    
//10M=10     100M=1     1000M=1
配置开销:( config-if #ip ospf cost 开销( 1 65535
 
十七、 OSPF 的汇总
1.OSPF 区域间汇总
注意:区域间汇总只能在边界路由器( ABR )上配置
配置:
config #router ospf 进程号
config-router #area 区域号 range 汇总 IP 汇总掩码
//OSPF 的自动汇总是关闭
2. 外部路由汇总
注意:外部路由的汇总只能配置在 ASBR
配置:
config #router ospf 进程号
config-router #summary-address 汇总 IP 汇总掩码
// OSPF 把外部 RIP 路由。灌入到 OSPF 环境
ASBR 上配置:
config #router rip
config-router #network ?
config #router ospf 进程号
config-router #network ?
config-router #redistribute rip subnets
p_w_picpath
 
十八、 OSPF 区域类型
p_w_picpath
1. 骨干区域( backbone area ):区域号为 0 的区域,主要实现区域间通信
2. 存根区域( stub area / 末节区域:
功能:不接受外部路由, OSPF 区域间路由正常接收
设计原则:
该区域不能有 ASBR 存在
该区域必须有 ABR ,最好只有一个 ABR
该区域内不能有“虚链路”穿过
机制:该区域的 ABR 正常收到外部路由后,将阻止外部路由发向存根区域,而是把一条指向自己的默认路由发向存根区域
具体配置
在存根区域的所有路由器上(包括 ABR )上配置
config-router #area 区域号 stub
p_w_picpath
3. 完全存根区域( totally stubty area
功能:不接受外部路由器和区域间路由
特性:
Cisco 私有属性
设计原则:等同存根区域