【Kubernets】容器网络基础二:通讲CNI(Container Network Interface)容器网络接口实现方案

news2024/10/11 16:47:29

文章目录

    • 背景知识
      • Underlay网络
      • Overlay网络
        • 一、基本概念
        • 二、工作原理
        • 三、实现方案
        • 四、应用场景
      • 两者对比示意图
    • CNI实现有哪些?
    • Flannel
      • Flannel 的工作原理
      • Flannel 的主要组件
      • 数据传输机制
      • 总结
    • Calico
      • 一、架构基础
      • 二、核心组件与功能
      • 三、路由与数据包转发
      • 四、安全策略
      • 五、数据路径模式
      • 六、集成与部署
    • Weave Net
      • 一、Weave Net概述
      • 二、Weave Net的组件
      • 三、Weave Net的通信机制
      • 四、Weave Net的拓扑与扩展
      • 五、总结
    • Bridge
      • 一、概述
      • 二、工作原理
      • 三、特点与优势
      • 四、应用场景
      • 五、注意事项
    • 容器网络示意
      • 容器内部网络
      • 主机间网络
    • 相关文献

背景知识

Underlay网络

Underlay网络是指物理网络,或称为基础网络层、承载网络。它是由各类物理设备(如交换机、路由器、防火墙、负载均衡器等)通过物理链路连接而成的网络架构。这些物理设备通过路由协议确保设备之间的IP连通性,为数据包在主机之间的传输提供基本路径。

Underlay网络提供了主机之间的基本连接能力,包括IP网络、子网划分、路由协议等。它是直接在物理层上建立的网络,负责数据包在主机之间的传输,并提供基本的网络互联性。Underlay网络通常是静态配置的,由网络管理员管理和维护,主要关注网络的可用性、性能和扩展性。

在传统网络中,Underlay网络扮演着至关重要的角色,它确保了数据包能够在不同的物理设备之间顺畅传输。而在现代数据中心和云计算环境中,Underlay网络仍然是基础架构的重要组成部分,但它往往与Overlay网络(逻辑网络层)相结合,以提供更高级别的网络功能和服务。

Overlay网络是在Underlay网络之上构建的逻辑网络层,通过使用虚拟化技术创建的网络。它可以在不改变底层Underlay网络的前提下,添加额外的功能,如隧道、加密、负载均衡、虚拟网络等。Overlay网络和Underlay网络是一组相对概念,它们共同构成了现代网络架构的基础。

Overlay网络

Overlay网络模式是一种网络架构上叠加的虚拟化技术模式,它建立在已有的物理网络(Underlay网络)基础之上,通过在其上构建虚拟网络来实现网络资源的虚拟化。以下是关于Overlay网络模式的详细介绍:

一、基本概念
  1. 定义:Overlay网络是在现有物理网络之上,利用虚拟化技术构建的一个逻辑网络。这个逻辑网络具有独立的控制和转发平面,使得连接到Overlay网络的终端设备(如服务器、虚拟机等)能够在一个虚拟化的网络环境中进行通信。

  2. 特点

    • 独立性:Overlay网络独立于Underlay网络,对于连接到Overlay的终端设备来说,物理网络是透明的。
    • 虚拟化:通过虚拟化技术,Overlay网络能够在单个物理网络上实现多个逻辑网络的并存。
    • 灵活性:Overlay网络配置灵活,易于管理,可以根据业务需求进行动态调整。
二、工作原理

Overlay网络模式的工作原理通常涉及以下几个关键步骤

  1. 封装:在发送端,原始数据报文被封装在特定的协议头部中,以形成Overlay报文。这个协议头部包含了用于在Overlay网络中路由和转发报文所需的信息。
  2. 转发:封装后的Overlay报文被发送到Underlay网络中进行传输。Underlay网络负责提供必要的物理路径和带宽,以确保Overlay报文能够顺利到达目的地。
  3. 解封装:在接收端,Overlay报文被解封装,以恢复原始的数据报文。然后,这个数据报文被传递给目标终端设备进行处理。
三、实现方案

实现Overlay网络的方案有多种,每种方案都有其特定的优势和应用场景。以下是一些常见的Overlay网络实现方案:

  1. VXLAN(Virtual Extensible Local Area Network)

    • 描述:VXLAN是一种广泛使用的Overlay网络协议,它允许在现有的IP网络上创建一个虚拟化的Layer 2网络。
    • 优点:支持更多的网络隔离段(最多1600万个VNI),具有较好的扩展性和灵活性。
    • 应用场景:数据中心网络虚拟化,特别适用于大规模云计算环境。
  2. NVGRE(Network Virtualization using Generic Routing Encapsulation)

    • 描述:NVGRE是另一种Overlay网络协议,它类似于VXLAN但使用GRE(Generic Routing Encapsulation)作为封装协议。
    • 优点:与VXLAN相比,NVGRE更易于与现有的网络管理工具集成。
    • 应用场景:多租户数据中心和云服务提供商。
  3. STT(Stateless Transport Tunneling)

    • 描述:STT是为数据中心设计的Overlay网络协议,它利用TCP协议来传输封装的以太网帧,从而实现虚拟网络间的通信。
    • 优点:利用TCP的性能优化和拥塞控制机制,改善了跨数据中心通信的性能。
    • 应用场景:需要跨数据中心通信的大规模网络环境。
  4. Geneve

    • 描述:Geneve是一种尝试统一VXLAN、NVGRE等协议特性的Overlay网络封装格式,提供了一种灵活的框架来适应不同的网络虚拟化需求。
    • 优点:极高的灵活性和可扩展性,可以支持多种不同的网络虚拟化场景。
    • 应用场景:下一代数据中心网络,支持高度定制的网络虚拟化需求。
四、应用场景

Overlay网络模式在多个场景中得到了广泛应用,包括但不限于:

  1. 数据中心网络虚拟化:通过Overlay网络,数据中心可以实现网络资源的灵活配置和管理,提高网络资源的利用率和可扩展性。
  2. 多租户环境:在云计算和虚拟化环境中,Overlay网络可以为不同的租户提供独立的网络环境,增强网络隔离和安全性。
  3. 跨数据中心通信:Overlay网络可以实现跨数据中心的虚拟网络互联,简化网络架构,提高网络性能。

综上所述,Overlay网络模式是一种强大的虚拟化技术,它通过在现有物理网络上构建虚拟网络来实现网络资源的灵活配置和管理。随着云计算和虚拟化技术的不断发展,Overlay网络模式将在更多场景中得到广泛应用。

两者对比示意图

overlay-underlay

CNI实现有哪些?

CNI(Container Network Interface)的实现有多种,这些实现通常被称为CNI插件。以下是一些常见的CNI实现:

  1. Flannel

    • Flannel是一个简单易用的CNI插件,专为Kubernetes设计,用于提供覆盖网络(overlay network)。
    • Flannel使用VXLAN隧道技术封装数据包,在集群节点之间传输。
    • Flannel可以与etcd集成,用于存储网络配置状态信息
  2. Calico

    • Calico是一个高性能的CNI插件,支持复杂的网络策略、IP路由和防火墙功能。
    • Calico使用BGP协议进行路由,支持大规模网络部署。
    • Calico还提供了丰富的网络策略功能,可以细粒度地控制容器间的网络通信。
  3. Weave Net

    • Weave Net是另一个为Kubernetes设计的CNI插件,提供了快速、可靠的容器网络。
    • Weave Net使用加密的Weave Router和Weave Switch组件,确保容器间的通信安全。
    • Weave Net还支持跨主机容器通信和自动IP地址分配。
  4. MidoNet

    • MidoNet是一款网络虚拟化软件,可以作为CNI插件为Kubernetes提供网络支持。
    • MidoNet支持大规模SDN集群,具有分布式、多层次的特点。
    • MidoNet为每个租户分配一个逻辑路由器,租户之间相互隔离,但内部可以相互通信。
  5. Host-local

    • Host-local是一个简单的CNI插件,用于从本地IP地址池中为容器分配IP地址。
    • 它通常与其他CNI插件(如bridge)结合使用,以提供完整的网络配置。
  6. Bridge

    • Bridge插件在宿主机上创建网桥,并通过veth pair的方式将容器连接到该网桥上。
    • 它是Kubernetes中内置的CNI插件之一,适用于简单的网络部署。
  7. Macvlan/Ipvlan

    • Macvlan和Ipvlan插件允许容器直接使用宿主机的网络接口,通过虚拟MAC地址或IP地址实现网络通信。
    • 这些插件适用于需要高性能网络通信的场景,因为它们减少了网络虚拟化层的开销。
  8. 其他Meta插件

    • 除了上述插件外,还有一些Meta插件,如portmap、firewall、tuning等。
    • 这些插件通常用于提供额外的网络功能,如端口映射、防火墙规则、网络设备参数调整等。

这些CNI插件各有特点,适用于不同的应用场景。在选择CNI插件时,需要根据具体需求和网络环境进行评估和选择。同时,也可以根据需要组合使用多个CNI插件,以实现更复杂的网络配置和功能。

Flannel

Flannel 是一个简单的、可扩展的网络覆盖层工具,它为 Docker 容器提供了跨主机的网络连接。Flannel 主要用于 Kubernetes 集群中的网络配置,它通过创建一个虚拟的二层网络来连接各个节点上的容器,使得不同节点上的 Pod 可以像在同一个物理网络上一样直接通信。

Flannel 的工作原理

  1. 分配子网段

    • 当一个新的节点加入到集群时,Flannel 会从预先定义的 IP 地址池中分配一个子网段给该节点。这个子网段会被用来分配给该节点上的 Pod 使用。
  2. 建立网络覆盖

    • Flannel 使用各种不同的数据传输机制来建立覆盖网络,包括 UDP、VXLAN、Host-GW(主机网关)、IPsec 等。这些机制允许数据包从一个节点传输到另一个节点,即使它们之间存在物理网络隔离。
  3. 封装和解封数据包

    • 当一个 Pod 发送数据包到另一个节点上的 Pod 时,源节点的 Flannel 代理会先对数据包进行封装,然后通过选定的数据传输机制发送到目标节点。目标节点接收到封装后的数据包后,再由其上的 Flannel 代理解封并转发给目标 Pod。

Flannel 的主要组件

  • etcd:用于存储网络配置信息,如每个节点分配的子网段等。
  • flanneld:运行在每个节点上的代理服务,负责管理本地网络接口,并处理数据包的封装和解封。
  • CNI 插件:Container Network Interface(容器网络接口)插件,用于创建和管理 Pod 的网络接口。

数据传输机制

  • UDP:早期版本的 Flannel 使用 UDP 封装数据包,这种方式简单但效率较低,目前较少使用。
  • VXLAN:Virtual eXtensible Local Area Network,提供了一个更高效的数据传输方式,支持大规模部署。
  • Host-GW:利用主机的路由表来实现 Pod 之间的通信,不需要额外的数据封装,性能较好,但适用范围有限。
  • IPsec:通过加密隧道传输数据,适用于安全性要求较高的场景。

总结

Flannel 的设计目的是为了简化 Kubernetes 集群中的网络配置,它通过分配子网段、建立网络覆盖以及封装和解封数据包的方式,实现了不同节点上 Pod 之间的直接通信。选择合适的数据传输机制可以根据具体需求优化网络性能和安全性。

Calico

Calico是一种开源的网络和安全解决方案,其实现原理主要基于以下几个方面:

一、架构基础

Calico使用了一种称为“纯三层”架构的方法来提供高效的网络和安全服务。这种架构避免了二层网络中的数据包封装和解封装操作,从而提高了网络通信的效率。

二、核心组件与功能

  1. Felix

    • Felix是Calico的agent,运行在每台需要运行workload(如容器或虚拟机)的节点上。
    • 它主要负责配置路由及ACLs(访问控制列表)等信息,以确保endpoint(如容器)的连通状态。
  2. etcd

    • etcd是一个分布式键值存储,主要负责网络元数据的一致性。
    • 它确保Calico网络状态的准确性,是Calico网络中不可或缺的一部分。
  3. BGPClient(BIRD)

    • BGPClient(通常使用BIRD实现)主要负责把Felix写入kernel的路由信息分发到当前Calico网络。
    • 它确保workload间的通信的有效性,是Calico实现BGP路由协议的关键组件。
  4. BGP Route Reflector(BIRD)

    • 在大规模部署时,BGP Route Reflector用于摒弃所有节点互联的mesh模式。
    • 它通过一个或多个BGP Route Reflector来完成集中式的路由分发,降低了网络开销。

三、路由与数据包转发

  1. BGP路由协议

    • Calico使用BGP(Border Gateway Protocol)在集群内传播路由信息。
    • 每个运行了Calico组件的节点都被配置为BGP客户端,并与集群中的其他节点建立BGP对等关系。
    • 当新的Pod创建时,其IP地址会被添加到本地节点的路由表并通过BGP发布到整个集群。
    • 由此确保所有节点都能直接通过三层网络访问任何Pod,无需额外的隧道封装。
  2. 数据包转发

    • Calico在每个计算节点上利用Linux Kernel实现了一个高效的vRouter来负责数据转发。
    • 每个vRouter通过BGP协议负责把自己上运行的workload的路由信息像整个Calico网络内传播。
    • 当数据包到达宿主机时,根据路由表信息找到下一跳要到达的宿主机IP,并直接转发到对端容器的veth pair插在宿主机的一端,最终进入容器。

四、安全策略

Calico还使用了iptables规则来实现安全策略。每个容器都有自己的iptables规则,这些规则可以限制容器之间的网络访问,从而提高安全性。此外,Calico还支持网络流量的加密和身份验证,以保护敏感数据的安全。

五、数据路径模式

Calico支持多种数据路径模式,以适应不同的环境需求和性能要求。这些模式包括:

  1. 基于Linux内核功能的数据路径处理方式:如eBPF和XDP,它们提供了高性能的数据处理能力。
  2. 无隧道(纯L3)和有隧道(如VXLAN)的数据传输方式:无隧道模式直接利用IP路由进行数据包转发,而有隧道模式则使用隧道协议(如VXLAN)封装数据包进行传输。

六、集成与部署

作为Container Network Interface(CNI)插件,Calico可以无缝集成到Kubernetes集群中。它负责在Pod创建和销毁过程中自动配置网络接口、分配IP地址并设置相应的网络策略。此外,Calico还支持多种部署方式,包括在物理服务器、虚拟机(如OpenStack)或容器环境下部署。

综上所述,Calico通过结合BGP路由、iptables策略管理、CNI接口以及多种数据路径模式等关键技术,为Kubernetes等容器化平台提供了一个灵活、高效且安全的网络基础设施。

Weave Net

Weave Net的底层实现逻辑涉及多个组件和复杂的网络通信技术。以下是对Weave Net底层实现逻辑的详细说明:

一、Weave Net概述

Weave Net是一个流行的Overlay网络方案,它使用自家的Overlay技术来实现网络通信,并提供了网络策略和服务发现等功能。这些Overlay网络方案为Kubernetes集群提供了跨主机的容器通信能力,并确保容器之间的网络隔离和安全。

二、Weave Net的组件

Weave Net主要由以下几个组件构成:

  1. Weave Router(路由器)

    • 存在于不同的主机上,形成一系列的peers(对等体)。
    • 每个peer都有一个唯一的名字和标识符(UID),名字在重启后保持不变,便于用户理解和区分日志信息。
    • Weave路由器之间建立TCP连接,用于心跳握手和拓扑信息交换;同时建立UDP连接,用于网络包的封装和传输。
  2. Weave Agent

    • 每个节点上都有一个Weave Agent,负责与Weave Net进行交互。
    • Weave Agent与Weave Net守护进程通信,以建立和管理容器之间的网络连接。
  3. Weave Bridge(网桥)

    • 在主机上创建一个网桥,每个容器通过veth pair(虚拟以太网对)连接到网桥上。
    • 容器由用户或Weave网络的IPAM(IP地址管理)分配IP地址。

三、Weave Net的通信机制

  1. 封装与转发

    • Weave Net使用UDP封装二层以太网帧,并通过VTEP(VXLAN Tunnel End Point,即VXLAN隧道端点)设备实现原始以太报文的封装和解封装。
    • 数据包在发送时,首先被封装在UDP数据包中,然后发送到目标容器的VTEP。
    • 目标VTEP收到UDP数据包后,将其解封,并将数据包传递给目标容器。
  2. 路由决策

    • Weave网络路由器学习对端主机的特定MAC地址,并将这些信息和拓扑信息结合起来进行路由决策。
    • 路由器通过UDP转发数据包到目的主机上的Weave路由器,并注入到目的主机的内核空间,然后交给目的容器处理。
    • Weave还提供了两种路由模式:fast data path(完全工作在内核空间)和sleeve模式(通过用户空间进行路由决策)。
  3. 网络隔离与安全

    • Weave Net通过Overlay技术实现了网络隔离,使得不同租户或不同应用之间的流量被隔离。
    • Weave Net还提供了网络策略功能,允许用户定义精细的访问控制规则,以确保网络的安全性。

四、Weave Net的拓扑与扩展

  1. 扁平网络结构

    • Weave Net使用扁平的网络结构,所有容器都可以相互通信,而无需经过任何网关或路由器。
    • 这种设计简化了网络拓扑,提高了容器的可达性和可伸缩性。
  2. 自动发现与动态DNS

    • Weave Net支持自动发现和动态DNS功能,使得容器可以轻松地找到彼此并建立通信。
    • 这有助于在动态变化的云环境中实现高效的容器通信。
  3. 跨主机通信

    • Weave Net通过Overlay技术实现了跨主机的容器通信。
    • 容器可以通过Weave Net进行跨节点的通信,而无需担心底层网络的限制。

五、总结

Weave Net是一个功能强大且易于使用的容器网络插件。它通过Overlay技术实现了跨主机的容器通信,并提供了网络隔离、安全、自动发现和动态DNS等功能。Weave Net的底层实现逻辑涉及多个组件和复杂的网络通信技术,但通过这些组件和技术的协同工作,Weave Net能够为用户提供高效、可靠和安全的容器网络环境。

Bridge

容器网络中的Bridge模式,是Docker等容器技术中默认且广泛使用的网络类型。以下是对容器网络Bridge的详细解释:

一、概述

Bridge网络模式在宿主机上创建一个虚拟桥接器(通常命名为docker0),所有启动的容器都会连接到这个桥接器上,并被分配一个私有的IP地址。容器内部的网卡(通常是veth pair的一端)接入到docker0桥接器,而docker0桥接器则负责不同容器之间的数据包转发。

二、工作原理

  1. 虚拟网桥和虚拟网卡接口

    • 当Docker引擎创建一个Bridge网络时,它会在宿主机上创建一个新的虚拟网桥,例如docker0。
    • 接着,Docker引擎会将所有Docker容器的虚拟网卡接口连接到这个虚拟网桥上。
    • 每个容器的虚拟网卡接口都包含一个MAC地址和一个唯一的IP地址,这些信息用于标识和路由容器之间的数据包。
  2. 数据包转发

    • 当容器之间需要通信时,数据包会通过容器的虚拟网卡接口发送到docker0桥接器上。
    • docker0桥接器会检查数据包的目标IP地址,并根据路由表将数据包转发到正确的容器。
    • 如果数据包的目标IP地址与Bridge网络中的任何容器IP地址都不匹配,则docker0桥接器会将数据包转发到宿主机的默认路由。
  3. NAT技术

    • 为了实现容器访问外部网络,Bridge网络会自动为每个容器创建一个NAT(网络地址转换)规则。
    • 这些规则将容器内部的IP地址映射到宿主机的IP地址和端口上。
    • 当容器需要访问外部网络时,Docker引擎会将请求路由到宿主机上,并使用NAT规则将响应返回给容器。

三、特点与优势

  1. 简单易用
    • Bridge网络模式是Docker默认的网络类型,配置简单,适合单机多容器通信。
  2. 网络隔离性好
    • 通过Bridge网络,容器之间可以实现相互通信,同时与宿主机和其他外部网络保持隔离。
    • 这种隔离性提高了容器的安全性,防止了不同容器之间的网络干扰。
  3. 灵活性
    • 用户可以创建自定义的Bridge网络,并根据需要配置子网、网关等参数。
    • 这使得Bridge网络能够适应不同的应用场景和需求。

四、应用场景

  1. 单机多容器通信
    • 在单机环境下,多个容器需要相互通信时,可以使用Bridge网络模式。
    • 通过Bridge网络,容器可以方便地通过IP地址或容器名称进行通信。
  2. 与外部网络通信
    • 容器需要访问外部网络(如互联网)时,可以使用NAT技术将容器的流量伪装为宿主机的IP地址。
    • 这样,容器就可以通过宿主机的网络接口与外部网络进行通信。

五、注意事项

  1. 性能损耗
    • 在多层网络转发时,Bridge网络可能会带来一定的性能损耗。
    • 因此,在高性能要求的场景下,需要考虑其他网络模式(如Host网络模式)。
  2. 配置管理
    • 自定义Bridge网络需要用户自行配置和管理,包括子网、网关等参数的设置。
    • 用户需要具备一定的网络知识和管理经验来确保网络的正常运行。

综上所述,容器网络Bridge模式通过创建虚拟网桥和虚拟网卡接口,实现了容器之间的通信和与外部网络的访问。它具有简单易用、网络隔离性好和灵活性等优点,适用于单机多容器通信和外部网络通信等应用场景。然而,用户也需要注意性能损耗和配置管理等方面的问题。

容器网络示意

容器内部网络

network-inside

主机间网络

network-outside

相关文献

【计算机网络】网络相关技术介绍
【Kubernets】容器网络基础一:Veth Pair

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

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

相关文章

Java微信支付接入(4) - API V3 API字典和相关工具

1. API列表 Native下单 - Native支付 | 微信支付商户文档中心 (qq.com) 以下是微信提供的 Native 支付的相关 API 微信提供了详细的请求接口和参数 2.接口规则 概述 - 通用规则 | 微信支付商户文档中心 (qq.com) 微信支付 APIv3 使用 JSON 作为消息体的数据交换格式。 JSO…

jupyterlab的安装与使用攻略

官网链接 Project Jupyter | Home 1.第一步安装 打开控制台 使用pip工具安装 pip install jupyterlab 如图 2.安装成功后启动 jupyter lab 会自动启动它的web页面 然后就可以正常使用咯!! 如果需要更换浏览器访问 新开控制台执行下面命令 jupy…

PowerJob做定时任务调度

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、区别对比二、使用步骤1. 定时任务类型2.PowerJob搭建与部署 前言 提示:这里可以添加本文要记录的大概内容: PowerJob是基于java开…

文件夹访问被拒绝:深度解析、恢复策略与预防指南

一、文件夹访问被拒绝现象概述 在日常的电脑使用中,我们时常会遇到文件夹访问被拒绝的情况。这一现象通常表现为在尝试打开某个文件夹时,系统弹出权限不足的提示,阻止用户进行访问或操作。文件夹访问被拒绝不仅会影响用户的正常使用&#xf…

KingbaseES数据库迁移-SHELL方式

目录说明 bin: 启动脚本 conf: 配置文件 doc: 帮助文档 drivers: 数据库连接驱动(注意不同版本驱动的存放目录差别,详见readme.md) jdk: jdk kdms: kdms程序 lib: 程序包 logs: 日志 result: 迁移报告 配置数据库连接信息 进入KDT…

FTP连接池与多线程FTP上传下载算法(Java)

设计一个能够处理FTP连接池在多线程环境下,尤其是涉及到故障重连时避免竞争条件的算法,需要综合考虑线程同步、连接状态管理和重试机制。以下是一个设计思路和实现方案: 设计思路 连接池管理: 维护一个连接池,其中包含多个FTP连接对象。每个FTP连接对象需有状态标记(如…

Windows系统安装Fooocus结合内网穿透实现公网环境远程生成AI图片

前言 本篇文章将介绍如何在本地Windows11电脑部署开源AI生图软件Fooocus,并结合Cpolar内网穿透工具轻松实现公网环境远程访问与使用。 Fooocus 是一个图像生成软件(基于 Gradio),目前最流行的文生图大模型是 Stable Diffusion&a…

卷积的物理意义

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P146 一个计算的例子

【python】AI Navigator的使用及搭建本机大模型

使用 大模型下载 随机下载一款大模型用于尝试,作者尝试的是codegemma-7b-it该大模型,具体每一款大模型简单介绍请查看【Anaconda】AI Navigator中大模型简单介绍-CSDN博客 聊天对话 下载完成后点击New Chat即可对话聊天 搭建本机大模型 启动大模型服…

E. Expected Power (Codeforces 976 Div2)

这道题好难 原题 E. Expected Power 提示 Hint 1 试着找 f(S) 的期望值而不是 Hint 2 从f(S)的二进制表示中找规律来求 代码1 对答案代码做了注释 #include <bits/stdc.h> using namespace std;const int mod 1e97, N 2e5 10;// 最高只有1023, 小于等于2的10…

HAL+M4学习记录_5

一、串口 记录使用HAL库开发串口 1.1 简介 USART中文意思是通用同步异步收发器&#xff0c;常用串口是异步串口&#xff0c;简记为UART&#xff0c;是内部集成的硬件外设。使用两根通信线&#xff0c;发送端TX和接收端RX&#xff0c;工作时RX和TX交叉连接。由于计算机的USB接口…

【计算机网络】详谈TCP协议确认应答机制捎带应答机制超时重传机制连接管理机制流量管理机制滑动窗口拥塞控制延迟应答

一、TCP 协议段格式 1.1、4位首部长度 4位首部长度的基本单位是4字节&#xff0c;也就是说如果4位首部长度填6&#xff0c;那报头长度就是24字节。报头长度的取值范围为[0,60]字节&#xff0c;也就是说选项的最大长度为40字节。 二、确认应答机制 发送数据和发送应答&#x…

python爬虫 - 初识正则表达式

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、正则表达式 &#xff08;一&#xff09;正则表达式的基本作用 &#xf…

DAY7 继承多态

继承 目的 提高代码的重用性&#xff0c;减少一些重复代码的书写 权限修饰符 就是是用来限制类中的成员&#xff08;成员变量、成员方法、构造器&#xff09;能够被访问的范围。 private 只能本类 缺省 本类、同一个包中的类 protected 本类&#xff0c;同一个包中的类、子…

thenable的执行时机

thenable执行只有2个时机 1.触发resolve()时,代码尚未注册then的内容,那么直到代码扫描到then那一行,才会把then的内容放进队列 2.先注册then,直到后期遇到resolve(),才会进入队列 视频教学 https://www.bilibili.com/video/BV12zsqeMEyt

传智杯 第六届—C

题目描述&#xff1a; 输入两个字符串&#xff0c;从第一字符串中删除第二个字符串中所有的字符。例如&#xff1a;第一个字符串是"They are students."&#xff0c;第二个字符串是”aeiou"。删除之后的第一个字符串变成"Thy r stdnts."。保证两个字符…

仿生水凝胶微纤维:从蜘蛛丝获得灵感,探索高性能纤维材料的新路径

大家好&#xff01;今天咱们来了解一种水凝胶微纤维——《Bioinspired Mechanically Robust and Recyclable Hydrogel Microfibers Based on Hydrogen‐Bond Nanoclusters》发表于《Advanced Science》。研究人员从蜘蛛丝那儿获得灵感&#xff0c;想要做出既机械性能好&#xf…

Spring Cloud 配置中心详解:微服务动态读取与案例示范

在微服务架构中&#xff0c;每个微服务往往都有其独立的配置&#xff0c;这些配置可能会根据环境的不同&#xff08;开发、测试、生产&#xff09;进行调整和变化。Spring Cloud 配置中心提供了一种集中化管理和动态更新微服务配置的解决方案。在本文中&#xff0c;我们将详细介…

详细分析Spring Framework中 @ConditionalOnProperty的基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 从实战中学习启发 1. 基本知识 Conditiona…

一键将表格嵌入ppt作为附件!2个做ppt必知的技巧分享!

怎样把表格作为附件放入ppt&#xff1f; 众所周知&#xff0c;微软推出的Office套件包含了Powerpoint和Excel这两款软件&#xff0c;如果想在Powerpoint中插入表格&#xff0c;且表格数据量比较大&#xff0c;此时最好的呈现方式&#xff0c;是在Excel中来展示这些数据&#x…