一、OSPF协议简介
OSPF(Open Shortest Path First)开放最短路径优先协议,是一个基于链路状态的动态路由协议,它的基本思路如下:在自治系统(AS)中每一台运行OSPF的路由器收集各自的接口/邻接信息称为链路状态,通过Flooding算法在整个系统广播自己的链路状态,使得在整个系统内部维护一个同步的链路状态数据库,根据这一数据库,路由器计算出一个以自己为根,其它网络节点为叶的一根最短路径树,从而计算出自己到达系统内部的最佳路由。OSPF是一类IGP(内部网关协议),处理在一个自治系统中,路由器的网络路由信息。
OSPF协议使用的协议号是89。它使用IP报文来封装,在IP报头中的协议字段为89。当IP协议收到一个IP报文时,如果发现IP 报头的协议字段为89时就会知道这个报文是OSPF报文,然后转发给处理OSPF报文的模块。
二、 OSPF标准头部格式
OSPF一共有5种类型的分组,在24个字节的OSPF头中有相同的公共字段(参见图1)
(图1 OSPF分组采用相同的标准头)
- 版本号:该字段标识了OSPF的版本号,长度为8位。
- 类型:类型字段标识了OSPF分组类型,长度为8位。表1列出了五种不同的分组类型及其对应的功能。
每一个OSPF头包含一个附加头,此头包含关于OSPF头的公共字段后出现的五种分组类型之一的特定的路由信息。
- Hello分组(Hello Packet)(类型1)
- 数据库描述分组(Database description packet)(类型2)
- 链路状态请求分组(Link State Request Packet)(类型3)
- 链路状态更新分组(Link State Update Packet)(类型4)
- 链路状态确认分组(Link State Acknowledgment Packet)(类型5)
| 分组号 | 分组类型
| 描述
| | 1 | Hello | 建立和维护邻接表 | | 2 | 数据库描述(DD报文) | 对数据库内容作概要 | | 3 | 链路状态请求(LSR报文) | 请求特定的路由信息或实现更新(即下载数据库) | | 4 | 链路状态更新(LSU报文) | 对请求作出响应并发送路由信息(即数据库更新) | | 5 | 链路状态确认(LSACK报文) | 确认收到了路由信息 | (表1 OSPF分组类型)
- 分组长度:分组长度字段标识了以字节为单位的OSPF数据报的长度,包括头和内容,长度为16位。
- 路由器ID:路由器ID字段用一个唯一的值标识了初始发送此OSPF分组的路由器,长度为32位。
- 域ID:域ID字段标识了发送OSPF数据报的域,长度为32位。
- 校验和:校验和字段检验OSPF分组的内容在传递过程中是否受到破坏,长度为16位。
- 认证类型和认证:OSPF支持简单的口令认证。当这样配置后,路由器只与共享相同口令字的路由器形成邻接表。这两个字段一起验证此分组。认证类型字段长度为16位而认证字段为32位。
1、HELLO报文(hello packet)
周期性的发送给本路由器的邻居,使用的组播地址224.0.0.5。
BR和BDR发送和接受报文使用的组播地址是224.0.0.6。HELLO PACKET内容包括一些定时器数值、DR、BDR、以及自己已经知道的邻居。
HELLO 时钟的值与路由收敛速度、网络负荷大小成正比。
缺省情况下,PTP、BROADCAST类型接口发送HELLO报文的时间间隔的值为10秒;PTMP、NBMA类型接口发送HELLO PACKET时间间隔为30秒;
2、DD报文(Database description packet)
相邻路由器直间互发DD报文,报告对方自己所拥有的路由信息内容包括LSDB中每一条LSA摘要(摘要是指LSA的HEAD,通过改HEAD可以唯一标识 一条LSA),这样做的目的是为了减少路由器之间传递信息的量,因为LSA的HEAD只占一条LSA的整个数据量的一小部分。根据HEAD,对端路由器就 可以判断出是否已经有了这条LSA。
DATABASE DESCRIPTION PACKET 有两种
(1)空 DD 报文,用来确定MASTER/SLAVE关系。确定MASTER/SLAVE关系后,才发送有路由信息的DD报文
(2)带有路由信息的DD报文,收到有路由信息的DD报文后,路由器比较自己的数据库,发现对方的数据库中有自己需要的数据,则向对方发送LSR(LINK STATE REQUEST)
3、LSR报文(Link State Request Packet)
两台路由器之间互相交换DD报文后,知道对端的路由器有那些LSA是本地LSDB所缺少的或者对端更新的LSA,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA摘要。
4、LSU报文(Link State Update Packet)
用来向对端路由器发送所需要的LSA,内容是多条LSA的集合
5、LSACK报文(Link State Acknowledgment Packet)
由于没有使用可靠的TCP协议,但是OSPF包又要求可靠的传输,所以就有了LSACK包。它用来对接收到的LSU报文进行确认。内容是需要确认的LSA的HEAD。
三、OSPF Hello报文格式
Hello数据报是OSPF类型1分组。Hello分组建立和维护邻接表。图2给出了Hello分组的基本格式。
(图2 OSPF Hello分组)
四、OSPF 报文解码
图3与图4分别是使用科来网络分析系统在网络中捕获到的OSPF Hello和OSPF LSU数据包。
(图3 OSPF Hello数据包)
从图中可以看出:
- 数据包长度:44,表示该OSPF数据包的长度为44,其中包括头长度和数据包的内容;
- 路由器ID:表示当前发送此OSPF数据包的路由器ID为5.5.5.17;
- 网络掩码:表示本地接口的子网掩码为255.255.255.0;
- 经过时间:10,说明路由器每隔10秒发送一个Hello分组;
- OSPF状态字:也叫可选项字段,定义了两个选项,T位表示此OSPF路由器可以支持ToS/QoS,E位置1表示路由器可以处理外部的非OSPF路由信息。
- 路由失效时间:40,用来检测失败的邻居,缺省情况下,路由器如果在一定时间内没有收到一个邻居路由器的信息(即没有收到Hello分组),则它认为此邻居是死的。路由失效时间字段的值是经过时间字段值的四倍(以秒为单位),所以,图中显示的是40秒。
- 指定的路由器:该字段标识了指定路由器的地址为10.98.169.253;
- 指定后备路由器:0.0.0.0,表示此路由器不知道指定后备路由器的地址;
(图4 OSPF LSU数据包)
以上对OSPF协议报文及其在科来网络分析系统中的解码做了相关介绍,希望兄弟们能够多多支持,多多交流!
[ 本帖最后由 从零开始 于 2009-7-22 17:33 编辑 ] |