查看: 2971|回复: 1

OSPF路由协议介绍

[复制链接]
发表于 2009-7-22 17:15:50 | 显示全部楼层 |阅读模式
一、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数据包)

从图中可以看出:
  • 版本:2,表示OSPF的版本号为V2;
  • 类型:1,说明这是一个Hello数据包;
  • 数据包长度:44,表示该OSPF数据包的长度为44,其中包括头长度和数据包的内容;
  • 路由器ID:表示当前发送此OSPF数据包的路由器ID为5.5.5.17;
  • 域ID:为0.0.0.0;
  • 网络掩码:表示本地接口的子网掩码为255.255.255.0;
  • 经过时间:10,说明路由器每隔10秒发送一个Hello分组;
  • OSPF状态字:也叫可选项字段,定义了两个选项,T位表示此OSPF路由器可以支持ToS/QoS,E位置1表示路由器可以处理外部的非OSPF路由信息。
  • 路由优先级:1
  • 路由失效时间:40,用来检测失败的邻居,缺省情况下,路由器如果在一定时间内没有收到一个邻居路由器的信息(即没有收到Hello分组),则它认为此邻居是死的。路由失效时间字段的值是经过时间字段值的四倍(以秒为单位),所以,图中显示的是40秒。
  • 指定的路由器:该字段标识了指定路由器的地址为10.98.169.253;
  • 指定后备路由器:0.0.0.0,表示此路由器不知道指定后备路由器的地址;


(图4 OSPF LSU数据包)

  以上对OSPF协议报文及其在科来网络分析系统中的解码做了相关介绍,希望兄弟们能够多多支持,多多交流!

[ 本帖最后由 从零开始 于 2009-7-22 17:33 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

发表于 2009-7-24 11:00:17 | 显示全部楼层
感谢从零开始版主,ospf的基础知识介绍的很详细。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表