当前位置: 首页 > news >正文

【某农业大学计算机网络实验报告】实验三 IP数据报发送和转发流程

实验目的:

1)掌握基本的网络配置方法。

2)观察 IP 数据报的发送和转发流程,掌握 IP 转发分组的原理。

实验器材:

一台Windows操作系统的PC机。

实验准备:

1.配置网络拓扑:为开展实验内容,首先在 Packet Tracer 7.3.1 模拟器中配置好如下的网络拓扑结构。如下图所示,具体包括两台路由器,路由器2分别连接交换机0与交换机1,交换机0连接PC0与PC1,交换机1连接PC2与PC3,路由器4连接交换机2,交换机2连接PC4与PC5:

另:配置过程中交换机端口指示灯可能呈橙色,单击主窗口右下角 Realtime (实时)Simulation(模拟)模式切换按钮数次,即可加速完成交换机的初始化。

2. 配置 IP 地址和子网掩码:根据实验要求,对于每台主机与路由器的接口配置IP地址,点击 PC,打开参数表如下所示,在每台 PC 的配置窗口中配置合理的 IP 地址和子网掩码,除此在此次实验中我们需要重点关注各个主机的MAC地址,因此我们可以在此处点击【Config】—>【FastEthernet0】—>【MAC Address】处查看主机的MAC地址:

三个网络的网络地址分别为:128.96.39.0/25,128.96.39.128/25,192.4.153.0/26,相邻路由器所在网络地址为:128.96.40.0/25。对于每个设备,按照下表在配置窗口中配置合理的 IP 地址和子网掩码:

主机名

IP地址

子网掩码

PC0

128.96.39.5

255.255.255.128

PC1

128.96.39.6

255.255.255.128

PC2

128.96.39.131

255.255.255.128

PC3

128.96.39.132

255.255.255.128

PC4

192.4.153.5

255.255.255.192

PC5

192.4.153.6

255.255.255.192

对于路由器的各端口配置如下:

主机名

IP地址

子网掩码

路由器2-0

128.96.39.7

255.255.255.128

路由器2-1

128.96.39.133

255.255.255.128

路由器2-2

128.96.40.3

255.255.255.128

路由器4-0

128.96.40.4

255.255.255.128

路由器4-1

192.4.153.7

255.255.255.192

根据实验要求,我们特意选取了与实验手册中不同的地址,将所有主机和路由器的 IP 地址、MAC 地址、子网掩码都注释在相应设备处,网络的最终配置如下,其中我们可以发现路由器接口为红色,这是因为路由器接口尚未开启:

3.配置默认网络:即为每个主机配置一个连接的路由器的接口的IP地址作为默认网关,在为每个主机配置IP地址与子网掩码相同的位置,选择【Default Gateway】,输入IP地址即可配置默认网关:

主机 PC0 和 PC1 配置默认网关为 128.96.39.7;主机 PC2 和 PC3 配置默认网关为 128.96.39.133;主机 PC4 和 PC5 配置默认网关为 192.4.153.7;

4.配置静态路由:点击选择【Config】—>【ROUTING】—>【Static】,首先为路由器2配置静态路由如下图所示,其含义为:配置网络192.4.153.0/26 的下一跳地址为128.96.40.4,即需要配置的网络连接的路由器哪一接口与此路由器相连:

同样为路由器4配置静态路由,但需额外注意的是,路由器2连接了两个网络,因此我们需要为路由器4配置两个静态路由,实验手册中使用了路由聚合方法,我们实验过程中不采用此方法,设置两个静态路由如下图所示:

实验内容:

任务一:观察 ARP 表与路由表

1. 观察ARP表:主机如何查看ARP表的方法我们在之前实验内容中已有学习,此次实验中重点关注路由器的ARP表与路由表:点击 Inspect 按钮,再点击路由器 ,选择 ARP 表,或者进入路由器的命令行界面,输入 enable 进入特权模式,再输入 show arp,也可查看路由器的 ARP 表:

通过观察我们可以看到,此时我们没有任何的数据传输动作,但路由器中已存在了部分的IP地址与MAC地址及其对应接口的信息,这说明路由器会自动存储其接口的相关信息

2.观察路由表:点击 Inspect 按钮,再点击路由器,选择路由表,或者进入路由器的命令行界面,输入enable 进入特权模式,再输入 show ip route,也可查看路由器的路由表:

路由器中的路由表用于存储如何将数据包从源地址路由到目标地址的信息,第一行其中的 C 表示直连网络,L 表示路由器的接口,S 为静态路由,具体信息还包含目标网络,它对应的接口与下一跳地址。

任务二:观察数据包的发送过程

(1)添加 PC0 到 PC2 的 ICMP 报文,观察 PC0、路由器 6、PC2 的ARP缓存表的变化:

1.首先我们利用之前实验准备中学习的打开ARP表的方法,分别打开PC0、路由器2、PC2的ARP缓存表如下图所示,可以看到PC0与PC2的ARP缓存表为空,而路由器2中的ARP缓存表只有其接口信息:

2PC0开始发送ICMP数据包,但因为不知道下一跳的MAC地址,因此首先向交换机0发送ARP数据包,交换机 0 收到后广播给 PC1和路由器2PC1 由于不匹配自动丢弃该帧,路由器 2则接收该ARP数据包,同时在其ARP缓存表中记录了PC0IP地址、MAC地址与对应接口

3. 之后,路由器2需要回复信息给交换机0,交换机0则将应答数据包转发给PC0,因此PC0ARP缓存表中记录下了路由器2PC0所在网络连接的接口的IP地址、MAC地址并与交换机的接口相对应起来

4. 在已知MAC地址后,PC0即可成功发送ICMP数据包到达路由器2,路由器2 ARP 数据包通过 G0/1 发送给交换机1,交换机1以广播形式将ARP数据包发送,PC2接收,同时在其ARP缓存表中存储路由器接口G0/1 IP 地址、 MAC 地址与交换机的接口对应起来,PC3则丢弃该ARP数据包:

5. PC2在成功接收ARP数据包后产生应答数据,由交换机1转发给路由器2,同时路由器2存储PC2 IP 地址、MAC 地址与对应接口等信息

6.在上一步骤结束后,即为ICMP数据包从路由器2发送到交换机1再转发给PC2的过程,在这一过程中PC0PC2与路由器2ARP缓存表都不再发生变化。

(2)添加 PC0 到 PC5 发送 ICMP 报文,观察 PC0、路由器 6、路由器 7,PC5 的ARP缓存表的变化及数据包的转发情况,或者采用 ping 命令测试:

1. 首先我们利用之前实验准备中学习的打开ARP表的方法,分别打开PC0、路由器2、路由器4、PC5的ARP缓存表如下图所示,可以看到PC5的ARP缓存表为空,路由器4中的ARP缓存表只有其接口信息,而PC0与路由器2由于上一步骤中的实验,已经存在了部分的信息:

2. PC0ARP缓存表中因为已经存储了路由器2MAC地址信息,因此直接向交换机0发送ICMP数据包,交换机将ICMP数据包转发给路由器2,此时路由器2为确定下一跳地址为多少需要广播发送ARP数据包给路由器4,同时,路由器4ARP缓存表记录下路由器2的右侧接口的IP地址、MAC地址与接口信息

3. 路由器4收到数据后需要向路由器2回复一个应答数据包,应答数据包达到路由器2后,路由器2同时在其ARP缓存表中记录下路由器4左侧接口的IP地址、MAC地址与其对应的接口信息

4.路由器4在确定了下一跳地址后,将ICMP数据包转发给路由器4,路由器4为确定下一跳地址,同样需要广播发送ARP数据包,ARP数据包到达交换机2,交换机2将该数据包广播给PC4PC5PC4丢弃,PC5接收,同时在其ARP 缓存表中记录下了路由器4下方接口的IP地址、MAC地址与对应的接口信息

5. PC5在收到路由器的4ARP数据包后需要回复一个应答包给交换机2,交换机2将此应答包转发给路由器4路由器4接收后,记录下PC5IP地址、MAC地址与对应的接口信息

6. 在上一步骤结束后,即为ICMP数据包从路由器4发送到交换机2再转发给PC5的过程,在这一过程中PC0PC5、路由器2与路由器4ARP缓存表都不再发生变化。

3)清空主机和路由器的 ARP 缓存,重复上述实验过程。

主机清空 ARP 缓存方法:与删除交换机的交换表类似,点击主页面左上角的【Select(Esc)】进入主机的显示页面,选择【Desktop】—>【Command Prompt】,主机命令提示符输入 arp -d 即可清空主机 arp 缓存表,再次打开ARP Table即可看见缓存表为空:

路由器清空 ARP 缓存方法:进入路由器命令行界面,进入特权模式,输入 clear arp,或点击重新给设备上电按钮直接重启,可以通过开关路由器接口的开关以重置路由器的ARP缓存表:

重复步骤一:

步骤一中PC0、PC2与路由器2的ARP缓存表的初始状态如下左图所示,最终状态如下右图所示,由于我们上述实验内中步骤一的初始状态各个ARP缓存表即为初始状态,因此重复步骤并未有太大区别:

重复步骤二:

1.重复步骤二前,PC0PC5、路由器2与路由器4ARP缓存表的初始状态如下图所示:

2. PC0开始发送ICMP数据包,但因为不知道下一跳的MAC地址,因此首先向交换机0发送ARP数据包,交换机 0 收到后广播给 PC1和路由器2PC1 由于不匹配自动丢弃该帧,路由器 2则接收该ARP数据包,同时在其ARP缓存表中记录了PC0IP地址、MAC地址与对应接口

3. 之后,路由器2需要回复信息给交换机0,交换机0则讲应答数据包转发给PC0,因此PC0ARP缓存表中记录下了路由器2PC0所在网络连接的接口的IP地址、MAC地址并与交换机的接口相对应起来

4. PC0ARP缓存表存有下一跳的IP地址与MAC地址后,PC0向交换机0发送ICMP数据包,交换机0转发给路由器2,但此时路由器2不清楚下一跳的MAC地址,因此需要发送ARP数据包给路由器4路由器4收到路由器2ARP数据包,同时记录下路由器2对应的IP地址、MAC地址与其对应的接口信息

5. 路由器4向路由器2返回应答包,路由器2接收到后同时在其ARP缓存表中记录下路由器4IP地址、MAC地址与其对应的接口信息

6.路由器4由于不清楚下一跳的MAC地址,需要向交换机2发送一个ARP数据包,而交换机2ARP数据包广播给PC4PC5PC4丢弃,PC5成功接收,并记录下路由器4IP地址、MAC地址与对应的接口信息

7. PC5在收到路由器的4ARP数据包后需要回复一个应答包给交换机2,交换机2将此应答包转发给路由器4路由器4接收后,记录下PC5IP地址、MAC地址与对应的接口信息

8. 在上一步骤结束后,即为ICMP数据包从路由器4发送到交换机2再转发给PC5的过程,在这一过程中PC0PC5、路由器2与路由器4ARP缓存表都不再发生变化。

总结:在此次的重复步骤二的实验中,其最大的改变在于路由器2连接的网络部分,由于发送端不再有其它主机的MAC地址信息,因此在向其它网络发送数据包的过程中,需要首先发送ARP数据包给路由器2记录下路由器2的MAC地址才可继续发送ICMP数据包,但此过程并不影响我们后续路由器4所在的网络间的数据传输,这也充分体现了我们互联网中,有路由器连接的各个网络相互之间互不影响的特点。

实验结果、分析与结论:

思考题:

1)配置新的网络 IP 地址、子网掩码、默认路由以及路由表的静态路由:

五个网络的网络地址分别为:192.168.11.0,192.168.11.64,192.168.22.0,192.168.11.128,192.168.44.0,网络掩码均为:255.255.255.192,相邻路由器所在网络地址为:192.168.11.64与192.168.1.128。对于每个设备,按照下表在配置窗口中配置合理的 IP 地址和子网掩码:

主机

IP地址

子网掩码

PC0

192.168.11.2

255.255.255.192

PC1

192.168.11.3

255.255.255.192

PC2

192.168.22.2

255.255.255.192

PC3

192.168.22.3

255.255.255.192

PC4

192.168.44.2

255.255.255.192

PC5

192.168.44.3

255.255.255.192

对于路由器的各端口配置如下:

主机

IP地址

子网掩码

路由器0-0

192.168.11.1

255.255.255.192

路由器0-1

192.168.11.65

255.255.255.192

路由器1-0

192.168.11.66

255.255.255.192

路由器1-1

192.168.22.1

255.255.255.192

路由器1-2

192.168.11.129

255.255.255.192

路由器2-0

192.168.11.130

255.255.255.192

路由器2-1

192.168.44.1

255.255.255.192

根据实验要求,我们将所有主机和路由器的 IP 地址、MAC 地址、子网掩码都注释在相应设备处,网络的最终配置如下,其中我们可以发现路由器接口为红色,这是因为路由器接口尚未开启:

2)重复观察上述实验过程,要有必要的分析:

上述所有的实验过程与内容看上去复杂,但其实本质就是一个链路层与网路层相互协作传输数据包的一个过程,为方便理解与后续的学习,将该过程总结如下:

在数据准备发送之前,我们唯二已知的即发送主机与接收主机的两个IP地址,

首先是网络层部分:网络层部分的首要任务为数据包下一步应发往何处,即确定下一跳的IP地址,通过将目的IP地址与主机所在的网络的子网掩码做与运算,如果目的地址在本网络内部,则直接将数据包交由交换机进行转发,如果不在本网络内部,则将下一跳的IP地址认定为默认网关

已知下一跳的IP地址后,将数据封装成帧准备在链路层上进行数据传输,由此我们进入

链路层的部分:如果主机中的ARP缓存表已知IP地址与其对应的MAC地址,则直接发送ICMP数据包即可,但如果未知,则需要利用到ARP协议,由主机向路由器发送ARP数据包,通过接收应答包记录路由器的MAC地址,在得到MAC地址后,即可开始发送ICMP数据包

以上就是ICMP数据包从一个主机到其下一个地址的一个网络层与链路层协同工作的完整过程,这样一个过程实现了相邻地址间的数据的传输,此后,数据包从路由器到路由器,从路由器再到主机也都是上述过程的一个不断重复

3)在任务二中,路由器为什么会丢失数据包:

数据包被路由器丢弃的本质原因在于路由器不清楚数据包的下一跳地址直接原因在于路由器中的静态路由配置错误或不完善

当路由器接收到ICMP数据包后,路由器通过解析帧信息得到了目的地的IP地址,通过将目的IP地址与路由表中的各个选项的子网掩码做与运算,判断路由器需要将ICMP数据包发送给哪一个网络,也就是获得下一跳的IP地址,但如果路由器在路由表中没有找到与目的地址匹配的网络,自然无法获得下一跳的IP地址,也无法进行数据传输功能,因此会丢失该数据包。

虽然本人在此次实验中因为路由器网络配置与静态路由配置的正确,没有出现路由器丢失数据包的情况,但在与同学沟通交流的过程中发现许多同学都出现了上述的情况,我认为根本原因在于对于静态路由配置的原理理解不够准确:以思考题1中配置路由器1的静态路由为例,静态路由的作用在于帮助路由器1记录,当目的地址在网络3内时,路由器1中的ICMP数据包的下一跳的IP地址为路由器2的左侧接口。相信有了这样的理解后无论遇到什么样的网络大家都能为路由器配置正确的静态路由。

4)观察 3 个及以上路由器构成的网络的数据包转发过程:

以我们在步骤一中配置的由三个路由器组成的网络为例,我们从PC0向PC5发送数据包,观察数据包的转发过程:

1.首先我们利用之前实验准备中学习的打开ARP表的方法,分别打开PC0、路由器、路由器1、路由器2、PC5的ARP缓存表如下图所示,可以看到PC0与PC5的ARP缓存表为空,而路由器0、路由器1、路由器2中的ARP缓存表只有其接口信息:

2.PC0在判断目的地址与其并不在同一个网络后,需要将ICMP数据包发送给默认网关,也就是我们设定的路由器0与其网络连接的接口,但由于在其ARP缓存表中查询不到默认网关的MAC地址,因此需要发送一个ARP数据包给交换机0,交换机0将ARP包广播给路由器0与PC1,PC1丢弃,路由器0接收的同时记录下PC0IP地址、MAC地址与其对应的接口信息

3.路由器0接收到ARP数据包后,返回一个应答包给交换机0,交换机0则转发给PC0,PC0接收到应答包的同时,记录下路由器0IP地址、MAC地址与对应的交换机的接口信息,在已知MAC地址后,PC0即可向路由器0发送ICMP数据包

4.路由器0在接收到ICMP数据包后,根据解析其中的帧得到的IP地址了解需要发往的下一跳是路由器1,但由于在其ARP缓存表中没有路由器1对应接口的MAC地址,因此需要向路由器1发送一个ARP数据包,路由器1在接收ARP数据包的同时,记录下了路由器0左侧对应接口的IP地址、MAC地址与接口信息

5. 路由器1接收到ARP数据包后,返回一个应答包给路由器0,路由器0接收到应答包的同时,记录下路由器1右侧接口的IP地址、MAC地址与对应的交换机的接口信息,在已知MAC地址后,路由器0即可向路由器1发送ICMP数据包

6.路由器1接收到ICMP数据包后,解析得到目的IP地址结合静态路由得知ICMP需要发给路由器2,但由于ARP缓存表中没有路由器2的MAC地址信息,因此向路由器2发送ARP表,路由器2接收到ARP表后,同时记录下路由器1右侧的IP地址、MAC地址与接口信息

7. 路由器2接收到ARP数据包后,需要返回一个应答包给路由器1,路由器1接收到应答包的同时,记录下路由器2左侧接口的IP地址、MAC地址与对应的交换机的接口信息,在已知MAC地址后,路由器1即可向路由器2发送ICMP数据包

8.路由器2接收到ICMP数据包后,通过解析帧信息得知此数据包需要发送给所连接的网络中的PC5,但由于ARP缓存表中没有PC5MAC地址信息,因此向交换机1发送一个ARP数据包,交换机1广播给PC5,PC5接收到ARP数据包的同时,记录下路由器2IP地址、MAC地址与对应的交换机接口信息

9. PC5接收到ARP数据包后,需要返回一个应答包给交换机1,交换机1将应答包转发给路由器2,路由器2接收到应答包的同时,记录下PC5IP地址、MAC地址与对应的交换机的接口信息,在已知MAC地址后,路由器2即可向PC5发送ICMP数据包

10. 在上一步骤结束后,即为ICMP数据包从路由器2发送到交换机1再转发给PC5的过程,在这一过程中PC0PC5、路由器0、路由器1与路由器2ARP缓存表都不再发生变化。

实验心得与体会:

  1. 此次IP数据报发送和转发流程实验课的内容与操作虽多,但其实只要核心理解了网络层与链路层协同工作的原理,就可以轻松理解明白,所有的步骤不过是一个先网络后链路,先IP地址后MAC地址不断重复查询传输的过程,特别是ARP协议与MAC地址的查找我们已经使用了两次实验课的时间来学习掌握,因此本次实验课的内容相对原理来说也较为简单;
  2. 我们本次实验课中主要的实验步骤的观察集中在链路层上,也就是各个主机ARP缓存表的变化,同样也就是观察ARP数据包为什么要发,怎么发,发到哪里的问题。我认为ARP协议最大的有点在于它是一个自学习协议,如果ARP缓存表中没有目标IP地址对应的MAC地址,主机会自动发送ARP请求,除此之外,一个主机发送对应ARP数据包后,接收的和发送的ARP缓存表都能记录更新,这种自动学习和更新机制减少了手动配置的需要,同样也减少了数据传输中的工作量;
  3. 本次实验课中我认为收获最大之处,第一点在于对复杂网络的配置工作,在之前的实验中,我们都只是对少数几个主机进行了简单的IP地址与子网掩码的配置,而在此次实验中,我们不仅涉及到了多个网络间的IP地址配置,还通过特定要求自行设计了不同与课本与手册上的IP地址,除此之外,还了解了默认网关与静态路由等重要概念,加深了自我对IP地址知识的学习;
  4. 第二点,在于对路由器强大功能的理解:路由器作为用于连接不同的网络的桥梁,可以帮助数据包在相隔甚远的网络之间进行传播,也能够分割广播域,使得一个网络中的广播消息不会传播到其他网络中,这些功能都依赖于路由器中的路由表,路由器根据目标地址在其路由表中信息,决定将数据包转发到哪一个网络接口或路由器,这个过程就被称为数据包转发。

相关文章:

【某农业大学计算机网络实验报告】实验三 IP数据报发送和转发流程

实验目的: (1)掌握基本的网络配置方法。 (2)观察 IP 数据报的发送和转发流程,掌握 IP 转发分组的原理。 实验器材: 一台Windows操作系统的PC机。 实验准备: 1.配置…...

Android13 添加运行时权限

在一些场景下,需要给app 添加运行时权限,这样就不需要在使用的时候再去点击授权。 直接上代码: --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.javab/services/core/java/com/android/server/pm…...

官方操刀占用仅6G,Win 11 LTSC详细安装、优化教程来了

前段时间微软发布 Win 11 年度重磅更新 24H2,顺便也带来了备受期待的 Win 11 2024 官方精简 LTSC(老坛酸菜)版。 Win 11 重磅更新发布,老坛酸菜版成了配角! 简单来说,Win 11 LTSC 是微软针对企业用户推出…...

【论文精读】RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning

RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning 前言AbstractMotivationSolutionRELIEFIncorporating Feature Prompts as MDPAction SpaceState TransitionReward Function Policy Network ArchitectureDiscrete ActorContinuous ActorCritic Overall…...

2023-06 GESP C++三级试卷

2023-06 GESP C三级试卷 (满分:100 分 考试时间:90 分钟) PDF试卷及答案回复:GESPC2023063 一、单选题(每题 2 分,共 30 分) 1 高级语言编写的程序需要经过以下( )操…...

Maven--简略

简介 Apache旗下的一款开源项目,用来进行项目构建,帮助开发者管理项目中的jar及jar包之间的依赖,还拥有项目编译、测试、打包的功能。 管理方式 统一建立一个jar仓库,把jar上传至统一的仓库,使用时,配置…...

leetcode 刷题day44动态规划Part13( 647. 回文子串、516.最长回文子序列)

647. 回文子串 动规五部曲: 1、确定dp数组(dp table)以及下标的含义 按照之前做题的惯性,定义dp数组的时候很自然就会想题目求什么,就如何定义dp数组。但是对于本题来说,这样定义很难得到递推关系&#x…...

华为OD机试真题---关联子串

华为OD机试中的“关联子串”题目是一个考察字符串处理和算法理解的经典问题。以下是对该题目的详细解析: 一、题目描述 给定两个字符串str1 和 str2,如果字符串 str1 中的字符, 经过排列组合后的字符串中只要有一个是 str2 的子串&#xff…...

【OpenAI】第二节(Token)什么是Token?如何计算ChatGPT的Token?

深入解析:GPT如何计算Token数?让你轻松掌握自然语言处理的核心概念!🚀 在当今的人工智能领域,GPT(Generative Pre-trained Transformer)无疑是最受关注的技术之一。无论是在文本生成、对话系统…...

GraphRAG + Ollama + Groq 构建知识库 续篇 利用neo4j显示知识库

GraphRAG Ollama Groq 构建知识库 在上一篇文章中,我们详细介绍了如何创建一个知识库。尽管知识库已经建立,但其内容的可视化展示尚未实现。我们无法直接看到知识库中的数据,也就无法判断这些数据是否符合我们的预期。为了解决这个问题&…...

工业以太网之战:EtherCAT是如何杀出重围的?

前言 EtherCAT 是一种开放的实时工业以太网协议,由德国倍福公司开发并在 2003 年 4 月的汉诺威工业博览会上首次亮相,目前由 EtherCAT 技术协会(ETG)进行维护和推广。经过 21 年的不断发展,EtherCAT 显示出极强的生命…...

轻量级可视化数据分析报表,分组汇总表!

什么是可视化分组汇总表? 可视化分组汇总表,是一种结合了数据分组、聚合计算与视觉呈现功能的数据分析展示功能。它能够按照指定的维度(如时间、地区、产品类型等)对数据进行分组,还能自动计算各组的统计指标&#xf…...

初始Python篇(4)—— 元组、字典

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 元组 相关概念 元组的创建与删除 元组的遍历 元组生成式 字典 相关概念 字典的创建与删除 字典的遍历与访问 字典…...

C#中正则表达式

在C#中,正则表达式由 System.Text.RegularExpressions 命名空间提供,可以使用 Regex 类来处理正则表达式。以下是一些常见的用法及示例。 C# 中使用正则表达式的步骤: 引入命名空间: using System.Text.RegularExpressions; 创…...

【python写一个带有界面的计算器】

python写一个带有界面的计算器 为了创建一个带有图形用户界面(GUI)的计算器,我们可以使用Python的tkinter库。tkinter是Python的标准GUI库,它允许我们创建窗口、按钮、文本框等GUI元素。 下面是一个简单的带有GUI的计算器示例&a…...

K230获取单摄像头的 3 个通道图像并显示在 HDMI 显示器上

本示例打开摄像头,获取 3 个通道的图像并显示在 HDMI 显示器上。通道 0 采集 1080P 图像,通道 1 和通道 2 采集 VGA 分辨率的图像并叠加在通道 0 的图像上。 # Camera 示例 import time import os import sysfrom media.sensor import * from media.dis…...

nginx中的HTTP 负载均衡

HTTP 负载均衡:如何实现多台服务器的高效分发 为了让流量均匀分配到两台或多台 HTTP 服务器上,我们可以通过 NGINX 的 upstream 代码块实现负载均衡。 方法 在 NGINX 的 HTTP 模块内使用 upstream 代码块对 HTTP 服务器实施负载均衡: upstr…...

package.json 里的 dependencies和devDependencies区别

dependencies&#xff08;依赖的意思&#xff09;&#xff1a; 通过 --save 安装&#xff0c;是需要发布到生产环境的。 比如项目中使用react&#xff0c;那么没有这个包的依赖就会报错&#xff0c;因此把依赖写入dependencies npm install <package-name>// 缩写 np…...

【功能安全】HARA分析中的SEC如何确认

目录 01 SEC介绍 02 SEC怎么定义 📖 推荐阅读 01 SEC介绍 SEC定义 S代表safety,E指的是Exposure,C指的是Controllability ASIL等级就是基于SEC三个参数确定下来的。 计算公式:10=D,9=C,8=B,7=A,<7=QM 举例:S3-C2-E4,即3+2+4=9,ASIL C 02 SEC怎么定义 Safe…...

阿里云Docker镜像源安装Docker的步骤

阿里云 Docker 镜像源安装 Docker 的步骤&#xff1a; 1. 更新包管理器&#xff1a; sudo apt update 2. 安装 Docker 的依赖包&#xff1a; sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release 3. 添加阿里云 Docker 镜像源 GP…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...