OSPF 协议概述:(open shortest path first - 最短路径优先)
OSPF 在不同的路由器之间, 通过互相传递各自的路由条目, 以
保证全网的所有的设备, 具备相同的路由信息.
运行 OSPF 的路由器, 会以组播的方式周期性的发送 OSPF Hello 报文,
用于 OSPF 邻居关系的建立.
- 周期时间 : 10s
- 组播地址 : 224.0.0.5 -> 表示的是所有的 OSPF 路由器.
- OSPF 属于 OSI 模型第 3 层 ;
- 在 IP 头部中使用的协议号 是: 89
网络类型
- broadcast
- NBMA
- p2p
- p2mp
OSPF 工作过程:
1, 建立邻居表 : 考虑邻居的建立过程以及影响因素
2, 同步数据库 : 考虑数据库同步的过程以及稳定性
3, 计算路由表 : 每一个路由器都会基于 "自己的" 数据库信息,
独立的进行路由的计算.(路由器使用的 SPF)
OSPF 的报文类型:
1,hello -- 用于 OSPF 邻居的建立, 维护 以及 拆除
2,DBD(DD) -- database description , 数据库描述报文
3,LSR -- link state request , 链路状态 请求 报文 -- 数据库条目
4,LSU -- link state update , 链路状态 更新 报文 -- 数据库条目
5,LSAck -- link state ack , 链路状态 确认 报文
DBD 关键字段 描述:
I - init , 该标记如果为 1, 表示的是该 DBD 报文是 "第一个 DBD".
通过第一个 DBD 报文的比较, 用来确定 主从关系;
M - more , 该标记如果为 1, 表示后面还有更多的 DBD 报文, 也就是
该 DBD 报文不是最后一个 DBD , 那么此时不应该进行
后续的 Loading, 此时是在 exchange 阶段.
MS- master/slve, 该标记如果为 1, 表示该路由器是 主路由, 如果是 0
表示该路由器是从路由.
一旦主从关系确定以后, 那么从路由器发送的 DBD 报文的
序列号要跟着主路由器的 DBD 序列号进行变化, 从而实现
对 DBD 报文的 "隐式确认".
DBD Sequence , DBD 报文序列号. 每个路由器发送的第一个 DBD 的序列号
是随机的. 一旦确定主从关系, 那么从路由器的 DBD 的序列号
要随着主路由器的变化. 从而实现 DBD 报文的 "可靠" 传输.
OSPF 数据库 :
OSPF 的数据库是通过 "区域" 进行隔离和组织的.
不同 的区域, 数据库内容是不同的.
不同 的区域, 数据库的内容是完全隔离的.
不同 的区域中的链路的变化, 所造成的影响, 仅仅在一个区域内部
不会影响到其他区域.
划分区域以后, 每个区域中的路由器的数据库就会大大的减小, 从而
节省每个路由器的内存占用率.
同一个区域的路由器的数据库, 必须是完全一致的.
OSPF 数据库中包含的内容, 称之为 LSA (link-state advertisement)
即, 链路状态通告.
OSPF 就是通过各种类型的 LSA 将路由器计算出来的.
使用的 LSA 的类型不同, 那么计算出来的 路由的类型, 也就不同.
LSA 条目结构:
type : 表示的是 LSA 的类型 (1/2/3/4/5/7)
link-id: 表示的是 LSA 的名字 , 并且不同类型的 LSA 的名字的表示是不同.
advrouter: 表示的是 advertise router , 即通告路由器, 也就是产生该 LSA
的路由器的名字
age: 表示的 LSA 的存活时间, 以秒为单位, 并且正计时. 最大值为 3600s.
如果存活时间变成了 3600s, 表示该 LSA 不可用, 就必须在数据库中删除.
为了保证 LSA 不会因为时间的正常计时导致误删,
所以, 我们需要在 LSA 达到 最大 age 之前, 发送一个 "新的" LSA.
该新的 LSA, 每 1800s 产生并发送一次;
该新的 LSA, 只能由 LSA 的 advrouter 产生.
当其他路由器收到这个 "新的 LSA" 以后, 就会将自己的 age 计时器清 0,
重新计时.
[OSPF 数据库刷新机制: 1800s]
lenght: 表示的是该 LSA 的报文长度.
sequence: 序列号. 表示的是 LSA 的新旧程度. LSA 每变化一次, 序列号都会
加 1, 即序列号越大, 表示越新.
观察比较同一个区域中的所有的 LSA 的序列号, 不同的序列号
之间的差异, 应该是越小越好.
metric: 度量值, 表示的是该 LSA 的产生路由器到达该 LSA 表示的网段
的距离.
1 类 LSA - router LSA ,
任何一个 OSPF 路由器, 都会在任何一个自己连接的区域,
产生一个 router lsa . 相当于每一个路由器在每一个区域
自我介绍
2 类 LSA - network LSA
只能由 DR 产生
# 用来对同一个 "网段" 中的路由器, 宣告 DR 的管理范围的.
3 类 LSA - summary abr
只能由 ABR 产生
# 用来表示不同区域之间的路由信息的.
4 类 LSA - summary asbr
由与 ASBR 在同一个区域的 ABR 产生的.
# 用来在不同的区域之间传输 "ASBR 的 router-id".
5 类 LSA - exteral LSA
只能由 ASBR 来产生
# 用来表示 OSPF 的外部路由;
OSPF 邻居建立影响因素:(本质上是在分析 hello 中的参数)
1.router-id 不能相同.
2.area-id 必须相同.
3. 认证必须相同 (类型以及密码都得相同)
4. 子网掩码必须相同 (特殊情况下)
5.hello-timer 必须相同
6.dead-timer 必须相同
7. 特殊标记位, 必须相同 (option - 代表的是 OSPF 路由器的能力)
8. 端口优先级不能全为 0(特殊情况下)
--- 特殊情况下 ----
OSPF 网络中需要选举 DR/BDR 的情况下, 就是这里所谓的 "特殊情况" 下
DR: 指定路由器
BDR: 备份的指定路由器
OSPF 邻接关系的建立过程:
0,down - 该状态下, down 没有启用 OSPF 协议.
1,init - 初始化状态. 表示的是本地路由器接收到了对方发送
过来的 hello 报文;
2,two-way - 双向通信状态. 表示的是本地路由器接收到了对方发送
过来的 hello 报文, 并且在该报文中发现了自己的 RID;
如果该网络类型中需要选举 DR/BDR, 则在该阶段进行.
3,exstart - 交换初始化状态. 在该状态下, 双方路由器都会发送第一个
DBD 报文, 为的就是选举一个主 / 从关系, 主要目的就是为了
实现 "数据库同步" 的可靠性和高效性.
[DBD 报文中包含的是数据库中的条目的基本信息]
4,exchange - 交换状态. 在该阶段, 主从路由器会进行 DBD 报文的
互相传输, 最终实现两边数据库的比对工作.
5,loading - 加载状态. 在该状态下, 主从路由器就会通过 LSR 和 LSU
进行 "数据库条目" 的请求和发送, 并通过 LSAck 报文
对该过程进行确认.
6,full - 完全邻接. 即此时邻居路由器之间的数据库完全一致.
OSFP 的基本配置命令:
[R1]ospf 1 router-id 1.1.1.1
[该路由器的 ID]
[R1-ospf-1]area 0
[区域 0-- 主干区域]
[R1-ospf-1-0.0.0.0]network 192.168.1.0 0.0.0.255
[进行宣告网段]
[R1]display ospf peer brief
[查看 OSPF 的邻居表]
[R1]reset ospf process
[重启 OSPF 进程]
[R1-GigabitEthernet0/0/2]ospf dr-priority 10
[修改 OSPF 的优先级 -- 默认是 1]
[R1-GigabitEthernet0/0/2]ospf network-type p2p
[修改网络类型]
来源: http://www.bubuko.com/infodetail-2602909.html