六、OSPF协议的报头信息、报文信息、三张表
OSPF的协议报文在一个广播域内进行传递,是直接封装在IP报文中的,协议号为89。
OSPF本身5种类型:分别是Hello报文、DD报文、LSR报文、LSU报文、LSAck报文,各种不同类型的LSA其实只是包含在LSU报文中。
其他类型的OSPF报文中虽然没有携带LSA,但是仍然会携带一些链路状态信息,当然也会携带一些其他的信息。
1、OSPF报头信息
字段 | 长度 | 含义 |
Version | 1字节 | 版本,OSPF的版本号。对于OSPFv2来说,其值为2。 |
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字段中。 |
2、OSPF五种报文
OSPF的5种报文中,Hello报文用来发现和维护邻居关系,只有在邻接关系建立完成后才会交互DD、LSR, LSU以及LSAck报文。
Type | 报文名称 | 报文功能 |
1 | Hello | 发现和维护OSPF邻居关系。周期性发送,用来发现、维护、保持OSPF邻居关系。 |
2 | Database Description(DD) | 交互链路状态数据库摘要。描述本地LSDB的摘要信息,用于两台设备进行数据库同步。 |
3 | Link State Request(LSR) | 请求特定的链路状态信息。用于向对方请求所需要的LSA。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
4 | Link State Update(LSU) | 发送详细的链路状态信息。用于向对方发送其所需要的LSA,此时LSA信息是完整的。 |
5 | Link State Ack(LSAck) | 发送确认报文。用来对收到的LSA进行确认。 |
注意:OSPF在邻居刚建立的时候会发送路由信息(路由信息使用DD、LSR、LSU、LSack四种报文来发送),路由同步以后,后面仅发送hello包来维持邻居关系即可。
(1)Hello报文
最常用的一种报文,用于发现、维护邻居关系,并在广播和NBMA类型的网络中,选举指定路由器(DR)和备份指定路由路由器(BDR)。
Hello报文周期性发送,发送的时间受OSPF链路类型影响,如,广播网络类型下的Hello发送间隔为10秒。不同链路状态下的Hello报文发送方式不同,广播网络类型下的Hello报文以组播发送。
1)Hello报文字段详解:
2)Hello报文的作用:
(1)邻居发现:自动发现邻居路由器,并建立相邻关系,广播网络类型下通过组播224.0.0.5发送,通告两台路由器建立相邻关系所必需统一的参数。
(2)邻居建立:完成Hello报文中的参数协商,建立邻居关系。
(3)邻居保持:通过Keepalive机制,检测邻居运行状态。
在广播型的网络中,更新的周期为10S/40S。非广播多路访问的网络中,更新的周期30s/120s。
3)Hello时间修改:
重置ospf 进程:< >reset ospf process
修改hello时间:< >ospf timer hello 5
比如改成hello时间5s行吗? 可以
那么死亡时间是多少呢? 20s
hello时间和dead时间感知链路邻居是否存在。如果默认40s没有收到hello报文,OSPF邻居将会down掉
如果我修改了dead没有修改hello时间,那么hello时间会随着dead时间改变吗?
不会!因为hello时间随着报文通告
(2)DD(Database Description,数据库描述)报文
DD(数据库描述)报文,建立邻居的基础上用于两台路由器进行交换链路状态数据库的摘要信息。它允许路由器之间比较彼此的数据库,以确定需要交换的更新信息,主要用于数据库的同步。
不同链路状态下的DD报文发送方式不同,广播网络类型下的DD报文以单播发送。
内容包括LSDB中每一条LSA的Heade头部(LSA的Header可以唯一标识一条LSA) 。LSA Header只占LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。
1)报文字段详解:
2)DD报文的作用:
(1)主要用于数据库的同步。
(2)先描述后请求,减少了交换LSA的次数,提高网络的收敛速度。
(3)如果没有DD报文,每次建立邻居后都要发送全部的LSA,如果对方已经有了大部分了,你还发一堆过去就产生了不必要的流量。
(3)LSR(Link State Request, 链路状态请求)报文
链路状态请求(LSR)报文,用于请求DD报文中的详细路由信息。
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA。内容包括所需要的LSA 的摘要。
不同链路状态下的LSR报文发送方式不同,广播网络类型下的LSR报文以单播发送。
1)报文字段详解:
(4)LSU(Link State Update, 链路状态更新)报文
链路状态更新(LSU)报文,用于回复详细的LSR请求信息,在OSPF链路状态更新/拓扑变更时进行路由的更新通知。
用来向对端路由器发送所需要的LSA,内容是多条LSA(全部内容)的集合。当一个路由器检测到网络拓扑发生变化时,它会生成LSU报文,并将更新的链路状态数据发送给邻居路由器。
不同链路状态下的LSU报文发送方式不同,广播网络类型下的LSU报文以组播发送。
1)报文字段详解:
(5)LSAck报文(Link State Acknowledgment, 链路状态确认)
链路状态确认(LSAck)报文,用来对接收到的LSU报文进行确认。
当一个路由器接收到LSU报文后,会发送LSAck报文作为回应,通知发送方链路状态数据已成功接收。
不同链路状态下的LSACK报文发送方式不同,广播网络类型下的LSACK报文以组播发送。
1)报文字段详解:
2)LSAck报文的作用
保障LSA传输的可靠性,不至于说发送LSU丢了也不知道。
3、OSPF三张表
OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。
(1)OSPF三张表——OSPF邻居表(neighbor table)
OSPF用邻居机制,来发现和维持路由的存在,邻居表存储了双向通信的邻居关系OSPF路由器列表的信息。
对于OSPF的邻居表,需要了解∶
OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。邻居关系通过交互Hello报文建立。
OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。
[R2]display ospf peer brief //显示OSPF邻居的概要信息
OSPF Process 1 with Router ID 2.2.2.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 1.1.1.1 Full
----------------------------------------------------------------------------
[R2]display ospf peer //显示OSPF中各区域的详细邻居信息
OSPF Process 1 with Router ID 2.2.2.2 //本地自己的Router ID
Neighbors
Area 0.0.0.0 interface 10.1.12.2(GigabitEthernet0/0/0)'s neighbors
Router ID: 1.1.1.1 //邻居的router-id Address: 10.1.12.1 //邻居的接口IP
State: Full //OSPF的状态 Mode:Nbr is Slave Priority: 1 //接口优先级用于选举DR和BDR
DR: 10.1.12.1 BDR: 10.1.12.2 MTU: 0 //MTU值 最大传输单元,缺省为1500,华为缺省是不开启MTU检测
Dead timer due in 39 sec //死亡时间(失效时间)
Retrans timer interval: 5 //LSA重传时间
Neighbor is up for 00:05:21 //邻居UP
Authentication Sequence: [ 0 ] //认证字段
(2)OSPF三张表——LSDB(链路状态数据库,link-state database)
OSPF用LSA(链路状态通告)来描述网络拓扑信息,然后OSPF路由器用LSDB链路状态数据库来存储网络的这些LSA。
LSDB同步:每个LSA都要在LSU中通告给邻居,并且每个邻居都要确认,若没有收到邻居的确认,LSU在5s后重传。
对于OSPF的LSDB表,需要了解∶
LSDB会保存自己产生的及从邻居收到的LSA信息。(下图中R1的LSDB包含了三条LSA)
作用:存放其他路由器的LSA
[R2]display ospf lsdb //显示LSDB链路状态数据库的信息。
OSPF Process 1 with Router ID 2.2.2.2
Link State Database
Area: 0.0.0.0
LSA的类型 发送LSA的路由器
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 2.2.2.2 2.2.2.2 1175 36 80000003 1
Router 1.1.1.1 1.1.1.1 1175 48 80000008 1
Network 10.1.12.1 1.1.1.1 1175 32 80000002 0
Type:LSA的类型:1类2类
Link State ID:描述拓扑信息或者路由信息:根据你的LSA的类型不同
Adv Router:通告路由器:谁告诉你的这条LSA
age: LSA的存放时间 Len:长度以字节为单位
Sequence:OSPF LSA的序列号(当拓扑产生变化之后+1以十六进制计算) Metric:开销
(3)OSPF三张表——OSPF路由表(routing table)
对链路状态数据库进行SPF(Dijkstra)计算,而得出的OSPF路由表。
对于OSPF的路由表,需要了解∶
OSPF路由表和路由器路由表是两张不同的表项。下图中OSPF路由表有三条路由。
OSPF路由表包含:Destination(源地址)、Cost(开销)和NextHop(下一跳)等指导转发的信息。
Transitnet类型:网段路由。一般采用在直连接口,需要维护邻居之间的拓扑信息和路由信息。
stubnet类型:主机路由。一般采用在环回接口,不需要维护邻居之间的拓扑信息,只需要维护路由信息。
[R2]display ospf routing //显示OSPF路由表信息
OSPF Process 1 with Router ID 2.2.2.2
Routing Tables Routing for Network
Destination Cost Type NextHop AdvRouter Area
10.1.12.0/24 1 Transit //网段路由 10.1.12.2 2.2.2.2 0.0.0.0
10.1.14.0/24 2 Stub //主机路由 10.1.12.1 1.1.1.1 0.0.0.0
Total Nets: 2
Intra Area: 2 Inter Area: 0 ASE: 0 NSSA: 0
(4)LSA、LSDB、SPF、路由表之间的关系
1)相互交换自己的LSA从而组成LSDB。【LSDB的形成】
2)通过SPF算法对LSDB中的路径信息进行一个计算,得出最优的OSPF路由。【路由的产生】
3)最优的OSPF路由放置在路由表中。如果存在其它路由协议的最优路由与OSPF的最优路由相同,将进行比较路由优先级,优先级小的信任度更高,将成为最优路由放置在路由表中。
整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun 暗号:CSDN】