OSPF动态路由协议笔记之(二) : 基本原理(下)

发布时间:2022-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了OSPF动态路由协议笔记之(二) : 基本原理(下)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

OSPF动态路由协议笔记之(二) : 基本原理(下)

  本笔记承接上一节,继续对OSPF报文的报文头部和报文类型进行详尽的介绍,接着介绍OSPF建立邻接关系的过程(即LSDB同步的过程),最后补充上一节笔记中提及的DR和BDR选举的过程。

 

  OSPF报文类型及作用

  (1)OSPF协议报文头部

  RIP路由器之间是基于UDP 520的报文进行通信,OSPF也有其规定的通信标准。OSPF使用IP承载其报文,IP报文头部协议号为89

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  在OSPF Packet部分,所有的OSPF报文均使用相同的OSPF报文头部。报文头部各字段含义如下:

  ① Version1个字节:版本。对于当前所使用的OSPFv2,该字段的值为2。

  ② Type1个字节):类型。OSPF报文类型。其值分别代表以下几种报文类型:

  l 1:Hello报文;

  l 2:DD报文;

  l 3:LSR报文;

  l 4:LSU报文;

  l 5:LSAck报文。

  ③ Packet length2个字节):数据包长度。表示整个OSPF报文的长度,单位是字节。

  ④ Router ID4个字节):发送该报文的路由器标识。表示生成此报文的路由器的Router ID。

  ⑤ Area ID4个字节):发送该报文的所属区域。表示此报文需要被通告到的区域。

  ⑥ Checksum2个字节):校验和。用于校验报文的完整性,其校验的范围是整个OSPF报文,包括OSPF报文头部。

  ⑦ Auth Type2个字节):验证类型。

  为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。

  ⑧ Authentication8个字节):鉴定字段。认证所需的信息,该字段的内容随AuType(验证类型)的值不同而不同。

  当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息,MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。

 

  (2)OSPF报文类型

  OSPF的报文头部定义了OSPF路由器之间的通信的标准与规则,基于这个标准OSPF报文需要实现什么功能呢?

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  Type=1为Hello报文,用来建立和维护邻居关系,邻居关系建立之前,路由器之间需要进行参数协商。

  Type=2为数据库描述报文(DD),用来向邻居路由器描述本地链路状态数据库,使得邻居路由器识别出数据库中的LSA是否完整。

  Type=3为链路状态请求报文(LSR),路由器根据邻居的DD报文,判断本地数据库是否完整,如不完整,路由器把这些LSA记录进链路状态请求列表中,然后发送一个LSR给邻居路由器。

  Type=4为链路状态更新报文(LSU),用于响应邻居路由器发来的LSR,根据LSR中的请求列表,发送对应LSA给邻居路由器,真正实现LSA的泛洪与同步。

  Type=5为链路状态确认报文(LSAck),用来对收到的LSA进行确认,保证同步过程的可靠性。

 

  DD、LSR、LSU、LSAck与LSA的关系

  DD报文中包含LSA头部信息,包括LS Type、LS ID、Advertising Router 、LS Sequence Number、LS Checksum。

  LSR中包含LS Type 、LS ID和Advertising Router 。

  LSU中包含完整的LSA信息。

  LSAck中包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。

  五种报文可以高效地完成LSA的同步,那么实际的报文交互过程是什么呢?

 

 

  (3)OSPF报文功能需求

  Hello机制动态发现并维护邻居前文已介绍,不再赘述。

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  RIP设置了Request和Response两种报文来完成路由信息的同步,OSPF路由器之间为了完成LSA的同步,可以直接把本地所有LSA发给邻居路由器,但是邻居路由器直接同步LSA并不是最好的方式。

  更快速、更高效的方式是先在邻居路由器之间传送关键信息,路由器基于这些关键信息识别出哪些LSA是没有的、哪些是需要更新的,然后向邻居路由器请求详细的LSA内容。对于OSPF来说,需要有比RIP更高效、更可靠的方式来完成路由器之间的信息同步。

 

 

  OSPF建立邻接关系

  OSPF协议主要分为建立邻居关系和邻接关系两个步骤。在上一节笔记中,已经介绍了OSPF在两台路由器中进行完两次Hello报文交互之后,建立邻居关系的过程,其中经历Down状态到2-way状态的过程。接下来将会继续介绍建立邻接关系的详细过程。

  建立邻接关系指在两台路由器中进行完链路状态数据库(LSDB)同步之后,建立起来的最终状态。其中经历了ExStart状态到Full状态的过程,最终同步显示的状态是Full。

 

  建立邻接关系的状态含义:

  Ⅰ ExStart:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。

  Ⅱ Exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文

  Ⅲ Loading:在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。

  Ⅳ FullLSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

 

  LSDB同步过程如下:

  Step 1:RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系,两者的状态均为2-way状态。RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文

  此报文中,DD序列号Seq)被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master(主)

  Step 2RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。收到DD报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange

  此报文中,DD序列号Seq)被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master(主)

  Step 3RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,收到此DD报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange

  此报文中,DD序列号Seq)设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave(从)

  Step 4RTB的邻居状态变为Exchange后RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息。

  此报文中,DD序列号Seq)设置为Y+1, MS-bit=1,表示RTB宣告自己为Master(主)

  Step 5虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading

  此报文中,DD序列号Seq)设置Y+1,该报文内容为空。

  Step 6:RTB收到此报文后,假设在RTB的LSDB是最新最全的,不需要向RTA请求更新的情况下,会直接将邻居状态变为Full。

 

 

  LSDB同步过程

  当RTA作为Slave(从),当发现从Master(主)路由器发过来的DD报文中,包含了本地LSDB不存在的链路状态信息摘要,那么RTA需要向RTB请求更新。此时过程又是如何呢?

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  Step 1:RTA开始向RTB发送LSRLink State Request)报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。

  Step 2:RTB向RTA发送LSULink State Update)报文LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。

  Step 3:RTA向RTB发送LSAckLink State Acknowledge)报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系

 

 

  OSPF邻居状态机

  从建立邻居关系到同步LSDB的过程较为复杂,错误的配置或设备链路故障都会导致无法完成LSDB同步。为了快速排障,最关键的是要理解不同状态之间切换的触发原因。

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  这是形成邻居关系的过程和相关邻居状态的变换过程。

  ① Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和Router DeadInterval间隔相同。

  ② Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。

  ③ Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。

  ④ 2-Way Received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。

  ⑤ 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。

  ⑥ 1-Way Received:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。

  ⑦ ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的;初始DD序列号是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。

  ⑧ Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。

  ⑨ Loading:相互发送LS Request报文请求LSA,发送LS Update通告LSA。

  ⑩ Full:两台路由器的LSDB已经同步。

 

 

  LSA(链路状态信息通告)头部

  LSA(Link State Advertisement)是路由器之间链路状态信息的载体LSA是LSDB的最小组成单位,也就是说LSDB由一条条LSA构成的。

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  所有的LSA都拥有相同的头部,关键字段的含义如下:

  ① LS age2个字节):此字段表示LSA已经生存的时间,单位是秒。

  ② LS type1个字节):此字段标识了LSA的格式和功能。常用的LSA类型有五种。

  ③ Link State ID4个字节):此字段是该LSA所描述的那部分链路的标识,例如Router ID等。

  ④ Advertising Router4个字节):此字段是产生此LSA的路由器的Router ID。

  ⑤ LS sequence number4个字节):此字段用于检测旧的和重复的LSA。

  LS type,Link State ID和Advertising Router的组合共同标识一条LSA。

  LSDB中除了自己生成的LSA,另一部分是从邻居路由器接收的。邻居路由器之间相互更新LSA必然需要一个“通道”。

 

 

  DR与BDR的选举及作用

  在运行OSPF的MA网络包括广播型和NBMA网络,会存在两个问题:

  ① 在一个有n个路由器的网络,会形成(n×(n−1))/2 个邻接关系。管理复杂

  ② 邻居间LSA的泛洪扩散混乱,相同的LSA会被复制多份。RTA向其邻居RTB、RTC、RTD分别发送一份自己的LSA,同样其他路由器也会分别向网络内所有邻居发送一份LSA。重复的LSA泛洪,造成资源浪费

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  这样的工作效率显然是很低的,消耗资源的。最为高级的路由协议,OSPF是怎样解决这些问题的呢?

 

  (1)DR和BDR的作用

  DR(Designated Router)即指定路由器,其负责在MA网络建立和维护邻接关系并负责LSA的同步。

  DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。这样就大大减少了MA网络中的邻接关系数量及交换链路状态信息消耗的资源。

  DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步。此时就需要重新选举DR,再与非DR路由器建立邻接关系,完成LSA的同步。为了规避单点故障风险,通过选举备份指定路由器BDR(Backup Designated Router),在DR失效时快速接管DR的工作

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  伪节点是一个虚拟设备节点,其功能需要某台路由器来承载,下面将介绍DR/BDR的选举规则。

 

  (2)DR和BDR的选举

  选举规则:DR/BDR的选举是基于接口的

  Step 1:接口的DR优先级越大越优先。

  Step 2:接口的DR优先级相等时,Router ID越大越优先。

   

OSPF动态路由协议笔记之(二) : 基本原理(下)

  Tips:DRother不参与选举,可通过命令进行指定路由器为DRother。

 

 

  1、下列哪些选项属于OSPF报文类型?

  A)Hello

  B)Database Description

  C)Link State Request

  D)Link State DD

  E)Link State Advertisement

  答:ABC

 

  2、OSPF的网络类型包括(     )?

  答:P2P,P2MP,NBMA,BMA

 

脚本宝典总结

以上是脚本宝典为你收集整理的OSPF动态路由协议笔记之(二) : 基本原理(下)全部内容,希望文章能够帮你解决OSPF动态路由协议笔记之(二) : 基本原理(下)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:数据库