【某农业大学计算机网络实验报告】实验三 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缓存表只有其接口信息:
2.PC0开始发送ICMP数据包,但因为不知道下一跳的MAC地址,因此首先向交换机0发送ARP数据包,交换机 0 收到后广播给 PC1和路由器2,PC1 由于不匹配自动丢弃该帧,路由器 2则接收该ARP数据包,同时在其ARP缓存表中记录了PC0的IP地址、MAC地址与对应接口:
3. 之后,路由器2需要回复信息给交换机0,交换机0则将应答数据包转发给PC0,因此PC0的ARP缓存表中记录下了路由器2与PC0所在网络连接的接口的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的过程,在这一过程中PC0、PC2与路由器2的ARP缓存表都不再发生变化。
(2)添加 PC0 到 PC5 发送 ICMP 报文,观察 PC0、路由器 6、路由器 7,PC5 的ARP缓存表的变化及数据包的转发情况,或者采用 ping 命令测试:
1. 首先我们利用之前实验准备中学习的打开ARP表的方法,分别打开PC0、路由器2、路由器4、PC5的ARP缓存表如下图所示,可以看到PC5的ARP缓存表为空,路由器4中的ARP缓存表只有其接口信息,而PC0与路由器2由于上一步骤中的实验,已经存在了部分的信息:
2. PC0的ARP缓存表中因为已经存储了路由器2的MAC地址信息,因此直接向交换机0发送ICMP数据包,交换机将ICMP数据包转发给路由器2,此时路由器2为确定下一跳地址为多少需要广播发送ARP数据包给路由器4,同时,路由器4的ARP缓存表记录下路由器2的右侧接口的IP地址、MAC地址与接口信息:
3. 路由器4收到数据后需要向路由器2回复一个应答数据包,应答数据包达到路由器2后,路由器2同时在其ARP缓存表中记录下路由器4左侧接口的IP地址、MAC地址与其对应的接口信息:
4.路由器4在确定了下一跳地址后,将ICMP数据包转发给路由器4,路由器4为确定下一跳地址,同样需要广播发送ARP数据包,ARP数据包到达交换机2后,交换机2将该数据包广播给PC4与PC5,PC4丢弃,PC5接收,同时在其ARP 缓存表中记录下了路由器4下方接口的IP地址、MAC地址与对应的接口信息:
5. PC5在收到路由器的4的ARP数据包后需要回复一个应答包给交换机2,交换机2将此应答包转发给路由器4,路由器4接收后,记录下PC5的IP地址、MAC地址与对应的接口信息:
6. 在上一步骤结束后,即为ICMP数据包从路由器4发送到交换机2再转发给PC5的过程,在这一过程中PC0、PC5、路由器2与路由器4的ARP缓存表都不再发生变化。
(3)清空主机和路由器的 ARP 缓存,重复上述实验过程。
主机清空 ARP 缓存方法:与删除交换机的交换表类似,点击主页面左上角的【Select(Esc)】进入主机的显示页面,选择【Desktop】—>【Command Prompt】,主机命令提示符输入 arp -d 即可清空主机 arp 缓存表,再次打开ARP Table即可看见缓存表为空:
路由器清空 ARP 缓存方法:进入路由器命令行界面,进入特权模式,输入 clear arp,或点击重新给设备上电按钮直接重启,可以通过开关路由器接口的开关以重置路由器的ARP缓存表:
重复步骤一:
步骤一中PC0、PC2与路由器2的ARP缓存表的初始状态如下左图所示,最终状态如下右图所示,由于我们上述实验内中步骤一的初始状态各个ARP缓存表即为初始状态,因此重复步骤并未有太大区别:
重复步骤二:
1.重复步骤二前,PC0、PC5、路由器2与路由器4的ARP缓存表的初始状态如下图所示:
2. PC0开始发送ICMP数据包,但因为不知道下一跳的MAC地址,因此首先向交换机0发送ARP数据包,交换机 0 收到后广播给 PC1和路由器2,PC1 由于不匹配自动丢弃该帧,路由器 2则接收该ARP数据包,同时在其ARP缓存表中记录了PC0的IP地址、MAC地址与对应接口:
3. 之后,路由器2需要回复信息给交换机0,交换机0则讲应答数据包转发给PC0,因此PC0的ARP缓存表中记录下了路由器2与PC0所在网络连接的接口的IP地址、MAC地址并与交换机的接口相对应起来:
4. PC0的ARP缓存表存有下一跳的IP地址与MAC地址后,PC0向交换机0发送ICMP数据包,交换机0转发给路由器2,但此时路由器2不清楚下一跳的MAC地址,因此需要发送ARP数据包给路由器4,路由器4收到路由器2的ARP数据包,同时记录下路由器2对应的IP地址、MAC地址与其对应的接口信息:
5. 路由器4向路由器2返回应答包,路由器2接收到后同时在其ARP缓存表中记录下路由器4的IP地址、MAC地址与其对应的接口信息:
6.路由器4由于不清楚下一跳的MAC地址,需要向交换机2发送一个ARP数据包,而交换机2将ARP数据包广播给PC4与PC5,PC4丢弃,PC5成功接收,并记录下路由器4的IP地址、MAC地址与对应的接口信息:
7. PC5在收到路由器的4的ARP数据包后需要回复一个应答包给交换机2,交换机2将此应答包转发给路由器4,路由器4接收后,记录下PC5的IP地址、MAC地址与对应的接口信息:
8. 在上一步骤结束后,即为ICMP数据包从路由器4发送到交换机2再转发给PC5的过程,在这一过程中PC0、PC5、路由器2与路由器4的ARP缓存表都不再发生变化。
总结:在此次的重复步骤二的实验中,其最大的改变在于路由器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接收的同时记录下PC0的IP地址、MAC地址与其对应的接口信息:
3.路由器0接收到ARP数据包后,返回一个应答包给交换机0,交换机0则转发给PC0,PC0接收到应答包的同时,记录下路由器0的IP地址、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缓存表中没有PC5的MAC地址信息,因此向交换机1发送一个ARP数据包,交换机1广播给PC5,PC5接收到ARP数据包的同时,记录下路由器2的IP地址、MAC地址与对应的交换机接口信息:
9. PC5接收到ARP数据包后,需要返回一个应答包给交换机1,交换机1将应答包转发给路由器2,路由器2接收到应答包的同时,记录下PC5的IP地址、MAC地址与对应的交换机的接口信息,在已知MAC地址后,路由器2即可向PC5发送ICMP数据包:
10. 在上一步骤结束后,即为ICMP数据包从路由器2发送到交换机1再转发给PC5的过程,在这一过程中PC0、PC5、路由器0、路由器1与路由器2的ARP缓存表都不再发生变化。
实验心得与体会:
- 此次IP数据报发送和转发流程实验课的内容与操作虽多,但其实只要核心理解了网络层与链路层协同工作的原理,就可以轻松理解明白,所有的步骤不过是一个先网络后链路,先IP地址后MAC地址不断重复查询传输的过程,特别是ARP协议与MAC地址的查找我们已经使用了两次实验课的时间来学习掌握,因此本次实验课的内容相对原理来说也较为简单;
- 我们本次实验课中主要的实验步骤的观察集中在链路层上,也就是各个主机ARP缓存表的变化,同样也就是观察ARP数据包为什么要发,怎么发,发到哪里的问题。我认为ARP协议最大的有点在于它是一个自学习协议,如果ARP缓存表中没有目标IP地址对应的MAC地址,主机会自动发送ARP请求,除此之外,一个主机发送对应ARP数据包后,接收的和发送的ARP缓存表都能记录更新,这种自动学习和更新机制减少了手动配置的需要,同样也减少了数据传输中的工作量;
- 本次实验课中我认为收获最大之处,第一点在于对复杂网络的配置工作,在之前的实验中,我们都只是对少数几个主机进行了简单的IP地址与子网掩码的配置,而在此次实验中,我们不仅涉及到了多个网络间的IP地址配置,还通过特定要求自行设计了不同与课本与手册上的IP地址,除此之外,还了解了默认网关与静态路由等重要概念,加深了自我对IP地址知识的学习;
- 第二点,在于对路由器强大功能的理解:路由器作为用于连接不同的网络的桥梁,可以帮助数据包在相隔甚远的网络之间进行传播,也能够分割广播域,使得一个网络中的广播消息不会传播到其他网络中,这些功能都依赖于路由器中的路由表,路由器根据目标地址在其路由表中信息,决定将数据包转发到哪一个网络接口或路由器,这个过程就被称为数据包转发。
相关文章:

【某农业大学计算机网络实验报告】实验三 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 的子串ÿ…...

【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 显示出极强的生命…...

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

初始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(依赖的意思): 通过 --save 安装,是需要发布到生产环境的。 比如项目中使用react,那么没有这个包的依赖就会报错,因此把依赖写入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 的步骤: 1. 更新包管理器: sudo apt update 2. 安装 Docker 的依赖包: sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release 3. 添加阿里云 Docker 镜像源 GP…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...