网络协议四
一、云中网络
物理机的劣势:
1)一旦需要扩容 CPU、内存、硬盘,都需要去机房手动弄,非常麻烦
2)采购的机器往往动不动几百 G 的内存,而每个应用往往可能只需要 4 核 8G
3)一台机器,一旦一个用户不用了,给另外一个用户,那就需要重装操作系统
虚拟机的网路
- 网络共享和互通
在数据中心里面,采取的也是类似的技术,只不过都是 Linux,在每台机器上都创建网桥 br0,虚拟机的网卡都连到 br0 上,物理网卡也连到 br0 上,所有的 br0 都通过物理网卡出来连接到物理交换机上。
在这种方式下,不但解决了同一台机器的互通问题,也解决了跨物理机的互通问题,因为都在一个二层网络里面,彼此用相同的网段访问就可以了。但是当规模很大的时候,会存在问题。
你还记得吗?在一个二层网络里面,最大的问题是广播。一个数据中心的物理机已经很多了,广播已经非常严重,需要通过 VLAN 进行划分。如果使用了虚拟机,假设一台物理机里面创建 10 台虚拟机,全部在一个二层网络里面,那广播就会很严重,所以除非是你的桌面虚拟机或者数据中心规模非常小,才可以使用这种相对简单的方式。
- NAT
虚拟机是你的电脑,路由器和 DHCP Server 相当于家用路由器或者寝室长的电脑,物理网卡相当于你们宿舍的外网网口,用于访问互联网。所有电脑都通过内网网口连接到一个网桥 br0 上,虚拟机要想访问互联网,需要通过 br0 连到路由器上,然后通过路由器将请求 NAT 成为物理网络的地址,转发到物理网络。
如果是你自己登录到物理机上做个简单配置,你可以简化一下。例如将虚拟机所在网络的网关的地址直接配置到 br0 上,不用 DHCP Server,手动配置每台虚拟机的 IP 地址,通过命令 iptables -t nat -A POSTROUTING -o ethX -j MASQUERADE,直接在物理网卡 ethX 上进行 NAT,所有从这个网卡出去的包都 NAT 成这个网卡的地址。通过设置 net.ipv4.ip_forward = 1,开启物理机的转发功能,直接做路由器,而不用单独的路由器,这样虚拟机就能直接上网了。
- 隔离问题
如果一台机器上的两个虚拟机不属于同一个用户,怎么办呢?好在 brctl 创建的网桥也是支持 VLAN 功能的,可以设置两个虚拟机的 tag,这样在这个虚拟网桥上,两个虚拟机是不互通的。
但是如何跨物理机互通,并且实现 VLAN 的隔离呢?由于 brctl 创建的网桥上面的 tag 是没办法在网桥之外的范围内起作用的,于是我们需要寻找其他的方式。
有一个命令vconfig,可以基于物理网卡 eth0 创建带 VLAN 的虚拟网卡,所有从这个虚拟网卡出去的包,都带这个 VLAN,如果这样,跨物理机的互通和隔离就可以通过这个网卡来实现。
首先为每个用户分配不同的 VLAN,例如有一个用户 VLAN 10,一个用户 VLAN 20。在一台物理机上,基于物理网卡,为每个用户用 vconfig 创建一个带 VLAN 的网卡。不同的用户使用不同的虚拟网桥,带 VLAN 的虚拟网卡也连接到虚拟网桥上。
这样是否能保证两个用户的隔离性呢?不同的用户由于网桥不通,不能相互通信,一旦出了网桥,由于 VLAN 不同,也不会将包转发到另一个网桥上。另外,出了物理机,也是带着 VLAN ID 的。只要物理交换机也是支持 VLAN 的,到达另一台物理机的时候,VLAN ID 依然在,它只会将包转发给相同 VLAN 的网卡和网桥,所以跨物理机,不同的 VLAN 也不会相互通信。
二、软件定义网络(SDN)
可以这样比喻,云计算就像大家一起住公寓,要共享小区里面的基础设施,其中网络就相当于小区里面的电梯、楼道、路、大门等,大家都走,往往会常出现问题,尤其在上班高峰期,出门的人太多,对小区的物业管理就带来了挑战。
物业可以派自己的物业管理人员,到每个单元的楼梯那里,将电梯的上下行速度调快一点,可以派人将隔离健身区、景色区的栅栏门暂时打开,让大家可以横穿小区,直接上地铁,还可以派人将多个小区出入口,改成出口多、入口少等等。等过了十点半,上班高峰过去,再派人都改回来。
如果物业管理人员有一套智能的控制系统,在物业监控室里就能看到小区里每个单元、每个电梯的人流情况,然后在监控室里面,只要通过远程控制的方式,拨弄一个手柄,电梯的速度就调整了,栅栏门就打开了,某个入口就改出口了。
这就是软件定义网络(SDN)
OpenFlow 和 OpenvSwitch(SDN的实现方式)
OpenFlow 是 SDN 控制器和网络设备之间互通的南向接口协议,OpenvSwitch 用于创建软件的虚拟交换机。OpenvSwitch 是支持 OpenFlow 协议的,当然也有一些硬件交换机也支持 OpenFlow 协议。它们都可以被统一的 SDN 控制器管理,从而实现物理机和虚拟机的网络连通。
对于 OpenvSwitch 来讲,网络包到了我手里,就是一个 Buffer,我想怎么改怎么改,想发到哪个端口就发送到哪个端口。
下面我们实验一下通过 OpenvSwitch 实现 VLAN 的功能
在 OpenvSwitch 中端口 port 分两种。
在网络中,VLAN(虚拟局域网)用于将一个物理网络划分为多个逻辑网络,提供更好的管理、隔离和安全性。Open vSwitch(OVS)是一种用于管理和控制虚拟网络交换机的软件,可以实现VLAN功能。理解access port和trunk port的工作原理对于配置和管理VLAN至关重要。下面是对它们的通俗解释和举例说明:
Access Port
定义:
- Access port配置一个特定的VLAN tag。
- 从这个端口进来的网络包会被打上这个VLAN tag。
- 如果一个网络包本身带有的VLAN ID等于配置的tag,则会从这个port发出。
- 从access port发出的包不带VLAN ID。
举例:
假设你有一个Open vSwitch的端口port1,它被配置为VLAN 10的access port。
-
从port1进入的包:
- 一个无VLAN标签的包进入port1。
- OVS会给这个包打上VLAN 10的标签。
- 这个包现在是一个VLAN 10的包。
-
从port1发出的包:
- 一个带有VLAN 10标签的包从port1发出。
- OVS会移除VLAN标签,使其变为一个无标签的包。
- 这个包现在没有VLAN标签,发送到下一个目的地。
Trunk Port
定义:
- Trunk port不配置固定的VLAN tag,而是配置允许通过的VLAN ID(trunks)。
- 如果trunks为空,表示所有VLAN的包都可以通过,不限制。
- 如果trunks不为空,则只有配置的VLAN ID的包可以通过。
- Trunk port的包会保留其原有的VLAN ID。
举例:
假设你有一个Open vSwitch的端口port2,它被配置为trunk port,允许VLAN 10和VLAN 20通过。
-
从port2进入的包:
-
一个带有VLAN 10标签的包进入port2。
-
OVS检查这个包的VLAN ID,发现它在允许通过的范围内(VLAN 10和20)。
-
这个包继续保持其VLAN 10标签,传输到网络中的其他位置。
-
一个带有VLAN 30标签的包进入port2。
-
OVS检查这个包的VLAN ID,发现它不在允许通过的范围内(VLAN 10和20)。
-
这个包被丢弃,不会通过port2。
-
-
从port2发出的包:
- 一个带有VLAN 10标签的包从port2发出。
- OVS保持其VLAN 10标签,直接发送。
- 这个包到达另一个trunk port或其他设备时,仍然带有VLAN 10标签。
综合示例
假设我们有一个简单的网络,包含两个端口port1和port2,配置如下:
- port1:配置为VLAN 10的access port
- port2:配置为允许VLAN 10和VLAN 20的trunk port
-
接入设备A通过port1发送数据:
- 设备A发送一个没有VLAN标签的数据包到port1。
- OVS给这个包打上VLAN 10标签,并发送到网络中。
-
来自网络的VLAN 10包经过port2传输:
- 一个带有VLAN 10标签的数据包进入port2。
- OVS检查包的VLAN标签,发现允许通过。
- 包保持VLAN 10标签,继续传输到下一设备或端口。
-
来自网络的VLAN 30包经过port2传输:
- 一个带有VLAN 30标签的数据包进入port2。
- OVS检查包的VLAN标签,发现不允许通过。
- 包被丢弃,不会传输。
通过上述例子,可以看到access port主要用于将单个设备连接到特定的VLAN,而trunk port则用于在不同的VLAN之间传输数据,确保VLAN隔离和管理。
实验二:用 OpenvSwitch 模拟网卡绑定,连接交换机
为了高可用,可以使用网卡绑定,连接到交换机,OpenvSwitch 也可以模拟这一点。
三、云中网络安全
对于公有云上的虚拟机,我的建议是仅仅开放需要的端口,而将其他的端口一概关闭。这个时候,你只要通过安全措施守护好这个唯一的入口就可以了。采用的方式常常是用ACL(Access Control List,访问控制列表)来控制 IP 和端口。
设置好了这些规则,只有指定的 IP 段能够访问指定的开放接口,就算有个有漏洞的后台进程在那里,也会被屏蔽,黑客进不来。在云平台上,这些规则的集合常称为安全组。
当一个网络包进入机器
有了这个 Netfilter 框架就太好了,你可以在 IP 转发的过程中,随时干预这个过程,只要你能实现这些 hook 函数。
一个著名的实现,就是内核模块 ip_tables。它在这五个节点上埋下函数,从而可以根据规则进行包的处理。按功能可分为四大类:连接跟踪(conntrack)、数据包的过滤(filter)、网络地址转换(nat)和数据包的修改(mangle)。其中连接跟踪是基础功能,被其他功能所依赖。其他三个可以实现包的过滤、修改和网络地址转换。
在用户态,还有一个你肯定知道的客户端程序 iptables,用命令行来干预内核的规则。内核的功能对应 iptables 的命令行来讲,就是表和链的概念。
iptables的作用
当使用iptables时,通常会针对不同的需求和场景设置不同的规则。以下是一些针对上述提到的iptables功能的例子:
-
防火墙功能:
-
允许特定IP地址的访问:
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
-
阻止特定IP地址的访问:
iptables -A INPUT -s 10.0.0.5 -j DROP
-
允许某个端口的访问,拒绝其他所有访问:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -j DROP
-
-
网络地址转换(NAT):
-
将内部IP地址转换为外部IP地址:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
-
设置端口转发规则,将外部访问的某个端口转发到内部主机:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
-
-
端口转发(Port Forwarding):
- 将外部访问的某个端口转发到内部主机的特定端口:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
- 将外部访问的某个端口转发到内部主机的特定端口:
-
流量控制和限制:
-
限制某个IP地址的流量速率:
iptables -A INPUT -s 192.168.2.50 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
-
限制某个端口的总流量:
iptables -A INPUT -p tcp --dport 443 -m quota --quota 1000M -j ACCEPT
-
-
包过滤和监控:
-
监控特定端口的进出流量:
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Traffic: "
-
设置一个计数器来统计特定流量的包数量:
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j ACCEPT iptables -nvL
-
这些例子展示了如何使用iptables来实现防火墙、NAT、端口转发、流量控制和监控等功能。通过这些例子,可以更好地理解iptables的实际应用场景。
安全组
这些规则都可以在虚拟机里,自己安装 iptables 自己配置。但是如果虚拟机数目非常多,都要配置,对于用户来讲就太麻烦了,能不能让云平台把这部分工作做掉呢?
当然可以了。在云平台上,一般允许一个或者多个虚拟机属于某个安全组,而属于不同安全组的虚拟机之间的访问以及外网访问虚拟机,都需要通过安全组进行过滤。
我们会创建一系列的网站,都是前端在 Tomcat 里面,对外开放 8080 端口。数据库使用 MySQL,开放 3306 端口。
为了方便运维,我们创建两个安全组,将 Tomcat 所在的虚拟机放在安全组 A 里面。在安全组 A 里面,允许任意 IP 地址 0.0.0.0/0 访问 8080 端口,但是对于 ssh 的 22 端口,仅仅允许管理员网段 203.0.113.0/24 访问。
我们将 MySQL 所在的虚拟机在安全组 B 里面。在安全组 B 里面,仅仅允许来自安全组 A 的机器访问 3306 端口,但是对于 ssh 的 22 端口,同样允许管理员网段 203.0.113.0/24 访问。
这些安全组规则都可以自动下发到每个在安全组里面的虚拟机上,从而控制一大批虚拟机的安全策略。
所有从外网网口出去的,都转换成为这个 IP 地址。那又一个问题来了,都变成一个公网 IP 了,当 163 网站返回结果的时候,给谁呢,再 nat 成为哪个私网的 IP 呢?
这就是 Netfilter 的连接跟踪(conntrack)功能了。对于 TCP 协议来讲,肯定是上来先建立一个连接,可以用“源 / 目的 IP+ 源 / 目的端口”唯一标识一条连接,这个连接会放在 conntrack 表里面。当时是这台机器去请求 163 网站的,虽然源地址已经 Snat 成公网 IP 地址了,但是 conntrack 表里面还是有这个连接的记录的。当 163 网站返回数据的时候,会找到记录,从而找到正确的私网 IP 地址。
这是虚拟机做客户端的情况,如果虚拟机做服务器呢?也就是说,如果虚拟机里面部署的就是 163 网站呢?
这个时候就需要给这个网站配置固定的物理网的 IP 地址和公网 IP 地址了。这时候就需要显示的配置 Snat 规则和 Dnat 规则了。
当外部访问进来的时候,外网网口会通过 Dnat 规则将公网 IP 地址转换为私网 IP 地址,到达虚拟机,虚拟机里面是 163 网站,返回结果,外网网口会通过 Snat 规则,将私网 IP 地址转换为那个分配给它的固定的公网 IP 地址。
四、 云中的网络QoS 这一节细节没有研究
本来合租共享 WIFI,一个人狂下小电影,从而你网都上不去,是不是很懊恼?
在云平台上,也有这种现象,好在有一种流量控制的技术,可以实现QoS(Quality of Service),从而保障大多数用户的服务质量。
QoS的关键指标
带宽(Bandwidth):指网络能够提供的最大数据传输速率。
延迟(Latency):指数据包从源端到达目的端所需的时间。
抖动(Jitter):指数据包到达目的端的时间间隔的变动。
丢包率(Packet Loss):指数据包在传输过程中丢失的比例。
云中的流量控制主要通过队列进行的,队列分为两大类:无类别队列规则和基于类别的队列规则。
在云中网络 Openvswitch 中,主要使用的是分层令牌桶规则(HTB),将总的带宽在一棵树上按照配置的比例进行分配,并且在一个分支不用的时候,可以借给另外的分支,从而增强带宽利用率。
五、云中网络的隔离GRE、VXLAN 【没仔细看】
好的,让我尝试用一个简单的比喻来解释GRE和VXLAN这两种网络Overlay技术。
想象一下,你有一家大型公司,公司里有多个部门,比如销售部、市场部和研发部。每个部门都有自己的办公区域,员工们在各自的办公区域内可以互相交流。但是,有时候销售部的员工需要和市场部的员工交流,或者研发部的员工需要和市场部的员工交流。由于他们不在同一个办公区域,直接交流就不太方便。
这时候,你可以想象成每个部门是一个独立的网络(VLAN),但是由于物理空间(网络设备和端口数量)的限制,不能无限制地划分更多的独立网络。这时就需要一种方法来让不同部门的员工能够方便地交流,这就是Overlay网络技术发挥作用的地方。
GRE(Generic Routing Encapsulation Protocol)
GRE可以被看作是一种“点对点”的快递服务。就像你从一个部门给另一个部门发送一个包裹,你需要把这个包裹交给快递公司,快递公司会在包裹外面加一个外包装(封装),写上收件人和发件人的地址,然后通过他们的运输网络送到目的地。在这个例子中:
- 包裹 = 原始数据包
- 外包装 = GRE封装
- 快递公司 = 隧道(Tunnel)
- 运输网络 = 底层物理网络
GRE隧道的两端(Tunnel Endpoints)就像两个快递公司的分拣中心,负责把包裹加上外包装发送出去,或者接收包裹后去掉外包装,把原始的包裹交给正确的收件人。
VXLAN(Virtual Extensible Local Area Network)
VXLAN则可以被看作是一种更高级的快递服务,它支持“组播”的快递方式。这就像是你有一个包裹需要同时发送给多个部门的联系人。在VXLAN中:
- 包裹 = 原始数据包
- 外包装 = VXLAN封装
- 快递公司 = 隧道(Tunnel)
- 运输网络 = 底层物理网络
VXLAN的特点是可以在一个包裹上写多个收件人的地址,然后通过快递公司的网络(这里可以想象成支持组播的网络),一次性地将包裹的副本发送给所有指定的收件人。这样,即使这些收件人不在同一个物理位置,他们也能同时收到包裹。
在实际的网络环境中,GRE和VXLAN都是用来在不同网络之间创建逻辑上的连接,使得原本不能直接通信的设备能够互相通信,就像不同部门的员工能够互相交流一样。VXLAN相比于GRE,提供了更好的扩展性,可以支持更多的终端设备,并且更适合大规模的云计算环境。
六、容器网络
cgroup,也即明明整台机器有很多的 CPU、内存,而一个应用只能用其中的一部分。
cgroup 全称 control groups,是 Linux 内核提供的一种可以限制、隔离进程使用的资源机制。
相关文章:
网络协议四
一、云中网络 物理机的劣势: 1)一旦需要扩容 CPU、内存、硬盘,都需要去机房手动弄,非常麻烦 2)采购的机器往往动不动几百 G 的内存,而每个应用往往可能只需要 4 核 8G 3)一台机器,…...
大数据入门实践一:mac安装Hadoop,Hbase,FLume
一、安装Hadoop 安装hadoop参考此文,关键点是安装JDK和Hadoop的配置,为避免引用文章变收费,我把关键信息摘录如下: jdk安装和配置就不说了(我本机安装了1.8/15/17/21,以17为主),hadoop安装过程…...
openGauss 6.0.0 一主二备集群安装及使用zcbus实现Oracle到openGauss的数据同步
一、前言 openGauss 6.0.0-RC1是openGauss 2024年3月发布的创新版本,该版本生命周期为0.5年。根据openGauss官网介绍,6.0.0-RC1与之前的版本特性功能保持兼容,另外,在和之前版本兼容的基础上增加了很多新功能,比如分区表性能优化…...
0118__C语言——float.h文件
C语言——float.h文件_c float.h-CSDN博客...
settings和toolchains.xml 区别用法配置
在 IntelliJ IDEA 中配置 Maven 项目时,settings.xml 和 toolchains.xml 的使用场景有所不同。以下是具体的使用情景和配置方法: 1. 使用 settings.xml 使用场景 全局或用户级别的配置:包括设置本地仓库位置、远程仓库、代理服务器、认证信…...
leetcode打卡#day43 携带研究材料(第六期模拟笔试)、416. 分割等和子集
携带研究材料(第六期模拟笔试) #include<iostream> #include<algorithm> #include<vector>using namespace std;int getMaxValue(vector<int>& weights, vector<int>& values, int n, int m) {vector<vector&…...
MPLS的配置
1、IP可达--- 使用路由协议全网可达 2、配置 MPLS ——LDP [r2]mpls lsr-id 2.2.2.2 必须先定义 mpls 的router-id,要为本地设备的真实ip地址,且邻居可达,因为该地址将用于建立 TCP 会话,建议使用环回地址 [r2]mpls 再开…...
【机器学习】机器学习与教育科技在个性化教学中的融合应用与性能优化新探索
文章目录 引言机器学习与教育科技的基本概念机器学习概述监督学习无监督学习强化学习 教育科技概述学生学习行为分析个性化学习路径推荐智能化教育评估 机器学习与教育科技的融合应用实时学习数据分析数据预处理特征工程 学生成绩预测与优化模型训练模型评估 个性化学习路径推荐…...
C++:十大排序
目录 时间复杂度分析 选择排序 引言 算法思想 动图展示 代码实现 (升序) 优化 代码实现 分析 冒泡排序 引言 算法思想 动图展示 代码实现 插入排序 引言 算法思想 动图展示 代码实现 计数排序 引言 算法思想 动图展示 代码实现 桶排序 引言 算法思…...
Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六)
Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六) MongoDB 未授权访问漏洞简介以及危害 MongoDB是一款非常受欢迎的开源NoSQL数据库,广泛应用于各种Web应用和移动应用中。然而,由于默认配置的不当或者管理员的疏忽,导致不少Mon…...
【论文速读,找找启发点】2024/6/16
ICME 2023 End-To-End Part-Level Action Parsing With Transformer 类似 DETR,通过 加 query的方式实现 端到端 ELAN: Enhancing Temporal Action Detection with Location Awareness 如何实现位置感知? > 重叠的卷积核? Do we really …...
canal监控mysql变化
目录 概述实践代码总结表创建插入一行数据更新一行数据删除一笔数据 概述 本文测试 canal 监控 mysql 表变化。canal 1.1.7 mysql 8.0.x 版本。 实践 代码 public static void main(String[] args) {// 创建一个 CanalConnector 连接器// username:字符串类型,Canal使用该用…...
MySQLWorkbench导出sql文件
MySQLWorkbench导出sql文件 前言效果图导出操作选择要导出的数据库遇到的问题解决问题 查看mysql路径 前言 在完成数据库搭建之后,需要为上线做准备,那么就需要导出数据库的建库sql了 本篇文章讲解的是mysql Workbench 导出数据建库脚本 效果图 导出操…...
不一样的SYSTEM APP(SYSTEM flag和system_prop区别)
1.问题引入 在Android开发中, 1)Framework中PackageManager扫包后,会把app归类为SYSTEM, SYSTEM_EXT, PRIVILEGED 类别. 2)同样的, SeAndroid也会把APP归类程platform_app, system_app, untrusted_app(甚至还有其他,mediaprovider,gmscore_app). flag SYSTEM和system_app我们…...
C++ 和 JAVA 位运算符
C 和 JAVA 位运算符...
项目进度和成本管理
1.如何正确标识出软件项目活动? 正确标识软件项目活动是项目管理中的一个重要步骤,它有助于确保项目的顺利进行和成功完成。以下是一些标识软件项目活动的步骤和建议: 项目范围定义:首先明确项目的目标和范围,这将帮助…...
Dorkish:一款针对OSINT和网络侦查任务的Chrome扩展
关于Dorkish Dorkish是一款功能强大的Chrome扩展工具,该工具可以为广大研究人员在执行OSINT和网络侦查任务期间提供强大帮助。 一般来说,广大研究人员在执行网络侦查或进行OSINT信息收集任务过程中,通常会使用到Google Dorking和Shodan&…...
树莓派4B_OpenCv学习笔记10:调整视频帧大小
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习一下如何降低视频帧像素 文章提供测试代码讲解…...
MySQL 保姆级教程(五):数据过滤
第 7 章 数据过滤 7.1 组合 WHERE 子句 MySQL 允许给出多个 WHERE 子句,这些子句可用用两种方式使用:AND 或 OR 操作符 7.1.1 AND 操作符 输入: SELECT server_cost.cost_name,server_cost.cost_value,server_cost.default_value FROM server_cost W…...
《全职猎人》
《全职猎人》 [1-2]是日本漫画家富坚义博的作品。 1999年版改编电视动画由日本动画公司负责动画制作,于1999年10月16日-2001年3月30日在富士电视台播出,该动画的故事至贪婪之岛篇章结束,全92话。 该作在富坚义博老师天马行空的想…...
Linux各目录的作用
Linux各目录的作用 目录作用~登录用户对应的目录.当前工作目录$PATH环境变量/根目录/boot启动Linux使用的文件,例如Linux内核,包括连接文件和镜像文件,(删了就启动不了了)/bin(/usr/bin,/usr/local/bin)Binary&#x…...
Windows Docker Desktop 安装 postgres
Docker Desktop安装 postgres 12.6 数据库 step docker pull postgres:12.6提前创建F:/D-dockerData/postgres-12.6/data 文件夹用于bind mountdocker run docker run --name postgres-12.6 \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v F:/D-dockerData/postgres-12.6/d…...
C# OpenCvSharp Mat操作-创建Mat-构造函数
🌟 Mat类:图像与多维矩阵的魔法 ✨ Mat类是OpenCvSharp中用于表示图像和多维矩阵的核心类。它提供了多种构造函数来创建和初始化矩阵对象。下面我们逐一解释这些构造函数,并通过示例来说明它们的用法。📸 🚀 默认构造函数 Mat() 创建一个空的Mat对象。 Mat mat = …...
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
最终效果 文章目录 最终效果前言素材下载简单搭建环境控制小鸟生成弹簧 限制小鸟的控制范围弹簧线的显示隐藏飞行新增木头木头销毁不同血量的木头状态配置更多物品爆炸效果创建敌人的小猪创建多个小鸟循环游戏结束相机跟随加分特效不同定义技能的鸟加速鸟回旋鸟爆炸鸟效果 轨迹…...
稀疏矩阵是什么 如何求
稀疏矩阵是一种特殊类型的矩阵,其中大多数元素都是零。由于稀疏矩阵中非零元素的数量远少于零元素,因此可以使用特定的数据结构和算法来高效地存储和处理它们,从而节省存储空间和计算时间。 RowPtr 数组中的每个元素表示对应行的第一个非零元…...
57.Linux/Unix 系统编程手册(下) -- SOCKET : Unix domain
https://blog.51cto.com/u_15567199/5204540 【linux网络编程】容错处理文件 wrap.h、wrap.c_wx623c6c9. // 容错处理 wrap.h #ifndef _WRAP_H_ #define _WRAP_H_#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <error.h> #i…...
Hvv--知攻善防应急响应靶机--Linux1
HW–应急响应靶机–Linux1 所有靶机均来自 知攻善防实验室 靶机整理: 夸克网盘:https://pan.quark.cn/s/4b6dffd0c51a#/list/share百度云盘:https://pan.baidu.com/s/1NnrS5asrS1Pw6LUbexewuA?pwdtxmy 官方WP:https://mp.weixin.…...
Solus Linux: 有自己的软件包管理器
Solus Linux 是一个独立的 Linux 发行版,它以简单易用和现代化的用户体验而著称。Solus Linux 使用的包管理器是 eopkg,它具有以下优势和特点: 用户友好的界面:eopkg 提供了一个简洁直观的命令行界面,使得用户可以轻松…...
Java GUI编程
引言 图形用户界面(GUI)编程是使应用程序与用户进行交互的重要部分。Java提供了多种用于GUI开发的工具和库,最常用的是Swing和AWT。本文将详细介绍Java GUI编程的基础知识,包括Swing和AWT框架、事件处理以及高级GUI组件的使用&…...
ROS机器人小车建模仿真与SLAM
文章目录 一、URDF二、创建小车模型1.创建功能包2.导入依赖3.创建urdf,launch文件:4.可视化 三、添加雷达1.xacro文件2.集成和修改launch3.添加摄像头和雷达 三.GAZEBO仿真四、orbslam2kitti1.下载2.安装编译ORB_SLAM23.运行Kitee数据集 一、URDF URDFÿ…...
JSP新闻网站开发/白帽seo是什么
---------------------------------------------------------------------------------- 快捷键 Alt+Shift+S(弹出源代码的相关选项) +v 继承覆盖方法 +r 添加geter和seter +m 成员的方法 +h 添加 hashcode() 和equals() +o 完成构造方法 +c 继承构造方法 ------------------…...
做网站 bs cs/太原百度快速优化排名
普通情况下 radio 单选框仅仅能实现多选一的效果,可是一旦选择当中一个后,这个单选框就不可点击取消其选中状态了。这样的功能在某些业务环境下并不适用。有时我们既须要单选框的多选一效果。也须要复选框的可点击取消效果。为此本文提供一种 JQuery 写法…...
运营最好的网站/长沙seo公司
语法 Object.entries(obj) 参数 obj可以返回其可枚举属性的键值对的对象。返回值 给定对象自身可枚举属性的键值对数组 语法 Object.fromEntries(iterable);是 Object.entries 的反转 参数 iterable可迭代对象,类似 Array 、 Map 或者其它实现了可迭代协议的对象。返…...
照片制作网站/百度提交入口的网址
iFrame 虽然在我们现在的网页中用的不多,不过依然无法捍卫其使用便捷的地位,特别是编写后台的时候,实现局部的网页内容刷新,提高网页内容的复用性。iFrame 里的 JavaScript 要操作父级窗口的 DOM 元素,必须搞懂几个对象…...
大城 网站/营销宣传方案
属性的枚举:可以通过for...in语句来枚举对象的所有属性的值,也可以获得对象的所有属性名。例: 1 var pen new Object(); //设置一个空对象 2 pen.color "颜色"; //设置对象的属性 3 pen.name "钢笔";…...
wordpress模版做网站/百度百科词条
Word 2013中新功能不少,当然也不能忘记老功能,今天我们要介绍的是带圈字符的输入,不会的朋友赶快擦亮眼睛,跟着小编学习一下!①启动Word2013,单击开始--字体选项卡里面的带圈字符按钮。②弹出带圈字符界面&…...