一、OSPF协议原理
OSPF是一种基于链路状态的路由协议,它从设计上就保证了无路由环路。它支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路。同时它还利用区域间的连接规则保证了区域之间无路由环路。OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。OSPF还可以同其他协议(比如多协议标记切换协议MPLS)同时运行来支持地理覆盖很广的网络。OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。
1.1 OSPF协议报文格式
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文
OSPF这五种报文具有相同的报文头格式,长度为24字节。
1.1.1 OSPF报文头部格式

| 字段 | 长度 | 含义 |
|---|---|---|
| Version | 1字节 | 版本,OSPF的版本号。对于OSPFv2来说,其值为2 |
| Type | 1字节 | 类型,OSPF报文的类型,有下面几种类型:1:Hello报文;2:DD报文;3:LSR报文;4:LSU报文;5:LSAck报文 |
| Packet length | 2字节 | OSPF报文的总长度,包括报文头在内,单位为字节 |
| Router ID | 4字节 | 发送该报文的路由器标识 |
| Area ID | 4字节 | 发送该报文的所属区域 |
| Checksum | 2字节 | 校验和,包含除了认证字段的整个报文的校验和 |
| AuType | 2字节 | 验证类型,值有如下几种表示, 0:不验证;1:简单认证;2:MD5认证 |
| Authentication | 8字节 | 鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息,MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。 |
1.1.2 OSPF Hello报文格式
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。

| 字段 | 长度 | 含义 |
|---|---|---|
| Network Mask | 32比特 | 发送Hello报文的接口所在网络的掩码 |
| HelloInterval | 16比特 | 发送Hello报文的时间间隔。 |
| Options | 8比特 | 可选项:E:允许Flood AS-External-LSAs ;MC:转发IP组播报文 ;N/P:处理Type-7 LSAs ;DC:处理按需链路 |
| Rtr Pri | 8比特 | DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举 |
| RouterDeadInterval | 32比特 | 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效 |
| Designated Router | 32比特 | DR的接口地址 |
| Backup Designated Router | 32比特 | BDR的接口地址 |
| Neighbor | 32比特 | 邻居,以Router ID标识 |
1.1.3 OSPF DD报文格式
两台路由器在邻接关系初始化时,用DD报文(Database Description Packet)来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。

| 字段 | 长度 | 含义 |
|---|---|---|
| Interface MTU | 16比特 | 在不分片的情况下,此接口最大可发出的IP报文长度 |
| Options | 8比特 | 可选项:E:允许Flood AS-External-LSAs;MC:转发IP组播报文;N/P:处理Type-7 LSAs;DC:处理按需链路。 |
| I | 1比特 | 当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。 |
| M (More) | 1比特 | 当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。 |
| M/S (Master/Slave) | 1比特 | 当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。 |
| DD sequence number | 32比特 | DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。 |
| LSA Headers | 可变 | 该DD报文中所包含的LSA的头部信息。 |
1.1.4 OSPF LSR报文格式
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报


3049

被折叠的 条评论
为什么被折叠?



