《路由与交换机技术》学习笔记 Part.7——单区域OSPF
OSPF的特征
运行OSPF的路由器会首先通过启用了OSPF的接口来寻找同样运行了OSPF协议的路由器,并且判断双方是否应该相互交换链路状态信息。
运行OSPF协议的路由器会将自己用于的链路状态信息,通过启用了OSPF协议的接口发送给其他OSPF设备。同一个OSPF区域中的每台设备都会参与链路状态信息的创建、发送、接收和转发,直到这个区域中的所有OSPF设备获得了相同的链路信息为止。然而并不是所有启用了OSPF的直连设备都会相互交换链路状态信息,只有建立了完全邻接关系的OSPF设备之间才会相互交换链路状态信息。
OSPF不会周期性地发送链路状态更新消息,但OSPF会周期性的发送Hello 消息,这时OSPF协议建立和保持邻居状态的关键
邻居表
在启用了OSPF的接口上,路由器不会直接通过链路状态(LSA)发布自己已知的链路信息。它首先会发送hello信息。OSPF会通过一张表来记录自己各个接口所连接的OSPF设备,以及自己与该邻居设备之间的邻居状态等信息。
LSDB
同一个区域中的所有OSPF路由器会通过相互交换链路状态通告信息,最终实现链路状态数据库LSDB的同步。
路由表
无论是直连路由、静态路由还是RIP路由,最终都要被路由器添加到路由表中才能转发数据包。
OSPF消息的封装格式
- 版本:OSPF消息使用的OSPF版本
- 消息长度:这个字段的作用类似于IPv4头部的“数据长度”字段,其作用是标识这个OSPF数据包的长度
- 路由器ID:在启用了OSPF的路由器上,每台路由器都要使用一个唯一的标识符,作为这台路由器在OSPF
- 区域ID:为了解决基于链路状态信息进行网络拓扑计算以及路由计算的复杂度会随网络增大而急剧增大的问题,OSPF定义了区域的概念,实现了路由网络的层级化。当路由器通过自己启用了OSPF协议的接口而发送消息时,会在OSPF头部封装上该接口所在的OSPF区域。
- 校验和:接收方路由器会通过OSPF头部校验整个OSPF数据包,而不止校验OSPF头部。
- 认证类型:取值为0,不需要认证;取值为1,需要简单的密码验证;取值为2,需要进行MD5认证
- 认证:认证字段提供对方路由器认证的具体数据。
OSPF报文类型
OSPF报文分为5种类型:
8. 类型字段取值为1:Hello 消息;
9. 类型字段取值为2:数据库描述消息;
10. 类型字段取值为3:链路状态请求消息;
11. 类型字段取值为4:链路状态更新消息;
12. 类型字段取值为5:链路状态确认消息。
Hello消息的组成成分
OSPF需要借助Hello消息来建立和维护邻居状态
13. 接口掩码:该字段记录发送这个Hello消息的路由器接口的掩码。如果接收方路由器发现Hello消息中的接口掩码和自己接收到的这个消息的接口掩码不一致,接收方就会丢弃这个Hello消息。因此,接口掩码相匹配是两台路由器称为邻居的必要条件。
14. Hello时间间隔:如果接收方路由器发现发现Hello消息中的Hello时间间隔与自己的不同,就会丢弃这个数据包,所以Hello时间间隔相匹配也是两台路由器称为邻居的必要条件。
15. 路由器失效时间间隔:OSPF路由器在一定的时间间隔内没有接收到某台邻居路由器发送的Hello消息就会认为,这台邻居路由器已经失效,这段时间间隔就是路由器失效的时间间隔。
16. 邻居路由器ID
数据库描述消息’
17. 数据库描述消息***:路由器之间在交换链路状态信息的过程中,常常需要相互交换多个数据库信息才能最终完成链路状态信息的同步,因此数据库描述消息才能完成,因此,数据库描述消息才会携带一个***字段,接收方通过这个数字是否连续,可以判断出自己是否接收到了所有双方交换的数据库描述消息。
18. LSA头部:链路状态通告LSA,不同类型的LSA携带的信息格式也不相同,但所有LSA的头部在格式上是相同的。作为描述路由器链路状态数据库中LSA的清单,数据库描述消息中只会携带所有LSA的头部,而不会携带LSA本身。
路由器ID
一台路由器的路由器ID是按照下面方式生成的
- 如果路由器管理员手动静态配置了路由器ID,则路由器会使用管理员配置的路由ID
- 如果管理员没有手动配置路由器ID,但在路由器上创建了逻辑接口(如环回接口),则路由器会使用这台路由器所有逻辑接口的IPv4地址中数值最大的IPv4地址作为自己的路由器ID,无论该接口是否参与了OSPF协议‘
- 如果管理员既没有手动配置路由器ID,也没有在路由器创建逻辑接口,那么路由器就会使用这台路由器所有活动物理接口的IPv4地址中,数值最大的IPv4地址作为自己的路由器ID,无论该接口是否参与OSPF协议
路由器ID一旦选定,只要OSPF进程没有重启,路由器ID就不会在此后因为接口的变化而产生变化。