Flannel后端为UDP模式下,分析数据包的发送方式(二)
发往 10.244.2.5
的数据包最终会经过物理网卡 enp0s3,尽管路由表直接指定通过 flannel.1
发出。以下以 Markdown 格式详细解释为什么会经过 enp0s3
,结合 Kubernetes 和 Flannel UDP 模式的背景。
问题分析
在 Kubernetes 环境中,使用 Flannel 的 UDP 模式,数据包的目标 IP 10.244.2.5
根据路由表匹配到以下路由:
Destination Gateway Genmask Flags Metric Ref Use Iface
10.244.2.0 10.244.2.0 255.255.255.0 UG 0 0 0 flannel.1
这表明数据包通过 flannel.1 网卡发出,网关为 10.244.2.0
。但问题是,数据包是否最终会经过物理网卡 enp0s3?答案是肯定的,我们从 Flannel UDP 模式的工作机制来详细分析。
Flannel UDP 模式的数据包转发过程
在 Flannel 的 UDP 模式下,flannel.1
是一个 TUN 设备,工作在用户态,负责将数据包交给 Flannel 的用户态进程(flanneld
)进行封装。以下是数据包从发出到最终传输的步骤:
-
路由匹配:
- 目标 IP
10.244.2.5
匹配路由10.244.2.0/24
,指定通过flannel.1
接口,网关为10.244.2.0
。 - 数据包被发送到
flannel.1
,这是一个虚拟 TUN 设备,数据包会从内核态传递到用户态的flanneld
进程。
- 目标 IP
-
Flanneld 的 UDP 封装:
flanneld
进程接收到数据包后,查询 etcd 或 Kubernetes API 中的子网映射,确定10.244.2.0/24
对应的目标节点。例如,目标节点的物理 IP 可能是192.168.1.x
(假设在192.168.1.0/24
网络中)。flanneld
将原始数据包(目标 IP10.244.2.5
)封装为 UDP 数据包,默认使用端口 8472。- 封装后的 UDP 数据包的目标 IP 是目标节点的物理 IP(例如
192.168.1.x
),源 IP 是当前节点的物理 IP(例如192.168.1.y
)。
-
通过物理网卡发送:
- 封装后的 UDP 数据包需要通过节点的物理网络接口发送到目标节点。
- 根据路由表,物理 IP
192.168.1.x
属于192.168.1.0/24
,匹配以下路由:Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
- 因此,UDP 数据包通过 enp0s3 网卡发送到目标节点的物理 IP。
-
目标节点处理:
- 目标节点上的
flanneld
进程监听 UDP 端口 8472,接收到 UDP 数据包。 flanneld
解封装数据包,提取原始数据包(目标 IP10.244.2.5
)。- 数据包通过目标节点的
cni0
接口转发到本地 Pod 子网(10.244.2.0/24
),最终到达目标 Pod。
- 目标节点上的
为什么会经过 enp0s3?
- flannel.1 的角色:
flannel.1
是 TUN 设备,负责将数据包从内核态传递到用户态的flanneld
进程。它不直接与物理网络交互,而是依赖flanneld
进行 UDP 封装。 - UDP 封装后的传输:封装后的 UDP 数据包需要通过物理网络发送到目标节点。当前节点的物理网络接口是
enp0s3
,它负责处理192.168.1.0/24
网络的通信(包括目标节点的物理 IP)。 - 路由表的作用:路由表中的
192.168.1.0/24
条目明确指定通过enp0s3
发送物理网络的流量。因此,flanneld
生成的 UDP 数据包会通过enp0s3
发出。
数据包路径总结
- 数据包(目标 IP
10.244.2.5
)根据路由表通过flannel.1
发出。 flannel.1
将数据包交给flanneld
,flanneld
封装为 UDP 数据包(目标 IP 为目标节点的物理 IP,例如192.168.1.x
)。- UDP 数据包根据路由表(
192.168.1.0/24
)通过 enp0s3 发出。 - 目标节点接收 UDP 数据包,解封装后转发到目标 Pod。
最终答案
是的,发往 10.244.2.5
的数据包最终会经过物理网卡 enp0s3,因为 Flannel UDP 模式将数据包封装为 UDP 格式后,通过物理网络接口 enp0s3
发送到目标节点。
- UDP 模式下,数据包在 `enp0s3` 上是 UDP 封装的,源和目标 IP 分别是发送和接收节点的物理 IP,端口为 8472。
- 验证方法:
- 使用更广的过滤条件抓包,例如:
这会抓取 Flannel UDP 模式的所有流量(默认端口 8472)。tcpdump -i enp0s3 udp port 8472
- 检查是否有 UDP 数据包,源和目标 IP 是否为节点间的物理 IP(例如
192.168.1.y -> 192.168.1.x
)。 - 如果需要确认数据包内容,可以使用
-X
查看数据包的原始内容,检查是否包含内部的 Pod IP10.244.2.5
。
- 使用更广的过滤条件抓包,例如:
相关文章:
Flannel后端为UDP模式下,分析数据包的发送方式(二)
发往 10.244.2.5 的数据包最终会经过物理网卡 enp0s3,尽管路由表直接指定通过 flannel.1 发出。以下以 Markdown 格式详细解释为什么会经过 enp0s3,结合 Kubernetes 和 Flannel UDP 模式的背景。 问题分析 在 Kubernetes 环境中,使用 Flanne…...

从 0 到 1:Spring Boot 与 Spring AI 深度实战(基于深度求索 DeepSeek)
在人工智能技术与企业级开发深度融合的今天,传统软件开发模式与 AI 工程化开发的差异日益显著。作为 Spring 生态体系中专注于 AI 工程化的核心框架,Spring AI通过标准化集成方案大幅降低 AI 应用开发门槛。本文将以国产大模型代表 ** 深度求索ÿ…...

upload-labs通关笔记-第20关 文件上传之杠点绕过
系列目录 upload-labs通关笔记-第1关 文件上传之前端绕过(3种渗透方法) upload-labs通关笔记-第2关 文件上传之MIME绕过-CSDN博客 upload-labs通关笔记-第3关 文件上传之黑名单绕过-CSDN博客 upload-labs通关笔记-第4关 文件上传之.htacess绕过-CSDN…...

Vscode +Keil Assistant编译报错处理
Vscode Keil Assistant编译报错处理 1.报错图片内容 所在位置 行:1 字符: 25 chcp.com 65001 -Command & c:\Users\92170.vscode\extensions\cl.keil-a … ~ 不允许使用与号(&)。& 运算符是为将来使用而保留的;请用双引号将与号引起来(“&”)&…...
记录python在excel中添加一列新的列
思路是,先将需要添加为新的列存储到一个暂时的列表中,然后用到以下函数来存储 data_.loc[:, "新列的名字"] save_list_ 上面的save_list_就是暂时存储了信息的列表了。 以下是我的代码,供以后快速回忆。 schools_data {"98…...
WebRTC:实时通信的未来之路
WebRTC:实时通信的未来之路 目录 WebRTC:实时通信的未来之路一、背景介绍二、使用方式三、前途展望 一、背景介绍 随着互联网的飞速发展,实时音视频通信需求日益增长。传统的音视频通信多依赖于专有协议和插件(如Flash、ActiveX等…...
探索产品经理的MVP:从概念到实践
在产品开发的世界里,MVP(Minimum Viable Product,最小可行产品)是一个至关重要的概念。它不仅帮助团队快速验证假设,还能降低失败风险,为后续的产品迭代奠定坚实的基础。本文将深入探讨MVP的概念、重要性及…...
用python实现中国象棋
一.象棋规则 象棋是二人对弈的棋类游戏,棋盘由 9 条竖线和 10 条横线交叉构成,中间 “河界” 分楚汉,两端 “九宫” 各 9 个交叉点。棋子分红黑,各 16 枚,含 7 兵种。 1.棋子走法 1.1 红方棋子 帅:1 个…...
GO 语言基础3 struct 结构体
更多个人笔记见: github个人笔记仓库 gitee 个人笔记仓库 个人学习,学习过程中还会不断补充~ (后续会更新在github上) 文章目录 strcut结构体基本例子传入数值和指针的区别初始化方法汇总结构体特点结构体方法定义基于…...

VSCode C/C++ 开发环境完整配置及一些扩展用途(自用)update:2025/3/31
这里主要记录了一些与配置相关的内容。由于网上教程众多,部分解决方法并不能完全契合我遇到的问题,因此我选择以自己偏好的方式,对 VSCode 进行完整的配置,并记录在使用过程中遇到的问题及解决方案。后续内容也会持续更新和完善。…...
iOS 上线前的性能与稳定性检查流程实录:开发者的“最后一公里”(含 KeyMob 应用经验)
一个 iOS 项目写完功能、跑完测试,离上线只差一步了——但很多问题恰恰就在“这最后一公里”暴露:某些设备发热严重,部分流程偶发卡顿,某些崩溃只有长时间运行后才出现。 今天我分享的是我在多个 iOS 项目上线前实际执行过的性能…...

Docker系列(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南
引言 docker 的快速部署与高效运行依赖于两大核心环节:基础环境搭建与镜像生态优化。本期博文从零开始,系统讲解 docker 服务的管理配置与镜像加速实践。第一部分聚焦 docker 服务的安装、权限控制与自启动设置,确保环境稳定可用;…...

a16z:AI带来了全新的9种开发软件的模式
非常有启发的9条新兴模式,推荐给已经上手 vibeCoding 的读者们。 开发者正在将 AI 从简单的工具转变为构建软件的新基础。许多核心概念,如版本控制、模板、文档,甚至用户的定义,都在被重新思考。代理(Agent)…...
20.迭代器模式:思考与解读
原文地址:迭代器模式:思考与解读 更多内容请关注:深入思考与解读设计模式 引言 在软件开发中,尤其是在处理集合数据时,你是否曾经遇到过这样的问题:你需要遍历一个集合(如数组、列表、集合等)…...
Java 学习笔记:注解、泛型与 IO 流
目录 课程目标 Java 注解(Annotation) 1. 概念与作用 2. 自定义注解示例 3. JDK 内置注解 4.注释 Java 泛型(Generics) 1. 基本语法 2. 通配符与上下限 3. 常见应用场景 Java IO 流 1. 流的分类1.File文件类 2. 字节流与字符流 3. 经典示例:文件拷贝 总结与…...

在 Excel 使用macro————仙盟创梦IDE
Dim filePath As StringDim fileContent As StringDim lines() As StringDim dataArray() As StringDim lineCount As LongDim maxCols As LongDim i As Long, j As Long 文件路径filePath "" 检查文件是否存在If Dir(filePath) "" ThenMsgBox "文件…...
【MySQL】08.视图
视图就是一个由查询到的内容定义的虚拟表。它和真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 1. 基本使用 mysql> select * from user; -------------------- | id | age | name …...

鸿蒙devEco studio如何创建模拟器
官网原文链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-create 操作步骤 点击菜单栏的Tools > Device Manager,点击右下角的Edit设置模拟器实例的存储路径Local Emulator Location,Mac默认存储在~/…...

鸿蒙路由参数传递
页面test.ets 代码如下: import router from ohos.router Entry Component struct Test {State message: string Hello WorldState username: string huState password: string 1build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWe…...

springboot 控制层调用业务逻辑层,注入报错,无法自动装配 解决办法
报错: 解决:愿意是业务逻辑层,即service层的具体实现类没有加注解Service导致的,加上解决了!!...

MySQL:11_事务
事务 一.CURD不加控制,会有什么问题? 二.什么是事务? 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制…...

Linux中的文件系统和软硬连接
磁盘的访问方式 CHS(柱面,磁头,扇区) 法(磁盘硬件查找): 确定柱面(C) 磁头臂移动到对应的柱面位置。例如,柱面号为 5,则磁头移动到第 5 个磁道组…...
并发容器(Collections)
一、并发安全问题根源 1. List(如ArrayList) 问题表现:多线程同时调用add、remove等方法时,可能抛出ConcurrentModificationException或导致数据不一致。根本原因: 非原子性操作:如add操作的流程…...
SPA模式下的es6如何加快宿主页的显示速度
SPA的模式下,宿主页是首先加载的页面,会需要一些主要的组件,如element-plus,easyui,devextreme,ant-design等,这些组件及其依赖组件,文件多,代码量大,可能导致…...
windows powershell 判断 进程号是否存在
在 Windows PowerShell 中,你可以使用多种方法来检查一个特定的进程号(PID)是否存在。以下是几种常用的方法: 方法1:使用 Get-Process 命令 你可以尝试获取具有特定 PID 的进程。如果该进程存在,Get-Proce…...
c# 解码 encodeURIComponent
在C#中,如果你需要解码由encodeURIComponent方法编码的URL,你可以使用System.Web命名空间中的HttpUtility.UrlDecode方法。这个方法可以处理由JavaScript的encodeURIComponent方法编码的字符串。 首先,确保你的项目中引用了System.Web命名空…...

Spring AI:Java开发者的AI开发新利器
目录 一、引言 二、Spring AI 是什么 三、核心功能与特性 3.1 统一的 API 抽象 3.2 丰富的模型支持 3.3 低代码集成 3.4 结构化数据输出 3.5 流式数据响应 四、应用场景 4.1 智能客服系统 4.2 图像识别应用 4.3 数据分析与预测 五、快速上手 5.1 环境搭建 5.2 创…...
Android System UI 深度解析:从架构演进到车载 / TV 场景的全维度定制
Android System UI 是 Android 操作系统的核心组件,负责管理设备的系统级用户界面和交互逻辑。它通过状态栏、导航栏、通知面板、快速设置等功能,为用户提供与系统功能直接交互的入口,并与硬件、应用程序深度协同,构建完整的用户体验。以下是其核心架构、功能演进及定制化能…...

Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战
上篇文章简单介绍了SpringCloud系列熔断器:Sentinel的搭建及基本用法,今天继续讲解下SpringCloud的微服务链路追踪:Zipkin的使用!在分享之前继续回顾下本次SpringCloud的专题要讲的内容: 前置知识说明 在开始本教程前…...
React从基础入门到高级实战:React 基础入门 - 列表渲染与条件渲染
列表渲染与条件渲染 在 React 开发中,列表渲染 和 条件渲染 是处理动态数据和用户交互的基础技术。通过列表渲染,你可以根据数据动态生成 UI 元素;而条件渲染则让你根据特定条件展示不同的内容。这两个技能在实际项目中非常常见,…...