《CCNP ROUTE 300-101认证考试指南》——8.3节数据库交换过程

简介:

本节书摘来自异步社区《CCNP ROUTE 300-101认证考试指南》一书中的第8章,第8.3节数据库交换过程,作者 【美】Kevin Wallace(凯文 华莱士),更多章节内容可以访问云栖社区“异步社区”公众号查看

8.3 数据库交换过程
CCNP ROUTE 300-101认证考试指南
区域内的每台路由器在OSPF拓扑变化发生且稳定下来时,都应对于该区域拥有相同的LSDB。内部路由器(在一个区域内的路由器)只有该区域的LSA,但ABR的LSDB中会包含其连接的每个区域的LSA。因此ABR知道每个区域中有哪些LSA。

OSPF路由器会泛洪它们自己创建的LSA,也会泛洪它们从邻居学到的LSA,直到区域中的所有路由器都有该区域最新LSA的副本为止。为了管理和控制这一过程,OSPF定义了几种消息、过程和邻居状态,来明确每个邻居泛洪LSA的过程。本节一开始会列出OSPF消息和邻居状态的参考信息。接着,则会描述不存在DR时,两邻居之间的泛洪过程,之后介绍存在DR时的对应过程。本章最后会介绍如何避免LSA通告环路,以及如何周期性重泛洪信息。

8.3.1 SPF消息和邻居状态
表8-4列出了接下来将要介绍的OSPF消息类型以供读者参考。此外,表8-5列出了多种邻居状态。虽然直接阅读下表有助于学习相关要点,但在第一次学习这些内容时,读者可以暂时跳过以下表格。

关键


427cfe5f13383c9d5f2df936309413207fa36d63


09eaa256fad01a90984c56606b54e3607f852174

8.3.2 无DR时的交换
正如我们在第7章讨论的那样,OSPF接口的网络类型负责告知路由器是否尝试在该接口上选举DR。路由器不选举DR最常见的情况发生在点到点拓扑上,比如真正的点到点串行链路和点到点子接口。本节将讨论在这样的接口上,数据库的交换过程,这些内容可以为后面较复杂的、使用DR的OSPF广播网络类型(如LAN)的学习做铺垫。

每个OSPF邻居关系会以交换Hello消息开始,直到邻居到达2-Way状态。在早期,路由器通过发送组播Hello消息来发现邻居,并检查其参数,以确保所有要求的项目(表7-5中)都相互匹配。图8-7展示了上述过程的详情,图中标记了多组邻居状态,消息列在拓扑的正中。

图8-7从断开的邻居关系开始,所以邻居关系一上来处于断开(Down)状态。当路由器尝试重建邻居关系时,每台路由器都发送了组播Hello消息,并移至初始化(INIT)状态。在两路由器都收到Hello消息,并且验证了所有参数都相同后,路由器将另一个路由器的RID列在了Hello消息中,如图中底部的两个Hello消息所示。当路由器收到的Hello消息中有自己RID,路由器即会变为2-Way状态。


23cdd0b9cc128764fc0249f849303d3eeae3e7c2

如图8-7底部所示,当路由器与邻居进入2-Way状态后,路由器随后就会决定是否应该与它交换LSDB条目。当不存在DR时,路由器之间永远应交换LSDB。每台路由器都会继而遵循下列通用的过程。

步骤1 发现邻居已知的LSA,但自己不知道。

步骤2 发现两路由器都已知的LSA,但邻居的版本较新。

步骤3 请求邻居发送前两步中标识出的所有LSA副本。

图8-8详述了两邻居之间用来交换LSA的消息和邻居状态。图8-8与图8-7相同,也在消息流外侧显示了邻居状态(参考表8-5)。路由器上可以查看这些邻居状态(使用show ip ospf neighbor命令的变体),特定的状态可用来判断两邻居在数据库交换过程中的进行的程度。更重要的邻居状态将贯穿本章的全部内容。


ac8bfd05f1b1d7f5610aa0756dc3b9570b91638c

图8-8显示了OSPF的消息流,本章之前的表8-2列出了相关消息以供参考。接下来将进一步讨论图8-8中的过程。

1.发现邻居的LSDB描述
在路由器决定从2-Way状态继续进入其他状态并与邻居交换LSDB时, 就会执行图8-8所示的过程。该过程的下一步要求两路由器相互告知区域中所有已知LSA的LSID。这样做的主要目的是让每台路由器搞清楚自己还不知道哪些LSA,然后就可以请求相应设备发送它所需要的完整LSA了。为了学习那些邻居已知的LSA,邻接路由器会遵循以下步骤。

步骤1 将数据库描述包(缩写为DD和DBD)以组播的方式发送至224.0.0.5,这是所有SPF路由器的组播地址。

步骤2 在发送第一个DD消息时,邻居转换到ExStart状态,直到有较高RID的路由器成为主/从关系中的主路由器。

步骤3 选举主路由器后,将邻居状态转换为Exchange状态。

步骤4 继续互相发送组播DD消息,直到两路由器都有区域中相同的LSID视图。

注意DD消息不会列出完整的LSA,只包含LSA头部。这些头部中会包含LSA的LSID和LSA序列号。LSA的LS序列号初始创建时会从0x80000001(十六进制)开始。创建LSA的路由器会增加序列号值,并在LSA改变时重泛洪LSA。例如,如果接口从up变为down,路由器会更改类型1的LSA来将接口状态标示为down,增加LSA序列号,并重泛洪LSA。

主路由器负责控制消息交互中的DD消息流,从路由器会应答主路由器的DD消息。主路由器持续发送DD消息,直到它列出区域中所有已知的LSID。从路由器则会通过将LSA头部放入自己的DD消息作出应答。一些LSA头部只是简单地重复从路由器从主路由器那里接收到的内容,以告知主服务器:从服务器学到了主服务器发来的LSA头部。此外,从服务器中还会包含主路由器中未列出LSA的LSA头。

每台路由器在了解了自己LSDB中没有的LSA列表(其他路由器中有这些LSA)之后,DD消息的交换过程就会结束。此外,每台路由器虽然在本地已经拥有了LSA列表,但路由器在发现其他路由器中有更新的LSA列表副本(基于序列号判断)后,DD消息的交换过程就会结束。

2.交换LSA
当两邻居知道它们共享了LSID列表后,它们之间就会转为Loading状态,并开始交换完整的LSA——但只交换那些未知或已更改的LSA。

例如,当图8-8中的两台路由器成为邻居后,两台路由器都不会有另一台路由器类型1 LSA的副本。R1请求R2发送其LSID为2.2.2.2的LSA。R2于是发送自己的类型1 LSA,R1确认接收。上述机制的工作方式如下所示。

步骤1 邻居状态转为Loading。

步骤2 针对所有缺失的LSA发送链路状态请求(LSR)消息,列出所请求LSA的LSID。

步骤3 邻居路由器通过链路状态更新(LSU)响应LSR消息,在每个消息中列出一个或多个LSA。

步骤4 通过发送链路状态确认(LSAck)消息(称作显式确认)确认接收,或者使用LSU消息发送与收到LSA相同的LSA给其他路由器(隐式确认)来确认接收。

步骤5 当发送、接收和确认完所有LSA后,邻居关系就会转换至FULL状态(完全邻接)。

注释:
因为本节讨论的是无DR的情况,所以所有消息都会以组播方式发送到所有SFP路由器的组播地址224.0.0.5,除非邻居配置了OSPF neighbor命令。
在上述过程结束时,两路由器上对于链路所属的区域,都应该拥有了相同的LSDB。此时,两路由器就可以运行SPF算法来选择每个子网当前的最优路由了。

8.3.3 有DR时的交换
有DR时的数据库交换与无DR时的数据库交换稍有不同,但大部分过程相似,有相同的消息、含义和邻居状态。最大的不同是每台路由器选择与谁进行数据库交换。

非DR路由器不会与一个子网中的所有邻居交换数据库。它们只会与DR交换数据库。随后,DR会与子网中剩下的OSPF路由器交换新的/有变更的LSA。

上述概念沿袭了图8-4中类型2 LSA的理念。图8-9中有4个类型1的LSA,代表一个LAN中的4台真实路由器,还有1个类型2的LSA,代表多路访问子网。DR负责创建类型2的LSA,这是DR工作的一部分。

图8-9展示了数据库交换的两大概念性步骤:非DR路由器(R3)首先与伪结点交换自己的数据库,随后类型2伪结点再与其他路由器交换其数据库。不过伪结点是一个概念,不是一台路由器。为了让图8-9描述的过程正常工作,DR会承担类型2伪结点的工作,消息也稍有不同,如下所示:

关键

非DR如图8-9所示,它们会使用相同的消息进行数据库交换,但路由器会把这些消息发送到所有DR路由器的组播地址224.0.0.6;
DR使用相同的消息进行数据库交换,但会发送消息到所有SPF路由器的组播地址224.0.0.5。
读者应同时考虑这两个规则。首先,发往224.0.0.6的消息只会由DR和BDR进行处理。DR主动参与,应答这一消息,BDR则只是一个安静的旁观者。实际上,这种方式意味着非DR路由器只会直接与DR和BDR交换数据库,而不会与子网中的其他路由器交换数据。


3842604412311d52179f20c62f2421bdf245b8d4

接下来,我们来讨论从DR到所有SPF路由器组播地址224.0.0.5的组播消息。所有OSPF路由器都会处理此消息,剩下的路由器——Cisco IOS中称为DROther——也学习到了最近交换的LSA。上述过程完成了图8-9中所示的第二步,图中DR为伪结点,负责向子网中的其他OSPF路由器泛洪LSA。

上述过程会在后台进行,并且常常可以忽略掉。然而,对于管理OSPF网络的人员来说,必须能够区分这两个规则。存在DR时,DROther路由器只会与DR/BDR进行数据库交换(如图8-9所示),而不与子网中的其他路由器交换。例如在图8-9中,R1为DR,R2为BDR,R3/R4为DROther。因为上述基本流程不让R3和R4互相交换数据库,因此这两台路由器不会达到FULL邻居状态,而只是保持在2-Way状态。

例8-6显示了图8-9中LAN的最终输出信息,其中有4台路由器。输出内容来自DROther R3,输出信息表示R3与DROtherR4为2-Way状态,输出也显示了接口Fa0/0的优先级为2,输出信息还显示了邻居计数(所有邻居)为3,以及邻接邻居计数(所有状态为完全邻接的邻居)为2,这也是因为DROther R3和R4的邻居关系不是完全邻接。


b83417f063c3d48c92aa0e5e79a2f94a66b94d80

8.3.4 在区域内泛洪
至此,本节的数据库交换过程关注的都是在邻居之间交换数据库。然而,LSA需要在一个区域内泛洪。为此,当路由器从邻居学习到新的LSA时,路由器就知道了同一区域中的其他邻居可能还不知道该LSA。同理,当LSA发生变更时——例如,当接口改变了状态——路由器可能学到了已有LSA的新序号版本,此时它也需要向区域中的其他邻居泛洪变更后的LSA。

图8-10展示了上述过程的一个基本示例。在此例中,R2、R3和R4之间建立了邻居关系,在本区域的LSDB中有4个LSA。R1是新加入互联网络的路由器。

首先,在新的R1-R2邻居关系建立,且数据库交换过程完成后,会发生什么呢?在R1启动,链路也启用后,R1和R2达到FULL状态并拥有共享的区域1 LSDB。R2学习到了所有R1的新LSA(应该只有R1的类型1路由器LSA),而R1也学到了区域1中所有R2已知的LSA,包括R3和R4的类型1 LSA。

接着,我们来考虑此时R3和R4的LSDB。R1-R2间的数据库交换并不会告知R3或R4任何R1已知的新LSA。所以在R2学习到了R1的类型1 LSA后,它就会向R2/R3/R4 LAN上的DR发送DD包。而接下来交互的LSR/LSU包,会让R3和R4学习到R1的新LSA。如果区域1中有更多路由器,泛洪过程也会在整个区域内继续,直到所有路由器都知道每个LSA的最优(最高序列号)副本为止。


a27fc7a242318ead11549129949a0cc5e2664452

数据库交换还有另一重效果:泛洪过程还避免了LSA环路。路由器通过DD消息了解到邻居已知的LSA头部,但只请求邻居已知但本地路由器未知的LSA。通过只请求未知的LSA或已知LSA的新版本,路由器也就避免了LSA在通告中形成环路。

8.3.5 周期性泛洪
虽然OSPF不会像距离矢量协议那样周期性地发送路由更新,但它会基于每个LSA的老化变量,每30分钟重泛洪每个LSA。创建LSA的路由器将老化值设置为0(秒)。每台路由器随着时间增加自己每个LSA副本的老化值。如果30分钟过去了LSA没有更改(这也意味着30分钟内没有其他理由造成LSA的重泛洪),所属路由器就会增加序列号值,重置计时器为0,然后重泛洪LSA。

因为所属路由器会增加序列号并每1800秒(30分钟)重置LSAge,因此各种show ip ospf database命令的输出信息中也会显示出那些小于1800秒的LSA老化值。例如,在例8-5中,R1(RID 1.1.1.1)的类型1 LSA的老化值为943秒,序列号为0x80000003。序列号会随着时间增加,每30分钟LSAge会循环增加至1800,然后在重泛洪LSA时回到0。

还有一点需要注意:当路由器需要清除一个区域LSDB中的一个LSA时,它会将LSA的老化值设置为MaxAge值(3600),然后重泛洪此LSA。当所有其他路由器收到这个LSA时,发现老化值已为最大,于是这些路由器也会将这个LSA从其LSDB中移除。

相关文章
|
7月前
|
关系型数据库 分布式数据库 数据库
成都晨云信息技术完成阿里云PolarDB数据库产品生态集成认证
近日,成都晨云信息技术有限责任公司(以下简称晨云信息)与阿里云PolarDB PostgreSQL版数据库产品展开产品集成认证。测试结果表明,晨云信息旗下晨云-站群管理系统(V1.0)与阿里云以下产品:开源云原生数据库PolarDB PostgreSQL版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
2月前
|
安全 Java 关系型数据库
springboot整合springsecurity,从数据库中认证
本文介绍了如何在SpringBoot应用中整合Spring Security,并从数据库中进行用户认证的完整步骤,包括依赖配置、数据库表创建、用户实体和仓库接口、用户详情服务类、安全配置类、控制器类以及数据库初始化器的实现。
177 3
springboot整合springsecurity,从数据库中认证
|
4月前
|
前端开发 数据库 数据库管理
阿里云数据库 ACP 问题之云厂商数据库认证相比单个数据库认证有什么优势
阿里云数据库 ACP 问题之云厂商数据库认证相比单个数据库认证有什么优势
|
7月前
|
NoSQL 安全 MongoDB
MongoDB为提供MongoDB数据库服务的云服务合作伙伴推出认证计划
Certified by MongoDB DBaaS计划还将为云计算合作伙伴提供构建深度技术集成所需的专业支持,同时还将携手MongoDB合作伙伴生态系统(MongoDB Partner Ecosystem)共同推出一系列联合的进入市场举措,使云服务合作伙伴能够助力其客户快速走向成功。
3157 0
|
7月前
|
存储 安全 Java
Spring Security实现基于数据库实现认证
本文档介绍了如何在Spring Security框架中基于数据库实现用户认证。首先,Spring Security提供了一个`UserDetailsService`接口,用于获取用户详细信息,通常在用户尝试登录时被调用。
102 5
|
7月前
|
Cloud Native 关系型数据库 分布式数据库
数据库性能诊断工具DBdoctor通过阿里云PolarDB产品生态集成认证
DBdoctor(V3.1.0)成功通过阿里云PolarDB分布式版(V2.3)集成认证,展现优秀兼容性和稳定性。此工具是聚好看科技的内核级数据库性能诊断产品,运用eBPF技术诊断SQL执行,提供智能巡检、根因分析和优化建议。最新版V3.1.1增加了对PolarDB-X和OceanBase的支持,以及基于cost的索引诊断功能。PolarDB-X是阿里巴巴的高性能云原生分布式数据库,兼容MySQL生态。用户可通过提供的下载地址、在线试用链接和部署指南体验DBdoctor。
399 0
|
7月前
|
存储 SQL 关系型数据库
Pandas与数据库交互:实现高效数据交换与存储
【4月更文挑战第16天】本文介绍了Pandas与数据库交互的方法,包括使用`read_sql`和`to_sql`函数连接SQLite、MySQL等数据库。为了提升数据交换效率,建议采用批量操作、优化SQL查询和使用事务。在数据存储优化方面,选择合适的数据类型、压缩数据以及使用分区或分片都是有效策略。通过这些方法,可实现Pandas与数据库间高效、可靠的数据处理和分析。
|
7月前
|
存储 缓存 数据库
Shiro【核心功能、核心组件、项目搭建 、配置文件认证、数据库认证 】(一)-全面详解(学习总结---从入门到深化)
Shiro【核心功能、核心组件、项目搭建 、配置文件认证、数据库认证 】(一)-全面详解(学习总结---从入门到深化)
315 1
|
Kubernetes 关系型数据库 分布式数据库
kubeblocks完成阿里云PolarDB数据库产品生态集成认证
近日,杭州云猿生数据有限公司(以下简称云猿生)与阿里云PolarDB 开源数据库社区展开产品集成认证。测试结果表明,杭州云猿生数据有限公司旗下kubeblocks(V0.7.0)与阿里云以下产品:开源云原生数据库PolarDB 分布式版( V2.0 ),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
存储 Cloud Native 关系型数据库
星辰天合公司产品完成阿里云PolarDB数据库产品生态集成认证
近日,XSKY星辰天合旗下产品与阿里云PolarDB 开源数据库社区展开产品集成认证。测试结果表明,星辰天合旗下的融合计算管理平台XHERE(V2)、统一数据平台XEDP(V6)、天合翔宇分布式存储系统(V6)与阿里云的开源云原生数据库 PloarDB分布式版(V2.2)以及开源云原生数据库PolarDB PostgreSQL(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。