来源:网络技术联盟站
OSPF(Open Shortest Path First)是一种用于在IP网络中计算最短路径的链路状态路由协议。OSPF使用IP报文直接封装协议报文,其协议号为89。在OSPF协议中,共定义了五种重要的报文类型,分别是Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。这些报文在OSPF路由器之间进行交换,以维护邻居关系、同步链路状态数据库以及计算最短路径。
OSPF 报文头格式
+----------------------------------------+
| OSPF 报文头格式 |
+----------------------------------------+
| Version | Type | Packet length|
|-------------|-----------|--------------|
| Router ID | Area ID | Checksum |
| AuType | Authentication |
+----------------------------------------+
OSPF报文头格式字段解释:
-
Version (8 bits): OSPF的版本号。对于OSPFv2,其值为2。
-
Type (8 bits): OSPF报文的类型,用于区分不同种类的OSPF报文:
-
1:Hello报文。 -
2:DD报文。 -
3:LSR报文。 -
4:LSU报文。 -
5:LSAck报文。 -
Packet length (16 bits): OSPF报文的总长度,包括报文头在内,单位为字节。
-
Router ID (32 bits): 发送该报文的路由器标识。
-
Area ID (32 bits): 发送该报文的设备所属区域。
-
Checksum (16 bits): 包含除了认证字段的整个报文的校验和。
-
AuType (16 bits): 验证类型,用于指示报文的认证方式:
-
0:不验证。 -
1:简单认证。 -
2:MD5认证。 -
Authentication (64 bits): 根据认证类型的不同,此字段的含义也不同:
-
对于AuType为0,此字段无定义。 -
对于AuType为1,此字段为密码信息。 -
对于AuType为2,此字段包括Key ID、MD5验证数据长度和序列号的信息。
Hello报文
Hello报文是OSPF协议中最常用的一种报文,其主要作用是建立和维护邻接关系。路由器周期性地在启用了OSPF的接口上发送Hello报文。该报文的内容包括一些定时器的数值、DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备份指定路由器)以及已知的邻居信息。
Hello报文的重要内容包括:
-
路由器ID(Router ID):用于唯一标识发送该报文的路由器。 -
Area ID(区域标识符):标识发送该报文的路由器所在的区域。 -
Hello Interval(Hello间隔):两次发送Hello报文的时间间隔。 -
Dead Interval(死亡间隔):在这段时间内没有收到邻居的Hello报文则认为邻居失效。 -
DR(Designated Router):指定路由器,负责向本网络的其他路由器分发LSA(链路状态通告)。 -
BDR(Backup Designated Router):备份指定路由器,当DR失效时接替其功能。 -
已知的邻居列表:记录与本路由器已经建立邻接关系的邻居路由器的信息。
通过定时发送Hello报文,路由器能够发现邻居路由器并建立邻接关系,同时也能够监测邻居路由器的存活状态。如果在Dead Interval内没有收到某个邻居路由器的Hello报文,就会将其认定为失效,从而触发相应的路由计算和更新操作。
Hello报文在不同类型的网络中具有不同的属性,主要包括发送地址类型、发送时间间隔类型和时间间隔缺省值。
-
广播网络:
-
发送地址类型:使用广播地址。 -
发送时间间隔类型:采用固定的Hello间隔,即HelloInterval。 -
时间间隔缺省值:缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 -
NBMA(非广播多点连接网络):
-
当路由器担任DR(Designated Router)、BDR(Backup Designated Router)或者有能力成为DR的设备时,发送时间间隔为HelloInterval。 -
当邻居的状态为Down时,发送时间间隔为Pollinterval;其他情况为HelloInterval。 -
Hello报文的时间间隔缺省值为30秒,Pollinterval的时间间隔缺省值为120秒。 -
发送地址类型:使用单播地址。 -
发送时间间隔类型:根据不同情况可能变化。 -
时间间隔缺省值: -
点对点(P2P)网络:
-
发送地址类型:使用组播地址。 -
发送时间间隔类型:采用固定的Hello间隔,即HelloInterval。 -
时间间隔缺省值:缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 -
点对多点(P2MP)网络:
-
发送地址类型:使用组播地址。 -
发送时间间隔类型:采用固定的Hello间隔,即HelloInterval。 -
时间间隔缺省值:缺省情况下,接口发送Hello报文的时间间隔的值为30秒。
DD报文
DD报文在OSPF邻接关系初始化时发挥着重要作用,主要用于描述本端设备的链路状态数据库(LSDB),以实现数据库的同步。
-
描述本端LSDB:
-
DD报文用于描述本端设备的链路状态数据库(LSDB),即本设备所了解到的网络拓扑信息。 -
报文内容:
-
报文内容包括LSDB中每一条LSA的Header,而LSA的Header可以唯一标识一条LSA。 -
由于LSA Header只占一条LSA的整个数据量的一小部分,因此可以减少设备之间的协议报文流量。 -
Master-Slave架构:
-
在两台设备交换DD报文的过程中,一台设备充当Master,另一台充当Slave。 -
Master负责规定起始序列号,并在每发送一个DD报文时序列号加1。 -
Slave方使用Master的序列号作为确认,以实现报文的可靠传输。 -
同步LSDB:
-
通过交换DD报文,Master和Slave设备可以同步彼此的LSDB,确保两台设备了解到相同的网络拓扑信息。
通过DD报文的交换,OSPF协议可以实现快速而准确地同步邻居设备之间的链路状态数据库,从而保证路由表的一致性和网络拓扑的准确性。
LSR报文
LSR报文在OSPF邻接关系初始化后,设备之间交换了DD(Database Description)报文之后发挥着重要作用。主要用于向对方请求更新LSA(Link State Advertisement),以实现链路状态数据库的同步。
-
请求更新LSA:
-
LSR报文用于向对方请求更新LSA,即请求对方发送具体的LSA信息以进行数据库的同步。 -
报文内容:
-
报文内容包括所需要的LSA的摘要信息,通常是LSA的Header,用于识别需要更新的具体LSA。 -
交换过程:
-
设备之间交换DD报文后,如果发现有需要更新的LSA,则会发送LSR报文向对方请求相应LSA的更新。 -
LSA摘要信息:
-
LSR报文中包含的LSA摘要信息可以帮助对方设备确定需要更新的具体LSA,从而实现链路状态数据库的同步。
LSA的唯一标识由三个字段组成:LS type、Link State ID 和 Advertising Router。
-
LS type:
-
表示LSA的类型,用于指示LSA的功能和作用,例如Router LSA、Network LSA等。 -
Link State ID:
-
标识LSA所描述的对象,具体取决于LSA的类型。例如,对于Router LSA,Link State ID通常是该路由器的ID;对于Network LSA,Link State ID通常是网络的ID。 -
Advertising Router:
-
表示发送该LSA的路由器的ID。
这三个字段的组合可以唯一标识出一个LSA。
当两个LSA的LS type、Link State ID 和 Advertising Router都相同时,需要根据其他字段来判断所需LSA的新旧。这些字段包括:
-
LS sequence number:LSA的序列号,用于标识LSA的更新顺序。序列号较大的LSA通常是较新的。 -
LS checksum:LSA的校验和,用于检测LSA的完整性。 -
LS age:LSA的年龄,表示LSA自生成以来经过的时间。年龄较小的LSA通常是较新的。
通过比较LS sequence number、LS checksum 和 LS age,可以判断出所需LSA的新旧程度,从而确定是否需要更新本地的链路状态数据库。
通过LSR报文的交换,OSPF设备可以及时地获取所需的LSA信息,确保本地的链路状态数据库与邻居设备的数据库保持同步,从而保证路由表的准确性和网络拓扑的一致性。
LSU报文
LSU(Link State Update)报文在OSPF协议中扮演着重要的角色,用于向对端设备发送其所需要的LSA或者泛洪本端更新的LSA。
-
发送LSA集合:
-
LSU报文的主要作用是向对端设备发送多条LSA的集合,其中可能包括对方需要的LSA以及本端的更新LSA。 -
泛洪机制:
-
在支持组播和广播的网络中,LSU报文以组播形式将LSA泛洪出去,以确保所有的OSPF设备都能够收到更新的LSA信息。 -
LSAck报文确认:
-
为了实现Flooding的可靠性传输,LSU报文发送后需要等待LSAck(Link State Acknowledgment)报文的确认。 -
LSU报文中包含的LSA信息将会被对端设备确认接收。对没有收到确认报文的LSA进行重传。 -
直接发送到邻居:
-
对于需要重传的LSA,重传的LSA会直接发送到邻居设备,以确保LSA的可靠传输。
通过LSU报文的发送和LSAck报文的确认,OSPF协议能够实现LSA信息的可靠传输和链路状态数据库的同步,从而确保路由表的准确性和网络拓扑的一致性。
LSAck报文
LSAck(Link State Acknowledgment)报文在OSPF协议中起着重要的确认作用,主要用于对接收到的LSU(Link State Update)报文进行确认。以下是LSAck报文的主要特点:
-
确认LSA:
-
LSAck报文用来确认接收到的LSU报文中包含的LSA信息,以确保LSA的可靠传输和数据库的同步。 -
报文内容:
-
LSAck报文的内容是需要确认的LSA的Header,即LSA的摘要信息。 -
一个LSAck报文可以对多个LSA进行确认,通过包含这些LSA的Header来实现。 -
发送形式:
-
根据不同的链路,LSAck报文可以以单播或组播的形式发送。 -
如果LSU报文是通过单播方式发送的,则LSAck报文也会以单播方式发送;如果LSU报文是通过组播方式发送的,则LSAck报文也会以组播方式发送。
通过LSAck报文的发送,OSPF设备能够向对端设备确认已经成功接收到LSU报文中的LSA信息,从而实现LSA信息的可靠传输和链路状态数据库的同步。LSAck报文的确认机制能够有效地提高OSPF协议的可靠性和稳定性。
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/35139.html