OSPF协议报文
OSPF报文
讲完了链路类型我们来看一下具体我们使用哪一些报文去传播我们的链路。
在讲解报文的时候,我们先来看一下整体的报文头部:
我们的OSPF是基于IP的,协议号是89。然后针对于IP的话,我们使用的是组播和单播去传递(组播地址是224.0.0.5和224.0.0.6)。
对于OSPF的数据和头部我们可以看到:
- Version
- Version有不同的版本,OSPFv3是支持IPv6的。
- Type
- Type指的是针对于这个报文有不同的类型,Hello报文就是一种类型。
- Packet Length
- 报文的长度。
- Router ID
- 我们前面讲过了。
- Area ID
- 标识属于哪一个区域的。
- Checksum
- 校验和
- 认证类型和相应的认证密码以及一些参数。
报文类型
OSPF Packet data,这个data就是基于不同类型我的data的内容也是不一样的。我们具体来看一下有哪些类型:
我们可以看到在OSPF报文中有五种类型:
Type | 报文名称 | 报文功能 |
1 | Hello | 发现和维护邻居关系 |
2 | Database Description | 交互链路状态数据库摘要 |
3 | Link State Request | 请求特定的链路状态信息 |
4 | Link State Update | 发送详细的链路状态信息 |
5 | Link State Ack | 发送确认报文 |
具体我的路由信息是放在哪里呢?
我们的路由信息仅仅放在第四种报文LSU中,其他的类似于DD报文、LSR、LSAck,都只是包括我们的摘要信息,就是路由的摘要信息。
可能只有一个目的网段和掩码的信息,并不会包含具体的下一跳、cost值等。
思考:DD、LSR、LSU、LSAck报文都包含哪些信息?这么设计有什么好处?
这么设计的好处,我们后面会讲解。
OSPF报文的功能需求
对于我们OSPF报文的功能分为三类:
功能 | 实现分析 |
发现邻居与保持 | Hello机制即可实现 |
LSA同步 | 双方互相发送LSA,完成同步; 同时同步速度更快,占用资源更少 |
可靠性 | 确保LSA同步过程的可靠性 |
第一类是对于发现邻居和保持。
这里主要是由Hello报文来实现。
第二个就是LSA同步,LSA同步主要是由三类报文来去实现:
- 第一个是DD报文,DD报文去交互摘要信息之后,相当于我们去翻开一个书或者翻开一个菜单。
- 我们翻开一个菜单之后,或者一本书。我们去查看哪一些章节的信息是我需要的,这就是DD报文,去查看哪一些路由的信息是我需要的。
- 一旦查看到我需要某一个路由信息之后,我就立刻会发送LSR去请求该路由信息。
- 接收到LSR之后,就会回复一个LSU,这里的Update报文就是包括我们详细的摘要信息,即完整的路由信息。
第三个就是可靠性,就是确保LSA同步的可靠性。
主要就是使用LSAck报文,我们收到LSU之后,立刻就会回复LSAck去确认已经同步完成了。