OSPF动态路由协议笔记之(三) : 域内基本配置和抓包分析
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字段)和每条LSA(LSAs字段)的完整内容,如下图所示。
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