首页 > 技术文章 > OSPF动态路由协议笔记之(三) : 域内基本配置和抓包分析

zylSec 2021-12-17 12:33 原文

OSPF动态路由协议笔记之(三) : 域内基本配置和抓包分析

  通过前两节笔记,已经介绍了OSPF的基本工作原理。包括如何建立邻居关系和邻接关系,链路状态数据库(LSDB)的同步过程,OSPF报文类型,报文结构,以及链路状态信息通告(LSA)的头部结构等。

  本节笔记主要介绍OSPF(区域内)的基本配置方法,补充OSPF区域的概念,以及对建立关系和同步LSDB的过程进行抓包分析,以此验证整个OSPF的工作过程。

 

  OSPF区域

  在继续介绍下面的内容之前,我们需要先补充一下OSPF区域的概念OSPF支持将一组网段组合在一起,这样的一个组合称为一个区域

  划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量

  

  要点①:区域内的详细拓扑信息不向其他区域发送

  区域内的详细拓扑信息不向其他区域发送区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。每个区域都有自己的LSDB,不同区域的LSDB是不同的。路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了。

 

  要点②:Area 0为骨干区域每个区域都必须连接到骨干区域

  Area 0为骨干区域为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域

 

  要点③:ABR和ASBR的概念

  运行在区域之间的路由器叫做区域边界路由器ABR(Area Boundary Router),它包含所有相连区域的LSDB。运行在自治系统(AS)之间的路由器叫自治系统边界路由器ASBR(Autonomous System Boundary Router)是指和其他AS中的路由器交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息。

 

  在规模较小的企业网络中,可以把所有的路由器划分到同一个区域中,同一个OSPF区域中的路由器中的LSDB是完全一致的。OSPF区域号可以手动配置,为了便于将来的网络扩展,推荐将该区域号设置为0,即骨干区域。

 

 

  OSPF(区域内)的基本配置方法

  打开华为模拟器eNSP,创建拓扑图:

  网络中有三台路由器AR1,AR2以及AR3,分配环回(loopback)口地址以及端口IP地址分别如下图所示。AR1和AR2之间的网段为172.16.100.0/24,AR1和AR3之间的网段为172.16.200.0/24,三台路由器均处于同一个区域内(area 0),即骨干区域。

   

  Step 1:基本配置。为各路由器配置物理接口地址和loopback口地址,此处省略。

  

  Step 2:配置区域内OSPF路由协议。如下图所示,以AR1为例,首先配置OSPF使用的router-id号,进入OSPF进程。然后配置区域号为0的区域(即骨干区域),将需要OSPF协议学习的网段路由发布给其他路由器。(注:宣告网段时,网段后需填入反掩码)

   

  同理,AR2和AR3均使用同等的配置,如下图所示:

   

 

   

  此时稍待片刻,就能看到路由器界面提示OSPF的邻居关系已经为Full,表示已成功建立。

   

  查看路由表,可以发现已经生成OSPF的路由,路由的优先级为10。

   

 

  Step 3:配置OSPF认证。

  华为系列路由器运行OSPF时,支持两种认证方式:区域认证和接口认证

   

  OSPF支持简单认证及加密认证功能,加密认证对潜在的攻击行为有更强的防范性。OSPF认证可以配置在接口或区域上,配置接口认证方式的优先级高于区域认证方式

  ① 配置简单认证和加密认证功能

  Ⅰ、配置简单认证,参数plain表示使用显示密码,参数cipher表示使用密文密码,参数null表示不认证。接口或区域上都可以运行。

  命令: ospf authentication-mode { simple [ [ plain ] <plain-text> | cipher <cipher-text>] | null }  

 

  Ⅱ、配置加密认证MD5是一种保证链路认证安全的加密算法(具体配置已在举例中给出),参数key-id表示接口加密认证中的认证密钥ID,它必须与对端上的key-id一致。

  : ospf authentication-mode { md5 | hmac-md5 } [ key-id { plain <plain-text >| [ cipher ] <cipher-text>} ] 

   

  ② 配置区域认证和接口认证示例

  Ⅰ、区域配置示例:以AR1和AR2为例,使用加密认证(MD5算法),两路由器均需配置同样的认证方式,加密方式两边应该保持一致。

   

  AR2和AR1配置方法一致,此处省略。

   

  Ⅱ、接口配置示例:以AR1和AR3为例,需分别进入端口进行配置。使用加密认证(MD5算法),两路由器均需配置同样的认证方式,加密方式两边应该保持一致。

   

  AR3和AR1配置方法一致,此处省略。

   

  Step 4:查看OSPF邻居建立情况

  : display ospf peer 

  查看ospf邻居关系建立的情况。

   

  注释:State(状态)为Full,为OSPF成功建立关系后的最终状态。OSPF规定Hello报文每10秒发送一次,若40秒过去后仍没收到对端的Hello报文,则自动结束OSPF邻居关系。

  上述回显信息表明,由于默认OSPF路由器优先级(数值为1)相同,但R2的Router ID 10.1.0.2大于R1的Router ID 10.1.0.1,所以R2为DR,R1为BDR。

  命令: ospf dr-priority 

  修改R1的DR优先级。

   

  默认情况下,DR/BDR的选举采用的是非抢占模式。路由器优先级修改后,不会自动重新选举DR。因此,需要重置R1和R2间的OSPF邻居关系。

  先关闭然后再打开R1上的Gigabit Ethernet 0/0/1接口,重置R1和R2间的OSPF邻居关系。

   

  重置后,可以看到DR已由172.16.100.2转变为172.16.100.1。

 

  命令: display ospf routing 

  查看OSPF路由表。

   

  关于如何通过OSPF路由表计算区域内的路由,将会放到下一节笔记进行说明。

   

   

  OSPF报文抓包分析

  OSPF报文拥有共五种报文类型,主要根据OSPF Header的Message Type进行区分,以下就按照不同的报文类型,对OSPF的报文字段进行分析。

  ① Hello Packet(Hello报文)

  OSPF协议使用Hello报文来建立和维护相邻邻居路由器之间的邻居关系。仅用来向邻居路由器证明自己的存在。

   

  Hello报文被周期性(Hello Interval,默认为10秒)地发向邻居路由器接口发送,如果在设定的死亡时间(Router Dead Interval,默认为40秒,通常至少是Hello包发送时间间隔的4倍)内没有收到对方OSPF路由器发送来的Hello报文,则本地路由器会认为该对方路由器无效。

  报文内容包括一些定时器设置、DR、BDR以及本路由器已知的邻居路由器。整个Hello报文格式如下表所示。

字段

长度

功能

Network Mask

4字节

发送Hello报文接口所在的子网掩码。

HelloInterval

2字节

指定发送Hello报文的时间间隔,默认为10秒。

Options

1字节

可选项,包括:

E:允许泛洪AS-external-LAS;

MC:允许转发IP组播报文;

N/P:允许处理Type 7 LSA;

DC:允许处理按需链路。

Router Priority

1字节

指定DR优先级,默认为1。数值越大越优先。如果设为0,则表示本路由器不参与DR/BDR选举。

Router Dead Interval

4字节

指定路由器失效时间,默认为40秒。如果在此时间内没有收到邻居路由器发来的Hello报文,则认为该邻居路由器已失效。

Designated Router

4字节

指定DR的接口IP地址

Backup Designated Router

4字节

指定BDR的接口IP地址

Active Neighbor

4字节

指定邻居路由器的RID。可以指定多个邻居路由器RID

 

  ② Data Description(数据库描述报文)

  DD报文是用来描述本地路由器的链路状态数据库(LSDB),在两个OSPF路由器初始化连接时要交换DD报文,进行LSDB数据库同步。

   

  DD报文内容部分包括:DD报文序列号和LSDB中每一条LSA的头部等。对端路由器根据所收到的DD报文中的LSA头部,判断出自己的LSDB中是否已有这条LSA。

  由于数据库的内容可能相当长,所以可能需要多个数据库描述报文来描述整个数据库。所以有三个专门用于标识数据库描述报文序列的比特位,即DD报文格式中的I、M和M/S这三位。接收方对报文的重新排序使其能够真实地复制数据库描述报文。

  DD交换过程按询问/应答方式进行,在DD报文交换中,一台为Master(主)角色,另一台为Slave(从)角色。Master路由器向从路由器发送它的路由表内容,并规定起始序列号,每发送一个DD报文,序列号加1,Slave则使用Master的序列号进行确定应答。但是显然,主从之间的关系会因每个DD交换的不同而不同。网络中的所有路由器会在不同时刻作用,在这个过程中既可能是主路由器又可能是从路由器。

  对于的各字段说明如下表所示。

字段

长度

功能

Interface MTU

2字节

指出发送DD报文的接口在不分段的情况下,可以发出的最大IP报文长度。

Options

1字节

可选项,包括:

E:允许泛洪AS-external-LAS;

MC:允许转发IP组播报文;

N/P:允许处理Type 7 LSA;

DC:允许处理按需链路。

I

1比特

指定在连续发送多个DD报文,如果是第一个DD报文则置1,其它的均置0。

M

1比特

指定在连续发送多个DD报文,如果后续还有报文需传达则置1,如果是最后一个DD报文则置0。

M/S

1比特

设置进行DD报文双方的主从关系,如果本端是Master角色,则置1,否则置0。

DD Sequence Number

4字节

指定所发送的DD报文序列号。主从双方利用序列号来确保DD报文传输的可靠性和完整性。

LSA Header

4字节

指定DD报文中所包括的LSA头部。可以指定多个LSA头部。

  因为DD报文仅在两台OSPF路由器初始化连接时才进行DD交换,所以它没有发送周期。之后的数据库存同步是通过LSR、LSU和LSAck报文进行同步的。

 

 

  ③ Link State Request(链路状态请求报文)

  LSR报文用于请求相邻路由器链路状态数据库中的一部分数据。当两台路由器互相交换完DD报文后,知道对端路由器有哪些LSA是本LSDB所没有的,以及哪些LSA是已经失效的,则需要发送一个LSR报文,向对方请求所需的LSA。

  LSR报文内容包括所需的LSA摘要,主要包含三个字段:Link State Type,Link State ID,Advertising Router;具体格式如下图所示:

   

 

  LSR报文内容部分各字段说明如下表所示:

字段

长度

功能

LS type

4字节

OSPF指定所请求的LSA类型,总共11类,其中主要常用的共7类,其余均为特殊场景下应用,以下仅列出常见的LSA类型:

第一类:Router-LSA(路由器LSA);

第二类:Network-LSA(网络LSA);

第三类:Network-Summary-LSA(网络汇总LSA);

第四类:ASBR-Summary-LSA(ASBR汇总LSA);

第五类:AS-External-LSA(自治系统外部LSA);

第七类:NSSA-External-LSA(NSSA外部LSA)。

Link State ID

4字节

用于指定ospf所描述的部分区域,该字段的使用方法根据不同的LSA类型而不同:

当为一类LSA时,该字段值是产生LSA 1的路由器的Router-ID;

当为二类LSA时,该字段值是DR的接口地址;

当为三类LSA时,该字段值是目的网络的网络地址;

当为四类LSA时,该字段值是ASBR的Router-ID;

当为五类LSA时,该字段值是目的网络的网络地址。

Advertising Router

4字节

指定产生此所要请求的LSA的路由器ID

 

 

  ④ Link State Update(链路状态更新报文)

  LSU报文是回应LSR报文的请求,用来向对端路由器发送所需的LSA,内容是多条LSA完整内容的集合

  LSU报文内容部分包括此次共发送的LSA数量Number of LSAs字段)和每条LSALSAs字段)的完整内容,如下图所示。

   

  LSU报文在支持组播和多路访问的链路上是以组播方式将LSA泛洪出去的,并且对没有收到对方确认应答(就是下面将要介绍的LSAck报文)的LSA进行重传,但重传时的LSA是直接送到没有收到确认应答的邻居路由器上,而不再是泛洪。报文内容部分字段如下表所示。

字段

长度

功能

Number of LSA

4字节

指定此报文中共发送的LSA数量。

LSAs

4字节

是一条条具体的LSA完整信息,后面的省略号表示可多条LSA。

 

  ⑤ Link State Acknowledge(链路状态确认报文)

  LSAck报文是路由器在收到对端发来的LSU报文后所发出的确认应答报文,内容是需要确认的LSA头部(LSA Headers)

  LSAck报文根据不同链路以单播或组播形式发送。整个LSAck报文的格式如下图所示。

   

 

  Q:在OSPF路由协议中,组播地址224.0.0.5和224.0.0.6分别代表什么,在什么情况下使用?

  组播地址224.0.0.5代表所有运行OSPF的路由器DR,BDR向DRother发送DD,LS Request,LS Update报文时,其发送的目的地址是224.0.0.5。可以理解为:DRother侦听224.0.0.5。

  组播地址224.0.0.6代表所有角色为DR的路由器DRother向DR,BDR发送DD,LS Request,LS Update报文时,其发送的目的地址是224.0.0.6。可以理解为:DR侦听224.0.0.6。

 

  通过本节笔记,补充了OSPF区域的概念,并介绍了OSPF(区域内)的基本配置方法,然后从建立邻居关系,到LSDB同步,最后建立邻接关系的各过程中,所使用的OSPF报文类型进行抓包分析。

 

  下一节笔记,将会继续介绍OSPF域内路由的基本知识,内容涵盖一类LSA(Router-LSA)和二类LSA(Network-LSA),以及如何使用这两类LSA通过SPF算法计算域内路由。

 

 

  参考链接:

  https://zhidao.baidu.com/question/117619837.html

  https://blog.51cto.com/u_13532838/2079671

  https://blog.csdn.net/weixin_33971130/article/details/90074768

 

推荐阅读