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

VMware中的三种虚拟网络模式

虚拟机网络模式

  • 1 主机网络环境
  • 2 VMware中的三种虚拟网络模式
    • 2.1 桥接模式
    • 2.2 NAT模式
    • 2.3 仅主机模式
  • 3 网络模式选择及配置NAT模式
    • 3.1 VMware虚拟网络配置
    • 3.2 虚拟机选择网络模式
    • 3.3 Windows主机网络配置
  • 4 配置静态IP

虚拟机联网方式为桥接模式,这种模式下,虚拟机通过主机的物理网卡,直接连接到主机所在的网络当中。具体效果如下图所示。
在这里插入图片描述
这种模式下存在两个痛点

  1. 主机必须连接到某个网络中,主机和虚拟机才能互通。
  2. 更换网络后,主机和虚拟机的IP地址均会发生变化,因此远程访问工具中的IP需要同步进行修改。

为解决上述痛点,我们需要调整虚拟机的网络模式和配置静态IP。

1 主机网络环境

为理解VMware中的虚拟网络模式,我们首先需要明确主机所处的真实网络环境,其所处环境如下图所示:
在这里插入图片描述
如上图所示,路由器一端(WAN口(广域网口),Wide Area Network)连接互联网,另一端(Local Area Network,LAN(局域网口))连接多个需要上网的设备,这些设备组成一个局域网,局域网中的设备都通过路由器访问互联网,这个场景应该是大家十分熟悉的。
同时,我们的上网的设备还可以通过无线的方式连接到路由器上,通过无线网连接到路由器上的设备和通过有线的LAN接口连接到无线网上的设备都是处于同一个局域网当中的。

以下是一般家用的路由器图:
在这里插入图片描述
还有一个需要我们熟悉的是,假如现在我们需要有线上网的设备比较多,而支持有线上网的LAN接口只有4个
,那其余需要上网的设备如何才能通过路由器进行上网呢(这里假设不能通过无线的方式连接到路由器)?

这个时候我们就需要使用另外一个网络设备来解决这个问题,那就是交换机,如下:
在这里插入图片描述
如上就是一个家用小型的交换机,在它上面也存在多个网络接口,可以把这些网络接口认为是LAN接口,这样我们就可以使用交换机去扩展路由器上的LAN接口,那如何去扩展呢?
我们可以使用一根网线,网线的一端插在路由器的某一个LAN口上,另一端插在交换机的一个接口上。这样就相当于由路由器上的一个LAN口,扩展为4个LAN口。并且需要注意的是,直接接在路由器上的上网设备和通过扩展接在交换机上的上网设备也是处于同一个局域网当中的。

下面为大家介绍路由器中的两个十分重要的角色。

  • DHCP

    全称Dynamic Host Configuration Protocol ,动态主机配置协议,该协议用于给联网的设备自动分配(私网)IP地址和其他网络配置。家用路由器中一般就会集成DHCP服务,因此设备只要连接上路由器,便能自动获取IP地址等网络配置。

可以登录一下自己家的路由器管理界面,地址一般为:192.168.1.1
在这里插入图片描述
DHCP会维护一个IP地址池2-254,每当一个新的上网设备连接到路由器上后,这个DHCP服务会从地址池当中抽选一个ip给上网的设备。
这就是为什么我们的主机也好,还是其他的上网设备也好,连接到新的网络之后,ip地址都会变,原因就是,路由器当中DHCP服务维护的IP地址池是不一样的。

  • NAT

    全称Network Address Translation,网络地址转换,该技术主要用于缓解IPv4地址短缺,有了NAT之后,可以令多个网络设备共享一个公网IP地址,家庭路由器中也都集成了该服务。

    其工作原理是,NAT设备(路由器)一端连接互联网,其具有一个公网IP(路由器也具有一个公网IP),另一端连接一个局域网,局域网中的每个设备均只有一个私网IP。当局域网中的设备经过路由器向互联网中的其他设备发送数据时,NAT服务会将数据包的源地址由该设备的私网IP替换为路由器的公网IP,因此互联网中的其他设备看到源地址为路由器的公网IP,所以其返回数据时,就会把路由器的公网IP设置为目标地址,路由器接收到数据之后,NAT设备再将数据的目标地址由路由器的公网IP改为原设备的私网IP,最终数据就能返回到该设备了。具体流程如下图所示
    在这里插入图片描述
    在对我们的主机所处的网络环境有了一个了解后,下面分别为大家介绍VMware中的三种网络模式。

2 VMware中的三种虚拟网络模式

2.1 桥接模式

这个桥接模式我们也一再提到,我们之前说,那它模拟出来的效果就是让虚拟机直接接入到这个主机所在的网络当中。或者说的直白一点,就是让虚拟机直接接入这个主机所在的路由器当中。没错,但实际上这个说法离真相还是有一点距离的。

桥接模式的原理如下图所示
在这里插入图片描述

这种模式下,VMware虚拟出了一个交换机。首先,该虚拟交换机通过主机的物理网卡连接到主机所在的网络中,
然后所有的虚拟机都通过虚拟交换机接入到主机所在网络中。
所以在该模式下,虚拟机和主机位于同一网络中,因此在主机接入网络的前提下,虚拟机和物理机是可以互通的。

好,我们可以看一下这张图,那这个桥接模式下VMware到底做了什么呢?实际上是这样的,VMware它虚拟出了一个交换机。交换机的概念大家还记得吧?那我们前面给大家简单介绍过一下,我们说这个交换机可以用来扩展路由器的LAN口。

没错。那这VMware就虚拟出了一个这样的交换机,然后这个交换机它通过这个宿主机(图中物理机-03)的物理网卡,连接到了路由器当中,其实就相当于接入到了路由器的一个LAN口,可以这么去理解,那这样一来路由器是不是就扩展出来了一系列的LAN口?好,然后所有的虚拟机其实并不是直接接入到这个路由器了,而是接入到了这个虚拟的交换机当中了。
那前面也提到过,那接入到这个虚拟机的这个设备和直接接入到路由器LAN口的设备,其实它们是位于同一个局域网下边了,对不对?那也就是说我们的主机和虚拟机是位于同一个局域网下的(对应图中物理机01,02,03和虚拟机01,02,03),那所以说这种情况下主机跟虚拟机之间,一定是可以进行通信的。

好了,那这就是VMware当中的这个桥接模式真正的一个原理图。

2.2 NAT模式

NAT模式的原理如下图所示
在这里插入图片描述

这种模式下,VMware虚拟出了一个交换机,一个DHCP服务以及一个NAT服务,相当于构成了一个虚拟路由器。
虚拟路由器通过主机的物理网卡连接到主机所在的网络,虚拟机则全部连接到虚拟路由器上,组成了一个子网。
此时所有的虚拟机位于同一网络,因此彼此之间可以互通,但是主机不能与虚拟机互通。为使主机能够和虚拟机互通,VMware又在主机中虚拟出了一个网卡,并连接到了这个虚拟路由器中,这时主机便可虚拟机互通了。

可以看到这个模式原理图看起来要复杂一些,对吧?那首先需要明确的一点,就是在这种模式下边, VMware它不仅虚拟出来了一个交换机,它还同时虚拟出来了一个 DHCP 服务以及一个 NAT 服务。

好,那实际上这三者组合起来就相当于构成了一个虚拟的路由器,然后这个虚拟路由器的一端也就是它的WAN口,会通过这个宿主机(图中物理机-03),连接到这个真正的路由器上,相当于是它的一个WAN口上边。
好了,然后所有的虚拟机都会接入到这个虚拟的路由器当中。
好,那这其实就相当于是我们这个虚拟路由器,那它又在真正的这个路由器的局域网下边又创建了一个子局域网。那这些虚拟机都位于这个子网内,所以这种情况下虚拟机之间是可以互相通信的,并且这个虚拟机也是可以访问互联网的。
那只不过它在访问互联网的时候,这个数据包会经过两次NAT的地址转换。一次是由这个虚拟路由器,由这个子网 IP 转换成这个局域网的IP。好,那再有一次就是由这个真正的路由器当中的NAT,由这个局域网的这个私网 IP 转换成互联网上面的一个公网IP。
然后有一个问题大家需要注意到,比如在当前的这个环境下边,我们的主机和虚拟机其实并不是位于同一个网络当中的,没问题,虚拟机实际上是位于这个虚拟路由器所创建的子网当中的,而主机现在是位于这个真正的路由器所创建的局域网当中的。

好,那显然他们并没有处在同一级的网络当中,对吧?那所以说在这种情况下,这个主机是没有办法和这个虚拟机去进行互通的。

好,那为了让这个主机和虚拟机进行互通, VMware又做了一件事。他做什么事了呢?好,他在这个主机上边又虚拟出来了一个网卡(图中物理机-03),然后通过这个虚拟网卡接入到了这个虚拟的路由器当中。好了,那这样一来的话,这个宿主机是不是也就位于这个虚拟路由器所创建出来的子网当中了呀?对不对?也就是他和这个虚拟机目前就位于同一级网络里边了,这个时候那他们之间就可以毫无障碍地进行互相通信了。

好,那这个虚拟网卡呢?其实我们也能够看得到。给大家去看一下。VMware虚拟出来的网卡如下:在这里插入图片描述
那这个网卡实际上就会接入到我们刚所提到的这个虚拟的路由器当中。好,那也就是说我们目前这个主机在 NAT 模式下边,其实是处在两个网络当中的,一个是我们这个虚拟网络,还有一个是咱们这个真正的物理网络,这一点大家要理解一下。

好,那至此这个 NAT 模式的原理我就介绍完毕了。
好,那接下来再请大家思考最后一个问题。大家想一想在 NAT 模式下边这个主机它如果不连接到某个网络的话,那主机和虚拟机之间是否还能完成相互通信?我们前面提到过说在桥接模式下边是不行的,如果主机不联网,那相当于虚机也没联网,对吧?两个独立的设备没有办法进行通信,好。但是在 NAT 模式下边它也是这样的吗?答案不是。

在 NAT 模式下边,不管主机是否接入到某个网络当中,那我们的主机和虚拟机之间都可以进行相互通信,为什么呀?因为咱们看这个图就能看出来,对吧?如果物理机-03这块他没有接入到某个网络当中,好,但是我这个虚拟路由器是不是还在,对不对?那我的主机(图中物理机-03),我的虚拟机是不是都接入到了这个虚拟的路由器当中了呀?那他们是不是就位于同一网络当中?那所以说它们之间进行相互通信是没有任何问题的。

OK,只不过说如果你主机它不接入到这个网络当中,那我们的虚拟机它没有办法去访问互联网而已。好了,那这就是 NAT 模式下边的一个特点,大家要理解。

2.3 仅主机模式

仅主机模式的原理如下图所示
在这里插入图片描述

这种模式,和NAT模式十分相似,唯一的区别是,虚拟路由器并未连接到主机所在的网络中,
因此主机和虚拟机之间可以互通,但是虚拟机不能访问互联网。

这个模式就非常非常简单了。这是它的这个原理图,那这个仅主机模式其实和 NAT 模式十分相似。好,那它这儿也是虚拟出来了一个路由器,然后这些虚拟机也都会接入到这个路由器当中,那并且这个 VMware在主机当中也虚拟出来了一块网卡。OK,好,那这个网卡也接入到了这个虚拟的路由器当中。
好,然后其实我们也可以去看一下这个 VMware 虚拟出来的这块网卡。我们还是打开这个 Windows 主机的这个网络适配器这块
在这里插入图片描述
对吧?它跟原来这个有区别,一个叫做 VMNET8,一个叫做 VMNET1。需要给大家明确的一点,就是VMNET8这块虚拟网卡接入的是 NAT这个网络模式下的那个虚拟路由器,而 VMNET1它接入的是这个仅主机模式下边的这个虚拟路由器。

好了,那我们再回到这个原理图上面来,所以说那我们的主机(图中物理机-03)和这个虚拟机是不是也是位于同一个局域网下边的,对吧?那所以说它们之间也是可以进行相互通信的,这个没有问题。
好了,那这个仅主机模式和 NAT 模式唯一的区别应该大家也发现了,就是啥?是不是就这个虚拟路由器,它并没有接入到这个真正的路由器当中,OK,那所以说在仅主机模式下边,我们的虚拟机是不能访问互联网的。
好了,那这就是仅主机模式的特点,那所谓的仅主机呢?其实现在大家也能理解了,是不是就是我们的虚拟机,它只能和这个主机进行网络通信,不能和互联网上的其他设备进行通信。

那至此VMware的三种网络模式就给大家介绍完毕了,那大家现在应该已经知道了他们各自的原理以及各自的特点了。好,那现在问大家一个问题,你说为了方便我们将来的学习或者是工作,对吧?那我们用哪种模式要更好一些呢?那实际上应该是不是 NAT 模式要更好一些,因为在 NAT 模式下边,不管主机是否联网,那我们的主机和虚拟机之间是不是都能够实现互通?那当然了,能实现这个效果的其实并不只有NAT,仅主机也行,对吧?仅主机,不管你主机是否联网,那主机和虚拟机是不是都位于这个虚拟网络当中,那所以说它们之间也都是能互通的。但是仅主机它有一个缺点。缺点就是你的虚拟机是没有办法去访问互联网的,对吧?没办法连接外网。

3 网络模式选择及配置NAT模式

为保证主机未联网的情况下,主机和虚拟机也能实现互通;同时保证主机联网的情况下虚拟机也能访问互联网,我们最好选择上述三种模式中的NAT模式,具体配置如下。

3.1 VMware虚拟网络配置

首先第一项就是我们得在VMware的虚拟网络编辑器里边去做一些相关的配置,在这儿我们其实主要就是配置这个虚拟出来的 DHCP服务,以及虚拟出来的 NAT服务。

  1. 点击VMware菜单栏中的编辑,选择虚拟网络编辑器
    在这里插入图片描述
    2.打开虚拟网络编辑器后,赋予管理员权限
    在这里插入图片描述
    3.配置VMnet8子网
    在这里插入图片描述

那接下来我们再去看一下这个虚拟的 DHCP 服务,咱们都能做哪些配置?好,那现在我们点一下
在这里插入图片描述
点完之后可以看到这里边我们能配的其实主要就是这个起始 IP 和结束 IP 地址,大家还记得这个 DHCP 服务是不是会维护一个 IP 的地址池,对吧?用于分配给加入这个网络的设备,对吧?好,那在这儿我们能够去调整这个地址池的范围。OK,我们暂时先不做配置。

4.打开NAT配置界面
在这里插入图片描述
还有一个简单的配置项需要给大家去说一下,那也就是这个 将主机虚拟适配器连接到此网络,那这个选项是用于将我们的主机连接到这个虚拟网络的。
OK,好,其实之前给大家看到过,我们说这个 Vmware 会在主机里边,是不是虚拟出来一个所谓的虚拟网卡,对吧?那其实我们前面告诉大家,就是这个 VMNET8,OK,其实在这儿我们可以做一下这个实验。大家注意观察一下。我们找一下那个虚拟网络的编辑器,那如果我把选项给它勾选掉,好,那这个 VMNET8这个虚拟网卡就会消失,大家注意观察。

这种情况下我们的主机就不会加入到这个虚拟网络了。OK,那这样一来的话,那主机跟虚拟机之间就没有办法进行网络通信了。OK,进而我们就没有办法去使用这个 SSH 的客户端去远程访问咱们这个虚拟机了。能理解各位,OK,所以说这个咱们必须得给他勾选上。好,那我们再给他勾上之后再点击应用。好,那这个需要稍微的等一会,那等一会之后那左侧这个位置就会重新出现 VMNET8。

5.修改NAT配置
在这里插入图片描述
大家可以看到在这个 NAT 当中我们能配的东西很少,其实主要就是这样的一个网关IP,这个网关 IP 我们又应该怎么去理解?给大家解释一下,这个本质上就是给这个虚拟出来的NAT设备配置一个私网 IP ,啥意思的?给大家解释一下,实际上是这样的,咱们都知道 NAT 这个服务它是不是一端连接着互联网,然后另外一端连接着我们这个局域网,对吧?OK,好,然后需要注意的一点就是那这个 NAT 设备在互联网当中它会有一个公网IP,那同时在我们的这个局域网当中,它其实还有一个私网IP。
那在这个位置我们所配置的这个所谓的网关IP,其实就是给这个 NAT 设备去确定一个它在局域网当中的私网 IP 地址。OK,好,那我们为什么管它叫做网关IP?这个给大家去解释一下,那前面咱们其实也提到过我们这个局域网当中所有的网络设备,对吧?要想跟我们这个互联网当中的设备进行通信,都得经过谁?是不是都得经过这个 NAT 设备啊?没错,那所以说从这个角度来理解你这个 NAT 设备是不是就相当于是我们这个局域网通向外部世界的一个关口啊?那所以说我们就管这个NAT设备叫做网关,好,那它的这个局网里边的私网 IP 就叫做网关IP,这一点大家要注意一下就可以了。
那在这儿呢,我们可以分配给它这个子网 IP 范围内当中的任意一个合法的IP,可以看到这儿它默认给的是这个2,对吧?好了,那这个NAT 这块也就解释完毕了。

注意事项

NAT网关IP须位于VMnet8子网IP范围内。

3.2 虚拟机选择网络模式

  1. 修改虚拟机所使用的网络模式
    在这里插入图片描述
  2. 选择NAT模式
    在这里插入图片描述

3.3 Windows主机网络配置

在这里插入图片描述

上述配置中,VMware已将Windows主机连接到虚拟网络中了,此处只需查看Windows主机中的虚拟网络网卡配置是否正确即可。

  1. 打开网络适配器配置面板

    Win+R打开运行窗口,输入ncpa.cpl,然后按回车键

  2. 查看VMnet8虚拟网络适配器
    在这里插入图片描述

  3. 查看IpV4配置
    在这里插入图片描述然后这儿有一个小细节大家一定要注意到,就是这个 IP 地址并不是通过咱那个虚拟的 DHCP 自动获取的。你看他没有勾选这个自动获取 IP 地址的选项,对吧?好,你勾选了他之后,那主机的 IP 地址就是由虚拟的 DHCP 给你分配了。好,然后他这儿并没有勾选,它这相当于是怎么样?是手动的写死了一个 IP 地址,那这样一来的话,那我们这个主机每次这个启动起来之后,它的 IP 地址永远都是固定的这一个。那这其实是我们去配置这个 IP 地址的两种方式。那这种方式我们通常称之为静态IP,因为你写死之后这个 IP 地址它永远都不会变,对吧?然后上面这种通过这个 DHCP 服务自动去获取IP,那这种配置 IP 的方式我们称之为是动态IP。

注意事项
主机IP须位于VMnet8子网IP范围内。

4 配置静态IP

NAT模式下,虚拟机的IP地址,默认情况下是由虚拟DHCP服务自动分配的,虚拟机的IP地址不固定,这对于SSH远程访问也不友好,所以通常情况下,我们不使用虚拟DHCP服务,而是手动为虚拟机配置静态的IP地址。具体操作如下。

  1. 确定网络配置文件

    在终端输入如下命令ifconfig命令,查看当前的网络接口,内容如下

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.10.100  netmask 255.255.255.0  broadcast 192.168.10.255inet6 fe80::5fdd:f01e:a4fb:966  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:fc:a3:fe  txqueuelen 1000  (Ethernet)RX packets 1526  bytes 136998 (133.7 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 1907  bytes 136735 (133.5 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 68  bytes 5916 (5.7 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 68  bytes 5916 (5.7 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255ether 52:54:00:ea:8a:fb  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  1. 其中ens33是目前的以太网接口,故其配置文件为vim /etc/sysconfig/network-scripts/ifcfg-ens33

  2. 修改网络配置文件

    打开配置文件

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
    

    内容如下

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=bf788989-e095-4e58-865a-e6b07248a514
    DEVICE=ens33
    ONBOOT=yes
    

    需要修改的内容如下

    • 修改BOOTPROTO参数为static

    • 修改ONBOOT参数为yes

    • 增加如下内容

      IPADDR=192.168.10.100
      NETMASK=255.255.255.0
      GATEWAY=192.168.10.2
      DNS1=192.168.10.2
      

      注意事项

      IPADDR需要位于前文VMnet8子网IP范围内,GATEWAY需要配置为前文的NAT服务的网管IP。

  3. 重新启动网络服务

    在终端执行以下命令,重启network服务

    [root@localhost ~]# systemctl restart network
    
  4. 观察网络配置是否生效

    在终端执行ifoconfig命令,观察ens33的网络接口的IP地址是否为前文所配置的IPADDR

相关文章:

VMware中的三种虚拟网络模式

虚拟机网络模式 1 主机网络环境2 VMware中的三种虚拟网络模式2.1 桥接模式2.2 NAT模式2.3 仅主机模式 3 网络模式选择及配置NAT模式3.1 VMware虚拟网络配置3.2 虚拟机选择网络模式3.3 Windows主机网络配置 4 配置静态IP 虚拟机联网方式为桥接模式&#xff0c;这种模式下&#x…...

深度学习基准模型Transformer

深度学习基准模型Transformer 深度学习基准模型Transformer&#xff0c;最初由Vaswani等人在2017年的论文《Attention is All You Need》中提出&#xff0c;是自然语言处理&#xff08;NLP&#xff09;领域的一个里程碑式模型。它在许多序列到序列&#xff08;seq2seq&#xf…...

如何实现公网环境远程连接本地局域网宝塔FTP服务远程管理文件

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 &#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…...

dledger原理源码分析系列(一)-架构,核心组件和rpc组件

简介 dledger是openmessaging的一个组件&#xff0c; raft算法实现&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何实现raft概念&#xff0c;以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的架构&#xff0c;核心组件&#xff1b;rpc组…...

Github 2024-07-05开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目2Jupyter Notebook项目1Dart项目1C++项目1免费API集合 创建周期:2900 天开发语言:Python协议类型:MIT LicenseSta…...

WHAT - React useEffect 依赖的 Object.is

目录 一、背景二、Object.is 的语法三、Object.is 的行为四、总结 一、背景 在 https://react.dev/reference/react/useEffect 中我们了解到&#xff1a; React will compare each dependency with its previous value using the Object.is comparison. 接下来我们学习一下 Ob…...

【Java EE】Spring IOCDI

Spring IOC & DI 文章目录 Spring IOC & DI一、Spring是什么&#xff1f;二、IOC(控制反转)2.1 通俗理解2.2 造汽车的例子理解IOC2.3 IOC详解1. 获取Bean2. 方法注解——Bean1. 应用场景&#xff1a;2. 应用方法&#xff1a;3. 注意要点&#xff1a; 特别注意: 四、DI4…...

【FreeRTOS】同步互斥与通信 有缺陷的同步示例

目录 1 同步互斥与通信1.1 同步互斥与通信概述1.2 同步与互斥的概念1.3 同步的例子&#xff1a;有缺陷1.4 freertos.c源码3. 互斥的例子&#xff1a;有缺陷4. 通信的例子&#xff1a;有缺陷5. FreeRTOS的解决方案 1 同步互斥与通信 1.1 同步互斥与通信概述 参考《FreeRTOS入门…...

Lambda表达式讲解

简介: Lambda表达式的使用场景非常广泛,主要包括函数式编程、集合操作、排序、线程编程、GUI事件处理、数据处理、Web开发等。 函数式编程:Lambda表达式是函数式编程的重要特性,可以用于替代传统的匿名内部类,简化代码,提高可读性。 集合操作:Lambda表达式可以与集合…...

深入了解Linux中的dnsmasq:配置与优化指南

目录 安装dnsmasqUbuntu/DebianCentOS/RHELFedora 配置dnsmasq基本配置高级配置 启动和测试dnsmasq优化dnsmasq性能优化安全性优化 常见问题与故障排除无法解析域名DHCP分配失败 在Linux系统中&#xff0c; dnsmasq 是一个轻量级的网络服务&#xff0c;主要用于提供DNS缓存和D…...

【React】Ant Design -- Table分页功能实现

实现步骤 为Table组件指定pagination属性来展示分页效果在分页切换事件中获取到筛选表单中选中的数据使用当前页数据修改params参数依赖引起接口重新调用获取最新数据 const pageChange (page) > {// 拿到当前页参数 修改params 引起接口更新setParams({...params,page})…...

400G SR4和800G SR8光模块在AI集群中的应用

人工智能&#xff08;AI&#xff09;技术的快速发展下&#xff0c;AI集群的计算能力和数据传输需求不断提升。为了满足这一需求&#xff0c;光模块技术也在不断进步。高速率光模块作为新一代高速光通信解决方案&#xff0c;正在逐步应用于AI集群中&#xff0c;为其提供更高效、…...

ARM功耗管理软件之DVFSAVS

安全之安全(security)博客目录导读 思考&#xff1a;功耗管理软件栈及示例&#xff1f;WFI&WFE&#xff1f;时钟&电源树&#xff1f;DVFS&AVS&#xff1f; 目录 一、ARM功耗管理软件之DVFS 二、ARM功耗管理软件之AVS 一、ARM功耗管理软件之DVFS 有一个实现特定…...

【堆 优先队列】23. 合并 K 个升序链表

本文涉及知识点 堆 优先队列 LeetCode23. 合并 K 个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#…...

云桌面运维工程师

一 深信服驻场工程师 1 深信服AC、AF、AD、NGAF、WOC Atrust、WAF项目实施经验者优先考虑。 负责云桌面POC测试 部署和配置&#xff1a;设置云桌面基础设施&#xff0c;包括虚拟化平台、云桌面管理软件和相关组件。确保正确配置网络、存储和安全设置。 用户体验&#xff1…...

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 目录 AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 一、简单介绍 二、Transformer 三、Transformer架构 四、编码器 1、自注意…...

【在大模型RAG系统中应用知识图谱】

【引子】 关于大模型及其应用方面的文章层出不穷&#xff0c;聚焦于自己面对的问题&#xff0c;有针对性的阅读会有很多的启发&#xff0c;本文源自Whyhow.ai 上的一些文字和示例。对于在大模型应用过程中如何使用知识图谱比较有参考价值&#xff0c;特汇总分享给大家。 在基于…...

第二十条:与抽象类相比,优先选择接口

要定义多种实现的类型&#xff1a;JAVA有两种机制&#xff1a;接口和抽象类。这两种机制都支持为某些实例方法提供实现&#xff0c;但二者有个重要的区别&#xff1a;要实现由抽象类定义的类型&#xff0c;这个类必须是抽象类的子类。因为Java只允许单继承&#xff0c;对抽象类…...

20240705

Nacos Service Discovery 通过nacos实现的服务发现平台 Spring Cloud Alibaba Sentinel 提供 Sentinel 自动接入和配置支持&#xff0c;提供 Spring Web/WebFlux、Feign、RestTemplate、注解等适配 Spring Cloud Alibaba Sentinel DataSource 提供 Sentinel 动态数据源接入支…...

【2023ICPC网络赛I 】E. Magical Pair

当时在做洛谷U389682 最大公约数合并的时候我就想到把每个质因子分解出来然后跑高维前缀和&#xff0c;但是那一道题不是用这个方法&#xff0c;所有我也一直在思考这种做法是不是真的有用。因为昨天通过2024上海大学生程序设计竞赛I-六元组计数这道题我了解到了不少关于原根的…...

Kafka-服务端-网络层-源码流程

整体架构如下所示&#xff1a; responseQueue不在RequestChannel中&#xff0c;在Processor中&#xff0c;每个Processor内部有一个responseQueue 客户端发送的请求被Acceptor转发给Processor处理处理器将请求放到RequestChannel的requestQueue中KafkaRequestHandler取出reque…...

百日筑基第十一天-看看SpringBoot

百日筑基第十一天-看看SpringBoot 创建项目 Spring 官方提供了 Spring Initializr 的方式来创建 Spring Boot 项目。网址如下&#xff1a; https://start.spring.io/ 打开后的界面如下&#xff1a; 可以将 Spring Initializr 看作是 Spring Boot 项目的初始化向导&#xff…...

Generative Modeling by Estimating Gradients of the Data Distribution

Generative Modeling by Estimating Gradients of the Data Distribution 本文介绍宋飏提出的带噪声扰动的基于得分的生成模型。首先介绍基本的基于得分的生成模型的训练方法&#xff08;得分匹配&#xff09;和采样方法&#xff08;朗之万动力学&#xff09;。然后基于流形假…...

vector与list的简单介绍

1. 标准库中的vector类的介绍&#xff1a; vector是表示大小可以变化的数组的序列容器。 就像数组一样&#xff0c;vector对其元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素&#xff0c;并且与数组中的元素一样高效。但与数…...

四种线程池的使用,优缺点分析

池化思想&#xff1a;线程池、字符串常量池、数据库连接池 提高资源的利用率 下面是手动创建线程和执行任务过程&#xff0c;可见挺麻烦的&#xff0c;而且线程利用率不高。 手动创建线程对象执行任务执行完毕&#xff0c;释放线程对象 线程池的优点&#xff1a; 提高线程的…...

什么是 BEM 规范

BEM&#xff08;Block, Element, Modifier&#xff09;是一种 CSS 命名规范&#xff0c;旨在提高代码的可读性和可维护性。BEM 规范通过明确的命名规则来定义组件和组件的各个部分&#xff0c;使开发者能够更容易地理解和维护代码。 BEM 命名规范的基本概念 Block&#xff08…...

【Node.JS】入门

文章目录 Node.js的入门涉及对其基本概念、特点、安装、以及基本使用方法的了解。以下是对Node.js入门的详细介绍&#xff1a; 一、Node.js基本概念和特点 定义&#xff1a;Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使得JavaScript能够运行在服务器…...

Amazon SageMaker 机器学习之旅的助推器

一、前言 在当今的数字化时代&#xff0c;人工智能和机器学习已经成为推动社会进步的重要引擎。亚马逊云科技在 2023 re:Invent 全球大会上&#xff0c;宣布推出五项 Amazon SageMaker 新功能&#xff1a; Amazon SageMaker HyperPod 通过为大规模分布式训练提供专用的基础架构…...

TransMIL:基于Transformer的多实例学习

MIL是弱监督分类问题的有力工具。然而&#xff0c;目前的MIL方法通常基于iid假设&#xff0c;忽略了不同实例之间的相关性。为了解决这个问题&#xff0c;作者提出了一个新的框架&#xff0c;称为相关性MIL&#xff0c;并提供了收敛性的证明。基于此框架&#xff0c;还设计了一…...

3.用户程序与驱动交互

驱动程序请使用第二章https://blog.csdn.net/chenhequanlalala/article/details/140034424 用户app与驱动交互最常见的做法是insmod驱动后&#xff0c;生成一个设备节点&#xff0c;app通过open&#xff0c;read等系统调用去操作这个设备节点&#xff0c;这里先用mknode命令调…...

尽量不写一行if...elseif...写出高质量可持续迭代的项目代码

背景 无论是前端代码还是后端代码&#xff0c;都存在着定位困难&#xff0c;不好抽离&#xff0c;改造困难的问题&#xff0c;造成代码开发越来越慢&#xff0c;此外因为代码耦合较高&#xff0c;总是出现改了一处地方&#xff0c;然后影响其他地方&#xff0c;要么就是要修改…...

xcrun: error: unable to find utility “simctl“, not a developer tool or in PATH

目录 前言 一、问题详情 二、解决方案 1.确认Xcode已安装 2.安装Xcode命令行工具 3.指定正确的开发者目录 4. 确认命令行工具路径 5. 更新PATH环境变量 前言 今天使用cocoapods更新私有库的时候&#xff0c;遇到了"xcrun: error: unable to find utility &…...

【linux高级IO(一)】理解五种IO模型

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux高级IO 1. 前言2. 重谈对…...

前端引用vue/element/echarts资源等引用方法Blob下载HTML

前端引用下载vue/element/echarts资源等引用方法 功能需求 需求是在HTML页面中集成Vue.js、Element Plus&#xff08;Element UI的Vue 3版本&#xff09;、ECharts等前端资源&#xff0c;使用Blob下载HTML。 解决方案概述 直接访问线上CDN地址&#xff1a;简单直接&#xff0c…...

昇思MindSpore学习笔记2-01 LLM原理和实践 --基于 MindSpore 实现 BERT 对话情绪识别

摘要&#xff1a; 通过识别BERT对话情绪状态的实例&#xff0c;展现在昇思MindSpore AI框架中大语言模型的原理和实际使用方法、步骤。 一、环境配置 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下…...

uniapp实现图片懒加载 封装组件

想要的效果就是窗口滑动到哪里&#xff0c;哪里的图片进行展示 主要原理使用IntersectionObserver <template><view><image error"HandlerError" :style"imgStyle" :src"imageSrc" :id"randomId" :mode"mode&quo…...

持续交付:自动化测试与发布流程的变革

目录 前言1. 持续交付的概念1.1 持续交付的定义1.2 持续交付的核心原则 2. 持续交付的优势2.1 提高交付速度2.2 提高软件质量2.3 降低发布风险2.4 提高团队协作 3. 实施持续交付的步骤3.1 构建自动化测试体系3.1.1 单元测试3.1.2 集成测试3.1.3 功能测试3.1.4 性能测试 3.2 构建…...

VBA常用的字符串内置函数

前言 在VBA程序中&#xff0c;常用的内置函数可以按照功能分为字符串函数、数字函数、转换函数等等&#xff0c;本节主要会介绍常用的字符串的内置函数&#xff0c;包括Len()、Left()、Mid()、Right()、Split()、String()、StrConV()等。 本节的练习数据表以下表为例&#xff…...

大数据面试题之Spark(7)

目录 Spark实现wordcount Spark Streaming怎么实现数据持久化保存? Spark SQL读取文件&#xff0c;内存不够使用&#xff0c;如何处理? Spark的lazy体现在哪里? Spark中的并行度等于什么 Spark运行时并行度的设署 Spark SQL的数据倾斜 Spark的exactly-once Spark的…...

AI绘画 Stable Diffusion图像的脸部细节控制——采样器全解析

大家好&#xff0c;我是画画的小强 我们在运用AI绘画 Stable Diffusion 这一功能强大的AI绘图工具时&#xff0c;我们往往会发现自己对提示词的使用还不够充分。在这种情形下&#xff0c;我们应当如何调整自己的策略&#xff0c;以便更加精确、全面地塑造出理想的人物形象呢&a…...

liunx离线安装Firefox

在Linux系统中离线安装Firefox浏览器&#xff0c;您需要先从Mozilla的官方网站下载Firefox的安装包&#xff0c;然后通过终端进行安装。以下是详细的步骤&#xff1a; 准备工作 下载Firefox安装包&#xff1a; 首先&#xff0c;在一台可以上网的电脑上访问Firefox官方下载页面…...

UNet进行病理图像分割

数据集链接&#xff1a;https://pan.baidu.com/s/1IBe_P0AyHgZC39NqzOxZhA?pwdnztc 提取码&#xff1a;nztc UNet模型 import torch import torch.nn as nnclass conv_block(nn.Module):def __init__(self, ch_in, ch_out):super(conv_block, self).__init__()self.conv nn…...

初二数学基础差从哪开始补?附深度解析!

有时候&#xff0c;当你推不开一扇门的时候&#xff0c;不要着急&#xff0c;试着反方向拉一下&#xff0c;或者横向拉一下。下面是小偏整理的初二数学基础差从哪开始补2021年&#xff0c;感谢您的每一次阅读。   初二数学基础差从哪开始补2021年   第一个问题是很多同学都…...

【C语言】return 关键字

在C语言中&#xff0c;return是一个关键字&#xff0c;用于从函数中返回值或者结束函数的执行。它是函数的重要组成部分&#xff0c;负责将函数的计算结果返回给调用者&#xff0c;并可以提前终止函数的执行。 主要用途和原理&#xff1a; 返回值给调用者&#xff1a; 当函数执…...

华为机试HJ13句子逆序

华为机试HJ13句子逆序 题目&#xff1a; 将一个英文语句以单词为单位逆序排放。例如“I am a boy”&#xff0c;逆序排放后为“boy a am I”所有单词之间用一个空格隔开&#xff0c;语句中除了英文字母外&#xff0c;不再包含其他字符 想法&#xff1a; 将输入的字符串通过…...

代码随想录day40 动态规划(5)

52. 携带研究材料&#xff08;第七期模拟笔试&#xff09; (kamacoder.com) 完全背包&#xff0c;可重复放入物品&#xff0c;需要用一维滚动数组从前往后遍历。 由于第0个物品和后面物品的转移方程没有区别&#xff0c;可以不额外初始化dp数组&#xff0c;直接用元素全0的d…...

FFmpeg 命令行 音视频格式转换

&#x1f4da;&#xff1a;FFmpeg 提供了丰富的命令行选项和功能&#xff0c;可以用来处理音视频文件、流媒体等&#xff0c;掌握命令行的使用&#xff0c;可以有效提高工作效率。 目录 一、视频转换和格式转换 &#x1f535; 将视频文件转换为另一种格式 &#x1f535; 指定…...

Jmeter使用JSON Extractor提取多个变量

1.当正则不好使时&#xff0c;用json extractor 2.提取多个值时&#xff0c;默认值必填&#xff0c;否则读不到变量...

c++ 设计模式 的课本范例(下)

&#xff08;19&#xff09; 桥接模式 Bridge&#xff0c;不是采用类继承&#xff0c;而是采用类组合&#xff0c;一个类的数据成员是类对象&#xff0c;来扩展类的功能。源码如下&#xff1a; class OS // 操作系统负责绘图 { public:virtual ~OS() {}virtual void draw(cha…...

结合数据索引结构看SQL的真实执行过程

引言 关于数据库设计与优化的前几篇文章中&#xff0c;我们提到了数据库设计优化应该遵守的指导原则、数据库底层的索引组织结构、数据库的核心功能组件以及SQL的解析、编译等。这些其实都是在为SQL的优化、执行的理解打基础。 今天这篇文章&#xff0c;我们以MySQL中InnoDB存…...