网络协议四

一、云中网络

物理机的劣势:

1)一旦需要扩容 CPU、内存、硬盘,都需要去机房手动弄,非常麻烦
2)采购的机器往往动不动几百 G 的内存,而每个应用往往可能只需要 4 核 8G
3)一台机器,一旦一个用户不用了,给另外一个用户,那就需要重装操作系统

虚拟机的网路

  1. 网络共享和互通
    在数据中心里面,采取的也是类似的技术,只不过都是 Linux,在每台机器上都创建网桥 br0,虚拟机的网卡都连到 br0 上,物理网卡也连到 br0 上,所有的 br0 都通过物理网卡出来连接到物理交换机上。
    在这里插入图片描述

在这种方式下,不但解决了同一台机器的互通问题,也解决了跨物理机的互通问题,因为都在一个二层网络里面,彼此用相同的网段访问就可以了。但是当规模很大的时候,会存在问题。
你还记得吗?在一个二层网络里面,最大的问题是广播。一个数据中心的物理机已经很多了,广播已经非常严重,需要通过 VLAN 进行划分。如果使用了虚拟机,假设一台物理机里面创建 10 台虚拟机,全部在一个二层网络里面,那广播就会很严重,所以除非是你的桌面虚拟机或者数据中心规模非常小,才可以使用这种相对简单的方式。

  1. 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,开启物理机的转发功能,直接做路由器,而不用单独的路由器,这样虚拟机就能直接上网了。
在这里插入图片描述

  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进入的包

    1. 一个无VLAN标签的包进入port1。
    2. OVS会给这个包打上VLAN 10的标签。
    3. 这个包现在是一个VLAN 10的包。
  • 从port1发出的包

    1. 一个带有VLAN 10标签的包从port1发出。
    2. OVS会移除VLAN标签,使其变为一个无标签的包。
    3. 这个包现在没有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进入的包

    1. 一个带有VLAN 10标签的包进入port2。

    2. OVS检查这个包的VLAN ID,发现它在允许通过的范围内(VLAN 10和20)。

    3. 这个包继续保持其VLAN 10标签,传输到网络中的其他位置。

    4. 一个带有VLAN 30标签的包进入port2。

    5. OVS检查这个包的VLAN ID,发现它不在允许通过的范围内(VLAN 10和20)。

    6. 这个包被丢弃,不会通过port2。

  • 从port2发出的包

    1. 一个带有VLAN 10标签的包从port2发出。
    2. OVS保持其VLAN 10标签,直接发送。
    3. 这个包到达另一个trunk port或其他设备时,仍然带有VLAN 10标签。

综合示例

假设我们有一个简单的网络,包含两个端口port1和port2,配置如下:

  • port1:配置为VLAN 10的access port
  • port2:配置为允许VLAN 10和VLAN 20的trunk port
  1. 接入设备A通过port1发送数据

    • 设备A发送一个没有VLAN标签的数据包到port1。
    • OVS给这个包打上VLAN 10标签,并发送到网络中。
  2. 来自网络的VLAN 10包经过port2传输

    • 一个带有VLAN 10标签的数据包进入port2。
    • OVS检查包的VLAN标签,发现允许通过。
    • 包保持VLAN 10标签,继续传输到下一设备或端口。
  3. 来自网络的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功能的例子:

  1. 防火墙功能

    • 允许特定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
      
  2. 网络地址转换(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
      
  3. 端口转发(Port Forwarding)

    • 将外部访问的某个端口转发到内部主机的特定端口:
      iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
      
  4. 流量控制和限制

    • 限制某个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
      
  5. 包过滤和监控

    • 监控特定端口的进出流量:

      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 内核提供的一种可以限制、隔离进程使用的资源机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么改变图片分辨率dpi数值?图片改分辨率的在线技巧

在上传图片的时候除了图片大小、尺寸等要求之外,修改图片分辨率也是比较常见的一个问题,需要将图片按照平台的要求修改完成后才可以正常使用。当遇到图片dpi的数值不满足使用需求的时候,有什么方法能够更加快捷的修改图片dpi呢?今…

从零开始利用MATLAB进行FPGA设计(七)固化程序

FPGA开发板:AX7020;Xilinx 公司的 Zynq7000 系列的芯片XC7Z020-2CLG400I,400引脚 FBGA 封装。 HARDWARE PLATFORM在2019以后的vivado中已经没有了。本期实际上已经与MATLAB无关,主要介绍通过VITIS等方法进行程序固化。 目录 ZY…

Github 2024-06-13 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Shell项目1多存储文件列表/WebDAV程序 创建周期:1265 天开发语言:Go协议类型:GNU Affero General Public License v…

linux安装dgl

1.DGL官网、选择与自己cuda、python版本匹配的dgl的whl文件CUDA11.8、python10并下载 2.用pip install运行 pip install /home/u2023170749/download/dgl-2.2.0cu118-cp310-cp310-manylinux1_x86_64.whl

git提交错了?别慌,直接删除提交记录

git revert 和git reset !这两个命令都有撤销操作的功能!哪一个可以删除提提交记录??? 使用git revert撤销提交 revert的英文释义是回复、恢复(到原来的状态) 作用 git revert 是 Git 中用于撤…

如何通过SOLIDWORKS教育版提高学生技能培养未来人才?

在当今这个科技日新月异的时代,掌握先进的数字化工具已经成为了一项需备的技能。作为一款功能强大的3D CAD软件,SOLIDWORKS教育版正是一个帮助学生提升技能、培养未来人才的重要工具。那么,如何通过SOLIDWORKS教育版提高学生技能呢&#xff1…

全方位·多层次·智能化,漫途水库大坝安全监测方案

党的十九届五中全会提出,到2025年前,完成新出现病险水库的除险加固,配套完善重点小型水库雨水情和安全监测设施,实现水库安全鉴定和除险加固常态化。 加快推进小型水库除险加固。加快构建气象卫星和测雨雷达、雨量站、水文站组成…

12306 火车票价格解析 (PHP 解析)

1. 从接口拿数据 日期 出发站 终点站 都填上 xxx/otn/leftTicketPrice/queryAllPublicPrice?leftTicketDTO.train_date2024-06-15&leftTicketDTO.from_stationBJP&leftTicketDTO.to_stationSJP&purpose_codesADULT 返回的数据是这样的 {"validateMess…

ASP.NET MVC企业级程序设计(查,删,展示详情,日期转换,¥字符串拼接)

题目: 实现过程 控制器代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MvcApplication1.Controllers {public class HomeController : Controller{//// GET: /Home/public Action…

【Bootstrap Faster R-CNN】《Is Faster R-CNN Doing Well for Pedestrian Detection?》

ECCV-2016 中山大学 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Region Proposal Network for Pedestrian Detection4.2 Feature Extraction4.3 Boosted Forest 5 Experiments5.1 Datasets and Metrics5.2 Ablation Experim…

【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣

前言: 在前面,我们已经将C的初阶部分全部讲完了,包括类与对象、STL、栈和队列等众多内容,今天我们就进入C进阶部分的学习,今天先来学习第一弹——继承 目录 一、什么是继承?为什么会有继承? 二…

WPS JS宏获取自动筛选后的行数

//WPS JS宏获取自动筛选后的行数 function getFilterRowCnt(shtRng)//shtRng表示筛选目标工作表范围 {let lngRowCnt 0;for(let rngCell of shtRng.SpecialCells(xlCellTypeVisible).Areas)//获取自动筛选后的单元格行数{lngRowCnt lngRowCnt rngCell.Rows.Count;}return ln…

Web--CSS基础

文章目录 定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动实战&#xff1a;个人信息卡片 flex布局响应式布局 定义方式 行内样式表 直接定义在style属性中&#xff0c;作用于当前标签 <img src "/imges/logo.jpg" alt "" …

Vue37-非单文件组件

一、组件的两种编写形式&#xff1a; 非单文件组件&#xff1b;单文件组件。 二、创建一个组件 2-1、组件中的el 组件中不写el&#xff0c;不说为谁服务。 2-2、组件中的data 因为对象形式&#xff0c;多处复用的话&#xff0c;有引用关系&#xff0c;改一处&#xff0c;另一…

atcoder ABC 355-C题详解

atcoder ABC 355-C题详解 ​ Problem Statement There is an NN grid, where the cell at the i-th row from the top and the j-th column from the left contains the integer N(i−1)j. Over T turns, integers will be announced. On Turn i, the integer Ai​ is anno…

[Nacos]No spring.config.import property has been defined

在学习 Spring Cloud Alibaba &#xff0c;Nacos组件&#xff0c;创建一个cloudalibaba-config-nacos-client&#xff0c;加载多配置集时遇到问题 配置了 bootstrap.yml 后启动项目报错&#xff1a; 是因为在springcloud 2020.0.2版本中把bootstrap的相关依赖从spring-cloud-s…

算法分析与设计期末考试复习GDPU

重点内容&#xff1a; 绪论&#xff1a; 简单的递推方程求解 1.19(1)(2) 、 教材例题 多个函数按照阶的大小排序 1.18 分治法&#xff1a; 分治法解决芯片测试问题 计算a^n的复杂度为logn的算法&#xff08;快速幂&#xff09; 分治法解决平面最近点对问…

OpenCV单词轮廓检测

OpenCV单词轮廓检测 0. 前言1. 策略分析2. 检测字符轮廓3. 检测单词轮廓相关链接 0. 前言 在根据文档图像执行单词转录时&#xff0c;通常第一步是识别图像中单词的位置。我们可以使用两种不同的方法识别图像中的单词&#xff1a; 使用 CRAFT、EAST 等深度学习技术使用基于 O…

用Python处理Excel的资源

用Python处理Excel的资源 python-excel 读写Excel文件 openpyxl openpyx文档l 读写Excel2010文件&#xff08;即xlsx&#xff09; openpyxl示例&#xff1a; from openpyxl import Workbook wb Workbook()# 获取active worksheet ws wb.active# 给单元格赋值 ws[A1] 4…

I/O Stream设计实验

实验要求和目的 深入理解java输入输出流相关类的基本用法&#xff0c;并且可以掌握Java程序的编写和调试。 实验环境 Java语言&#xff0c;PC或android平台 实验具体内容 设计和编写以下程序&#xff1a; 程序1&#xff1a; 从键盘读入多行字符串&#xff08;英文&#xf…