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

Flannel后端为UDP模式下,分析数据包的发送方式(一)

Flannel 使用的是 UDP 模式,分析发往 10.244.2.5 的数据包会从哪个网卡发出。


路由表

以下是提供的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp0s3
10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.0.0      0.0.0.0         255.255.0.0     U     0      0        0 flannel0
10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1
10.244.2.0      10.244.2.0      255.255.255.0   UG    0      0        0 flannel.1
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.1.1     0.0.0.0         255.255.255.255 UH    100    0        0 enp0s3

目标是判断发往 10.244.2.5 的数据包会从哪个网卡发出,并结合 Flannel 的 UDP 模式详细讲解路由匹配规则和数据包转发过程。


Kubernetes 和 Flannel UDP 模式背景

在 Kubernetes 环境中,Flannel 是一个常用的 CNI(Container Network Interface)插件,负责为 Pod 分配 IP 地址并处理节点间通信。Flannel 支持多种后端模式,包括 VXLAN、UDP 和 host-gw。在本例中,明确使用 UDP 模式,以下是关键背景信息:

  1. Pod 网络

    • 每个 Kubernetes 节点被分配一个子网,用于其上的 Pod。例如:
      • 10.244.0.0/24:当前节点的 Pod 子网。
      • 10.244.1.0/2410.244.2.0/24:其他节点的 Pod 子网。
    • 目标 IP 10.244.2.5 属于 10.244.2.0/24 子网,表示它是一个运行在另一个节点上的 Pod。
  2. 网络接口

    • cni0:一个桥接接口,连接当前节点的 Pod 和主机网络。本地 Pod(10.244.0.0/24)的数据包通过 cni0 进入主机网络。
    • flannel.1:Flannel 创建的虚拟接口,用于节点间通信。在 UDP 模式下,flannel.1 是一个 TUN 设备,负责封装和解封装数据包。
    • flannel0:可能是一个旧的或次要接口(视 Flannel 配置而定),在本例中可能不直接用于 UDP 模式的通信。
    • enp0s3:节点的物理网络接口,用于节点间实际的物理网络通信。
  3. Flannel UDP 模式

    • 在 UDP 模式下,Flannel 使用用户态的 UDP 封装(而不是内核态的 VXLAN)来传输数据包。
    • 数据包通过 flannel.1(TUN 设备)发出,被 Flannel 的用户态进程(flanneld)封装为 UDP 数据包,然后通过节点的物理接口(如 enp0s3)发送到目标节点。
    • Flannel 通过 etcd 或 Kubernetes API 维护子网到节点 IP 的映射。例如,10.244.2.0/24 映射到某个节点的物理 IP(如 192.168.x.x)。
  4. 路由表的作用

    • Flannel 配置路由表,确保 Pod 的流量可以路由到正确的接口(本地 Pod 通过 cni0,跨节点 Pod 通过 flannel.1)。
    • 网关地址(如 10.244.2.0)在 UDP 模式下是子网的网络地址,Flannel 的用户态进程会根据子网映射将其转换为目标节点的物理 IP。

路由匹配规则(结合 Kubernetes 和 UDP 模式)

Linux 内核根据以下规则选择路由:

  1. 最长前缀匹配(Longest Prefix Match)

    • 系统将目标 IP 地址与路由表中的 DestinationGenmask 比较,选择子网掩码最长的匹配项。
    • 例如,255.255.255.0/24)比 255.255.0.0/16)更具体,优先级更高。
  2. 网关(Gateway)

    • 如果 Gateway0.0.0.0,表示目标网络直接连接到指定接口(Iface),数据包直接通过该接口发送。
    • 如果 Gateway 是一个 IP 地址(如 10.244.2.0),数据包通过指定接口发送到网关。在 Flannel UDP 模式下,网关地址通常是子网的网络地址,由 flanneld 进程处理。
  3. 标志(Flags)

    • U:路由有效(Up)。
    • G:需要通过网关转发。
    • H:目标是一个主机(而非网络)。
  4. 度量值(Metric)

    • 如果多条路由匹配,系统选择 Metric 值最低的路由。
  5. 接口(Iface)

    • 指定数据包通过哪个网络接口发出。在 UDP 模式下,flannel.1 是 TUN 设备,负责将数据包交给 Flannel 的用户态进程。

匹配过程(针对 10.244.2.5)

我们逐条检查路由表,找出与目标 IP 10.244.2.5 匹配的路由:

  1. 0.0.0.0/0.0.0.0(默认路由)

    • 目标网络:0.0.0.0,子网掩码:0.0.0.0(匹配所有地址)。
    • 网关:192.168.1.1,接口:enp0s3,标志:UG
    • 这是一个默认路由,用于外部网络(如互联网)。10.244.2.5 是 Kubernetes 内部 Pod 地址,不会使用此路由。
  2. 10.244.0.0/255.255.255.0

    • 目标网络:10.244.0.0,子网掩码:255.255.255.0(匹配 10.244.0.0-10.244.0.255)。
    • 网关:0.0.0.0,接口:cni0,标志:U
    • 检查:10.244.2.5 不属于 10.244.0.0/24,因此不匹配。
    • 说明:cni0 用于本地 Pod 子网(10.244.0.0/24),即当前节点的 Pod。
  3. 10.244.0.0/255.255.0.0

    • 目标网络:10.244.0.0,子网掩码:255.255.0.0(匹配 10.244.0.0-10.244.255.255)。
    • 网关:0.0.0.0,接口:flannel0,标志:U
    • 检查:10.244.2.5 属于 10.244.0.0/16,因此匹配。
    • 说明:这是一个广义路由,可能用于 Flannel 的默认配置,但在更具体路由存在时会被忽略。flannel0 在 UDP 模式下可能不直接使用。
  4. 10.244.1.0/255.255.255.0

    • 目标网络:10.244.1.0,子网掩码:255.255.255.0(匹配 10.244.1.0-10.244.1.255)。
    • 网关:10.244.1.0,接口:flannel.1,标志:UG
    • 检查:10.244.2.5 不属于 10.244.1.0/24,因此不匹配。
  5. 10.244.2.0/255.255.255.0

    • 目标网络:10.244.2.0,子网掩码:255.255.255.0(匹配 10.244.2.0-10.244.2.255)。
    • 网关:10.244.2.0,接口:flannel.1,标志:UG
    • 检查:10.244.2.5 属于 10.244.2.0/24,因此匹配。
    • 说明:这是 Flannel 配置的跨节点路由,10.244.2.0/24 是另一个节点的 Pod 子网。
  6. 192.168.1.0/255.255.255.0

    • 目标网络:192.168.1.0,子网掩码:255.255.255.0
    • 网关:0.0.0.0,接口:enp0s3,标志:U
    • 检查:10.244.2.5 不属于 192.168.1.0/24,因此不匹配。
  7. 192.168.1.1/255.255.255.255

    • 目标网络:192.168.1.1,子网掩码:255.255.255.255(仅匹配主机 192.168.1.1)。
    • 网关:0.0.0.0,接口:enp0s3,标志:UH
    • 检查:10.244.2.5 不匹配,因此不适用。

选择最优路由

匹配的路由有:

  • 10.244.0.0/255.255.0.0/16,接口:flannel0
  • 10.244.2.0/255.255.255.0/24,接口:flannel.1

根据 最长前缀匹配 规则:

  • /24255.255.255.0)比 /16255.255.0.0)更具体,因此优先选择 10.244.2.0/255.255.255.0

该路由的细节:

  • 目标网络:10.244.2.0
  • 子网掩码:255.255.255.0
  • 网关:10.244.2.0
  • 接口:flannel.1
  • 标志:UG(需要通过网关转发)

因此,数据包将通过 flannel.1 网卡发出,网关为 10.244.2.0


Flannel UDP 模式下的数据包转发

在 Flannel 的 UDP 模式下,数据包的转发过程如下:

  1. 路由决定

    • 数据包的目标 IP 10.244.2.5 匹配路由 10.244.2.0/24,通过 flannel.1 接口发出。
    • 网关地址 10.244.2.0 是目标子网的网络地址。在 UDP 模式下,flannel.1 是一个 TUN 设备,数据包会被送入用户态的 flanneld 进程。
  2. UDP 封装

    • flanneld 进程接收到数据包后,查询 etcd 或 Kubernetes API 中的子网映射,确定 10.244.2.0/24 对应的目标节点(例如,物理 IP 为 192.168.1.x)。
    • 数据包被封装为 UDP 数据包,默认使用端口 8472(Flannel UDP 模式的默认端口)。
    • 封装后的 UDP 数据包通过节点的物理接口(如 enp0s3)发送到目标节点的物理 IP。
  3. 目标节点处理

    • 目标节点上的 flanneld 进程监听 UDP 端口 8472,接收到封装的数据包。
    • flanneld 解封装数据包,提取原始 IP 数据包(目标 IP 10.244.2.5)。
    • 数据包通过目标节点的 cni0 接口转发到本地 Pod 子网(10.244.2.0/24),最终到达目标 Pod(10.244.2.5)。
  4. 网关地址的特殊性

    • 路由表中的网关 10.244.2.0 是一个网络地址,不是实际的主机 IP。在 UDP 模式下,flanneld 负责将 10.244.2.0/24 映射到目标节点的物理 IP。
    • 这种设计允许 Flannel 动态管理节点间的通信,而无需在路由表中直接指定目标节点的物理 IP。

为什么选择 flannel.1?

  • cni0:用于本地 Pod 子网 10.244.0.0/2410.244.2.5 不在此子网,因此不会通过 cni0
  • flannel0:匹配 10.244.0.0/16,但子网掩码较短(/16),优先级低于 10.244.2.0/24/24)。此外,在 UDP 模式下,flannel.1 是主要的 TUN 设备,flannel0 可能是一个旧接口或次要配置。
  • enp0s3:用于物理网络通信(如外部网络或默认路由)。Pod 间通信由 Flannel 处理,不会直接使用 enp0s3

因此,flannel.1 是正确的接口,专门用于跨节点 Pod 通信。


最终答案

发往 10.244.2.5 的数据包将通过 flannel.1 网卡发出。


总结路由匹配和 Flannel UDP 转发过程

  1. 路由匹配

    • 目标 IP 10.244.2.5 匹配 10.244.2.0/24/24/16 更具体)。
    • 路由指定通过 flannel.1 接口,网关为 10.244.2.0
  2. Flannel UDP 处理

    • 数据包通过 flannel.1(TUN 设备)进入用户态的 flanneld 进程。
    • flanneld 根据子网映射将数据包封装为 UDP 数据包,通过物理接口(如 enp0s3)发送到目标节点。
    • 目标节点解封装数据包并转发到目标 Pod(10.244.2.5)。
  3. Kubernetes 和 UDP 模式特性

    • UDP 模式通过用户态进程(flanneld)处理数据包封装,性能比 VXLAN 稍低,但适用于不支持 VXLAN 的环境。
    • flannel.1 作为 TUN 设备,负责将数据包交给 flanneld 进行 UDP 封装。

相关文章:

Flannel后端为UDP模式下,分析数据包的发送方式(一)

Flannel 使用的是 UDP 模式,分析发往 10.244.2.5 的数据包会从哪个网卡发出。 路由表 以下是提供的路由表: Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 …...

华为鸿蒙电脑发布,折叠屏怎么选?

1⃣屏幕特性: 分辨率:高分辨率能保证图像和文字的清晰细腻 屏幕材质:OLED 屏幕通常具有更好的对比度、色彩表现和更广的色域 刷新率:支持自适应刷新率的屏幕可以根据不同的使用场景自动调整刷新率,在保证流畅度的同时优…...

将VMware上的虚拟机和当前电脑上的Wifi网卡处在同一个局域网下,实现同一个局域网下实现共享

什么是桥接模式:桥接模式(Bridging Mode)是一种网络连接模式,常用于虚拟机环境中,将虚拟机的虚拟网络适配器直接连接到主机的物理网络适配器上,使虚拟机能够像独立的物理设备一样直接与物理网络通信 1.打开…...

论文阅读:Auto-Encoding Variational Bayes

对图像生成论文自编码变分贝叶斯Auto-Encoding Variational Bayes原理理解和记录 Abstract 我们如何在有向概率模型中,在具有难以处理的后验分布的连续潜在变量z和大型数据集的存在下,执行有效的推理和学习? 我们介绍了一种随机变分推理和学…...

API面临哪些风险,如何做好API安全?

API面临的风险 API(应用程序编程接口)在现代软件开发和集成中扮演着至关重要的角色,但同时也面临着多种安全风险,主要包括以下几个方面: 数据泄露风险: API通常涉及敏感数据的传输和交换,如用…...

C# Prism框架详解:构建模块化WPF应用程序

1. Prism框架简介 Prism是一个用于构建松散耦合、可测试和可维护的WPF桌面应用程序的框架。它最初由微软模式与实践团队开发,现在由社区维护,是构建企业级WPF应用程序的首选框架之一。 Prism框架的核心优势: 模块化设计:将应用…...

【工具教程】图片识别内容改名,图片指定区域识别重命名,批量识别单据扫描件批量改名,基于WPF和腾讯OCR的实现方案

基于WPF和腾讯OCR的图片指定区域识别与批量重命名实现方案 一、应用场景 ​​电商商品管理​​ 电商平台每天需处理大量商品图片,原始文件名无规律(如IMG_001.jpg)。通过指定图片中商品名称、颜色、尺码等区域,OCR识别后自动重命名…...

数独求解器3.0 增加latex格式读取

首先说明两种读入格式 latex输入格式说明 \documentclass{article} \begin{document}This is some text before oku.\begin{array}{|l|l|l|l|l|l|l|l|l|} \hline & & & & 5 & & 2 & 9 \\ \hline& & 5 & 1 & & 7…...

WPF核心类继承树结构

WPF(Windows Presentation Foundation)的类继承结构非常庞大而复杂,以下是最核心的继承树结构,按照主要功能区域展示: 基础对象层级 Object └── DispatcherObject└── DependencyObject├── Freezable│ ├── Animatable│ │ …...

Mysql的binlog日志

环境准备 [rootmysql152 ~]# yum install -y mysql-server mysql [rootmysql152 ~]# systemctl enable mysqld --now1.查看正在使用的binlog日志文件 mysql> show master status; ---------------------------------------------------------------------------- | File …...

Java 安全SPEL 表达式SSTI 模版注入XXEJDBCMyBatis 注入

https://github.com/bewhale/JavaSec https://github.com/j3ers3/Hello-Java-Sec https://mp.weixin.qq.com/s/ZO4tpz9ys6kCIryNhA5nYw #Java 安全 -SQL 注入 -JDBC&MyBatis -JDBC 1 、采用 Statement 方法拼接 SQL 语句 2 、 PrepareStatement 会对 SQL 语…...

TypeScript 泛型讲解

如果说 TypeScript 是一门对类型进行编程的语言,那么泛型就是这门语言里的(函数)参数。本章,我将会从多角度讲解 TypeScript 中无处不在的泛型,以及它在类型别名、对象类型、函数与 Class 中的使用方式。 一、泛型的核…...

BERT、GPT-3与超越:NLP模型演进全解析

自然语言处理(NLP)领域近年来经历了前所未有的变革,从早期的统计方法到如今的深度学习大模型,技术的进步推动了机器理解、生成和交互能力的飞跃。其中,BERT和GPT-3作为两个里程碑式的模型,分别代表了不同的…...

RISC-V IDE MRS2 开发笔记一:volatile关键字的使用

RISC-V IDE MRS2 开发笔记一:volatile关键字的使用 一、volatile是什么 二、GCC 中 volatile 的行为 2.1禁止编译器优化 2.2 不等于内存屏障 2.3 GCC扩展行为 三、什么时候需要 volatile 3.1防止编译器优化掉“有效代码” 3.2 访问硬件寄存器 3.3 中断服务…...

25、工业防火墙 - 工控网络保护 (模拟) - /安全与维护组件/industrial-firewall-dcs-protection

76个工业组件库示例汇总 工业防火墙 - 工控网络保护 (模拟) 概述 这是一个交互式的 Web 组件,旨在模拟工业防火墙在保护关键工控网络(特别是 DCS - 分布式控制系统)免受网络攻击(如勒索软件传播)方面的核心功能。组件通过可视化简化的网络拓扑、模拟网络流量、应用防火…...

LAN(局域网)和WAN(广域网)

你的问题非常清晰!我来用一个直观的比喻实际拓扑图帮你彻底理解LAN(局域网)和WAN(广域网)如何协同工作,以及路由器在其中的位置。你可以把整个网络想象成一座城市: 1. 比喻:城市交通…...

ArcGIS Pro 3.4 二次开发 - Arcade

环境:ArcGIS Pro SDK 3.4 .NET 8 文章目录 Arcade1 基本查询1.1 基本查询1.2 使用要素进行基本查询1.3 使用 FeatureSetByName 检索要素1.4 使用过滤器检索要素1.5 使用数学函数计算基本统计量1.6 使用 FeatureSet 函数的 Filter 和 Intersects 2 评估表达式2.1 评…...

PCB智能报价系统——————仙盟创梦IDE

软件署名 代码贡献: 紫金电子科技有限公司 文案正路:cybersnow 正文 对企业的竞争力有着深远影响。传统的 PCB 报价方式往往依赖人工核算,不仅耗时较长,还容易出现误差。随着科技的发展,PCB 自动报价系统应运而生&a…...

灾备认证助力构建数据资产安全防线‌

信息安全保障人员(CISAW)-灾难备份与恢复认证 1.权威认证体系:技术护城河‌ 在数字化进程加速的背景下,数据资产已成为政府与企业的核心资源,容灾备份能力成为保障业务连续性的关键。特别是近年来,因灾备缺…...

[特殊字符] 遇见Flask

一、初识Flask:像风一样自由 想象一下,你手里有一盒乐高积木——没有说明书,但每一块都精致小巧,任你组合成城堡、飞船,甚至整个宇宙。Flask就是这样一个存在。它不像Django那样“手把手教你搭房子”,而是…...

Axure高级交互设计:中继器嵌套动态面板实现超强体验感台账

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:中继器嵌套动态面板 主要内容:中继器内部嵌套动态面板,实现可移动式台账,增强数据表现…...

告别手动绘图!2分钟用 AI 生成波士顿矩阵

波士顿矩阵作为经典工具,始终是企业定位产品组合、制定竞争策略的核心方法论。然而,传统手动绘制矩阵的方式,往往面临数据处理繁琐、图表调整耗时、团队协作低效等痛点。 随着AI技术的发展,这一现状正在被彻底改变。boardmix博思白…...

iframe加载或者切换时候,短暂的白屏频闪问题解决

问题描述 iframe加载或者是切换iframe链接的时候,会有短暂的白屏,这个时候是在加载,目前没有想到避免的问题,应该是浏览器层面的,所以解决方法之一就是,用页面的主题背景色来遮盖一下,当他加载…...

Python数据可视化高级实战之一——绘制GE矩阵图

目录 一、课程概述 二、GE矩阵? 三、GE 矩阵图的适用范围 五、GE 矩阵的评估方法 (一)市场吸引力的评估要素 二、企业竞争实力的评估要素 三、评估方法与实践应用 1. 定量与定性结合法 2. 数据来源 六、GE矩阵的图形化实现 七、总结:GE 矩阵与 BCG 矩阵的对比分析 (一)GE…...

量子计算与云计算的融合:技术前沿与应用前景

目录 引言 量子计算基础 量子计算的基本原理 量子计算的优势与挑战 量子计算的发展阶段 云计算基础 云计算的基本概念 云计算的应用领域 云计算面临的挑战 量子计算与云计算的结合 量子云计算的概念与架构 量子云计算的服务模式 量子云计算的优势 量子云计算的发展…...

QMK固件RGB矩阵照明功能详解 - 打造你的专属炫彩键盘

QMK固件RGB矩阵照明功能详解 - 打造你的专属炫彩键盘 🌈 大家好!今天我要详细讲解QMK固件中的RGB矩阵照明功能,让你轻松打造一个真正炫彩的机械键盘!本文从基础原理到实战配置,手把手教你如何配置各种绚丽的灯光效果,即使你是小白也能轻松上手!文中所有代码都配有详细的…...

Rust 学习笔记:关于泛型的练习题

Rust 学习笔记:关于泛型的练习题 Rust 学习笔记:关于泛型的练习题问题 1下面代码能否通过编译?若能,输出是?下面代码能否通过编译?若能,输出是? Rust 学习笔记:关于泛型的…...

Panasonic松下焊接机器人节气

Panasonic松下焊接机器人节气装置 一、工作原理 松下焊接机器人节气装置的工作原理主要是通过智能控制技术,实现对焊接过程中气体流量的精确调节。例如,在焊接的不同阶段,根据焊接电流的大小自动调整气体的供给量。当焊接电流较强时&#x…...

2023 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛) 解题报告 | 珂学家

前言 题解 2023 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)。 vp了下,题目挺好的,难度也适中,但是彻底红温了。 第二题,题意不是那么清晰, M i n ( K 1 , K 2 ) Min(K_1, K_2) Min(K1​,K2​)容易求&#x…...

LeetCode 3355.零数组变换 I:差分数组

【LetMeFly】3355.零数组变换 I:差分数组 力扣题目链接:https://leetcode.cn/problems/zero-array-transformation-i/ 给定一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] [li, ri]。 对于每个查询 queries[i]&am…...

java21

1.数据结构之二叉树,二叉查找树,平衡二叉树 原理:和节点比较大小然后选左边还是右边 注意:中序遍历最常见,因为遍历的结果是从小到大 注意是任意节点,上面的二叉查找树的节点10的左子树高度是0,…...

ES的倒排索引和正排索引的区别及适用场景?为什么倒排索引适合全文搜索?

正排索引解析 1.存储机制 Elasticsearch 的文档存储机制比简单的固定字节分配更复杂,其核心原理如下: 1. 数值类型存储机制 对于 long/float/double 等数值类型: 文档ID2 → 偏移量 2 * sizeof(type) 例如:long 类型&#xf…...

ElasticSearch各种查询语法示例

1. 每种查询语法的区别与优缺点 Query DSL 区别: JSON 格式的结构化查询,功能强大,支持复杂查询逻辑,适用于 Elasticsearch 的核心查询场景。优点: 灵活,功能全面,支持全文搜索、精确匹配、聚合等;可组合…...

Ubuntu20.04部署KVM

文章目录 一. 环境准备关闭防火墙(UFW)禁用 SELinux更换镜像源检查 CPU 虚拟化支持 二. 安装KVM安装 KVM 及相关组件启动 libvirtd 服务验证安装创建虚拟机 一. 环境准备 4C8G,50G硬盘——VMware Workstation需要给虚拟机开启虚拟化引擎 roo…...

Android车载应用开发:Kotlin与Automotive OS深度实践

一、Android Automotive OS简介 Android Automotive OS(AAOS)是Google为车辆定制的操作系统,直接运行于车机硬件,提供完整的车载信息娱乐系统(IVI)。与Android Auto(手机投影方案)不…...

提示词工程(Prompt Engineering)是智能Agent交互中不可或缺的一环

Prompt Engineering 提示词,参考OpenAI提示词建议 2.5.1 概述 提示词工程(Prompt Engineering)是智能Agent交互中不可或缺的一环,它们指导智能体如何理解和回应用户的需求。这一节将探讨如何设计有效的提示词,以及如何通过精确的语言引导智能…...

九天画芯CEO张锦:AR 与 AI 融合重构智能终端生态,消费级市场迎来关键拐点

一、AR设备逆势突围:从技术验证到规模商用的跨越 根据洛图科技显示,2025 年 Q1 中国 XR(ARVR) 设备市场数据显示,AR 设备以 9.1 万台销量、116% 的同比增速远超 VR/MR 设备,这标志着消费级 AR 市场正式从 “…...

Python爬虫(32)Python爬虫高阶:动态页面处理与Scrapy+Selenium+BeautifulSoup分布式架构深度解析实战

目录 引言一、动态页面爬取的技术背景1.1 动态页面的核心特征1.2 传统爬虫的局限性 二、技术选型与架构设计2.1 核心组件分析2.2 架构设计思路1. 分层处理2. 数据流 三、代码实现与关键技术3.1 Selenium与Scrapy的中间件集成3.2 BeautifulSoup与Scrapy Item的整合3.3 分布式爬取…...

[案例七] NX二次开发标识特征的导入与布尔运算

本来做的是案例六NX二次开发减重块。但是当时在处理导入指定面时发现坐标转化存在很大问题,开了我很长时间,太难受了,决定放一放,昨天做了第六个案例采取了一种补救方法(实在不会的一种解决思路),个人认为NX这么优秀的软件应该有更好的方法,坐标转化真让人头大。刚开始…...

Canvas进阶篇:鼠标交互动画

Canvas进阶篇:鼠标交互动画 前言获取鼠标坐标鼠标事件点击事件监听代码示例效果预览 拖动事件监听代码示例效果预览 结语 前言 在上一篇文章Canvas进阶篇:基本动画详解 中,我们讲述了在Canvas中实现动画的基本步骤和动画的绘制方法。本文将进…...

Axure项目实战:智慧运输平台后台管理端-订单管理2(多级交互)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:订单管理2 主要内容:中继器筛选、表单跟随菜单拖动、审批数据互通等 应用场景:订单管理…...

AG-UI:重构AI代理与前端交互的下一代协议标准

目录 技术演进背景与核心价值协议架构与技术原理深度解析核心功能与标准化事件体系典型应用场景与实战案例开发者生态与集成指南行业影响与未来展望1. 技术演进背景与核心价值 1.1 AI交互的三大痛点 当前AI应用生态面临三大核心挑战: 交互碎片化:LangGraph、CrewAI等框架各…...

鸿蒙版Flutter库torch_light手电筒功能深度适配

鸿蒙版Flutter库torch_light手电筒功能深度适配:跨平台开发者的光明之路 本项目作者:kirk/坚果 适配仓库地址 作者仓库:https://github.com/svprdga/torch_light# 在数字化浪潮的推动下,跨平台开发框架如 Flutter 凭借其高效、…...

【JAVA】中文我该怎么排序?

📘 Java 中文排序教学文档(基于 Collator) 🧠 目录 概述Java 中字符串排序的默认行为为什么需要 Collator使用 Collator 进行中文排序升序 vs 降序排序自定义对象字段排序多字段排序示例总结对比表附录:完整代码示例 …...

WPF MVVM Community Toolkit. Mvvm 社区框架

Community Toolkit. Mvvm 社区框架 微软官方文档 主要内容:CommunityToolkit.Mvvm 框架 概念,安装,使用(重要API:ObservableObject,RelayCommand)源生成器([ObservableProperty]&…...

云原生安全之PaaS:从基础到实践的技术指南

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 云原生安全之PaaS:从基础到实践的技术指南 一、基础概念 PaaS(Platform as a Service)平台 PaaS是一种云计算服务模型,为开发者提供应用程序的开发、部署和运行环境,涵…...

软件设计师考试需背诵知识点

1. 网络技术标准与协议 2. OSI/RM七层模型 3. 对称加密算法 4. 常见的非对称加密算法 5. 排序算法比较 6. 海明码公式 设数据位是n位,校验位是k位,则n与k必须满足以下关系: 7. McCabe度量法 McCabe度量法的核心公式为: V(G)E−…...

智慧社区新防线:华奥系AI技术如何让夏季安防“零隐患”

夏季社区安防隐患频发 随着夏季高温、暴雨、台风等极端天气增多,社区安全风险显著上升。高空建筑外墙材料因暴晒脱落、地下管道锈蚀堵塞导致积水、电动车充电自燃等事件频发,传统“人防物防”模式响应滞后、管理粗放,难以满足精细化防控需求…...

pinia的简单使用

yarn add pinia // 用来存储token,用户信息,等需要多地方使用的信息 src目录下新建store文件夹->新建index.ts import { createPinia } from "pinia";const store createPinia()export default storemain.ts 引用store import { createApp } from v…...

【Linux笔记】——线程池项目与线程安全单例模式

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹: 【Linux笔记】——简单实习一个日志项目 🔖流水不争,争的是滔滔不息 一、线程池设计二…...