Open Shortest Path First Protocol
开放式最短路径优先协议——
OSPF
一、距离矢量路由协议与链路状态路由协议对比
1.
距离矢量路由协议
①
处理的对象:路由
②
路由的获得:“听说的”
③
定期发送路由更新(所有路由信息)
④
衡量路径的好坏,主要依据“跳数”
⑤
适用“中小网络环境”
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
:区域(比自治域小)
7.neighbor
:邻居
8.adjacency
:邻接
三、
OSPF
的三张表
1.
邻居表(
neighbor table
):存放邻居信息
//
邻居关系形成的条件:
①
物理直连
②
HELLO
协商通过
(协商包括:
HELLO
包发送时间;死亡时间;区域
ID
;验证密码;末节区域标识)
2.
拓扑表
/
链路状态数据库(
topology table/LSDB
)
存放从邻居处收到的链路状态信息
3.
路由表(
router table
)
存放到达目的网络的最好路径
四、
SPF
:最短路径优先算法
每台路由器以“自己”为树根,以“到达各目的网络的路径”为枝干,建立最短路径优先树,把“开销最小”的枝干作为到达网络的最好路径,放入路由表。
五、链路状态信息
LSA
的处理
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
地址
⑨
验证密码
⑩
末节区域标识
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
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
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
的关系为“邻接”
结论:
①
点对点环境下,邻居
=
邻接
②
路由器彼此建立邻居关系,未必相互发送链路状态信息。
③
路由器彼此建立邻接关系,一定相互发送链路状态信息。
十、
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
,那么路由器将进入下一状态
4.exstart state
(准启动状态):协商谁先发送链路状态信息
5.exchange state
(交换状态):开始发送链路状态信息
6.loading state
(加载状态):向邻居发送状态信息请求
7.full state
(全状态):链路状态信息相互更新后,就处于该状态
注意:
OSPF
路由器的最终状态为:
two-way state
或
full state
十二、
OSPF
区域
1.
单区域:所有路由器都在一个区域内
优点:连接配置简单
缺点:
①
大量
LSA
传输,占用过多带宽
②
增大正常数据传输延时
③
占用内存和
CPU
资源
④
路由表内路由条目比较多
备注:单区域的区域号为
0
(固定)
2.
多区域:解决单区域的缺点
⑴
设计原则
①
网络中必须存在骨干区域,最好只存在一个骨干区域
//
骨干区域:负责区域间通信
②
网络中可以存在多个非骨干区域
③
每个非骨干区域要与骨干区域物理直连
④
区域间的连接通过路由器来实现,不是通过链路实现
备注:骨干区域号为
0
,非骨干区域号为非
0
⑵
多区域配置
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
环境与外部环境的路由器
十四、
LSA
的类型
1.LSA1
:用于同一区域内,路由器间链路状态信息的发送
2.LSA2
:同一区域内,由
DR
发送,声明链路状态信息
3.LSA3
:区域间的汇总路由
4.LSA4
:声明
ASBR
的存在(指明向外部发数据找谁)
5.LSA5
:通告外部路由(通知内部路由器外部路由有哪些)
十五、
OSPF
路由类型
1.
区域内路由,代码为
0
2.
区域间路由,代码为
0 IA
3.
外部路由,代码为
0 E1
//
外部路由的度量
=
本路由器到达
ASBR
的路由度量
+ASBR
到外部环境路由的度量
4.
外部路由,代码为
0 E2
//
外部路由的度量
=ABSR
到外部环境路由的度量,默认外部路由为
0 E2
十六、
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
十八、
OSPF
区域类型
1.
骨干区域(
backbone area
):区域号为
0
的区域,主要实现区域间通信
2.
存根区域(
stub area
)
/
末节区域: