OSPF协议分析

概要

OSPF是动态内部网关协议中较为复杂的协议,牵涉的知识点较多,被设计为适应各种网络拓扑环境,学习、总结、测试、验证、思考OSPF协议的相关内容,包括环境拓扑的规划、设备的配置命令、配置后的结果显示,抓包分析协议的封装、报文格式、报文交互、各类lsa等。

一、OSPF简介

1.1 OSPF定义:

开放式最短路径优先OSPF (Open Shortest Path First) 是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。

  • OSPF把自治系统AS (Autonomous System)划分成逻辑意义上的一个或多个区域;
  • OSPF通过链路状态通告LSA (Link State Advertisement)的形式发布路由;
  • OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;
  • OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。

目前针对IPv4协议使用的是OSPF Version2 (RFC2328) ;针对IPv6协议使用OSPF Version3 (RFC2740) 。在本文中所指的OSPF均为OSPF Version 2。

1.2 OSPF原理:

在带有路由功能的网络设备运行OSPF协议之后,设备之间会开始交互hello报文,hello报文内通常包含了一些路由的基本信息,之后交互的是DBD报文,DBD报文简要描述了自身的LSA信息,通过收到的DBD报文来跟自身的LSA信息作对比如果部分LSA信息缺失,则发送LSR报文,请求发送缺失部分,这时对等体设备会发出一个LSU报文,LSU主要更新LSA信息,然后发送ack报文来确保安全,最后LSU存放进LSA数据库,形成LSDB,再运行SPF算法,计算出最优路径,形成路由表。
OSPF原理图
OSPF的运行机制包括五个步骤:

  • 交互Hello报文
  • 泛洪LSA
  • 组建LSDB:LSDB是LSA的汇总
  • SPF算法计算出自己到达其他设备的最优路径
  • 维护和更新路由表

网络中的每台路由器都通过链路状态数据库(LSDB)来掌握全网的拓扑结构,而每台路由器都会收集其他路由器发来的LSA来完善自己的LSDB

LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统(area)的网络拓扑结构的描述。

路由器将LSDB转换成一张带权的有向图,在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的。(如图1所示)
图1
(图1)

路由器根据最短路径优先(Shortest Path First)算法计算到达目的网络的路径,而不是根据路由通告来获取路由信息。如图2所示,每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。相对于RIP, 这种机制极大地提升了路由器的自主选路能力,使得路由器不再依靠路由通告进行选路。总而言之,LSDB保证路由器能实时掌握全网的拓扑机构,SPF算法保证路由器能够迅速计算出到达目的网络的最短路径
图2
(图2)

1.3 OSPF的三张表

(1) 邻居表(Neighbor Table):保存OSPF路由器的邻居信息,为确保直接邻居之间能够双向通信;

(2) 链路状态数据库(Topology Table):为LSDB表,存放自己产生的以及邻居通告的LSA,同一区域的所有路由器LSDB相同;

(3) OSPF路由表(Routing Table):对LSDB应用SPF算法,选择到达目标地址的最佳路由放入路由表。

1.4 OSPF邻居的状态:

OSPF路由器可与它直连的邻居建立邻居关系。P2P链路上,所有邻居可以到达FULL状态,形成邻接关系。MA网络,所有路由器只和DR/BDR(Backup Designated Router)到达FULL状态,形成邻接关系。路由器只和建立了邻接关系的邻居才可以到达FULL状态。路由更新只在形成FULL状态的路由器间传递。其中OSPF路由器只会与建立了邻接关系的路由器互传LSA,同步LSDB。
在这里插入图片描述

状态 详细信息
Down 这是邻居状态转换的初始状态,表示最近没有从邻居收到信息。在NBMA 网络上,仍然使用较低的频率向”Down”状态的邻居发送Hello包。
Attempt 该状态仅对NBMA 网络上的邻居有效,表示最近没有从邻居收到信息,但仍需作出进一步的尝试,用以与邻居联系。这时按HelloInterval的间隔向邻居发送Hello包。
Init 在此状态时,表示收到了由邻居发送的Hello 包,但还没有建立与邻居的双向通讯(也就是说,路由器自身没有出现在该邻居的Hello包中)。从关联接口发出的Hello包中列出所有达到此状态(或更高状态)的邻居。
2-Way 在此状态时,两台路由器的通讯达到双向,这是通过Hello 协议而实现的。并且是建立邻接前的最高状态。DR(BDR)是从达到2-Way或更高状态的邻居中选举出来的。
ExStart 这是两台邻居路由器之间建立邻接的第一步。此步的目标是确定路由器的主从,并确定初始的DD 序号。达到此状态或更高状态的邻居会话被称为邻接。
Exchange 在此状态的路由器通过向邻居发送DD 包,来描述其完整的连接状态数据库。每个DD 包都有一个DD 序号,并需要被明确地确认。在任何时候,一次只能发送一个DD 包。在此状态下,允许向邻居发送LSR 包来取得较新的LSA。所有达到Exchange或更高状态的邻接参与洪泛过程。事实上,这些状态的邻接完全有能力传送和接收所有类型的OSPF路由协议包。
Loading 在此状态下,向邻居发送LSR 包来取得较新的LSA。就是在Exchange状态下发现(但还没有接收到)的那些LSA。
Full 在此状态下,邻居路由器达到完全邻接。现在开始这些邻接将出现在Router-LSA 和Network-LSA 中。

1.5 OSPF五种报文:

OSPF报文是直接封装在IP报文中的,IP报文头部中的协议字段的值必须为89。

(1) Hello报文:周期性的发送用来建立和维护邻接关系,报文内容主要包括DR、BDR以及已知邻居。

(2) DD报文:是两台路由器在邻接关系初始化时,用DD报文来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。

(3) LSR报文:发送LSR报文向对方请求所需的LSA,只有在邻居双方成功交换了DD后才会发送LSR。内容包括所需要的LSA的摘要。

(4) LSU报文:发送对方所需要的LSA或者泛洪自己更新的LSA。内容是多条LSA(全部内容)的集合。

(5)LSAck报文:用来对接收到的LSU报文进行确认。一个LSAck报文可对多个LSA进行查看。

OSPF的五种报文格式:
OSPF五种报文具有相同的报文头格式,长度为24字节。
OSPF报文头格式
报文头格式

字段 长度 含义
Version 1字节 版本,OSPF的版本号。对于OSPFv2来说,其值为2。版本2支持IPV4;版本3支持IPV6,兼容IPV4。
Type 1字节 类型,OSPF报文的类型,有下面几种类型:Hello报文、DD报文、LSR报文、LSU报文、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)OSPF Hello报文格式
Hello报文格式

字段 长度 含义
Network Mask 32比特 发送Hello报文的接口所在网络的掩码。
HelloInterval 16比特 发送Hello报文的时间间隔,默认为10s。
Options 8比特 可选项:(1) E:允许Flood AS-External-LSAs (2) MC:转发IP组播报文 (3) N/P:处理Type-7 LSAs (4) 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标识。

(2)OSPF DD报文格式
DD报文中的LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。
DD报文格式

字段 长度 含义
Interface MTU 16比特 在不分片的情况下,此接口最大可发出的IP报文长度。
Options 8比特 可选项:(1) E:允许Flood AS-External-LSAs (2) MC:转发IP组播报文 (3) N/P:处理Type-7 LSAs (4) 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的头部信息。

(3)OSPF LSR报文格式
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
LSR报文格式

字段 长度 含义
LS type 32比特 LSA的类型号。
Link State ID 32比特 根据LSA中的LS Type和LSA description在路由域中描述一个LSA。
Advertising Router 32比特 产生此LSA的路由器的Router ID。

(4)OSPF LUR报文格式
用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
LUR报文格式

字段 长度 含义
Number of LSAs 32比特 LSA的数量。

常用的LSA共有5种,分别为:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA和AS-External-LSA。

1)所有的LSA都有相同的报文头:
LSA报文头

字段 长度 含义
LS age 16比特 LSA产生后所经过的时间,以秒为单位。无论LSA是在链路上传送,还是保存在LSDB中,其值都会在不停的增长。
Options 8比特 可选项:(1) E:允许Flood AS-External-LSAs (2) MC:转发IP组播报文 (3) N/P:处理Type-7 LSAs (4) DC:处理按需链路
LS type 8比特 LSA的类型:(1) Type1:Router-LSA (2) Type2:Network-LSA (3) Type3:Network-summary-LSA (4) Type4:ASBR-summary-LSA (5) Type5:AS-External-LSA (6) Type7:NSSA-LSA
Link State ID 32比特 与LSA中的LS Type和LSA description一起在路由域中描述一个LSA。
Advertising Router 32比特 产生此LSA的路由器的Router ID。
LS sequence number 32比特</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值