距离矢量路由协议RIP(含Cisco模拟器实验命令配置)

距离矢量路由协议RIP(含Cisco模拟器实验命令配置)

简介

距离矢量路由协议(Routing Information Protocol, RIP)是一种内部网关协议,它位于应用层,使用520 UDP端口。RIP基于距离矢量算法(Bellham-Ford)根据metric来衡量目的地址的距离。

原理

基本原理

对于RIP协议,路由器只会和相邻的路由器交换路由表,通常包含:

  • 目的网络
  • 距离
  • 下一跳路由

RIP规定每经过一个路由器跳数加1,最多15跳,当一个路由条目对应的跳数为16跳的时候会被认为距离是无限大,即不可达。

RIP工作流程如下:

  • 路由器激活RIP,立刻发送一个Request报文和一个Response报文,并开始监听链路上的RIP协议报文。
  • 对应的接口会周期性发送Response报文一个Response报文最多携带25个路由条目,当超过这个数字时使用多个报文。
  • 当另一启用了RIP的路由器接收Request报文后,会使用相应的Response报文回应,并在该报文中携带对应的路由信息。
  • 当另一启用了RIP的路由器接收Response报文后,会解析该报文中的路由信息,如果报文中的路由条目是自己未发现的,并且路由的度量值有效,则路由器将学习该路由并加载到路由表。(同时设置度量值、出接口、下一跳)

计时器

RIP的四个计时器

RIP主要有四个计时器:

  • 更新计时器(Update timer):每次更新 30 seconds RIP,都是完整路由表,不过要排除被 split-horizon 抑制的路由条目。 为了防止路由表全局同步,update timer 值被设计成一个小范围内的随机值 (25-35s),思科路由器上一般为 25.5-30s。随机值的意义在于防止同时更新洪泛Response报文导致不必要的冲突
  • 失效计时器(Invalid timer):路由器在 180s 内没有收到特定路由条目的更新,则视此路由条 目为非法或不可达,将它的 hop count 设置为 16。启动失效计时器,标志这条路由条目失效,并且这个路由器会给所有相邻的路由器发送更新消息通告这条路由条目失效。标记为 16 跳。
  • 刷新计时器(Flush Timer或garbage collection timer flush): 计时器满时,该路由条目将会从路由表中被移除,默认为 240s。
  • 抑制计时器(Holddown Timer): 只有当失效计时器周期结束时,抑制计时器才会被激活。一旦路由器收到了关于某条路由条目的更新,并发现其 metric 值比本路由表中记录的 metric值大时,将会对这条路由设置 holddown timer,直至计时器周期结束才会接受这条次优路径,默认为 180s。

缺点

RIP协议有如下缺点:

  • 过于简单,以跳数为依据计算度量值,经常得出非最优路由。例如:2 跳 64K 专线,和 3 跳 1000M 光纤,显然多跳一下没什么不好。
  • 度量值以 16 为限,不适合大的网络。解决路由环路问题,16 跳在 rip 中被认为是无穷大,RIP是一种域内路由算法自治路由算法,多用于园区网和企业网。
  • 收敛性差,时间经常大于 5 分钟。
  • 消耗带宽很大。完整的复制路由表,把自己的路由表复制给所有邻居,尤其在低速广域网链路上更以显式的全量更新。
  • 容易产生环路(先天缺陷,有后天的防环机制)
  • 缺少主动发现网络变化机制(无拓扑信息,不知道全网链路,只知道自己直连)

防环机制

在刚在我们就说到过,RIP协议发送路由表,如果路由表相互包含则容易产生环路。协议本身就容易导致环路,故需要一系列防环机制:

  • 跳数上限:上限16跳,设定包的生命周期,这在一定程度上减少了环路产生带来的问题,但无法避免。
  • 水平分割:不向原始路由更新来的方向再次发送路由更新信息,即单向更新、单向反馈。可以进入某个接口,使用命令 no ip split-horizon 关闭水平分割。例如,R1路由从Fa0/0接口向R2路由的Fa0/1接口发送路由信息,对于R2来讲不再从Fa0/1接口发送路由更信息。
  • 路由毒化:又叫路由中毒。若 RIP 的路由条目出现故障时,会立即将此路由标记为 16 跳,并发送给邻居,告知邻居此路由有问题,尽快删除。
  • 抑制计时器:抑制计时器告诉路由器把可能影响路由的任何改变暂时保持一段时间, 抑制时间通常比更新信息发送到整个网络的时间要长。
  • 毒性逆转:如果Z的最短路径要通过邻居Y,那么它将告诉Y自己到目的节点的距离是无穷大。这样,Z向Y撒了一个善意的谎言,使得只要Z经过Y选路到X,它就会一直持续讲述这个谎言,这样Y也就永远不会尝试从Z选路到X了,也就避免了环路问题。由于这个方案不用路由间更新报文,所以优先于路由毒化

触发更新与Silent模式

触发更新(Trigger Update)与周期性更新不同,它不会触发接收端的路由器重置其 update timer, 因为这样会引起许多路由器在同时重置它们的 update timer,最终导致全局路由同步,而这是我们不希望看到的。 同时为 了避免 trigger storm(触发更新风暴),会产生一个随机值(1-5 秒), 连续的触发更新必须等待相 应的时间才可再被发出。 当路由表发生变化时,更新报文立即广播给相 邻的所有路由器,而不是 等待 30 秒的更新周期。同样,当一个路由器刚启动 RP 路由协议时,它广播请求报文。收到此广播 的相邻路由器立即应答一个更新报文, 而不必等到下一个更新周期。这样,网络拓扑的变化会最快 地在网络上传播开, 减少了路由循环产生的可能性。

Silent模式(Silent Mode) 在 UNIX 系统上,使用 routed -q 参数可以将 RIP 置于一种“silent”模式,这种模式下不会主动发送路由更新,只是监听并根据需要修改自已本地的路由表。

RIPv1

报文结构

RIPv1报文结构如下图所示

RIPv1报文结构

下面来说说各个字段的功能:

  • 命令(Command):用于标识RIP报文类型。当值为1的时候,报文为Request;当值为2的时候,报文为Response类型。
  • 版本(Version):在RIPv1中,该字段为1。
  • 地址簇标识符(Address Family Identity AFI):该字段为2的时候表示IP协议;该字段为0表示且报文为Request类型,则说明用于向直连路由请求整个路由表,同时仅包含一个路由条目,目的IP地址为0.0.0.0,度量值即metric跳数为16。
  • IP地址(IP Address):路由的目的网络地址。
  • 度量值(Metric):到达目的网络的开销值。

问题

通过报文结构我们就能看到缺少了一个很重要的东西——子网掩码。没错,RIPv1版本协议并不支持在报文中携带目的网络的子网掩码。

因此,有类别路由选择协议首先必须匹配一个目的地址对应 A,B,C 类的主网络号,对于每一个通过路由器的数据包有如下操作:

  • 如果目的地址是一个路由器直接相连的主网络的成员,那么该网络的路由器接口 上配置的子网掩码将被用来确定目的的地址的子网,因此,在那个主网络中必须自始至终 地统一使用这个相同的子网掩码。
  • 如果目的地址不是一个和路由器直接相连的主网络的成员,那么路由器将仅仅尝 试去匹配该目的的地址对应于A类,B类或 C类的主网络号。

我们抓包看一下:

RIPv1抓包

更详细的信息如下图:

RIPv1抓包详细信息

由此可得知:RIPv1 仅支持有类路由协议,并且在路由更新中不发送子网掩码。使用广播每 30 秒(实际是 25.5-30 秒)发送一次完整的更新。

此外RIPv1还不支持口令验证,这具有一定的不安全性。

解决问题

最省心的方案要么换协议,要么启用RIPv2版本。如果非要用RIPv1,可以给路由器配置第二个IP地址,使其成为一个连续的子网。

所谓连续的子网:母网相同,子网掩码一致。例如:192.169.1.0/24192.168.2.0/24

实验

接下来我们通过Cisco Packet Tracer模拟器来看一下。

RIPv1实验拓扑

在上述样例中,各个路由器的Fa0/0端口都与对应的交换机相连,该接口地址为下方对应标签的第三行,例如R1路由器的Fa0/0接口IP地址为172.18.0.64子网掩码为255.255.255.192。此时下方主机的默认网关也是这个地址。

同样的下方标签的第一行为主机地址,例如PC01的地址为172.18.0.10

其余接口的IP已经在相应链路上给出。例如R1 Se0/1/0接口IP为10.0.0.1/30

迅速对上述拓扑完成基本配置:

//R1
en
config t
int f0/0
ip address 172.18.0.62 255.255.255.192
no shutdown
int s0/1/0
ip address 10.0.0.1 255.255.255.252
no shutdown
//R2
en
config t
int f0/0
ip address 172.18.0.126 255.255.255.192
no shutdown
int s0/1/0
ip address 10.0.0.2 255.255.255.252
no shutdown
int s0/3/0
ip address 10.0.0.5 255.255.255.252
no shutdown
//R3
en
config t
int f0/0
ip address 172.18.0.190 255.255.255.192
no shutdown
int s0/3/1
ip address 10.0.0.6 255.255.255.252
no shutdown

上述命令并没有给出特定的模式,直接打开路由的CLI然后复制粘贴进去(别复制注释)就行,我们的重点不在此处。(如果你不懂此处命令请参考我之前关于交换机和路由器基本配置的文章。)

接下来我们启用RIP

在R1上,我们用RIPv1宣告直连的网络

R1(config)#router rip
R1(config-router)#v 1
R1(config-router)#network 172.18.0.0
R1(config-router)#network 10.0.0.0
R1(config-router)#exit

R2和R3也是同理

R2(config)#router rip
R2(config-router)#v 1
R2(config-router)#network 172.18.0.64
R2(config-router)#network 10.0.0.0
R2(config-router)#network 10.0.0.4
R2(config-router)#exit
R3(config)#router rip
R3(config-router)#v 1
R3(config-router)#network 172.18.0.128
R3(config-router)#network 10.0.0.4
R3(config-router)#exit

在R1上执行debug命令

R1#debug ip rip

发现弹出如下信息

RIP Debug

观察上图,发送的目的地址都是255.255.255.255,这说明v1使用广播

在R1中使用命令,查看数据库中学习的条目

R1#show ip rip database 

RIP数据库

再看看路由表

R1#show ip route

信息如下

Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGPD - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter areaN1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGPi - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area* - candidate default, U - per-user static route, o - ODRP - periodic downloaded static routeGateway of last resort is not set10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
C       10.0.0.0/30 is directly connected, Serial0/1/0
L       10.0.0.1/32 is directly connected, Serial0/1/0
R       10.0.0.4/30 [120/1] via 10.0.0.2, 00:00:24, Serial0/1/0172.18.0.0/16 is variably subnetted, 2 subnets, 2 masks
C       172.18.0.0/26 is directly connected, FastEthernet0/0
L       172.18.0.62/32 is directly connected, FastEthernet0/0

发现找不到对应的主机网络的条目——不存在172.18.0.64172.18.0.128网络。这正是因为RIPv1没有传递子网掩码的功能,且子网不连续造成的。

另外,对于同一网络,若该路由既有直连又从其它路由器中接收到条目,由于直连网络matric值比从其它路由收到的条目小,所以并不会更新条目

我们给对应的PC设好IP地址之后发现也是Ping不通的(此处不演示)。

我们尝试给路由器之间的链路分配与主机网络相连续的网络的IP地址试一试。

R1(config-if)#ip addr 172.18.1.1
R1(config-if)#ip addr 172.18.1.1 255.255.255.192
R2(config)#int se0/1/0
R2(config-if)#ip addr 172.18.1.2 255.255.255.192
R2(config-if)#int se0/3/0
R2(config-if)#ip addr 172.18.2.1 255.255.255.192
R3(config)#int se0/3/1
R3(config-if)#ip addr 172.18.2.2 255.255.255.192

然后尝试在PC1上Ping PC3

ping 172.18.0.130

见证奇迹的时刻到了,我们的网络竟然Ping通了!

由此可见对于RIPv1不发送子网掩码,我们需要使用连续的子网来解决问题。

但是这种解决问题的方式经常不符合我们的规范,在某些特定的情况下我们就想要不连续的子网,然后就有了RIPv2协议。

RIPv2

报文结构

RIPv2版本报文结构如下图

RIPv2报文结构

我们发现相比于RIPv1,v2版本的报文头多了网络掩码、下一跳、路由标记这几个字段。我们一下仅介绍与RIPv1不同的字段:

  • 版本(Version):在RIPv2中该字段值为2。
  • 网络掩码(Netmask):目的网络的掩码。RIPv1没有这一项,不支持可变子网掩码(Variable Length Subnet Mask, VLSM),而RIPv2支持了这一点。
  • 路由标记(Route Tag):为路由设置标记信息,缺省为0。当一条外部路由被引入RIP从而形成一条RIP路由时,RIP可以为该路由设置路由标记,当这条路由在整个RIP域内传播时,路由标记不会丢失。
  • 下一跳(Next Hop):RIPv2新增,使得路由器在多路访问网络上可以避免次优路径现象。一般情况下,在路由器所发送的路由更新中,路由条目的“下一跳”字段会被设置为0.0.0.0,此时收到该路由的路由器将路由条目加载到路由表时,将路由的更新源视为到达目的网段的下一跳。在某些特殊的场景下,该字段值会被设置为非0.0.0.0

RIPv2的新增功能

我们同样来抓一次包:

RIPv2抓包

RIPv2抓包详细信息

可见RIPv2相比于RIPv1使用组播的方式而非广播。

在 RIP 中的身份验证中,路由信息协议 RIPv2 的 Cisco 实现支持身份验证,密钥管理,路由汇总, 无类域间路由(CIDR)和可变长度子网掩码(VLSM)。

RIPv2发送路由条目时第一次发送整张表。此外,RIPv2支持自动汇总和手动汇总,自动汇总能关闭(只有关闭自动汇总才能启用手动汇总)。而RIPv1仅支持自动汇总且无法关闭。

实验

与RIPv1一样,我们构建类似的拓扑

RIPv2实验拓扑

为主机配置相应的IP,为路由器设置基本的配置。

基础配置方案与RIPv1实验部分一致,我们主要看RIP配置部分:

对于R1,我们开启RIPv2,宣告网络

R1(config)#router rip
R1(config-router)#v 2
R1(config-router)#network 172.18.0.0
R1(config-router)#network 10.0.0.0
R1(config-router)#exit

对于R2和R3同理

R2(config)#router rip
R2(config-router)#v 2
R2(config-router)#network 172.18.0.64
R2(config-router)#network 10.0.0.0
R2(config-router)#network 10.0.0.4
R2(config-router)#exit
R3(config)#router rip
R3(config-router)#v 2
R3(config-router)#network 172.18.0.128
R3(config-router)#network 10.0.0.4
R3(config-router)#exit

使用同样的命令查看R1路由表:

R1#show ip route

我们发现一个重要的问题:R1 路由表中还是只存在有类网络的路由条目,无法看到具体到达 R3 直连 172.18.0.128/26 的条目!

按理说RIPv2支持VLSM,我们应该能在路由表中看到R3的172.18.0.128/26才对。

实际上RIPv2的自动汇总是默认开启的,它仍会如v1那样将网络合并汇总,我们需要将自动汇总手动关闭。

实际上很简单,只需要在RIP配置模式下执行一条命令即可

R1(config)#router rip
R1(config-router)#no auto-summary

对于R2和R3一样

R2(config)#router rip
R2(config-router)#no auto-summary
R3(config)#router rip
R3(config-router)#no auto-summary

协议兼容性

在配置RIP时,如果不指定版本,接口默认情况下是能接收v1和v2的报文的,但是却只能发送v1的报文;在指定版本的情况下,RIPv1只能接收和发送v1的报文,RIPv2只能接收和发送v2的报文。

总结

RIPv1与RIPv2对比图

其它命令(加密、查看信息等)

基本

查看 rip database (从邻居收集来的信息)

R1#show ip rip database

关闭自动汇总

R1(config-router)#no auto-summary 

查看 RIP 配置

R1#show run | section rip 

查看路由表

R1(config)#Show ip rout 

指定一个接口可以发送的 RIP 的版本

R1(config-if)#ip rip send version 2 

允许接口的地址和路由选择更新使用全 0 子网

R1(config-if)#ip subnet-zero

手动开始汇总

R1(config)#interface serial 0/3/0
R1(config-if)#ip summary-address rip 10.0.0.0 255.0.0.0 

RIP加密

R1(config)#key chain cisco //定义 rip 中加密密钥链
R1(config-keychain)#key 0 //定义密钥
R1(config-keychain-key)#key-string cisco //定义密钥值
R1(config-if)#ip rip authentication key-chain cisco //在接口上调用密钥
R1(config-if)#ip rip authentication mode text //选择加密方式 明文
R1(config-if)#ip rip authentication mode md5 //选择加密方式 密文

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

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

相关文章

Linux socket 字节序

socket介绍 字节序 验证什么字节序 #include<stdio.h> int main() {union {short value;char btypes[sizeof(short)];} test;test.value 0x0102;if(test.btypes[0] 1 && test.btypes[1] 2) {printf("大端字节序\n");}else{printf("小端字节序…

服务网关Gateway_微服务中的应用

没有服务网关 问题&#xff1a; 地址太多安全性管理问题 为什么要使用服务网关 网关是微服务架构中不可或缺的部分。使用网关后&#xff0c;客户端和微服务之间的网络结构如下。 注意&#xff1a; 网关统一向外部系统&#xff08;如访问者、服务&#xff09;提供REST API。在Sp…

Unity中Shader用到的向量的乘积

文章目录 前言一、向量的乘法1、点积2、差积 二、点积&#xff08;结果是一个标量&#xff09;1、数学表示法2、几何表示法 三、叉积1、向量叉积的结果 与 两个相乘的向量互相垂直2、判断结果正负方向的方法&#xff1a;右手法则 前言 Unity中Shader用到的向量的点积 一、向量…

【C++杂货店】类和对象(上)

【C杂货店】类和对象&#xff08;上&#xff09; 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储规则7.2 例题7.3结构体内存对齐规则 八、this指针8.2 t…

2023-09-27 LeetCode每日一题(餐厅过滤器)

2023-09-27每日一题 一、题目编号 1333. 餐厅过滤器二、题目链接 点击跳转到题目位置 三、题目描述 给你一个餐馆信息数组 restaurants&#xff0c;其中 restaurants[i] [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息…

基本网络协议

TCP 协议 TCP 协议是一种传输控制协议&#xff0c;是一种面向连接的传输层协议,它提供高可靠性的通信高可靠性:数据无错误,数据无丢失,数据无失序,数据无重复到达。 TCP 协议头部结构 下图是 TCP 协议的头部结构&#xff0c;如图&#xff1a; 16 位端口号&#xff1a; 告知主机…

【python笔记记录神器 】jupyter notebook

推荐理由 jupyter notebook同时支持markdown和ipython的脚本脚本。&#xff08;可以一遍调试我的代码一遍加上每一部分的层级标题、以及说明笔记&#xff09; 安装使用方法 1、在windows中按住winr&#xff0c;然后输入cmd进入命令行&#xff0c;在命令行中输入以下指令安装…

PHP 变动:PHP 8 版本下字符串与数值的弱比较

文章目录 参考环境声明弱比较隐式类型转换字符串连接数学运算布尔判断相等运算符 字符串与数值的弱比较字符串转化为数值的具体规则字符串与数值的弱比较一般情况科学计数法前缀 0E 与 0e PHP8 在字符串与数值的弱比较方面做出的改动数值字符串优化 参考 项目描述搜索引擎Bing…

Selenium —— 网页frame与多窗口处理!

一、多窗口处理. 1.1、多窗口简介 点击某些链接&#xff0c;会重新打开⼀个窗⼜&#xff0c;对于这种情况&#xff0c;想在新页⾯上操作&#xff0c;就 得先切换窗⼜了。 获取窗⼜的唯⼀标识⽤句柄表⽰&#xff0c;所以只需要切换句柄&#xff0c;就可以在多个页⾯灵 活操作了…

影刀自动化采集底层逻辑

hello,大家好&#xff0c;这里是【玩数据的诡途】 接上回 <我的影刀故事> 今天给大家介绍一下整个采集的底层逻辑&#xff0c;包括业务流程自动化也是基于这一套基础逻辑进行展开的&#xff0c;顺便带大家熟悉一下影刀&#xff0c;既然叫影刀系列了&#xff0c;那后续一些…

每日一练 | 华为认证真题练习Day115

1、FEC(Forwarding Equivalence Class)转发等价类&#xff0c;是一组具有某些共性的数据流的集合&#xff1b;FEC可以根据地址进行划分&#xff0c;但是不能根据业务类型、QoS等要素进行划分。 A. 对 B. 错 2、关于OSI参考模型中网络层的功能说法正确的是&#xff1f; A. OS…

NISP证书是什么?NISP含金量如何呢?

一、NISP是什么 NISP证书是国家信息安全水平考试&#xff08;National Information Security Test Program&#xff0c;简称NISP&#xff09;&#xff0c;是由中国信息安全测评中心实施培养国家网络空间安全人才的项目。由国家网络空间安全人才培养基地运营/管理&#xff0c;并…

算法通过村第十关-快排|白银笔记|快排实战

一个程序员一生中可能会邂逅各种各样的算法&#xff0c;但总有那么几种&#xff0c;是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓&#xff01;”算法吧~ 文章目录 前言数组第K大总结 前言 这是快排中的经典算法题&#xff0c;但是很多…

Django的设计模式及模板层

Django的设计模式及模板层 设计模式MVC和MVT MVC 代表 Model-View-Controller(模型-视图-控制器)模式。 M 模型层(Model),主要用于对数据库层的封装 V 视图层(View),用于向用户展示结果 (WHAT HOW) C 控制(Controller&#xff0c;用于处理请求、获取数据、返回结果(重要) 作…

基于SSM的保险业务管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

企业如何识别和满足客户需求的5个要点

随着市场竞争的日益加剧&#xff0c;企业需要更加注重客户需求&#xff0c;以获得持续的发展。而企业在满足客户需求上&#xff0c;则需要遵循一些基本的原则和方法。本文将介绍企业识别和满足客户需求的5个要点。 1、理解客户 企业需要了解客户的需求、想法和行为&#xff0c…

SpringBoot之视图解析

文章目录 前言一、视图解析1.视图解析原理流程 二、模板引擎——Thymeleaf基本语法表达式字面量文本操作数学运算布尔运算比较运算条件运算特殊操作设置属性值-th:attr迭代条件运算属性优先级 提取公共页面th:insertth:replace区别 总结 前言 SpringBoot默认不支持 JSP&#x…

基于微信小程序的民宿短租酒店预订系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

版本控制系统:Perforce Helix Core -2023

Perforce Helix Core是领先的版本控制系统&#xff0c;适用于需要加速大规模创新的团队。存储并跟踪您所有数字资产的更改&#xff0c;从源代码到二进制再到IP。连接您的团队&#xff0c;让他们更快地行动&#xff0c;更好地构建。 通过 Perforce 版本控制加速创新 Perforce H…

【Phoenix】phoenix实现每个Primarykey主键保留N版本数据,CDC数据记录为Changelog格式

一、背景&#xff1a; CDC数据中包含了&#xff0c;数据的变更过程。当CDC写入传统数据库最终每一个primary key下会保存一条数据。当然可以使用特殊手段保存多分记录但是显然造成了数据膨胀。 另外数据湖Hudi(0.13.1)是不支持保存所有Changelog其Compaction机制会清除所有旧版…