Cisco 路由重发布 —— 实现路由信息在不同路由域间的传递

一、技术背景

在实际的组网中,可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备,使用 EIGRP 协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备,而华为的设备是不支持 EIGRP 的,因此可能就在扩容的网络中跑一个 OSPF,但是这两部分网络依然是需要路由互通的,这就面临一个问题。因为这毕竟是两个不同的路由协议域,在两个域的边界,路由信息是相互独立和隔离的。那么如何将全网的路由打通呢?这就需要用到路由重发布(Route Redistribution,又被称为路由重分发)。
在这里插入图片描述

看上图,R1 与 R2 之间运行 RIP 来交互路由信息,R2 通过 RIP 学习到了 R1 发布过来的 192.168.1.0/24 及 2.0/24 的 RIP 路由,装载进路由表并标记为 R(RIP)。同时 R2 与 R3 又运行 OSPF,建立起 OSPF 邻接关系,R2 也从 R3、通过 OSPF 学习到了两条路由:192.168.3.0 及 192.168.4.0/24,也装载进了路由表,标记为 O(OSPF 区域内部路由)。

那么这样一来,对于 R2 而言,它自己就有了去往全网的路由,但是在 R2 内部,可以这么形象的理解:它不会将从 RIP 学习过来的路由,“变成” OSPF 路由告诉给 R3,也不会将从 OSPF 学习来的路由,变成 RIP 路由告诉给 R1。对于 R2 而言,虽然它自己的路由表里有完整的路由信息,但是,就 R 和 O 的条目之间有道鸿沟,无法逾越。而 R2 就也就成了 RIP 及 OSPF 域的分界点,称之为 ASBR(AS Boundary Routers,AS 边界路由器)。

那么如何能够让 R1 学习到 OSPF 域中的路由,让 R3 学习到 RIP 域中的路由呢?关键点在于 R2 上,通过在 R2 上部署路由重发布,可以实现路由信息在不同路由选择域间的传递。

在这里插入图片描述

上图是初始状态。R2 同时运行两个路由协议进程:RIP 及 OSPF。它通过 RIP 进程学习到 RIP 路由,又通过 OSPF 进程学习到 OSPF 域内的路由,但是这两个路由协议进程是完全独立的,其路由信息是相互隔离的。

在这里插入图片描述

现在开始在 R2 上执行重发布的动作,将 OSPF 的路由 “注入” 到了 RIP 路由协议进程之中,如此一来 R2 就会将 192.168.3.0/24 及 192.168.4.0/24 这两条 OSPF 路由 “翻译” 成 RIP 路由,然后通过 RIP 通告给 R1。R1 也就能够学习到 192.168.3.0/24 及 192.168.4.0/24 路由了。

注意重发布的执行点,是在 R2 上,也就是在路由域的分界点(ASBR)上执行的,另外,路由重发布是有方向的,例如刚才执行完相关动作后,OSPF 路由被注入到了 RIP,但是 R3 还是没有 RIP 域的路由,需要进一步在 R2 上将 RIP 路由重发布进 OSPF,才能让 R3 学习到 192.168.1.0/24 及 192.168.2.0/24 路由。

路由重发布是一种非常重要的技术,在实际的项目中时常能够见到。由于网络规模比较大,为了使得整体路由的设计层次化,并且适应不同业务逻辑的路由需求,会在整个网络中设计多个路由协议域,而为了实现路由的全网互通,就需要在特定设备上部署路由重发布。另外在执行路由重发布的过程中,又可以搭配工具来部署路由策略,或者执行路由汇总,如此一来路由重发布带来一个对路由极富弹性和想象力的操作手柄。

二、实施要点

2.1 管理距离问题

在这里插入图片描述

如上图所示,R5 将 192.168.1.0 宣告进了 RIP,R3 及 R4 都能够学习到这条路由,并且装载进自己的路由表。为了让 OSPF 域能够学习到 RIP 域内的路由,在 R3 及 R4 上都部署 RIP 到 OSPF 的重发布。理想中的情况是,OSPF 域内的路由器能同时从 R3 及 R4 学习到注入进来的路由。但是情况却没有那么如人意。

假设在 R3 上先完成的重发布配置,192.168.1.0 这条路由将被 R3 注入到 OSPF 中,并被更新给 R1,再由 R2 更新给 R4,此刻,R4 同时从 OSPF 及 RIP 都学习到了这条路由,它会作何优选?当然是优选 OSPF 的,因为 AD 小,所以它的路由表里,关于 192.168.1.0 的路由是 OSPF 的下一跳 R2。这样一来,对于 R4 而言,它去往 192.168.1.0 网络,就存在次优路径,也就是说,绕远路了,走的是 R2-R1-R3-R5 这条路径。

并且由于 R4 路由表里没了关于 192.168.1.0 的 RIP 路由,自然 RIP 向 OSPF 的重发布就失败了。因为,只有当路由存在于路由表中时,才能够将该路由注入到其他路由协议中

以上就是双点路由重发布的模型中,最容易出现的一个问题:次优路径问题,根本原因还是出在管理距离上。

几种常见的路由协议其 AD 值列举如下:

在这里插入图片描述

解决次优路径的方法有不少,例如可以在 R4 上,将 OSPF 外部路由的管理距离从缺省的 110 修改为 130,比 RIP 的管理距离 120 更大,这样一来,关于 192.168.1.0 的路由,R4 一方面是从 R2 学习到,类型为 OSPF 外部路由,另一方面又从 RIP 学习到,而此时在 R4 上 OSPF 外部路由的管理距离被修改为 130 比 RIP 要大,因此 R4 优选来自 RIP 的 192.168.1.0 路由,并将 RIP 路由装载到路由表,次优路径问题即可解决,而且一旦 192.168.1.0 的 RIP 路由出现在路由表后,R4 的 RIP 到 OSPF 重发布就能够成功。

2.2 路由 feedback

在这里插入图片描述

路由的 feedback(倒灌)是一个在部署路由重发布时需要非常注意的一个现象。如上图所示,R5 将 192.168.1.0 宣告进了 RIP,R3 及 R4 都能够学习到这条路由,并且装载进自己的路由表。如果在 R3 就 R4 上部署 RIP 到 OSPF 的双向重发布,会发生什么事情呢?

假设在 R3 上先完成的配置,192.168.1.0 这条路由将被 R3 注入到 OSPF 中,并被更新给 R1,再由 R2 更新给 R4,到此 R4 就出现次优路径了,这个上面已经介绍过了,并且由于 R4 路由表里没了关于 192.168.1.0 的 RIP 路由,自然 RIP 向 OSPF 的重发布就失败了,更糟糕的是,由于在 R3 及 R4 上部署的是双向重发布,也就是 RIP 向 OSPF 及 OSPF 向 RIP 都做了重发布,这就导致 R4 上关于 192.168.1.0 的 OSPF 路由被倒灌回 RIP,这就是路由 Feedback,路由被灌回来了:

在这里插入图片描述

这是有极大隐患的,非常容易引发路由环路问题。

在上面这个场景中,在 R3 及 R4 两个点上,部署了 RIP 到 OSPF、OSPF 到 RIP 的双向路由重发布,这种组网被称之为:“双点双向路由重发布”。双点双向重发布的模型在不少组网中被应用,这里头蕴含了许多细节和许多技巧,而且稍微操作不当,就容易引发次优路径或路由环路的问题。

2.3 Metric 问题

在这里插入图片描述

要知道,每一种路由协议,对路由 Metric(度量值)的定义是不同的,OSPF 是用 cost(开销)来衡量一条路由的优劣,RIP 是用跳数,EIGRP 是用混合的各种元素,那么当将一些路由,从某一中路由协议重发布到另一种路由协议中,这些路由的 metric 会作何变化呢?

方式一是,你可以在执行重发布的动作的时候,手工指定重发布后的 Metric 值,具体改成什么值,要看实际的环境需求。

方式二是,采用缺省的动作,也就是在路由协议之间重发布时使用的种子度量值。所谓种子度量值,指的是当将一条路由从外部路由选择协议重发布到本路由选择协议中时,所使用的缺省 Metric 值

看下表(下表是 Cisco IOS 平台上的种子度量值,可在路由协议进程中使用 default-metric 修改,有可能的一个情况是,不同网络设备厂商,种子度量值有所不同):
在这里插入图片描述

注意,以上是从其他动态路由协议重发布进该路由协议时的默认 metric。而如果是重发布本地直连路由或静态路由到该路由协议,情况就不是这样,例如重发布直连或静态到如下路由协议时:

- EIGRP 请见红茶三杯 EIGRP 笔记(访问 ccietea.com)【访问异常】20240717

- RIP 重发布直连如果没有设置 metric,则默认 1 跳传给邻居(邻居直接使用这个 1 跳作为 metric);重发布静态路由默认 metric=1,使用 default-metric 可以修改这个默认值,这条命令对重发布直连接口的 metric 无影响。

- OSPF 重发布直连接口默认 cost=20;重发布静态路由默认 cost=20;使用 default-metric 可以修改重发布静态路由以及其他路由协议的路由进 OSPF 后的默认 cost,这条命令对重发布直连接口无效。

三、 配置实现

3.1 配置命令

路由重发布是有方向的,将路由从 A 路由协议注入到 B 路由协议中,要在 B 路由协议的进程中进行配置,例如,要将其他路由协议重发布到 RIP,那么配置如下(重发布到其他路由协议大同小异):

Router (config)#router rip
Router (config-router)#redistribute ?
bgp   Border Gateway Protocol (BGP)
connected Connected
eigrp   Enhanced Interior Gateway Routing Protocol (EIGRP)
isis    ISO IS-IS
iso-igrp  IGRP for OSI networks
metric  Metric for redistributed routes
mobile  Mobile routes
odr   On Demand stub Routes
ospf   Open Shortest Path First (OSPF)
rip    Routing Information Protocol (RIP)
route-map  Route map reference
static    Static routes

3.2 配置示例

1. OSPF 与 RIP 的重发布

在这里插入图片描述

R1 与 R2 运行 RIPv2;R2 与 R3 建立 OSPF 邻接关系。初始化情况下 R2 的路由表中有四个条目,如上图所示,而 R1 的路由表中,只有 2 个条目,也就是两个直连链路。现在在 R2 上做重发布动作,将 OSPF 路由重发布到 RIP,配置如下:

R2 (config)# router rip
R2 (config-router)# redistribute ospf 1 metric 3

上面的命令中 ospf 1 也就是指的进程 1。是 R2 用于和 R3 形成邻接关系的 OSPF 进程号。而 metric 3 则是将 OSPF 路由注入到 RIP 所形成的 RIP 路由的 metric 值。

如此一来,R2 的路由表中 OSPF 路由 3.3.3.0/24,以及激活 OSPF 的直连接口所在网段 192.168.23.0/24,都被注入到 RIP,而 R1 通过 RIP 就能够学习到这两条路由,如下图示红色粗体部分。
在这里插入图片描述

当然,这个时候 1.1.1.0 是无法访问 3.3.3.0 的,因为 R3 并没有 RIP 路由选择域中的路由(也就是说回程路由有问题,数据通信永远要考虑来回路径),所以如果要实现全网互通,那么需在 R2 上,将 RIP 路由注入到 OSPF:

R2 (config)#router ospf 1
R2 (config-router)#redistribute rip subnets

在这里插入图片描述

如此一来,就实现了全网互通。注意,当重发布路由到 OSPF 时,redistribute rip subnets,subnets 关键字要加上,否则只有主类路由会被注入到 OSPF 中,如果不加关键字 subnets,则本例中的子网路由 1.1.1.0/24 就无法被顺利的注入到 OSPF。因此在配置其他路由协议到 OSPF 的重发布时,这个关键字一般都是要加上的

2. OSPF 与 EIGRP 的重发布

在这里插入图片描述

初始情况同上一个实验,接下去先看看将 OSPF 路由重发布进 EIGRP AS 100,配置当然还是在 R2 上进行,进入 R2 的 EIGRP 路由进程:

R2 (config)# router eigrp 100
R2 (config-router)# redistribute ospf 1 metric 100000 100 255 1 1500

注意,EIGRP 的 metric 是混合型的,metric 100000 100 255 1 1500 这里指定的参数,从左至右依次是带宽、延迟、负载、可靠性、MTU。可根据实际需要灵活的进行设定。上述配置完成后,R2 就会将路由表中 OSPF 的路由:包括 3.3.3.0,以及宣告进 OSPF 的直连网段 192.168.23.0/24 注入到 EIGRP 进程。这样 R1 就能够学习到这两条外部路由。

接下去是 EIGRP 到 OSPF 的重发布:

R2 (config)# router ospf 1
R2 (config-router)# redistribute eigrp 100 subnets

3. 重发布直连路由

在这里插入图片描述

在上图中,R1 的 Fa1/0 口并没有在 OSPF 进程中使用 network 命令激活 OSPF。也就是说 R2 及 R3 是无法通过 OSPF 学习这个接口的直连路由。对于目前的整个 OSPF 域而言,1.1.1.0/24 这条 R1 的直连路由就是域外路由,整个域内并不知晓。

现在可以在 R1 上部署重发布,将 R1 的直连路由注入到 OSPF 域中,形成 OSPF 外部路由,然后通告给域内的其他路由器。在这里要注意区分使用 network 命令激活接口,与使用重发布直连将接口路由注入 OSPF 的区别。

当在 R1 上使用 OSPF 的 network 命令将 Fa1/0 接口激活 OSPF 时,实际上是触发了两个事情,一是这个接口会激活 OSPF 于是开始尝试发送组播的 Hello 消息去发现链路上的其他 OSPF 路由器,二是这个接口会参与 OSPF 计算和操作,R1 会将描述这个接口的相关信息通过 OSPF 扩散给其他的路由器,以便他们能够学习到 1.1.1.0/24 的路由,而且这些路由是 OSPF 内部路由。

而当在 R1 上不用 network 命令去激活 Fa1/0 口,而是直接用 redistribute connected subnets 命令将直连路由注入到 OSPF,情况就不一样了。一是这个接口的直连路由会被以外部路由的形式注入到 OSPF 中,这将联动地产生许多细节上的不同;另外,这个接口并不激活 OSPF,也就是说接口不会收发 HELLO 包。另一个有意思的地方是,redistribute connected subnets 一旦在 R1 上被部署,则 R1 上所有未被 OSPF network 命令激活 OSPF 的接口的直连路由都会被注入到 OSPF 中
在这里插入图片描述

R2 (config)# router ospf 1
R2 (config-router)# redistribute connected subnets

上面这条命令就是将本地所有直连路由(除了已经被 network 宣告的路由)注入到 OSPF 中。所有的动态路由协议都支持将直连路由重发布进路由域,命令都是类似的:redistribute connected。

4. 重发布静态路由

在这里插入图片描述

在上图所示的场景中,R2 与 R3 建立 OSPF 邻接关系,而 R1 可能由于不支持 OSPF 或者其他原因,没有运行 OSPF。为了让 R2 能够访问 1.1.1.0/24 网络,给 R2 配置了一条静态路由:

R2 (config)# ip route 1.1.1.0 255.255.255.0 192.168.12.1

这样 R2 确实是能够访问 1.1.1.0/24 网络了,但是 R3,以及整个 OSPF 域内的其他路由器依然是无法访问的,总不能给所有的 OSPF 路由器们都配置一条静态路由去往 1.1.1.0/24 吧。

解决的办法很简单,就是在 R2 上部署静态路由重发布。命令如下:

R2 (config)# router ospf 1R2 (config-router)# redistribute static subnets

上面这条命令的结果是,R2 的路由表中,所有的静态路由都会被注入到 OSPF 中形成 OSPF 外部路由,并且通过 OSPF 动态地传递到整个 OSPF 域。

3.3 重发布的几个小问题

1. 关联出接口的静态路由 在被 network 时的问题

在这里插入图片描述

R2、R3 跑 RIP,在 R2 上配置静态路由(使用关联出接口的方式进行配置):

R2 (config)# ip route 1.1.1.0 255.255.255.0 serial 0/0

在 R2 上查看路由表,会发现刚才配置的这条路由在路由表中的显示很诡异,“directly connected” 的意思是,路由器将 1.1.1.0/24 网络视为本地的直连网络,这是因为它认为,1.1.1.0/24 这个网络就在家门口 “Serial0/0“。

R2#show ip route
S  1.1.1.0 is directly connected, Serial0/0

接下去,R2 在 RIP 进程中增加如下配置:

R2 (config)# router rip
R2 (config-router)# version 2
R2 (config-router)# no auto-summary
R2 (config-router)# network 192.168.23.0
R2 (config-router)# network 1.0.0.0

则 R2 会将路由 1.1.1.0/24 宣告进 RIP 并将路由通告给 R3。对于 IGP 而言,无论是 RIP、EIGRP 还是 OSPF,要想使用关键字 network 来通告某条路由,这条路由都必须是本地直连的,但是这里是个特例,正是因为采用出接口的方式配置的静态路由,被认为是本地直连,所以才能够使用 network 命令通告。当然,如果将上面的静态路由修改为采用下一跳 IP 地址的方式配置,例如 ip route 1.1.1.0 255.255.255.0 192.168.12.1,那就不行了。

如果环境中,R2 及 R3 换成 EIGRP,则现象与 RIP 一样,R2 会将 1.1.1.0 宣告进 EIGRP
如果换成 OSPF,则无效,即关联出接口的静态路由,在 OSPF 中 network 该路由的网络号时,并不会被宣告进 OSPF。

2. 关联出接口的静态路由 在重发布时的问题

在这里插入图片描述

R2、R3 跑 RIP,在 R2 上配置静态路由(使用关联出接口的方式进行配置):

R2 (config)# ip route 1.1.1.0 255.255.255.0 serial 0/0

此时在 R2 上:

R2 (config)# router ripR2 (config-router)# redistribute connected

结果是 R3 无法学习到 1.1.1.0/24 的路由,换成 EIGRP、OSPF,现象也一样,R2 不会将 1.1.1.0/24 这条路由注入到动态路由协议中。

3. 只有在路由表中存在的路由才能够被重发布

在这里插入图片描述

在 R2 上进行双向重发布,也就是配置 RIP 到 OSPF,以及 OSPF 到 RIP 的重发布。则正常情况下 R1 能够学习到 3.3.3.0/24 路由、R3 能学到 1.1.1.0/24 路由。

如果在 R2 上增加一条静态路由的配置:ip route 1.1.1.0 255.255.255.0 null0,这个时候 R2 路由表中原有的 RIP 的 1.1.1.0 路由因为管理距离的原因,会被静态路由 1.1.1.0/24 覆盖掉,也就是说 R2 的路由表中,关于 1.1.1.0/24 路由现在是 Static 的了。

因此 R2 在将 RIP 重发布到 OSPF 时,路由 1.1.1.0/24 重发布不成功(在路由表中并没有 RIP 路由 1.1.1.0/24),所以 R3 无法学习到 1.1.1.0/24 的路由;

同样,如果 R2 增加配置:ip route 3.3.3.3 255.255.255.0 null0 也是一样的道理。

重发布是看路由表的,例如将 OSPF 重发布到 EIGRP,那么首先目标路由必须得在路由表里有,而且必须是 OSPF 的路由,才能够被注入到 EIGRP。

另外,这里有个小注意事项,回到上面这个图,R2 上部署 RIP 到 OSPF 的重发布,注意 R2 左边这个接口(与 R1 对接的接口)的直连路由也会自动重发布到了 OSPF 中,这是因为该接口是直连并且已经通过 network 的方式通告进了 RIP,因此能够被自动重发布到 OSPF,而无需满足上文提到的条件。


注:原文所有图防盗链不能直接被 csdn 转存,全部重传。

via:

  • 路由重发布 Route Redistribution 红茶三杯新浪博客 红茶三杯 2014-09-06 10:19:34)

    https://blog.sina.com.cn/s/blog_5ec353710102v23a.html


路由协议的迁移 路由Redistribute —— cisco

<路由协议的迁移>

当网络中原有的路由协议不能再很好的满足需求的时候,就需要转换为另一种路由协议,这就需要进行路由协议的迁移。

路由迁移的原则:

1、尽可能少的减少网络的停工时间
2、一旦在迁移过程中出了问题,要能迅速回退到初始状态
3、在迁移过程中要避免出现路由黑洞和环路
在路由迁移过程中还有可能要改变原有的 IP 地址,使用新的编址方案,这就需要进行地址的迁移。
地址迁移过程:
1、配置第二地址
2、将第二地址 network 进路由协议中
3、如果第二地址路由正常,将第二地址改为第一地址

int s1/0
ip address address mask secondary  // 配置辅助地址

路由迁移过程:

1、将原有协议的 AD 值改小
2、在现在网络上配置新的路由协议
3、将原有协议的 AD 值再改大,让新协议的路由起作用
4、如果路由正常,删除原有协议

router eigrp 90
distance eigrp 150 170  // 修改路由协议的管理距离

注:OSPF 不能用 Secondary 地址建邻居。Eigrp 能用 Secondary 地址建邻居。

<路由协议的重分布>

定义:重分布是指连接到不同路由选择域的边界路由器在不同自主系统之间交换和通告路由选择信息的能力。
重分布原则:路由必须位于路由选择表中才能被重分发
在重分发时设定种子 metric
协议 Seed Metric
RIP 无限大 必须手工指定
EIGRP 无限大 也必须手工指定
OSPF 20 如果重分布进来的是 BGP 的话,Metric 是 1,这是个特例
IS-IS 0
BGP 携带原来的 Metric 值
R1 (config-router)#default-metric 1 // 使用此命令来设定种子 metric 值

重分布分两种:

1、单向重分布
2、双向重分布

1)OSPF -> RIP:

将其它路由协议重分布进 RIP,要注意加 metric 值

R1 (config)#router rip
R1 (config-router)#redistribute ospf 110 metric 1 // 优于 default-metric 命令 

也可用以下方法指定 Metric 值

R1 (config-router)#default-metric 3 // 默认 Seed Metric=infinity 无限大,修改 Seed Metric=3
R1 (config-router)#redistribute connected //(可不加 Metric,默认=1)重分布直连  (在这个 TOP 中,OSPF 自动把 13.1.1.0  重分布进 RIP)
R1 (config-router)#redistribute static  //(可不加 Metric,默认=1)重分布静态

2)RIP -> OSPF:

将其它路由协议重分布进 OSPF,要注意加 subnets 参数

R1 (config)#router ospf 110
R1 (config-router)#redistribute rip subnets // 如不加 Subnets,默认只有主类地址能被重分布
默认的 metric 值为 20,也可用以下命令指定:
R1 (config-router)#default-metric 8
R1 (config-router)#redistribute rip subnets metric 10 
R1 (config-router)#redistribute rip subnets metric 10 metric-type 1 // 改动 metric 类型
R1 (config-router)#redistribute connected subnets
R1 (config-router)#redistribute static subnets  // 还可在后面加 router-map 来过滤路由

3)ISIS -> EIGRP:

将其它路由协议重分布进 EIGRP 时也要指定 Metric 值

R1 (config)#router eigrp 90
R1 (config-router)#default-metric 1500 100 255 1 1500
R1 (config-router)#redistribute isis (level2) metric 1500  100  255  1  1500 (不加 Metric, 默认 Seed Metric=infinity)       BW  DLY  R  Lo  MTU
带宽 延迟 可靠性 负载 MTU
R2#show ip ei topology 3.3.3.0/24
R1 (config-router)#redistribute connected  // 不加 Metric 也可根据直连接口的不同计算 Metric
R1 (config-router)#redistribute static  // 不加 Metric 也可根据下一跳接口计算 Metric
・当把 ISIS 重分布进其他路由协议时,运行 ISIS 的直连接口不能重分布进去,这是 ISIS 本身的 BUG。只能通过重分布直连解决。

4)EIGRP -> ISIS:

R1 (config)#router isis
R1 (config-router)#redistribute eigrp 90 (默认 Seed Metric=0 ,默认以 L2 路由进入 ISIS)
R1 (config-router)#redistribute eigrp 90 metric 8 
R1 (config-router)#redistribute ei 90 level-1 (以 L1 的路由进入 ISIS, 不做修改的话,L1 路由器就收不到外部重分布进来的路由,因为默认是 L2)
R1 (config-router)#redistribute ei 90 level-1-2 
R3#show isis database detail/verbose

经典的重分布试验:

如果一个地址不在路由表,即使它存在于 OSPF 的 LSA 数据库中,(可能通过 distribute-list 过滤掉已节省资源)路由器也不会把它重分配到其他路由选择协议。” — 摘自 《tcpip 路由 卷一》

R1# sh ip route ospf 
3.0.0.0/24 is subnetted, 1 subnets
O    3.3.3.0 [110/65] via 13.1.1.3, 00:37:25, Serial1/1
R1#sh ip route eigrp 
4.0.0.0/24 is subnetted, 1 subnets
D    4.4.4.0 [90/156160] via 14.1.1.4, 00:39:41, FastEthernet0/0
R1#sh ip route rip
2.0.0.0/24 is subnetted, 1 subnets
R    2.2.2.0 [120/1] via 12.1.1.2, 00:00:23, Serial1/0

试验题:

在 R1 上做三次重分布,先将 OSPF 重分布进 EIGRP,然后将 EIGRP 重分布进 RIP,再将 RIP 重分布进 OSPF,完成后,看看能否实现全网互通。也就是说,3.3.3.3 和 4.4.4.4,以及 2.2.2.2 能否互相 Ping 通。
・重分布-在 Router 上,将 A 协议重分布到 B 协议中:

Router 上所有运行 A 协议的接口(除 ISIS/ODR),以及 Router 路由表中所有从 A 协议学到的路由,都会被重分布到 B 协议中。

<单点双向重分布时的汇总路由回馈问题>

实验:

1、在 R1 上将 OSPF 重分布进 EIGRP
2、在 R1 的 S1/0 接口做 EIGRP 的手动汇总,汇总出一条 172.16.0.0/16 路由。这时 R2 将只收到一条汇总路由。
3、再在 R1 上将 EIGRP 重分布进 OSPF
这时你会发现,R3 上除了正常收到 12.1.1.0 的路由之外,还多了一条汇总路由,因为在 R1 上做了汇总之后,生成了一条指向 NULL0 接口的汇总路由,这样,在把 EIGRP 重分布进 OSPF 时,把这条路由也带进去了。
<双向双出口重分布>
试验:在 R1 和 R4 上先将 OSPF 重分布进 RIP,看看网络会不会出问题,每个路由器的路由表正不正常。
再在 R1 和 R4 上将 RIP 重分布进 OSPF,看看有没有问题。
通过试验,我们总结出:
・做双点双向重分布时,把 AD 值低的路由协议重分布进 AD 值高的路由协议,没啥问题。
・当把 AD 高的协议重分布到 AD 低的协议中时,就有可能出现问题。

解决方法:

1、不好的方法 – 改所有路由的 AD

R1 (config)#router ospf 110
R1 (config-router)#distance 171 (将此协议的路由的 AD 改为 171,对本协议所有路由都有效,改动范围太大,通常不建议这样做,而且是有问题的。)

2、好的方法 – 缩小范围

R1 (config-router)#distance 171 4.4.4.4(在 OSPF 中,这是 RID) 0.0.0.0  (只将路由器 4.4.4.4 通告的 OSPF 路由 AD 改为 171)

3、最好的方法 – 进一步缩小范围

R1 (config)#access-list 2 permit 2.2.2.0
R1 (config-router)#distance 171 4.4.4.4 0.0.0.0 2 (只针对 4.4.4.4 通告的 2.2.2.0 路由将 AD 改为 171,对 4.4.4.4 通告的其它路由 AD 不变)
R1 (config-router)#distance 171  0.0.0.0 255.255.255.255 2 g

上面这条命令针对所有路由器通告的指定路由来改 AD,在这一定要注意通告路由器的概念,在 OSPF 中和 EIGRP 中通告的路由器的区别,要注意所要更改的路由是由哪一个路由器通告的。

4、还可以通过为 OSPF 设置外部路由的管理距离来解决,只要将外部路由的管理距离增大到超过重分布进来的协议的 AD 就可以了

R4 (config-router)#distance ospf external 99 inter-area 88 intra-area 77

在 EIGRP 中的修改:

R4 (config)#router eigrp 90
R4 (config-router)#distance 109 24.1.1.2  0.0.0.0 (只对 D 路由有效,对 D EX 路由无效,因为 EX 路由是边界路由器通告的)
(Next-hop)(Wildcard)
R4 (config)#access-list 2 permit 1.1.1.0
R4 (config-router)#distance 109 24.1.1.2 0.0.0.0 2 (只针对 1.1.1.0 路由将 AD 改为 109, 只对 D 路由有效)
R4 (config-router)#distance eigrp   89    169
(internal)(external)

访问列表的分类:

1、标准访问列表

只能基于源 IP 地址来进行分类
可以使用列表号:1-99、1300-1999
标准的访问列表通常要求放置在靠近目标的地方

2、扩展访问列表

可以根据源 IP 地址、目的 IP 地址、源端口号、目的端口号,协议来进行分类
可以使用列表号:100-199、2000-2699
扩展访问列表通常要求放置在靠近源的地方

3、命名的访问列表

只是将标准访问列表或扩展访问列表取个名字
优点:可以对访问列表进行增加、删除操作。

访问列表的比较规则:

1、如果一个访问列表有多行语句,通常按顺序从第一条开始比较,然后再往下一条条比较。
2、一个数据包如果与访问列表的一行匹配,则按规定进行操作,不再进行后续的比较。
3、在每个访问列表的最后一行是隐含的 deny any 语句 – 意味着如果数据包与所有行都不配的话,将被丢弃。

访问列表的配置规则:

1、你在访问列表中可以写多条比较语句,它们是按你输入的顺序来进行放置的。
2、在标准访问列表扩展访问列表中,你不能单独删除其中的一行,只能删除整个列表。
3、每个列表应当至少有一个 permit 语句,否则将拒绝所有流量。
4、访问列表可以用在接口的出方向,也可以用在入方向,但是要注意在一个接口在一个方向上只能有一个访问列表
5、访问列表可以过滤通过路由器的流量,对自已产生的流量不起作用。
6、将标准访问列表要尽可能放置在靠近目的地址的地方
7、将扩展访问列表要尽量放置在靠近源地址的地方

ACL 的运算符:

1、eq 等于
2、neq 不等于 o3、gt 大于
4、lt 小于
5、range 范围

重点:ACL 本身只是一个用来匹配的工具,它具体是过滤数据包还是路由,是由调用它的工具来决定的。

举例:

1、在路由器上,允许来自 172.16.1.0 网段的流量通过

access-list 1 permit 172.16.1.0 0.0.0.255

2、允许来自于 172.16.1.0 网段的流量去访问 192.168.1.0 网段

access-list 100 permit ip 172.16.1.0 0.0.0.255 192.168.1.0 0.0.0.255

3、拒绝来自于 172.16.1.0 网段的流量通过,允许其它任意的流量通过

access-list 1 deny 172.16.1.0 0.0.0.255
access-list 1 permit any

4、允许 172.16.1.1 telnet 192.168.1.1 的流量通过,其它拒绝

access-list 1 permit tcp host 172.16.1.1 host 192.168.1.1 eq telnet

5、抓出 172.16.1.0 的路由

access-list 1 permit 172.16.1.0 0.0.0.0

6、用一条 ACL 抓出 172.16.0.0、172.16.1.0、172.16.2.0、172.16.3.0 四个子网

access-list 1 permit 172.16.0.0 0.0.3.0

7、用一条语句抓出 172.16.0.0—172.16.255.0/24 之间所有子网号为奇数的路由

access-list 1 permit 172.16.1.0 0.0.254.0

8、用一条语句抓出前两个字节为 172.16.0.0、掩码为 255.255.255.0 的所有路由

access-list 100 permit ip 172.16.0.0 0.0.255.255 host 255.255.255.0

注意: 用 ACL 抓掩码,只能用在 route-map 中,在分布列表中无效

9、阻止外部发起的 TCP 会话,但允许内部发起的连接到外部的 TCP 会话。

access-list 100 permit tcp any any established

established – 允许 ACK/RST=1 的 TCP 报文通过,通常用于只允许内部的主机向外部发起 TCP 连接,不允许外部的主机向本网发起 TCP 连接

时间访问列表:

使用基于时间的访问列表,可以根据一天中的不同时间,或者一周中的某天,或者两者结合,来控制对网络资源的访问。
第一步:定义时间段名字

R1 (config)#time-range NP   定义一个名字

第二步:定义时间段
设定绝对时间:

R1 (config-time-range)#absolute start 8:00 1 jan 2008 end 15:00 2 feb 2008 

设定周期时间:

R1 (config-time-range)#periodic sunday 12:00 to 23:00  // 只在星期日上午允许
R1 (config-time-range)#periodic daily 8:00 to 12:00   // 一周中每天上午允许

几个主要周期时间参数:

Daily-- 从星期一到星期日
Weekday-- 从星期一到星期五
Weekend-- 从星期六到星期日

注意: 一个 time-range 下只能有一个 absolute 语句,但可以有多条 periodic 语句,如果在一个 time-range 下即有 absolute 语句,又有 periodic 语句,则先匹配 absolute 语句。

第三步:调用

access-list 100 permit ip any any time-range NP 

例:为 ACL 定义一个时间范围,在 2008 年 1 月 1 日到 2008 年 12 月 31 日之间的每个周末起作用

time-range NP
absolute start 8:00 1 jan 2008 end 24:00 31 dec 2008
periodic weekends 8:00 to 24:00

自反访问列表:

自反访问列表在路由器的接口下创建 IP 流量的动态开启放行 ACL 条目,这些开启表项的创建是基于源于设备的可信方的会话进行的,在自反访问列表中的每个语句,当语句中的条件得到满足时,就会在已存在的访问表中创建一个镜像表项。
简单来讲,自反访问列表能在路由器接口上根据出去的流量来自动放行返回的流量。

临时表项的特点:

1、表项总是一个 permit 表项
2、表项所指定的协议与原来向外报文的协议相同
3、新的表项互换了源目 IP 地址
4、新的表项互换了源目端口号
5、表项会一直存在,直到会话结束(TCP)或者 time-out 值到时(UDP)才会被删除
6、当会话的最后一个报文流过接口时,表项就到期。(对 TCP 而言)

注意:自反访问列表只能和命名的扩展访问列表结合使用

例:如下图所示,在路由器上做配置,要求外部网络不能访问内部网络,但是内部的主机 172.16.1.1 能够 telnet 到外部网络,也能访问外部网络的 www 服务。

ip access-list extended IN-FLOW
evaluate WOLF
int s1/0
ip access-group IN-FLOW in
ip access-list extended OUT-FLOW
permit tcp host 172.16.1.1 any eq telnet reflect WOLF
int s1/0
ip access-group OUT-FLOW out
permit tcp host 172.16.1.1 any eq www reflect WOLF timeout 180  // 还可以指定有效时间
ip reflexive-list timeout 300
<Distribute-List>用来过滤路由

分布列表通过调用 ACL 来对路由进行过滤,可以在一个单独的路由区域内过滤,也可在路由协议之间做重分布的时候进行过滤。

注意: 分布列表只能用于距离矢量协议,在链路状态协议中是没有意义的

例一:

R1 (config)#access-list 2 permit 2.2.2.0
R1 (config-router)#distribute-list 2 in serial 0 (只允许 2.2.2.0 路由从 S0 进)

例二:

R1 (config)#access-list 2 deny 2.2.2.0
R1 (config)#access-list 2 permit any 
R1 (config-router)#distribute-list 2 out serial 1 (不允许 2.2.2.0 路由从 S1 接口出去)

例三:协议间重分布时过滤

R1 (config)#access-list 1 permit 2.2.2.0 
R1 (config)#router ospf 110
R1 (config-router)#distribute-list 1 out eigrp 90

注意: 当在重分布时进行过滤,仅允许使用关键字 out,后面可以跟上协议名,但不能跟接口,因为无意义,详见卷一 496 页(注意: in 后面不能跟协议,只有 out 后能跟)

例四:在 OSPF 中使用分布列表:(没啥意义)

试验:
1、在 R1 上写一个访问列表

access-list 1 permit 172.16.1.1

2、在 R1 的 OSPF 进程下调用

distribute-list 1 in s1

3、查看 R1 和 R3 的路由表,比较有啥不同

总结:实际上并不能对 LSA 进行过滤,只能对自已的路由条目进行过滤。

<Prefix-List>前缀列表
和 ACL 类似的东东,设计用于专抓路由的工具,不仅可以匹配网络号,还可以匹配掩码

R4 (config)#ip prefix-list 2(用名字也行) permit 2.2.2.0/24
R4 (config-router)#distribute-list prefix 2 in serial 1

例一:

ip prefix-list 2 permit 2.2.2.0/24       //(匹配前 24 位:2.2.2.* ,掩码必须为 24 位)

例二:

ip prefix-list 2 permit 2.2.2.0/24 ge 25 le 30 //(匹配前 24 位:2.2.2.* ,掩码必须为 25-30 位)

例三:

ip prefix-list 2 permit 2.2.2.0/24 le 32    //(匹配前 24 位:2.2.2.* ,掩码必须为 24-32 位)

例四:
ip prefix-list 2 permit 2.2.2.0/24 ge 26    //(匹配前 24 位:2.2.2.* ,掩码必须为 26-32 位)

例五:

ip prefix-list 3 permit 0.0.0.0/0 le 32     //(匹配所有)不能像 access-list 哪样用 any 参数

ge 必须大于前面的数字,小或等于 le ,len<ge-value<=le-value
sh ip prefix-list 用于查看
用前缀列表过滤 A、B、C 类路由

A 类路由:ip prefix-list 1 permit 0.0.0.0/1 le 32
B 类路由:ip prefix-list 1 permit 128.0.0.0/2 le 32
C 类路由:ip prefix-list 1 permit 192.0.0.0/3 le 32

利用前缀列表过滤 OSPF
在这里插入图片描述

要求:在如上图所示的拓朴中,在 R1 上利用前缀列表做过滤,不要向 AREA0 区域传递 172.16.1.1 的路由。
R1:

ip prefix-list 1 seq 5 deny 172.16.1.1/32
ip prefix-list 1 seq 10 permit 0.0.0.0/0 le 32
router ospf 110
area 1 filter-list prefix 1 out

<Route-Map>
也叫路由图或者路由映射表,是对路由进行加工处理的工具。

1、route-map 可以调用 ACL 或 prefix 抓出一部分路由进行加工处理
2、每一个 route-map 可以有多条语句,每条语句都有一个序号
3、每条语句都有两种动作:match 和 set
4、每条语句对抓出来的路由都有两种处理方式:permit 或 deny

route-map 的使用分三步操作:

1、定义 ACL 或 prefix 抓出路由
2、定义 route-map 说明对匹配的路由所采取的处理方式
3、调用 route-map
route-map 的匹配逻辑:
route-map NAME permit 10
match ip address x y z
-------> OR
match ip address a ¦
match ip address b ¦ AND
match ip address c ↓
如不写 match/set, 默认: match any
set nothing

例一:

要求在 R1 上将 EIGRP 重分布进 OSPF,其中 172.16.1.0 路由要以 OE1 重分布,172.16.2.0 路由重分布时 metric 值要改为 100,172.16.3.0 的路由不允许重分布,其它路由不改动,默认重分布。

R1 (config)#access-list 1 permit 172.16.1.0 0.0.0.0
R1 (config)#access-list 2 permit 172.16.2.0 0.0.0.0
R1 (config)#access-list 3 permit 172.16.3.0 0.0.0.0
R1 (config)#route-map WOLF permit 10
R1 (config-route-map)#match ip address 1
R1 (config-route-map)#set metric-type type-1
R1 (config)#route-map WOLF permit 20
R1 (config-route-map)#match ip address 2
R1 (config-route-map)#set metric 100
R1 (config)#route-map WOLF deny 30
R1 (config-route-map)#match ip address 3
R1 (config)#route-map WOLF permit 40
R1 (config-route-map)#exit
R1 (config)#router ospf 110
R1 (config-router)#redistribute eigrp 90 subnets route-map WOLF  // 调用 route-map

注意:
・在 route-map 的最后隐含了一条 deny any 的语句
・如果不写一句空 Route-map 去允许其它路由通过,则没有匹配的路由直接被丢弃。

例二:match 接口

还可以在重分布直连的时候 match 一个接口,直接写 route-map 就可以,不用定义访问列表。

R1 (config)#route-map WOLF permit 10
R1 (config-route-map)#match interface e0

例三:使用 route-map 打 tag

作用:可以对一些路由打上 tag,好让后面的路由器根据 tag 找出这些路由并进行相应的策略
如上图所示,要求:
1、在 R3 上将 RIP 重分布进 OSPF
2、在 R1 上将 OSPF 重分布进 EIGRP,但不能将从 RIP 学到的路由带过去
可以用 tag 解决:
1、在 R3 上将 RIP 重分布进 OSPF 时,利用 route-map 打上 tag 标记
2、在 R1 上将 OSPF 重分布进 EIGRP 时,找出打了 tag 标记的路由再 deny 掉就行了

R3 (config)#route-map WOLF permit 10
R3 (config-route-map)#set tag 20
R3 (config)#router ospf 110
R3 (config-router)#redistribute rip subnets route-map WOLF

到了 R1 之后,对打 tag 的路由丢弃

R1 (config)#route-map CCNP deny 10
R1 (config-route-map)#match tag 20
R1 (config)#route-map CCNP permit 20   // 一定要写一条空语句放行其它的路由
R1 (config-route-map)#exit
R1 (config)#router eigrp 90
R1 (config-router)#redistribute ospf 110 metric 1500 100 255 1 1500 route-map CCNP
<Policy-Based Routing>

PBR 就是使用 route-map 这一工具对某个接口进来的数据流做一些策略,符合条件的按相应的策略进行路由,不符合条件的按正常情况进行转发。

PBR 的规则:

・PBR allows for source-based routing.
・PBR 优于路由表 ----- 如果路由器上设置了 PBR,当数据包到达路由器时,是先匹配 PBR,如果匹配上了,直接按 PBR 进行转发,如果没匹配上,再去找路由表进行转发,所以说 PBR 覆盖了正常的路由选择进程。
・PBR 中不匹配的数据包不会 DENY(丢弃),而是 normal forwarding (正常转发)

注意: Applied to incoming packets PBR 只针对于入项接口

例一:

第一步:

R1 (config)#access-list 1 permit 1.1.1.0 0.0.0.255
R1 (config)#access-list 2 permit 2.2.2.0 0.0.0.255

第二步:

R1 (config)#route-map WOLF permit 10
R1 (config-route-map)#match ip address 1
R1 (config-route-map)#set ip next-hop 12.1.1.2 发给与本机直连的下一跳路由器
R1 (config)#route-map WOLF permit 20
R1 (config-route-map)#match ip address 2
R1 (config-route-map)#set ip next-hop 13.1.1.3 

第三步:

R1 (config)#int e0/0  (入口调用策略)
R1 (config-if)#ip policy route-map WOLF

PBR 其它用途:

R1 (config)#route-map PBR per 10
R1 (config-route-map)#match ip address 9
R1 (config-route-map)#set ip precedence 2 对数据分组设置优先级
R3#debug ip policy 

本地策略路由:
                    
・PBR 默认对本地产生的数据流量不起效。也就是对自已产生的包不执行策略。

R3 (config)#ip local policy route-map PBR (使 PBR 对本地数据流量有效)加上这一条命令才会对自已产生的包也做策略

===========================
代老师:
信任源路由 ,不能忘本 RIP 120 --> OSPF 110 ,R1 不会 刷掉 RIP 路由。==》因为 信任路由源。
重分布的内容:
学习来的路由
宣告的直连的路由
重分布进 RIP 时要注意 METRIC 的问题
ROUTER RIP
redistribute eigrp 100 metric 6
default-metric 3
redistribule connected 不需要指定 metric ,默认为 1
redistribule static 不需要指定 metric ,默认为 1
default-metric 会影响重分布静态的 metric
default-metric 不影响重分布直连的 metric
重分布进 EIGRP 时要注意的问题

ROUTE EIGRP 100
redistribute rip metric 1544 2000  255 1 1500
default-metric 1000 2000 255 1 1500

redistribute connected 不需要指定 metric , 不调用 default-metric ;计算 metric 时 ,带宽,延时,参照相应直连接口。
redistribute static 不需要指定 metric , default-metric 会影响到重分布静态。不指定 default-metric , 按静态路由出接口的 带宽、延时计算。
重分布 OSPF
ROUTE OSPF 100
redistribute RIP SUBNET
如果没有 subnet , 只能有 主网 和 超网 CIDR 能进。
IP prefix-list 前缀列表
抓以类开头:

ip prefix-list CLASS-A seq 5 permit  0.0.0.0/1 le 32    //ge8  le 8
ip prefix-list CLASS-B seq 5 permit 128.0.0.0/2 le 32   //ge16 le 16
ip prefix-list CLASS-C seq 5 permit 192.0.0.0/3 le 32   //ge24 le 24

/x 固定前缀 x < ge <= le
/5 ge 8 le 20 => 抓 前面 5 个数固定不变的, 掩码为 /8 到 /20 的 路由.


注:本文只从 51cto 找到有一张图片的一段,补上一张图,其他大量转载有文无图,原始出处已无处可寻,其他缺失的图无从补全。
via:
Redistribute-CSDN博客 ghv587 于 2016-06-27 10:51:33 发布
https://blog.csdn.net/ghv587/article/details/51767011

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【题解 Kruskal重构树 LCA】 星际导航

星际导航 分析&#xff1a; 这也是一个比较老的题目了 今天突然想学一下kruskal重构树&#xff0c;就做到了这个题。 首先我们要明白&#xff0c;为什么这道题的路径一定是在最小生成树里&#xff1f; 或许是我们惯有的经验&#xff1a;最小的最大或者最大的最小无非两种套路…

信号【Linux】

文章目录 信号处理方式&#xff08;信号递达&#xff09;前后台进程 终端按键产生信号kill系统调用接口向进程发信号阻塞信号sigset_tsigprocmasksigpending内核态与用户态&#xff1a;内核空间与用户空间内核如何实现信号的捕捉 1、信号就算没有产生&#xff0c;进程也必须识别…

【C++】C++类和对象详解(上)

目录 思维导图大纲&#xff1a; 思维方面&#xff1a; 1. 类的定义&#xff1a; 2. 类的特点&#xff1a; 3. this指针&#xff1a; 4. 类的默认成员函数 默认构造函数 1.构造函数 2.析构函数 3.拷贝构造函数 4. 赋值运算符重载 1. 运算符重载 5. 日期类实现&#…

【CPP】CPP的内存管理

目录 10 C/C内存管理10.1 内存分布10.2 C的动态内存管理10.3 C的内存管理10.4 new失败的检测10.5 operator new与operator delete函数10.5 new与malloc()的区别,delete与free()的区别10.6 定位new表达式 这里是oldking呐呐,感谢阅读口牙!先赞后看,养成习惯! 个人主页:oldking呐…

编程中的智慧四:设计模式总览

前面三篇我们通过从一些零散的例子&#xff0c;和简单应用来模糊的感受了下设计模式在编程中的智慧&#xff0c;从现在开始正式进入设计模式介绍&#xff0c;本篇将从设计模式的7大原则、设计模式的三大类型、与23种设计模式的进行总结&#xff0c;和描述具体意义。 设计模式体…

使用Diffusion Models进行街景视频生成

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;街景图生成相当有挑战性&#xff0c;目前的文本到视频的方法仅限于生成有限范围的场景的短视频&#xff0c;文本到3D的方法可以生成单独的对象但不是整个城市。除此之外街景图对一致性的要求相当高&#x…

数据库基础与安装MYSQL数据库

一、数据库管理系统DBMS 数据库技术是计算机科学的核心技术之一&#xff0c;具有完备的理论基础。使用数据库可以高效且条理分明地存储数据&#xff0c;使人们能够更加迅速、方便地管理数据 1.可以结构化存储大量的数据信息&#xff0c;方便用户进行有效的检索和访问 2.可以…

目前航空航天设备怎么减重设计

目前航空航天设备怎么减重设计 1.使用轻质高强度材料1.1复合材料1.2金属基复合材料1.3陶瓷基复合材料1.4功能梯度材料和蜂窝材料 2.结构优化设计2.1拓扑优化2.2仿生学设计 3.部件和系统轻量化3.1机载娱乐系统3.2航空线缆3.3激光焊接技术 4.发动机和推进系统的优化4.1轻量化发动…

python爬虫Selenium模块及测试案例详解

什么是selenium&#xff1f; &#xff08;1&#xff09;Selenium是一个用于Web应用程序测试的工具。 &#xff08;2&#xff09;Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 &#xff08;3&#xff09;支持通过各种driver&#xff08;FirfoxDrive…

python gradio 的输出展示组件

HTML&#xff1a;展示HTML内容&#xff0c;适用于富文本或网页布局。JSON&#xff1a;以JSON格式展示数据&#xff0c;便于查看结构化数据。KeyValues&#xff1a;以键值对形式展示数据。Label&#xff1a;展示文本标签&#xff0c;适用于简单的文本输出。Markdown&#xff1a;…

JavaScript之WebAPIs-BOM

目录 BOM操作浏览器一、Window对象1.1 BOM&#xff08;浏览器对象模型&#xff09;1.2 定时器-延时函数1.3 js执行机制1.4 location对象1.5 navigator对象1.6 history对象 二、本地存储三、补充数组中的map方法数组中的join方法数组中的forEach方法(重点)数组中的filter方法(重…

Linux——Centos系统安装(动图演示)

一、创建虚拟机并做相应配置 打开VMware Workstation&#xff0c;选择创建新的虚拟机&#xff1b; 1、选择自定义选项&#xff1a;点击下一步 2、选择虚拟机硬件兼容性&#xff1a;直接下一步就行了&#xff1b;点击下一步 3、安装客户机操作系统&#xff1a;这里我们选择稍后安…

C++对象模型之绕过private权限修饰符

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、C对象模型二、演示1.类层次2.内存排列 总结 前言 咱们都知道C语言在创建类的时候data member&#xff08;数据成员&#xff09;和fuchtion member&#xf…

Linux操作系统的有关常用的命令

1.linux系统的概述 1.1 什么是Linux系统? Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦 兹&#xff08;Linus Benedict Torvalds&#xff09;于1991年10月5日首次发布&#xff0c;它主要受…

LVGL项目实战之UI规划

LVGL项目实战之UI规划 ** 实物购买&#xff1a;TB 南山府嵌入式 ** 我们在在做项目之前&#xff0c;先需要确定项目的需求以及可能实现的功能&#xff0c;我们只有确定这些才能够对整体的框架进行把握。 本小结就说一下我们这个项目的一个整体的框架结构以及功能。 1-硬件构…

C语言实现二叉树以及二叉树的详细介绍

目录 1.树概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 2.二叉树概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 3.二叉树顺序结构--特殊的二叉树--堆及其实现 3.1堆的概念及结构 3.2堆的实现 3.2.1堆的结构 3.2.2堆…

《JavaSE》---21.<简单认识Java的集合框架包装类泛型>

目录 前言 一、什么是集合框架 1.1类和接口总览 二、集合框架的重要性 2.1 开发中的使用 2.2 笔试及面试题 三、背后所涉及的数据结构 3.1 什么是数据结构 3.2 容器背后对应的数据结构 四、包装类 4.1 基本数据类型和对应的包装类 4.2 装箱和拆箱 1.最初的写法 2.…

org.springframework.context.ApplicationContext发送消息

1、创建消息的实体类 package com.demo;/*** 监听的实体类**/ public class EventMessage {private String name;public EventMessage(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }2、创建消…

【Linux】如何使用docker快速部署Stirling-PDF并实现远程处理本地文档

文章目录 前言1. 安装Docker2. 本地安装部署StirlingPDF3. Stirling-PDF功能介绍4. 安装cpolar内网穿透5. 固定Stirling-PDF公网地址 前言 本篇文章我们将在Linux上使用Docker在本地部署一个开源的PDF工具——Stirling PDF&#xff0c;并且结合cpolar的内网穿透实现公网随时随…

Java 集合框架:Java 中的双端队列 ArrayDeque 的实现

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 019 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…