首页 起名知识 基于Wireshark解析OSPF协议

基于Wireshark解析OSPF协议

  基于Wireshark解析OSPF协议

  OSPF(OpenShortestPathFirst开放式最短路径优先)是内部网关协议(IGP)用于在单个自治系统(AS)中进行决策路由。它传输链路状态信息并生成相同的拓扑。与RIP相比,OSPF是一种链路状态路由协议,而RIP是一种距离矢量路由协议。本文主要介绍OSPF数据包具体报文和协议的特点,通过Wireshark获取并分析数据,分析了OSPF各个报文的具体字段及特点,以及建立邻接关系过程中报文收发情况。

  OSPF是基于链路状态的路由协议,可以保证没有路由环路。OSPF支持区域划分。区域内的路由器使用SPF最短路径算法来确保区域内没有环路。OSPF还使用区域之间的连接规则来确保区域之间没有路由环路。OSPF支持触发的更新,并且可以快速检测并通知自治系统中的拓扑更改。OSPF可以解决网络扩容带来的问题。当网络上的路由器越来越多且路由信息流量迅速增加时,OSPF可以将每个自治系统划分为多个区域并限制每个区域的范围。OSPF的特征(如子区域)使OSPF特别适合于大中型网络。OSPF可以提供身份验证功能。可以将OSPF路由器之间的消息配置为经过身份验证,然后才能进行交换。

  一、引言

  为了满足建立越来越大的基于IP的网络的需求,IETF成立了一个工作组,致力于开发用于大型异构IP网络的开放式链路状态路由协议。基于一系列私有的,与制造商相关的最短路径优先(SPF)路由协议,新的路由协议已获得了一些成功,并已在市场上得到广泛使用。包括OSPF在内的所有SPF路由协议均基于Dijkstra算法。该算法可以基于链路状态而不是距离矢量进行路由。OSPF由IETF在1980年代后期开发,OSPF是SPF路由协议的开放式版本。

  链接是路由器接口的另一种说法,因此OSPF也称为接口状态路由协议。OSPF通过通告路由器之间网络接口的状态以生成最短路径树来构建链接状态数据库。每个OSPF路由器都使用这些最短路径来构造路由表。

  OSPF路由协议是典型的链路状态路由协议,通常在同一路由域中使用。在此,路由域是指自治系统(AS),它是指通过统一路由策略或路由协议交换路由信息的一组网络。在该AS中,所有路由器都维护一个描述AS结构的相同数据库。数据库将相应链路的状态信息存储在路由域中。OSPF路由器通过该数据库计算其OSPF路由表。

  OSPF作为链路状态路由协议,将链路状态广播数据LSA传输到特定区域中的所有路由器,这与距离矢量路由协议不同。运行距离矢量路由协议的路由器将其部分或全部路由表传递到其相邻路由器。

  二、OSPF的报文类型

  (一)OFPF报文头部

  OFPF报文头部包含信息:

  1.OSPF版本字段:分为V2和V3

  2.消息类型字段

  3.包长字段

  4.router-id:用来标识网络中某台路由器,同一网络内不允许重

  5.area-id:用于标识数据包所在网络的OSPF区域

  6.包校验和

  7.认证类型

  8.认证数据

  (二)Hello报文

  1.Hello作用

  1)用于发现邻居

  2)帮助建立邻居关系:Hello包里的特定参数一致时才可建立邻居关系

  3)Hello包在邻居之间起着keepalive的角色

  4)允许邻居之间的双向通信

  5)用于NBMA网络上选举DR和BDR

  2.Hello报文包含的字段

  1)网络掩码:发送Hello报文的接口的掩码

  2)Hello间隔(时间):标识发送Hello报文的间隔,默认时间是10s

  3)选项字段

  4)路由器优先级:用于标识路由器的优先级,并且可用于选举DR(指定路由器)/BDR(备份指定路由器),默认值为1,范围0-255,当取值范围为0时,不参与选举

  5)路由器死亡间隔(时间):标识了路由器之间发送Hello报文的最大间隔,默认时间为40s

  6)DR(指定路由器)

  7)BDR(备份指定路由器)

  8)邻居表:包含了所有邻居的router-id(路由器的唯一标识)

  (三)DBDescription报文

  1.DD报文作用

  它用于描述到邻居路由器的本地链路状态数据库,以便邻居路由器可以识别数据库中的LSA是否完整。

  2.DD报文包含内容

  1)接口MTU

  2)选项字段

  3)标志位(置位字段)

  4)序列号

  (四)LSRequest报文

  1.LSR报文作用

  LSR用于请求与他相邻的路由器的链接状态数据库中的部分数据。路由器根据邻居的DD报文判断本地数据库是否完整。如果不完整,则路由器将这些LSA记录在链路状态请求列表中,然后将LSR发送到邻居路由器。

  2.LSR报文包含内容

  1)LS类型

  2)LinkStateID:用于指定OSPF描述的某些区域,根据LSA类型的不同,此字段的用法也不同

  3)AdvertisingRouter:指定生成请求的LSA的路由器ID

  (五)LSUpdate报文

  LSU报文包含内容

  1)NumberofLSA:指定此消息中发送的LSA数目

  2)LSAs:这是完整的特定LSA信息,后面的省略号表示可以有多个LSA。

  (六)LSAcknowledge报文

  三、OSPF的网络类型

  (一)OSPF定义的5种网络类型

  1.点对点网络(P2P)

  它会自动发现邻居,无需选举DR、BDR,hello时间默认10,死亡时间默认40。建立邻居关系协商字段又Router-id,必须唯一,必须不同;Areaid,必须相同;hello和dead时间一致。

  2.广播型网络(BMA)

  它此网络类型会自动发现邻居,并需要选举DR、BDR,hello时间默认10,死亡时间默认40。建立邻居关系协商字段有Router-id,必须唯一,必须不同;Areaid,必须相同;掩码必须一致;hello和dead时间一致。

  3.非广播型网络(NBMA)

  它需要手工配置邻居,需要选举DR、BDR,hello时间默认30,死亡时间默认120,建立邻居需要协商字段有Router-id,必须唯一,必须不同;Areaid,必须相同;掩码必须一致;hello和dead时间一致。

  4.点到多点网络(P2MP)

  它可以自动发现邻居,而无需选举DR、BDR,hello时间默认30,死亡时间默认120。建立邻居关系协商字段有Router-id,必须唯一,必须不同;Areaid,必须相同;掩码必须一致;hello和dead时间一致。

  四、OSPF的DR及BDR

  在没有DR和BDR前,每一台路由器都需要和他的所有邻居建立邻居关系,如果一个网络有n个路由器,将形成(n×(n-1))/2个邻居关系。LSA的泛滥和扩散是混乱的。同一LSA将被复制多次,工作效率非常低,资源非常消耗。因此,基于此考虑,诞生了DR和BDR。

  (一)DR的作用

  1.负责网络建立和维护邻接关系并负责LSA的同步。

  2.DR与所有其他路由器形成邻接关系,并交换链路状态信息。其他路由器不直接互换链接状态信息。

  3.同时还会选取一个BDR,避免单点故障,保证网络中DR的可靠性

  (二)DRBDR选取规则

  DR、BDR的选举是基于接口的

  1.路由器的每个接口都有一个路由器优先级,为8位整数,范围为0到255,优先级为0的路由器不能当选为DR/BDR。

  2.Hello数据包包含优先级字段和可能成为DR/BDR的相关接口的IP地址。

  3.当接口在BMA/NBMA网络上第一次启动的时候,它把DR/BDR地址设置为0.0.0.0,同时设置等待计时器(waittimer)的值等于路由器(RouterDeadInterval)。

  4.路由器接口优先级优先级越大越优先。

  5.接口的优先级相等时,RouterID越大越优先。

  6.未配置RouterID,由配置的接口IP地址选择,越大越优先,首先选择loopback,其次选择物理接口。

  (三)DRBDR选取过程

  1.与邻居成功建立双向(2-Way)通信后,路由器检查邻居的Hello数据包中的字段,查找优先级为不是0的,可以参与DR/BDR选举的邻居。

  2.如果其中一个或多个路由器声明自己为BDR,即在其Hello消息中将其列为BDR,则选择路由器优先级最高的路由器作为BDR;如果相同,选择router-id最大的路由器。如果没有路由器声明自己为BDR,在列表中选择具有最高优先级的路由器成为BDR(不包括将自己声明为DR的路由器),如果相同,则根据router-id。

  3.如果一个或多个路由器声明自己为DR(即在其Hello消息中将其列为DR),选择优先级最高的路由器作为DR;如果相同,选择具有最高router-id的路由器。如果没有路由器声明自己为DR,将新推举出的BDR设置为DR。

  4.在网络选择DR/BDR之后,如果出现一个具有更高优先级的新路由器,DR/BDR将不会重新当选。

  5.DR/BDR选举完成后,DRother仅与DR/BDR形成邻接关系。所有路由器都通过多播发送数据包,以便它们可以跟踪其他邻居的信息,即DR将更新数据包泛洪到224.0.0.5。DRother仅更新数据包组播到地址224.0.0.6,仅DR/BDR侦听此地址。

  简单的说:DR/BDR的筛选过程

  1.优先级为0的不参与选举;

  2.优先级高的路由器为DR;

  3.优先级相同时,以routerID大为DR;

  4.路由器ID以回送接口的最大IP为基础;如果没有环回接口,则以实际接口的最大ip为准。

  5.缺省条件下,优先级为1。

  五、OSPF邻居关系

  (一)关系建立的4个阶段

  1.邻居发现阶段

  2.双向通信阶段

  3.数据库同步阶段

  4.完全邻接阶段:

  (二)状态机制

  1.Down:

  此状态表示OSPF运行的初始状态。首先向外发送hello报文,不知道DR和其他路由器。组播地址224.0.0.5用于发送hello报文。

  2.Attempt:

  NBMA网络中才有,标识路由器开始发送hello报文,还没有收到对方发送的hello报文,120s后还没有收到转变为dowm。

  3.Init:

  表明OSPF开始发送hello报文,收到的hello报文里邻居表没有自己的信息。

  4.two-way:

  在这种状态下,已经建立了双向通信,但是尚未与邻居建立邻接关系。这是建立邻接关系之前的最高状态。

  5.ExStart:

  这是形成邻接关系的第一步。邻居状态变为该状态后,路由器开始向邻居发送DD数据包。在该状态下形成主从关系,并且在该状态下还确定初始DD序列号。在此状态下发送的DD消息不包含链接状态描述。

  6.Exchange:

  信息交换状态,本地路由器和邻居互换DBD数据包。(DBD包含有关LSDB中LSA条目的摘要信息)。

  7.Loading:

  信息加载状态。接收到DBD之后,将接收到的信息与链路状态数据库中的信息进行比较。如果DBD中有更新的链接状态条目,则将LSR发送到另一方以请求新的LSA。

  8.Full:

  成功建立邻接状态,邻接状态之间的LSDB同步完成。

  六、OSPF区域

  (一)路由器类型

  1.IR(InternalRouter):内部路由器

  2.ABR(AreaBorderRouter):区域边界路由器

  3.BackboneRouter(BR):骨干路由器

  4.ASBR(AutonomousSystemBoundaryRouter):自治系统边界路由器

  (二)OSPF中两种区域

  1.骨干区域

  2.非骨干区域

  在在一个OSPF区域中只能有一个骨干区域,并且可以有多个非骨干区域。骨干区域的区域号为0。为避免区域之间的路由环路,不允许非骨干区域之间直接通告路由信息。因此,其他区域要与骨干区域相连。

  划分OSPF区域可以减小路由器的路状态数据库大小并减少网络流量。该区域中的详细拓扑信息不会发送到其他区域,并且简单的路由信息将在区域之间传输,而不是详细描述拓扑结构的链接状态信息。每个区域都有自己的LSDB,不同区域的LSDB不同。路由器为它连接到的每个区域维护一个单独的LSDB。由于详细的链接状态信息不会在该区域外发布,因此LSDB的规模大大减小了。

  在区域之间运行的路由器称为区域边界路由器ABR,其包含所有连接区域的LSDB。自治系统边界路由器ASBR是指与其他AS中的路由器交换路由信息的路由器。该路由器会将AS外部路由信息发布给整个AS。在小型企业网络中,可以将所有路由器划分为同一区域,并且同一OSPF区域中的路由器中的LSDB是完全一致的。OSPF区域号可以手动配置。为了便于将来的网络扩展,建议将区域号设置为0,这是骨干区域。

  (三)虚链路

  1.虚链路的应用场景:

  1)通过非骨干区域连接到骨干区域

  2)通过一个非骨干区域连接一个分段的骨干区域两边的部分区域

  2.虚链接实际是一个逻辑的隧道,配置虚链接有一些规则:

  1)虚链接要配置在2个ABR之间

  2)虚链接所经过的区域必须具有完整的路由信息

  3)TransitArea不能是StubArea

  4)尽可能避免使用虚链接,这会增加网络的复杂性并增加故障排除的难度

  七、OSPF主要LSA类型

  (一)类型1:RouterLSA

  在OSPF中,所有路由器都将产生RouterLSA,该LSA只在本区域中传播,描述了本端信息、对端信息,DR的接口IP,用于构建域内拓扑。

  (二)类型2:NetworkLSA

  在BMA/NBMA网络中,DR都会产生这种NetworkLSA,它只在产生这条LSA的区域泛洪,描述了DR接口的IP的网络掩码及网络内路由器的集合,帮助一类LSA构建域内拓扑。

  (三)类型3:NetworkSummaryLSA

  它由ABR路由器发出,用于通告区域外部目标地址。当其他路由器从ABR接收到LSA时,它将不运行SPF算法,它只是增加了到达ABR和LSA中的开销。

  (四)类型4:ASBRSummaryLSA

  由ABR发出,描述了谁是ASBR,以及通告路由器是谁,帮助五类LSA构建域外拓扑。

  (五)类型5:ASExternalLSA

  它是从ASBR路由器发送的,并将目的地发布到OSPF系统内部,或者OSPF自主系统那个外部的缺省路由的LSA。它描述了AS外部的路由信息,并用于构建域外拓扑。

  (六)类型7:NSSAExternalLSA

  来自非完全Stub区域(NSSA)中从ASBR发送的LSA仅在NSSA区域中泛洪,这与五类LSA不同,它描述了AS外部的路由信息。它用于构建域外拓扑。

  八、Wireshark

  (一)Wireshark简介

  Wireshark是网络数据包分析软件。Wireshark的主要功能是捕捉网络数据包并尽可能呈示出最详细的数据包信息。可以通过Wireshark分析报文,其可以将复杂的难以看到的报文,以清晰的、可视化的形式展现出来,方便分析学习。Wireshark使用WinPCAP作为接口来直接与网卡交换数据包。

  (二)Wireshark优点

  1.支持协议数量庞大,包含了了目前的大多数公有协议。

  2.强大的过滤器功能,提供了协议本身所能提供的信息以及大量的扩展信息字段。

  3.可用于消息的批处理和专用协议的开发。。

  4.开源,可以直接在github上搜索。

  5.协议更新快。

  6.消息处理的处理速度快,因为消息的解码,协议分析等方面主要是用C语言编写的,效率很高。

  7.Linux以及Windows都支持。

  九、实验

  (一)构建域内拓扑

基于Wireshark解析OSPF协议

  1.实验拓扑

  图一:实验拓扑1

  2.实验配置

  R1配置

  #

  sysnameR1

  #

  interfaceEthernet0/0/0

  ipaddress192.168.1.254255.255.255.0

  #

  interfaceGigabitEthernet0/0/0

  ipaddress12.0.0.1255.255.255.0

  #

  ospf1

  area0.0.0.0

  network192.168.1.00.0.0.255

  network12.0.0.00.0.0.255

  #

  return

  3.实验截图

  以分析R1、R2为例:

  1)OSPF启动后,R1、R2会持续向通过组播224.0.0.5向外发送Hello报文,此时DR、BDR都为空,链路状态机为Init。

  图二:Hello报文

  2)链路状态机为twoway时,R1、R2收到了对方发送的hello报文,成功建立邻居关系,之后进行DR、BDR的选举。

  图三:Hello报文

  3)在ExStart状态下R1、R2互相发送空的DD报文,向外宣告自己为主路由器选举主从关系。I位为是否为第一个包,M位为后续是否还有包,MS位1为主,2为从。

  R2发出:

  图四:空的DD报文

  R1发出:

  图五:空的DD报文

  4)由于未配置router-id,所以根据接口IP选择主从关系,IP大的为主路由器,因此R1接收R2的DD消息,状态机变为ExChange,并向R2发送摘要信息DD消息(一类LSA)。R2将包含链路摘要信息的DD消息(类型I和类型IILSA)发送到R1。双方交换DD消息以建立自己的LSDB。

  R1发出:

  图六:DD报文

  R2发出:

  图七DD报文

  5)建立各自的LSDB之后,它们进入Loading状态并互相请求路由信息。R1和R2发送LSR消息以请求LSA,发送LSU宣布LSA,最后发送LSAck进行确认。

  以R1向R2请求为例:

  a)R1开始向R2发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。

  图八:LSR报文

  b)R2向R1发送LSU报文,LSU消息包含有关请求的链接状态的详细信息。R1完成接收LSU消息后,将邻居状态从Loading变为Full。

  图九LSU报文

  c)R1向R2发送LSAck消息以确认LSU消息。R2收到LSAck报文后,双方便建立起了完全的邻接关系。

  图十:LSAck报文

  (二)构建域间、域外拓扑

  构建域间拓扑和域外拓扑所发的报文的过程与建立邻居关系、邻接关系、更新LSDB的过程是相同的,只是在发送报文时报文中的LSA类型不同。

  1.实验拓扑

  图十一:实验拓扑2

  2.实验配置

  1)R1配置

  sysnameR1

  #

  interfaceGigabitEthernet0/0/0

  ipaddress12.0.0.1255.255.255.0

  #

  interfaceLoopBack0

  ipaddress192.168.1.1255.255.255.0

  #

  ospf1router-id1.1.1.1

  area0.0.0.1

  network192.168.1.00.0.0.255

  network12.0.0.00.0.0.255

  #

  return

  2)R2配置

  interfaceGigabitEthernet0/0/0

  ipaddress12.0.0.2255.255.255.0

  #

  interfaceGigabitEthernet0/0/1

  ipaddress23.0.0.2255.255.255.0

  #

  ospf1router-id2.2.2.2

  area0.0.0.0

  network23.0.0.00.0.0.255

  area0.0.0.1

  network12.0.0.00.0.0.255

  #

  return

  3)R3配置

  interfaceGigabitEthernet0/0/0

  ipaddress23.0.0.3255.255.255.0

  #

  interfaceGigabitEthernet0/0/1

  ipaddress34.0.0.3255.255.255.0

  #

  ospf1router-id3.3.3.3

  area0.0.0.0

  network23.0.0.00.0.0.255

  area0.0.0.2

  network34.0.0.00.0.0.255

  #

  return

  4)R4配置

  interfaceGigabitEthernet0/0/0

  ipaddress34.0.0.4255.255.255.0

  #、

  interfaceGigabitEthernet0/0/1

  ipaddress45.0.0.4255.255.255.0

  #

  ospf1router-id4.4.4.4

  import-routerip1

  area0.0.0.2

  network34.0.0.00.0.0.255

  #

  rip1

  version2

  network45.0.0.0

  import-routeospf1

  #

  return

  5)R5配置

  sysnameR5

  #

  interfaceGigabitEthernet0/0/0

  ipaddress45.0.0.5255.255.255.0

  #

  interfaceLoopBack0

  ipaddress192.168.5.1255.255.255.0

  #

  rip1

  version2

  network45.0.0.0

  network192.168.5.0

  #

  return

  3.实验截图

  1)域间拓扑构建

  在同一区域内只传递一类、二类LSA,一个区域的一类、二类LSA想传递至邻居区域内是需经过ABR转化为三类LSA传递。

  a)R2向area1发布两条三类LSA,宣告有area1外23.0.0.0和34.0.0.0两个网络。

  图十二:三类LSA1

  b)R3向R2发送三类LSA宣告area0外网络34.0.0.0

  图十三:三类LSA2

  2)域外拓扑构建

  AS100使用OSPF协议,AS200使用RIP协议,两个AS之间想要相互通信需在AS100内引入RIP协议,在AS200内引入OSPF协议。

  引入后,ASBRR4将生成五类LSA,以描述如何从ASBR到达外部目的地。ABRR3和R2将生成四类LSA,用于描述如何从ABR到达ASBR。

  a)ASBR发送五类LSA,AS外网络号45.0.0.0和192.168.5.0

  图十四:五类LSA1

  b)ABR五类LSA,AS外网络号45.0.0.0和192.168.5.0

  图十五:五类LSA2

  c)ABR五类LSA,AS外网络号45.0.0.0和192.168.5.0

  图十六:五类LSA3

  ABR发出四类LSA,宣告ASBR为R4

  图十七:四类LSA1

  图十八:四类LSA2

  十、后记

  与RIP协议相比,路由协议中的OSPF协议在路由方面确实有很大的改进。它仅支持IP路由协议。该协议是基于Internet工程任务组开发的Dijkstra算法的链路状态内部网关协议(IGP),以支持庞大的异构网络。链路状态通告(LSA)发送到所有设备,这导致路由器之间进行大量通信,然后,OSPF开始有效地工作。该协议使用三个不同的数据库表来记录邻居,链接状态和路由。

  下面是OSPF协议的特点:

  (一)开放式协议。

  (二)适用于小型至大型网络。

  (三)仅支持IP第三层路由协议栈。

  (四)链路状态路由协议

  (五)OSPF协议具有内部网关协议。

  (六)多播链路状态通告。

  (七)组播地址224.0.0.5和224.0.0.6

  (八)IP协议号89。

  (九)管理距离是110。

  (十)衡量标准是累积成本(。

  (十一)仅支持等效的负载分担。

  (十二)要每一个区域必须要接触到骨干区域或者使用虚拟链接。

  (十三)使用Dijkstra算法。

  (十四)仅支持手动汇总。OSPF协议不像增强型内部网关路由协议(EIGRP)自动化。只能在ABR(区域范围)或ASBR(汇总地址)上执行

  (十五)基于政策的路由。

关于作者: guimow

热门文章