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

Docker Overlay 网络的核心工作(以跨节点容器通信为例)

Docker 的 overlay 网络是一种基于 VXLAN(Virtual Extensible LAN)的多主机网络模式,专为 Docker Swarm 集群设计,用于实现跨节点的容器通信。它通过虚拟二层网络,允许容器在不同主机上像在同一局域网内一样通信。Docker 在实现 overlay 网络时,协调用户态(Docker 守护进程、libnetwork)和内核态(Linux 网络栈、VXLAN 模块),完成从网络创建到数据包转发的复杂工作。以下是以 Markdown 格式输出的详细讲解,以两个跨节点容器(例如节点 1 的 gindemo1 和节点 2 的 gindemo2)通信为例,深入分析 Docker 的核心工作,并具体展示路由表和数据包转发流程。


我们假设以下场景:

  • 节点 1:IP 192.168.1.9,主机名 node01,运行容器 gindemo1(IP: 10.0.1.2)。
  • 节点 2:IP 192.168.1.10,主机名 node02,运行容器 gindemo2(IP: 10.0.1.6)。
  • 网络my-overlay-network,VNI(VXLAN Network Identifier)为 4097,子网 10.0.1.0/24,网关 10.0.1.1
  • 通信gindemo2(节点 2)访问 gindemo1(节点 1),例如 curl http://gindemo1

Docker 在实现这一通信的过程中,完成了以下核心工作,并涉及具体的路由表配置。

1. 网络创建与配置

Docker 通过 libnetwork 和 Swarm 控制平面创建和管理 overlay 网络。

  • 创建网络

    • 命令:
      docker network create -d overlay --attachable my-overlay-network
      
    • 工作:
      • 使用 overlay 驱动分配网络 ID 和子网(10.0.1.0/24)。
      • 生成唯一的 VNI(4097),存储在配置中(com.docker.network.driver.overlay.vxlanid_list)。
      • 配置 MTU(默认 1450,适应 VXLAN 50 字节开销)。
      • 设置 attachable: true,允许手动附加容器(避免 not manually attachable 错误)。
  • Swarm 同步

    • 将网络配置(VNI、子网、网关)存储在 Swarm 的分布式键值存储(Raft 协议)。
    • 通过 TCP 2377(Swarm 管理)和 TCP/UDP 7946(gossip 协议)端口,分发到节点 1 和节点 2。
    • 确保节点 2 无需手动创建 my-overlay-network,直接使用集群配置。
  • IPAM(IP 地址管理)

    • 分配子网 10.0.1.0/24,网关 10.0.1.1
    • 为容器动态分配 IP:gindemo110.0.1.2)、gindemo210.0.1.6)。

2. VXLAN 接口与桥接网络初始化

Docker 在每个节点上创建 VXLAN 接口和桥接网络,支持跨节点二层通信。

  • VXLAN 接口

    • 在节点 1 和节点 2 上为 my-overlay-network 创建 VXLAN 接口(例如 vxlan0)。
    • 配置:
      • VNI:4097
      • 目标端口:UDP 4789(VXLAN 默认端口)。
      • 绑定物理网卡:enp0s3(你的节点 2 网卡)。
      • MTU:1450。
    • 示例(节点 2,若接口正常显示):
      ip -d link show vxlan0
      
      输出:
      10: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group defaultlink/ether 02:42:ac:11:00:06 brd ff:ff:ff:ff:ff:ffvxlan id 4097 srcport 0 0 dstport 4789 ...
      
  • 桥接网络

    • 创建桥接接口(例如 br-xxxx),连接 VXLAN 接口和容器虚拟接口。
    • 示例(节点 2,假设 brctl 已安装):
      brctl show
      
      输出:
      bridge name     bridge id               STP enabled     interfaces
      br-xxxx         8000.0242ac110006       no              vxlan0veth30344ea
      docker_gwbridge 8000.0242bf32025b       no              vetha7fbe75
      
      • vxlan0:VXLAN 接口,处理跨节点通信。
      • veth30344eagindemo2 的虚拟接口。
      • docker_gwbridge:用于外部网络连接。
  • 你的情况

    • 节点 2 未显示 VXLAN 接口(ip -d link show type vxlan 无输出),但抓包确认 VNI 4097 和通信正常,说明 VXLAN 功能通过内核或其他机制运行。

3. 容器网络命名空间配置

Docker 为每个容器创建独立的网络命名空间,配置 IP、MAC 和路由。

  • 命名空间创建

    • gindemo1gindemo2 创建网络命名空间,隔离网络栈。
    • 示例(节点 2,gindemo2):
      docker inspect gindemo2 | grep -A 5 Network
      
      输出:
          "Networks": {"my-overlay-network": {"IPAddress": "10.0.1.6","Gateway": "10.0.1.1","EndpointID": "xxxx","MacAddress": "02:42:ac:11:00:06"}}
      
  • 虚拟接口

    • 创建 veth 接口对:
      • 容器端:eth0(IP: 10.0.1.6,MAC: 02:42:ac:11:00:06)。
      • 主机端:veth30344ea,连接到桥接接口(br-xxxxdocker_gwbridge)。
    • 示例(容器内):
      docker exec -it gindemo2 ip addr
      
      输出:
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536inet 127.0.0.1/8 scope host lo
      30: eth0@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450inet 10.0.1.6/24 brd 10.0.1.255 scope global eth0
      
  • 路由表配置

    • Docker 为容器配置路由表,确保数据包通过网关或直接发送到目标。
    • 示例(gindemo2 容器内):
      docker exec -it gindemo2 ip route
      
      输出:
      default via 10.0.1.1 dev eth0
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.6
      
      • 解释
        • 默认路由:通过网关 10.0.1.1(虚拟网关,由 Docker 实现)。
        • 本地子网:10.0.1.0/24 直接通过 eth0 访问,覆盖 gindemo110.0.1.2)。
  • 主机路由表

    • 主机上为 my-overlay-network 配置路由,确保数据包进入 VXLAN 隧道。
    • 示例(节点 2 主机):
      ip route
      
      输出:
      default via 192.168.1.1 dev enp0s3
      10.0.1.0/24 dev br-xxxx proto kernel scope link src 10.0.1.1
      192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.10
      
      • 解释
        • 10.0.1.0/24:通过桥接接口(br-xxxx)访问,网关 10.0.1.1
        • 外部流量通过物理网卡 enp0s3 和默认网关 192.168.1.1

4. DNS 解析与服务发现

Docker 提供内置 DNS 服务,简化容器间通信。

  • DNS 配置

    • Swarm 维护分布式 DNS 记录,将容器名称映射到 IP。
    • 示例:gindemo1 解析为 10.0.1.2gindemo2 解析为 10.0.1.6
    • 配置存储在 Swarm 键值存储中,通过 gossip 协议同步。
  • 通信过程

    • gindemo2 执行 curl http://gindemo1
      • DNS 查询 gindemo1,解析到 10.0.1.2
      • 数据包通过容器路由表发送到 eth0
  • 你的抓包

    • 抓包显示 10.0.1.6gindemo2)访问 10.0.1.2gindemo1)的 websm 端口(80 或 443),DNS 解析正常。

5. VXLAN 数据包封装与转发

Docker 协调内核 VXLAN 模块,完成数据包的封装和跨节点转发。

  • 数据包生成

    • gindemo210.0.1.6)发送 HTTP 请求到 gindemo110.0.1.2)。
    • 容器内路由表:
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.6
      
      • 数据包通过 eth0 发送,目标 IP 10.0.1.2,MAC 未解析(需 ARP)。
  • ARP 解析

    • Docker 通过 Swarm 的 gossip 协议或多播,解析 10.0.1.2 的 MAC(例如 02:42:ac:11:00:02)。
    • FDB 表记录 MAC 到节点映射:
      bridge fdb show dev vxlan0
      
      输出(节点 2):
      02:42:ac:11:00:02 dst 192.168.1.9 self
      
      • 表示 gindemo1 的 MAC 映射到节点 1(192.168.1.9)。
  • VXLAN 封装

    • 数据包进入主机桥接接口(br-xxxx),转发到 VXLAN 接口(vxlan0)。
    • 内核 VXLAN 模块封装数据包:
      • 内部帧:源 10.0.1.6(MAC: 02:42:ac:11:00:06),目标 10.0.1.2(MAC: 02:42:ac:11:00:02)。
      • VXLAN 头:VNI 4097
      • 外部 UDP:源 192.168.1.10(动态端口,例如 50730),目标 192.168.1.9:4789
      • 外部 IP:源 192.168.1.10,目标 192.168.1.9
    • 你的抓包:
      07:22:12.656724 IP 192.168.1.10.50730 > 192.168.1.9.vxlan: VXLAN, flags [I] (0x08), vni 4097
      IP 10.0.1.6.35126 > 10.0.1.2.websm: Flags [S], seq 2498547307, win 28200, ...
      
  • 转发

    • 数据包通过物理网卡(enp0s3)发送到节点 1。
    • 主机路由表(节点 2):
      192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.10
      
      • 目标 192.168.1.9 通过 enp0s3 直接发送。
  • 节点 1 解封装

    • 节点 1 接收 UDP 4789 数据包,VXLAN 接口(vxlan0)解封装。
    • 内部帧转发到 gindemo110.0.1.2)的 eth0
    • 节点 1 路由表(容器内):
      default via 10.0.1.1 dev eth0
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.2
      

6. iptables 和外部连接

Docker 配置 iptables,支持容器与外部网络的通信。

  • NAT 配置

    • 为端口映射(例如 -p 8081:80)配置 iptablesnat 表(DOCKER 链)。
    • 示例(节点 2):
      sudo iptables -t nat -L DOCKER
      
      输出:
      Chain DOCKER (2 references)
      target     prot opt source               destination
      DNAT       tcp  --  anywhere             0.0.0.0/0            tcp dpt:8081 to:10.0.1.6:80
      
  • docker_gwbridge

    • 连接容器到外部网络,处理外部访问(例如通过 192.168.1.10:8081 访问 gindemo2)。
    • 你的输出:
      10: docker_gwbridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...link/ether 02:42:bf:32:02:5b ...
      24: vetha7fbe75@if23: ... master docker_gwbridge ...
      31: veth30344ea@if30: ... master docker_gwbridge ...
      
  • 防火墙

    • 确保 UDP 4789(VXLAN)、TCP 2377(Swarm 管理)、TCP/UDP 7946(gossip)端口开放。
    • 示例:
      sudo ufw allow 4789/udp
      

7. Swarm 控制平面管理

Docker Swarm 提供分布式管理,确保 overlay 网络跨节点一致。

  • 网络同步

    • 通过 Raft 协议存储网络配置(VNI、子网、FDB)。
    • 节点 2 无需手动创建 my-overlay-network,Swarm 自动分发。
  • 服务发现

    • Swarm 维护 DNS 记录,动态更新容器 IP 和名称。
    • 示例:gindemo2 查询 gindemo1,返回 10.0.1.2
  • 故障处理

    • 检测节点状态(docker node ls),重新同步配置。
    • 你的问题(节点 2 无 VXLAN 接口)可能因同步或内核问题,Docker 仍通过其他机制维持通信。

8. 性能优化

Docker 优化 overlay 网络的性能。

  • 内核 VXLAN

    • 使用 Linux 内核的 VXLAN 模块,高效处理封装。
    • 支持网卡硬件卸载(如果支持)。
  • 多播/单播

    • 默认使用多播分发 ARP,动态切换到单播(你的环境中可能为单播)。
    • FDB 表动态更新:
      02:42:ac:11:00:02 dst 192.168.1.9 self
      
  • MTU

    • 设置 MTU 1450,适应 VXLAN 封装。
    • 你的抓包显示 mss 1410,确认 MTU 正确。

9. 调试与监控

Docker 提供工具支持 overlay 网络调试。

  • 网络检查

    • docker network inspect my-overlay-network:显示 VNI(4097)、子网、容器 IP。
    • docker inspect gindemo2:确认 IP 和 MAC。
  • 抓包

    • 你的抓包:
      IP 192.168.1.10.50730 > 192.168.1.9.vxlan: VXLAN, flags [I] (0x08), vni 4097
      
      • 验证 VNI 和通信。
  • 日志

    • journalctl -u docker:记录网络错误。

10. 异常处理

Docker 处理 overlay 网络的异常情况。

  • 你的问题(节点 2 无 VXLAN 接口)

    • 可能原因:VXLAN 模块未加载(modprobe vxlan)、iproute2 过旧、Docker 网络栈异常。
    • Docker 仍通过内核直接处理 VXLAN 流量(抓包确认),但接口未显示。
  • 解决方案

    • 加载 VXLAN 模块:
      sudo modprobe vxlan
      
    • 更新 iproute2
      sudo yum update iproute
      
    • 重启 Docker:
      systemctl restart docker
      

具体路由表和数据包流程

以下是 gindemo2(节点 2,10.0.1.6)访问 gindemo1(节点 1,10.0.1.2)的详细流程,包含路由表。

1. gindemo2 容器(节点 2)

  • 路由表
    docker exec -it gindemo2 ip route
    
    default via 10.0.1.1 dev eth0
    10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.6
    
  • 流程
    • curl http://gindemo1 解析为 10.0.1.2(Swarm DNS)。
    • 数据包:源 10.0.1.6:35126,目标 10.0.1.2:80(HTTP)。
    • 路由匹配 10.0.1.0/24,通过 eth0 发送。
    • ARP 请求 10.0.1.2 的 MAC,解析为 02:42:ac:11:00:02

2. 节点 2 主机

  • 路由表
    ip route
    
    default via 192.168.1.1 dev enp0s3
    10.0.1.0/24 dev br-xxxx proto kernel scope link src 10.0.1.1
    192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.10
    
  • FDB 表
    bridge fdb show dev vxlan0
    
    02:42:ac:11:00:02 dst 192.168.1.9 self
    
  • 流程
    • 数据包从 veth30344ea 进入桥接接口(br-xxxx)。
    • VXLAN 接口(vxlan0,若存在)封装数据包:
      • 内部:源 10.0.1.6(MAC: 02:42:ac:11:00:06),目标 10.0.1.2(MAC: 02:42:ac:11:00:02)。
      • 外部:源 192.168.1.10:50730,目标 192.168.1.9:4789,VNI 4097
    • 路由匹配 192.168.1.0/24,通过 enp0s3 发送。

3. 节点 1 主机

  • 路由表
    ip route
    
    default via 192.168.1.1 dev enp0s3
    10.0.1.0/24 dev br-yyyy proto kernel scope link src 10.0.1.1
    192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.9
    
  • 流程
    • 接收 UDP 4789 数据包,VXLAN 接口解封装。
    • 内部帧转发到桥接接口(br-yyyy),匹配 10.0.1.2
    • 数据包通过 veth 接口送达 gindemo1eth0

4. gindemo1 容器(节点 1)

  • 路由表
    docker exec -it gindemo1 ip route
    
    default via 10.0.1.1 dev eth0
    10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.2
    
  • 流程
    • 接收数据包,处理 HTTP 请求。
    • 响应通过相同路径返回(反向封装,VXLAN 到节点 2)。

总结

Docker 在 overlay 网络中完成以下核心工作:

  1. 网络创建:分配 VNI(4097)、子网(10.0.1.0/24),通过 Swarm 同步。
  2. VXLAN 初始化:创建 VXLAN 接口(vxlan0)、桥接接口(br-xxxx)。
  3. 容器配置:分配 IP(10.0.1.2, 10.0.1.6)、MAC,配置路由表和 veth 接口。
  4. DNS 解析:提供 Swarm DNS,解析 gindemo110.0.1.2
  5. 数据封装:封装 VXLAN 数据包(外部: 192.168.1.10192.168.1.9,VNI 4097),维护 FDB。
  6. iptables:配置 NAT 和端口映射,连接 docker_gwbridge
  7. Swarm 管理:分布式同步,故障恢复。
  8. 优化与调试:内核 VXLAN、MTU 1450、抓包支持。

相关文章:

Docker Overlay 网络的核心工作(以跨节点容器通信为例)

Docker 的 overlay 网络是一种基于 VXLAN&#xff08;Virtual Extensible LAN&#xff09;的多主机网络模式&#xff0c;专为 Docker Swarm 集群设计&#xff0c;用于实现跨节点的容器通信。它通过虚拟二层网络&#xff0c;允许容器在不同主机上像在同一局域网内一样通信。Dock…...

开发基于python的商品推荐系统,前端框架和后端框架的选择比较

开发一个基于Python的商品推荐系统时&#xff0c;前端和后端框架的选择需要综合考虑项目需求、开发效率、团队熟悉度以及系统的可扩展性等因素。 以下是一些推荐的框架和建议&#xff1a; 后端框架 Flask 优点&#xff1a; 轻量级&#xff1a;Flask的核心非常简洁&#xff0c;…...

CSRF 请求伪造Referer 同源置空配合 XSSToken 值校验复用删除

#CSRF- 无检测防护 - 检测 & 生成 & 利用(那数据包怎么整 找相似源码自己搭建整&#xff09; 检测&#xff1a;黑盒手工利用测试&#xff0c;白盒看代码检验&#xff08;有无 token &#xff0c;来源检验等&#xff09; 生成&#xff1a; BurpSuite->Engagement t…...

Datawhale AI春训营】AI + 新能源(发电功率预测)Task1

赛题链接 官网 新能源发电功率预测赛题进阶方案 下面是ai给的一些建议 新能源发电功率预测赛题进阶方案 一、时序特性深度挖掘 1. 多尺度周期特征 # 分钟级周期编码 train[15min_index] (train[hour]*4 train[minute]//15)# 周周期特征 train[weekday] pd.to_datetime…...

@EnableAsync+@Async源码学习笔记之二

从本文开始&#xff0c;就正式进入源码追踪阶段了&#xff0c;上一篇的最后我们提到了 EnableAsync 注解上的 Import(AsyncConfigurationSelector.class)了&#xff0c;本文就来看下它&#xff0c;源码如下&#xff1a; package org.springframework.scheduling.annotation;im…...

C++ STL 环形队列模拟实现

C STL 环形队列模拟实现 下面是一个使用C STL实现的环形队列&#xff08;Circular Queue&#xff09;的完整示例&#xff1a; #include <iostream> #include <vector> #include <stdexcept>template <typename T> class CircularQueue { private:std…...

每天五分钟深度学习PyTorch:0填充函数在搭建神经网络中的应用

本文重点 在深度学习中,神经网络的搭建涉及对输入数据、权重矩阵以及中间计算结果的处理。masked_fill 是 PyTorch 等深度学习框架中常用的张量操作函数,它通过布尔掩码(mask)对张量中的指定元素进行填充。当将矩阵元素填充为 0 时,masked_fill 在神经网络中发挥着重要作…...

pycharm中怎么解决系统cuda版本高于pytorch可以支持的版本的问题?

在PyCharm中安装与系统CUDA版本不一致的PyTorch是可行的。以下是解决方案的步骤&#xff1a; 1. 确认系统驱动兼容性 检查NVIDIA驱动支持的CUDA版本&#xff1a;运行 nvidia-smi&#xff0c;右上角显示的CUDA版本是驱动支持的最高版本。只要该版本不低于PyTorch所需的CUDA版本…...

【概率论】条件期望

在高等概率论中&#xff0c;给定一个概率空间 ( Ω , F , P ) (\Omega, \mathcal{F}, P) (Ω,F,P) 和其子 σ \sigma σ-代数 G ⊆ F \mathcal{G} \subseteq \mathcal{F} G⊆F&#xff0c;随机变量 X X X 关于 G \mathcal{G} G 的 条件期望 E [ X ∣ G ] E[X|\mathcal{G}…...

【java实现+4种变体完整例子】排序算法中【计数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是计数排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、计数排序基础实现 原理 通过统计每个元素的出现次数&#xff0c;按顺序累加得到每个元素的最终位置&#xff0c;并填充到结果数组中。 代码示…...

Qt C++ 解析和处理 XML 文件示例

使用 Qt C 解析和处理 XML 文件 以下是使用 Qt C 实现 XML 文件处理的几种方法&#xff0c;包括解析、创建和修改 XML 文件。 1. 使用 QXmlStreamReader (推荐方式) #include <QFile> #include <QXmlStreamReader> #include <QDebug>void parseXmlWithStr…...

在服务器上部署MinIO Server

MinIO的优势 高性能&#xff1a;MinIO号称是目前速度最快的对象存储服务器&#xff0c;据称在标准硬件上&#xff0c;对象存储的读/写速度最高可以高达183 GB/s和171 GB/s&#xff0c;可惜我的磁盘跟不上 兼容性&#xff1a;MinIO基于Amazon S3协议&#xff0c;并提供了与S3兼…...

第二十七讲:AI+农学导论

关键词:人工智能、农业、作物识别、遥感、机器学习、案例实战 目录 📌 一、为什么农业需要人工智能? 📈 二、AI在农学中的典型应用场景 🧪 三、实战案例:AI识别作物类型(以随机森林为例) ✅ 数据集:iris(模拟作物种类识别) 📦 所需包: 🚀 数据准备: …...

医院科研科AI智能科研支撑平台系统设计架构方案探析

一、系统设计概述 1.1 系统定位 本系统是基于MCP(Model Context Protocol,模型上下文协议)协议构建的智能科研支撑平台,旨在为医院科研科室提供全流程AI辅助能力,覆盖课题立项、数据采集、分析建模到成果转化的完整科研生命周期。系统通过MCP协议实现与医院信息系统的深…...

Python基础总结(七)之条件语句

文章目录 条件语句if一、Python中的真假二、条件语句格式2.1 if语句格式2.2 if-else语句2.3 if-elif-else语句 三、if语句嵌套 条件语句if 条件语句其实就是if语句&#xff0c;在讲解if语句之前需要知道Python中对于真假的判断。 一、Python中的真假 在Python中非0的都为真&…...

Day10【基于encoder- decoder架构实现新闻文本摘要的提取】

实现新闻文本摘要的提取 1. 概述与背景2.参数配置3.数据准备4.数据加载5.主程序6.预测评估7.生成效果8.总结 1. 概述与背景 新闻摘要生成是自然语言处理&#xff08;NLP&#xff09;中的一个重要任务&#xff0c;其目标是自动从长篇的新闻文章中提取出简洁、准确的摘要。近年来…...

深度解析算法之二分查找(2)

17.二分查找 题目链接 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target…...

前端工程化之自动化测试

自动化测试 自动化测试为什么需要测试&#xff1f;什么时候需要考虑测试测试类型前端测试框架单元测试Jest 重点掌握项目示例package.jsonsrc/utils/math.tssrc/utils/math.test.ts进行测试jest.config.js覆盖率直观看覆盖率coverage/lcov-report/index.html src/main.test.tst…...

CANFD技术在新能源汽车通信网络中的应用与可靠性分析

一、引言 新能源汽车产业正处于快速发展阶段&#xff0c;其电子系统复杂度不断攀升&#xff0c;涵盖众多传感器、控制器与执行器。高效通信网络成为确保新能源汽车安全运行与智能功能实现的核心要素。传统CAN总线因带宽限制&#xff0c;难以满足高级驾驶辅助系统&#xff08;A…...

【机器学习】朴素贝叶斯算法:原理剖析与实战应用

引言 朴素贝叶斯算法就像是一位善于从经验中学习的侦探&#xff0c;根据已有的线索来推断未知事件的概率。这是一种基于概率论的分类算法&#xff0c;以贝叶斯定理为基础&#xff0c;却做了一个"朴素"的假设&#xff1a;认为所有特征彼此独立。虽然这个假设在现实中…...

【更新完毕】2025妈妈杯C题 mathercup数学建模挑战赛C题数学建模思路代码文章教学:音频文件的高质量读写与去噪优化

完整内容请看文章最下面的推广群 我将先给出文章、代码、结果的完整展示, 再给出四个问题详细的模型 面向音频质量优化与存储效率提升的自适应编码与去噪模型研究 摘 要 随着数字媒体技术的迅速发展&#xff0c;音频处理技术在信息时代的应用愈加广泛&#xff0c;特别是在存储…...

UI键盘操作

1、Selenium中send_keys除了可以模拟键盘输入之外&#xff0c;还有些时候需要操作键盘上的按键&#xff0c;甚至是组合键&#xff0c;比如CTRLA,CTRLC等&#xff0c; 所以我们需要代码操作键盘。使用的是send_keys里的Keys的类。 from selenium.webdriver.common.keys import …...

【正则表达式】正则表达式使用总结

正则表达式除了匹配普通字符外,还可以匹配特殊字符,这些特殊字符被称为“元字符”。‌ 特殊字符(元字符) ‌限定符‌:用于指定正则表达式中某个组件的出现次数。常见的限定符包括: *:0次或多次 +:1次或多次 ?:0次或1次 {n}:恰好n次…...

Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门

一、前言 在推流领域&#xff0c;尤其是监控行业&#xff0c;现在主流设备基本上都是265格式的视频流&#xff0c;想要在网页上直接显示监控流&#xff0c;之前的方案是&#xff0c;要么转成hls&#xff0c;要么魔改支持265格式的flv&#xff0c;要么265转成264&#xff0c;如…...

Spring Boot 中基于 Reactor 的服务器端事件(SSE)推送机制实践

Spring Boot 3.0 中基于 Reactor 的服务器端事件(SSE)推送机制实践 在现代 Web 应用开发中,实时数据交互越来越成为刚需,从股票行情的实时更新到社交平台的消息即时推送,服务器端事件(Server-Sent Events,简称 SSE)作为一种高效的单向数据传输技术,正发挥着重要作用。…...

CRC实战宝典:从原理到代码,全面攻克循环冗余校验

CRC实战宝典&#xff1a;从原理到代码&#xff0c;全面攻克循环冗余校验 github开源&#xff1a;CRC软硬件协同测试项目 CRC 简介 CRC&#xff08;循环冗余校验&#xff09;是一种强大的错误检测技术&#xff0c;广泛应用于数字网络和存储系统。它是确保数据完整性的重要方法…...

【愚公系列】《Python网络爬虫从入门到精通》056-Scrapy_Redis分布式爬虫(Scrapy-Redis 模块)

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

ZLMediaKit 和 SRS的区别,哪个更好用?

ZLMediaKit 和 SRS&#xff08;Simple RTMP Server&#xff09;是两个主流的开源流媒体服务器框架&#xff0c;各自在功能、性能、适用场景等方面存在显著差异。以下是两者的对比分析及选择建议&#xff1a; 一、核心差异对比 协议支持 ZLMediaKit&#xff1a;支持更广泛的流媒…...

【PyTorch】colab上跑VGG(深度学习)数据集是 CIFAR10

跑得结果是测试准确率10%&#xff0c;欠拟合。 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter from torchvision import datasets, transformstransform tran…...

pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图

本专栏博客第49篇文章分享了将 GroundingDINO模型导出onnx并使用c++进行部署,并尝试将onnx模型转换为trt模型,fp16进行推理,可以发现推理速度提升了一倍。为此对GroundingDINO的trt推理进行调研,发现 在GroundingDINO-TensorRT-and-ONNX-Inference项目中分享了模型导出onnx…...

编程语言基础 - C++ 面试题

C++ 面试题 tags: c++ 文章目录 C++ 面试题关键字1. const2. static3. this 指针4. inline 内联函数5. volatile6. struct, class7. enum关键字 1. const 修饰变量:该变量不能被改变 修饰指针: 指针常量: 指针本身是常量 TYPE* const pContent;指向常量的指针:指针所指向…...

JVM笔记【一】java和Tomcat类加载机制

JVM笔记一java和Tomcat类加载机制 java和Tomcat类加载机制 Java类加载 * loadClass加载步骤类加载机制类加载器初始化过程双亲委派机制全盘负责委托机制类关系图自定义类加载器打破双亲委派机制 Tomcat类加载器 * 为了解决以上问题&#xff0c;tomcat是如何实现类加载机制的…...

Python----深度学习(全连接与链式求导法则)

一、机器学习和深度学习的区别 机器学习&#xff1a;利用计算机、概率论、统计学等知识&#xff0c;输入数据&#xff0c;让计算机学会新知 识。机器学习的过程&#xff0c;就是训练数据去优化目标函数。 深度学习&#xff1a;是一种特殊的机器学习&#xff0c;具有强大的能力和…...

基于SpringBoot的网上找律师管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

《目标检测双雄:YOLO与Faster R-CNN,谁主沉浮?》

在计算机视觉的广阔天地里&#xff0c;目标检测技术宛如一颗璀璨的明星&#xff0c;照亮了无数应用场景。从安防监控中对行人与车辆的精准识别&#xff0c;到自动驾驶领域对道路障碍物的快速判断&#xff0c;再到工业生产里对产品缺陷的严格检测&#xff0c;目标检测无处不在&a…...

CUDA编程中影响性能的小细节总结

一、内存访问优化 合并内存访问&#xff1a;确保相邻线程访问连续内存地址&#xff08;全局内存对齐访问&#xff09;。优先使用共享内存&#xff08;Shared Memory&#xff09;减少全局内存访问。避免共享内存的Bank Conflict&#xff08;例如&#xff0c;使用padding或调整访…...

C#学习第17天:序列化和反序列化

什么是序列化&#xff1f; 定义&#xff1a;序列化是指把对象转换为一种可以轻松存储或传输的格式&#xff0c;如JSON、XML或二进制格式。这个过程需要捕获对象的类型信息和数据内容。用途&#xff1a;使得对象可以持久化到文件、发送至网络、或存储在数据库中。 什么是反序列…...

kafka的零拷贝技术

在 Kafka 中&#xff0c;高性能数据传输依赖于操作系统提供的 零拷贝&#xff08;Zero-Copy&#xff09; 技术&#xff0c;主要包括 sendfile 和 mmap 两种实现方式。它们的核心目标是减少数据在用户态和内核态之间的拷贝次数&#xff0c;从而提升 I/O 效率。下面详细解析它们的…...

从 0~1 保姆级 详细版 PostgreSQL 数据库安装教程

PostgreSQL数据库安装 PostgreSQL官网 【PostgreSQL官网】 | 【PostgreSQL安装官网_Windows】 安装步骤 step1&#xff1a; 选择与电脑相对应的PostgreSQL版本进行下载。 step2&#xff1a; 双击打开刚才下载好的文件。 step3&#xff1a; 在弹出的setup窗口中点击 …...

MySQL中常用函数的分类及示例

概述 以下是 MySQL 中常用函数的分类及示例&#xff0c;涵盖字符串处理、数值计算、日期操作、条件判断等常见场景&#xff1a; 一、字符串函数 1. CONCAT(str1, str2, ...) 拼接字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello World2. SUBSTRING(str, start,…...

【论文阅读21】-PSOSVM-CNN-GRU-Attention-滑坡预测(2024-12)

这篇论文主要提出并验证了一种新型的混合智能模型&#xff08;PSOSVM-CNN-GRU-Attention&#xff09;&#xff0c;用于准确预测滑坡的点位移&#xff0c;并构建可靠的位移预测区间。通过对Baishuihe滑坡和Shuping滑坡的案例分析&#xff0c;展示了该模型的出色性能。 [1] Zai D…...

Shiro-550 动调分析与密钥正确性判断

一、Shiro 简介 Apache Shiro是一个开源安全框架&#xff0c;用于构建 Java 应用程序&#xff0c;提供身份验证、授权、加密和会话管理等功能。 二、Shiro-550&#xff08;CVE-2016-4437&#xff09; 1、漏洞原理 Shiro 在用户登陆时提供可选项 RememberMe&#xff0c;若勾选…...

Codeforces Educational Round 177 Div. 2 【B题,C待补

B 二分 题意 样例 5 3 10 3 4 2 1 512 找最右边的L下标即可 思路 二分最靠右的L端点&#xff0c;R端点取最右端(n*k处)&#xff0c;找到后&#xff0c;答案就是L的位置(pos)&#xff0c;&#xff08;因为如果pos满足&#xff0c;则pos左边的所有下标都满足 代码 const in…...

【Lua语言】Lua语言快速入门

初始Lua Lua是一种轻量小巧的脚本语言&#xff0c;他使用标准C语言编写并以源代码形式开放。这意味着Lua虚拟机可以很方便的嵌入别的程序中&#xff0c;从而为应用程序提供灵活的扩展和定制功能。同时&#xff0c;在目前脚本引擎中&#xff0c;Lua的运行速度占有绝对优势。 变…...

Matlab画海洋与大气变量的时间序列并带标记面的三维折线图--来源粉丝

Matlab画带标记面的三维折线图–来源粉丝 图片 目标图&#xff1a; 图片 复现&#xff1a; 图片 细节可在代码中更改&#xff1a; 数据构造 clear;clc;close all; % 数据构造 X1 1:8;Y1ones(length(X1),1); X2 X1;Y22*ones(length(X1),1); X3 X1;Y33*ones(length(X1),1); …...

NestJS——多环境配置方案(dotenv、config、@nestjs/config、joi配置校验)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

RAGFlow在Docker中运行Ollama直接运行于主机的基础URL的地址

基础Url http://host.docker.internal:11434...

python 库 下载 ,整合在一个小程序 UIUIUI

上图 import os import time import threading import requests import subprocess import importlib import tkinter as tk from tkinter import ttk, messagebox, scrolledtext from concurrent.futures import ThreadPoolExecutor, as_completed from urllib.parse import…...

【MySQL】数据库约束

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 ✨一、数据库的约束 &#x1f31f;二、数据库约束的分类 &#x1f30d; 1.非空约束&#xff08;NOT NULL&#xff09; 1.定义 2.格式 3.示例&#xff1a; 列的信息可…...

Firewalld防火墙

目录 Firewald 防火墙概述 Firewalld 简介 firewalld 与 iptables service的区别 Firewalld 网络区域 Firewalld 防火墙图形配置方法 服务选项 端口号 协议选项 源端口选项 伪装选项 端口转发 ICMP过滤器 防火墙的配置运行状态 运行时和永久有什么区别 Firewalld 防火墙 firewa…...