RIP路由协议的更新(电子科技大学TCP/IP第二次实验)
一.实验目的
1、掌握 RIP 协议在路由更新时的发送信息和发送方式
2、掌握 RIP 协议的路由更新算法
二.预备知识
1、静态路由选择和动态路由选择
2、内部网关协议和外部网关协议
3、距离向量路由选择
三.实验原理
RIP 协议(RFC 1058)是一个基于距离向量路由选择的内部网关协议:每台路由器定期与邻居路由器交换各自路由表中的所有路由信息,使用Bellman-Ford 算法计算路由表。RIP 协议的路由度量(Metric)是到目的网络的跳数(hop count),最大跳数值为 15。
运行RIP 协议的路由器初始接入到网络上时,它的路由表中只有根据其接口上的 IP 配置信息获得的直连网络的直连路由。随着 RIP 路由信息的不断交换,互联网中的每台RIP 路由器最终会掌握整个互联网的知识,即 RIP 协议收敛。
RIP 协议有 2 种类型的报文:RIP 请求报文和RIP 响应报文,它们都封装在 UDP 数据报中广播发送。
RIP 请求报文可以询问特定路由项目或所有路由项目。当运行 RIP 协议的路由器刚接入网络中时,会广播发送一份询问所有路由项目的 RIP 请求报文。
RIP 响应报文可以是询问或非询问的。询问的 RIP 响应报文仅在回应RIP 请求报文时单播发送给请求者,发送的内容是请求报文中所请求的特定路由项目或整个路由表的路由项目。非询问的 RIP 响应报文则是定期的广播发送,发送的内容是整个路由表中的路由项目。RIP 响应报文中携带的RIP 路由通告信息只有目的网络地址和跳数值。
RIP 协议使用 3 个计时器来支持 RIP 协议的操作。
定期计时器(30 秒)控制定期的 RIP 路由通告,但为了避免出现整个互联网中的路由器同时更新而引起的过载问题,实际实现中路由器的 RIP 路由通告间隔通常是 25~35 之间的一个随机数。
截止期计时器(180 秒)管理 RIP 路由的有效性,路由器每次收到一条RIP 路由的更新信息,就复位该路由的截止期计时器。如果一条 RIP 路由的截止期计时器期满,则将该路由标记为无效,即将其跳数设置为 16,表示该路由的目的不可达。
路由器收到邻居通告的一条无效路由,或因为截至计时器期满而产生一条无效路由时,并不立即从路由表中清除无效路由,而是为该无效路由启动一个无用信息收集计时器(120 秒),并继续在定期的路由通告中通告跳数为 16 的无效路由。仅当无效路由的无用信息收集计时器期满时才将其清除。无用信息收集计时器使得邻居路由器能够获知某条路由是无效的。
RIP 协议存在缓慢收敛和不稳定的问题。为了解决这些问题,RIP 协议中采用了触发更新和水平分割方法。
触发更新是当网络有变化时,路由器立即发送更新信息;如果网络没有变化,则仍是定期发送更新信息。触发更新不会影响路由器的RIP 定期计时器。
水平分割是在发送路由信息时,路由器根据发送接口选择发送路由表中的路由信息,简单的说就是从某个接口收到的路由信息不能再从该接口发送出去。
四.实验内容
五.实验步骤
实验步骤详见TCP//IP实验指导书。由于步骤过长,就在此不在赘述。
六、实验数据及结果分析
1、步骤 2 中根据R1 路由表中的哪些信息可以确保实验网中的RIP 协议已经收敛? 为什么?
答:
1.连续多次输入show ip route路由命令之后,R1的路由表项不再发生变化。而且路由表项数量和拓扑中网络数量一致且没有差错。
2. 根据路由表中到达子网3的跳数,RIP路由算法收敛之后,到达子网3的条数应该为2。
2、汇总 3 个子网上捕获的 RIP 报文。按照报文的捕获顺序,分阶段分析记录每个子网中每台路由器在两次拓扑变化(第 1 次拓扑变化:图 A到图B,第 2 次拓扑变化:图B到图 A)过程中发出的RIP 报文信息:
阶段 1:第 1 次拓扑变化开始前(RIP 已收敛)的 2 个周期的RIP 报文;
阶段 2:第 1 次拓扑变化时RIP 收敛过程中的所有 RIP 报文;
阶段 3:第 1 次拓扑变化时RIP 完成收敛后的 2 个周期的RIP 报文;
阶段 4:第 2 次拓扑变化时RIP 收敛过程中的所有 RIP 报文;
阶段 5:第 2 次拓扑变化时RIP 完成收敛后的 2 个周期的RIP 报文。
| 子网1:路由器R1 | |||||||||
| IP 分组首部 | UDP数据包首部 | ||||||||
| 源IP | 172.16.1.1 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
| RIP报文 | |||||||||
| 阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
| 网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
| 1 | Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:26:04 | |||
| Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:26:33 | ||||
| 2 | Response | 172.16.2.0 | 16 | 172.16.3.0 | 16 | 18:34:52 | |||
| Response | 172.16.2.0 | 16 | 172.16.3.0 | 16 | 18:35:16 | ||||
| Response | 172.16.2.0 | 16 | 172.16.3.0 | 16 | 18:35:43 | ||||
| 3 | - | - | - | - | - | - | |||
| 4 | Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:43:23 | |||
| 5 | Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:43:38 | |||
| Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:44:05 | ||||
| 子网2:路由器R1 | |||||||||
| IP 分组首部 | UDP数据包首部 | ||||||||
| 源IP | 172.16.2.1 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
| RIP报文 | |||||||||
| 阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
| 网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
| 1 | Response | 172.16.1.0 | 1 | - | - | 18:26:33 | |||
| Response | 172.16.1.0 | 1 | - | - | 18:27:00 | ||||
| 2 | - | - | - | - | - | - | |||
| 3 | - | - | - | - | - | - | |||
| 4 | Request | Not specified | 16 | - | - | 18:43:21 | |||
| Response | 172.16.1.0 | 1 | - | - | 18:43:38 | ||||
| 5 | Response | 172.16.1.0 | 1 | - | - | 18:44:05 | |||
| Response | 172.16.1.0 | 1 | - | - | 18:44:32 | ||||
| 子网2:路由器R2 | |||||||||
| IP 分组首部 | UDP数据包首部 | ||||||||
| 源IP | 172.16.2.2 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
| RIP报文 | |||||||||
| 阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
| 网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
| 1 | Response | 172.16.3.0 | 1 | - | - | 18:26:44 | |||
| Response | 172.16.3.0 | 1 | - | - | 18:27:13 | ||||
| 2 | Response | 172.16.3.0 | 1 | - | - | 18:35:02 | |||
| Response | 172.16.3.0 | 1 | - | - | 18:35:31 | ||||
| Response | 172.16.3.0 | 1 | - | - | 18:36:00 | ||||
| Response | 172.16.3.0 | 1 | - | - | 18:36:30 | ||||
| Response | 172.16.3.0 | 1 | - | - | 18:36:57 | ||||
| Response | 172.16.3.0 | 1 | - | - | 18:37:24 | ||||
| Response | 172.16.1.0 | 16 | 172.16.3.0 | 1 | 18:37:50 | ||||
| Response | 172.16.1.0 | 16 | - | - | 18:37:52 | ||||
| Response | 172.16.1.0 | 16 | 172.16.3.0 | 1 | 18:38:20 | ||||
| 3 | Response | 172.16.3.0 | 1 | - | - | 18:38:49 | |||
| Response | 172.16.3.0 | 1 | - | - | 18:39:17 | ||||
| 4 | Response | 172.16.3.0 | 1 | - | - | 18:43:21 | |||
| Response | 172.16.3.0 | 1 | - | - | 18:43:56 | ||||
| 5 | Response | 172.16.3.0 | 1 | - | - | 18:44:05 | |||
| Response | 172.16.3.0 | 1 | - | - | 18:44:32 | ||||
| 子网3:路由器R2 | |||||||||
| IP 分组首部 | UDP数据包首部 | ||||||||
| 源IP | 172.16.3.2 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
| RIP报文 | |||||||||
| 阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
| 网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
| 1 | Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:34:06 | |||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:34:34 | ||||
| 2 | Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:35:02 | |||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:35:31 | ||||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:36:00 | ||||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:36:30 | ||||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:36:57 | ||||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:37:24 | ||||
| Response | 172.16.1.0 | 16 | 172.16.2.0 | 1 | 18:37:50 | ||||
| Response | 172.16.1.0 | 16 | - | - | 18:37:52 | ||||
| Response | 172.16.1.0 | 16 | 172.16.2.0 | 1 | 18:38:20 | ||||
| 3 | Response | - | - | 172.16.2.0 | 1 | 18:38:49 | |||
| Response | - | - | 172.16.2.0 | 1 | 18:39:17 | ||||
| 4 | Response | 172.16.1.0 | 2 | - | - | 18:43:40 | |||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:43:56 | ||||
| 5 | Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:44:23 | |||
| Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:44:52 | ||||
| 子网3:路由器R3 | |||||||||
| IP 分组首部 | UDP数据包首部 | ||||||||
| 源IP | 172.16.3.3 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
| RIP报文 | |||||||||
| 阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
| 网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
| 1 | - | - | - | - | - | - | |||
| 2 | Response | 172.16.1.0 | 16 | - | - | 18:37:52 | |||
| Response | 172.16.1.0 | 16 | - | - | 18:38:16 | ||||
| Response | 172.16.1.0 | 16 | - | - | 18:38:43 | ||||
| 3 | - | - | - | - | - | - | |||
| 4 | - | - | - | - | - | - | |||
| 5 | - | - | - | - | - | - | |||
3、RIP 计时器分析:
-在本实验中,RIP 的定期计时器、截止期计时器和无用信息收集计数器实际上是多少秒?
在本实验当中,RIP的定期计时器是25~30秒之间的一个随机的值,截止期计时器是180秒,无用信息收集计数器是120秒。
-为什么定期计时器并不是RFC 中规定的固定值,而是一个时间范围内的随机值?
避免整个互联网内同一时间所有路由器同时更新造成过载的问题。
4、阶段 1 分析:
-该阶段中为什么在子网 3 上捕获不到路由器R3 的 RIP 报文?
因为启用了水平分割,从某个接口接收到的更新信息不允许再从这个接口发回去。R3上的路由信息都是从路由器172.16.3.3的接口上获取的,所以不会再从这个接口上转发出去,在子网3内就不会捕获到路由器R3的报文。
5、阶段 2 分析:
-分析子网 1 中路由器 R1 的 RIP 报文信息记录,根据哪一个 RIP 报文,可以推断出 R1 大约何时断开与子网 2 的连接的?为什么?
本人根据wireshark抓包获取的74号RIP报文,断开时间大概为18点34分52秒,绝对时间是528.375000秒。
原因:此时R1在子网1内广播通告子网2,子网3都不可达,而且与上一条RIP报文的时间相差不到1s,说明是引起了触发更新,所以可以推断此时R1与子网2断开了连接。
-该阶段中记录的哪些 RIP 报文是触发更新报文?是如何推断出来的?
①触发更新报文:R1在子网1中发送的74号报文,R2在子网2中发送的165号报文,R2在子网3中发送的158号的RIP报文,R3在子网3发送的159号报文。
②推断的原因: 1.与前一个周期性报文相差的时间为0-2s,小于25秒,并且仅仅通告发生故障的链路
2.在同一个子网内两个路由器通报的触发更新报文的时间应该相近,报文的序号也应该接近。
-产生这些触发更新报文的原因分别是什么?
①R1在子网1发送触发更新报文的原因是:R1与子网2断开连接,造成路由表项没有跟新,因此在子网1内通告子网2,子网3 不可达的信息。
②R2在子网2和子网3发送触发更新报文的原因:R2路由表项中目的地址是子网1的路由表项超过截止期计时器时间,然后R2更新自己的路由表项子网1不可达,跳数变为16,并向子网2和子网3内进行通告子网1不可达。
③R3在子网3发送触发更新报文的原因:R3收到R2发送的子网1不可达的报文信息,进行更新自己的路由表项,并向子网3内通告子网1断开连接,不可达。
-RIP 的触发更新报文和定时更新报文在通告的路由信息数量上有何不同?
RIP的触发更新报文仅通告有变化的路由信息,而定时更新报文通告路由表中所有的信息(除了因水平分割被过滤掉的路由表项信息)。
6、阶段 3 分析:
-路由器 R1、R2 和R3 在第 1 次拓扑改变时的RIP 收敛时间大概分别是多少秒钟?整个网络的RIP 收敛时间是多少秒钟?
R1在第一次改变拓扑之后的收敛时间约为60秒,R2和R3的收敛时间约为240秒。
整个网络的收敛时间为240秒。
-为什么 R1 对网络拓扑变化的更新时间要明显短于R2 和 R3?
因为R1与子网2断开之后,由于R1和子网2是直连的,R1立马可以检测到链路断开,因此R1的更新收敛时间就应该是无效路由信息更新的时间。而R2需要等待截止期计时器180秒之后确定路由表项过期之后,才能知道子网1不可达,之后会立刻产生一个触发更新报文通知R3,而R3收到通知之后产生触发更新报文的时间和R2很接近。所以R1对网络拓扑变化的更新时间要明显短于R2 和 R3。
-该阶段中为什么在子网 1 中捕获不到路由器R1 的 RIP 报文?
水平分割。因为此时R1只连接了子网1,根据水平分割,从某个接口接收到的更新信息不允许再从这个接口发回去,所以在子网1内不会收到R1的RIP报文。
7、阶段 4 分析:
-分析子网 2 中路由器 R1 的 RIP 报文信息记录,根据哪一个 RIP 报文,可以推断出 R1 大约何时恢复与子网C 的连接的?为什么?
根据R1在子网2中于18:43:21:721321发送的报文,可以推断出R1与子网2恢复了重连。
原因:此时路由器R1在子网2广播发出了Requset,路由器刚刚接入到一个子网的时候,它会在这个子网上发送一个询问所有路由信息的RIP请求报文。
-该阶段中记录的哪些 RIP 报文是触发更新报文?
R1在子网1上于18:43:23发送的128号RIP报文
R1在子网2上于18:43:38发送的217号RIP报文
R2在子网3上于18:43:40发送的244号RIP报文
-产生这些触发更新报文的原因分别是什么?
①R1在子网1与子网2上发送触发更新报文的原因是:R1与子网2恢复连接之后即在子网2上发送请求所有路由信息的request的RIP报文。在收到邻居R2的响应报文之后,R1就在子网1中通告子网2和子网3路由的触发更新信息,并在子网2上通告子网1的触发更新信息。
②R2在子网3上发送触发更新报文的原因是:R2收到R1通告的子网1路由的触发更新信息之后,更新自己的路由表,并在子网3上通告子网1的路由的触发更新信息。
-该阶段中为什么路由器R2会在子网2上发送单播和广播这两种RIP响应的分组?
①发送单播RIP响应分组的原因是:R1向子网2内发送广播分组,R2对R1单播响应。
②发送广播RIP响应分组的原因是:是RIP的周期性响应报文,是R2周期性的向子网2广播子网3的路由信息。
8、阶段 5 分析:
-路由器R1、R2 和R3 在第2 次拓扑改变时的RIP 收敛时间分别是多少秒钟? 整个网络的 RIP 收敛时间是多少秒钟?
R1在第二次拓扑改变期间时RIP的收敛时间大概是2秒,R2与R3在第二次拓扑发生变化时收敛时间大概分别是22,24秒。整个网络的RIP收敛时间大概是24秒。
-比较 2 次拓扑变化时 RIP 的收敛时间,分析 RIP 协议对好消息(网络可达) 和坏消息(网络不可达)的传递哪一种更快?并分析产生这种现象的原因。
好消息的传递速度更快。
原因:对于坏消息的传播,如果是直连网络会立即发现网络不可达,但是对于非直连的路由器需要等待180秒的截止计时器的时间直到路由表项过期,并且对路由表项进行无用信息收集计时器更新,而对好消息没有任何计时器的限制,直接进行触发更新。
综上,所以好消息的传递要快于坏消息。
七、实验结论
1、总结 RIP 协议的路由通告机制,即路由器何时发送 RIP 路由通告?发送哪些
内容?发送方式?
说明:询问响应不是路由通告机制。
| 通告类型 | 何时发送 RIP 路由通告 | 发送哪些内容 | 发送方式 |
| 定期更新 | 路由器每隔25~30秒(随机) | 向自己的每个端口发送出除水平分割之外的其他所有的路由表项 | 广播 |
| 触发更新 | ①网络发生变化时 ②截止期计时器到期没有收到RIP路由通告 | 对特定变化的路由表项进行发送 | 广播 |
- 总结 RIP 协议的路由更新算法,即路由器收到 RIP 响应报文后,如何更新自己的路由表?
- 首先检查RIP响应报文的有效性(检查端口,源IP地址)
- 然后处理RIP报文的信息:
- 先忽略非法的度量,地址和无用的区域
- 度量metric=min(metric+1,16)
- If 目的网络地址不在路由表里面就添加上这一条路由表项
Else if 路由表中对应表项的下一跳和RIP报文的源IP相同,就将这一个路由表项替换掉。
Esle if 收到报文里面的metric+1之后比原来路由表项里面的metric还小就进行更新这一条路由表项。
写成流程图如下:

3、总结 RIP 协议的 3 个计时器的工作原理:计时对象?何时启动?何时复位?何时终止?期满时对计时对象的处理?
(1)定期计时器:计时的对象是启动定期计时器的路由器。路由器启动就启动了定期计时器,定期计时器每隔25~35秒复位一次。只要路由器没有宕机,不会终止(或者说是到达设定时间之后)。期满时的动作是通告自己的整个路由表。
(2)截止期计时器:计时的对象是1条RIP路由。启动时间是新的RIP路由表项被添加的时候。当收到这条路由变化更新的时候,进行复位,复位到180秒。期满时的动作为如果180秒之内没有收到更新的RIP路由信息,该路由就会被标记为过期,跳数变为16,同时终止截止期计时器。
(3)无用信息收集计时器:计时对象是跳数为16的路由表项,从某一路由表项变为16开始启动,不会自动进行复位,到达设定时间120秒后终止,期满时删除该路由表项。
八、总结及心得体会
1.通过本次实验,体会了整个RIP路由协议更新的整个过程,以及RIP协议的辅助触发更新和水平分割。
2.对距离矢量路由算法有了更加深入的认识。
3.对RIP的三个重要的计时器定期计时器、截止期计时器、无用信息收集计时器理解更深入了。
九、对本实验过程及方法、手段的改进建议
1.实验可以增加难度,相关RIP路由算法部分可以让学生们来进行实现。
2.相关实验报告可以增加模板,减少学生们这一部分的时间。
相关文章:
RIP路由协议的更新(电子科技大学TCP/IP第二次实验)
一.实验目的 1、掌握 RIP 协议在路由更新时的发送信息和发送方式 2、掌握 RIP 协议的路由更新算法 二.预备知识 1、静态路由选择和动态路由选择 2、内部网关协议和外部网关协议 3、距离向量路由选择 三.实验原理 RIP 协议(…...
基于JWT实现用户身份认证
常见场景 账号/密码登录、手机号验证码登录、微信扫码登录 解决方案 基于Session认证方案 什么是session认证方案 服务端生成httpsession认证(内存-sessionId)sessionId写到浏览器cookie浏览器请求的header中自动带sessionId到服务端服务端校验sessionId是否合法 优点 .…...
SaltStack 远程命令执行漏洞(CVE-2020-16846)
目录 (一)漏洞描述 (二)漏洞复现 1、在vulhub上启动docker 2、访问docker靶机 https /ip:8000...
SAP 详细解析成本收集器
成本收集器作为成本对象,主要应用于按期间进行成本核算的情况,在这种情况下会把产品创建为成本收集器,实际成本的收集和差异的结算全部按照成本收集器进行处理,财务的成本分析也针对成本收集器进行。 成本收集器是按期间核算&am…...
Vision Transformer学习了什么-WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION
WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION 文章地址 代码地址 摘要 视觉转换器( Vision Transformers,ViTs )正在迅速成为计算机视觉的事实上的架构,但我们对它们为什么工作和学习什么知之甚少。虽然现有研究对卷积神经网络的机制进…...
一种全新的图像滤波理论的实验(三)
一、前言 2023年02月22日,我发布了滤波后,为针对异常的白色和黑色像素进行处理的实验,本次发布基于上下文处理的方案的实验,目的是通过基于加权概率模型滤波后,在逆滤波时直接修复大量的白色和黑色的异常像素…...
CV——day79 读论文:基于小目标检测的扩展特征金字塔网络
Extended Feature Pyramid Network for Small Object DetectionI. INTRODUCTIONII. RELATED WORKA. 深层物体探测器B. 跨尺度特征C. 目标检测中的超分辨率III. OUR APPROACHA. 扩展特征金字塔网络B. 特征纹理传输C. 交叉分辨蒸馏IV. EXPERIMENTSA. Experimental Settings1&…...
智能家居项目(五)测试串口功能
目录 一、写一个单独测试串口的demo 二、直接运行上一篇智能家居的代码 一、写一个单独测试串口的demo 1、TTL串口与树莓派的连接方式 (1)TTL的RXD和TXD针脚连接到树莓的TXD和RXD上(T–>R R–>T),交叉连&…...
2023年全国最新道路运输从业人员精选真题及答案7
百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 71.根据《中华人民共和国安全生产法》,生产经营单位…...
python的所有知识点(含讲解),不看就亏死了
目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类,注:不是那个对象!!!!&…...
【Servlet篇】Response对象详细解读
文章目录Response 继承体系Response 设置响应数据设置响应行数据设置响应头数据设置响应体数据Response 重定向Response 响应字符数据Response 响应字节数据Response 继承体系 前面说到,我们使用 Request 对象来获取请求数据,使用 Response 对象来设置响…...
SAP FICO期初开账存货导入尾差
一、问题 1.AFS物料网格级别库存导入先除再乘有尾差: 旧系统数据迁移自两个系统:一个管理数量账(网格级别),一个管理金额账(物料级别) 2.MB52分工厂与MB5L分工厂统计差异: M…...
微信商城小程序怎么做_分享实体店做微信商城小程序制作步骤
各行各业都在用微商城小程序开店,不管是餐饮店还是便利店,还是五金店。都是可以利用微信小程序开一个线上店铺。实现线上跟线下店铺更加全面的结合。维护好自己的老客户。让您的客户给您拉新,带来新客户。小程序经过这几年的快速发展和不断升…...
【moment.js】时间格式化插件
Moment.js 用于在JavaScript中解析,验证,操作和显示日期和时间。是一款在项目中使用频率极高的时间格式化工具,Ant Design Vue 组件中就是使用它来处理时间的。 安装 npm install moment --save # npm yarn add moment # Ya…...
微信小程序开发【壹】
随手拍拍💁♂️📷 日期: 2023.02.24 地点: 杭州 介绍: 2023.02.24上午十点,路过学院的教学楼时🏢,突然看见了一团粉红色。走进一看是一排梅花🌸,赶在它们凋零前,将它们定格在我的相…...
2 k-近邻算法
0 问题引入 想一想:下面图片中有三种豆,其中三颗豆品种未知,如何判断他们类型? 1 KNN概述 1.1 KNN场景 电影可以按照题材分类,那么如何区分 动作片 和 爱情片 呢? 动作片:打斗次数更多爱情…...
深入探究文件I/O
目录Linux 系统如何管理文件静态文件与inode文件打开时的状态返回错误处理与errnostrerror 函数perror 函数exit、_exit、_Exit_exit()和_Exit()函数exit()函数空洞文件概念实验测试O_APPEND 和O_TRUNC 标志O_TRUNC 标志O_APPEND 标志多次打开同一个文件验证一些现象多次打开同…...
【LeetCode】剑指 Offer(9)
目录 题目:剑指 Offer 25. 合并两个排序的链表 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 26. 树的子结构 - 力扣&#…...
python 遍历可迭代对象的方法
python 遍历可迭代对象的方法 可迭代(iterable) 迭代(遍历)就是按照某种顺序逐个访问对象中的每一项。 Python中有很多对象都是可以通过for语句来直接遍历的,例如list、string、dict等,这些对象都是可迭代的,被称为可迭代对象。 可以将可迭…...
【数据库】 第11章 并发控制
第11章 并发控制 事务 事务:(从微观角度,或者从DBMS角度)是数据库管理系统提供的控制数 据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合 在一起作为一个整体进行操作和控制,以便数据库管理系统能…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
