Flannel后端为UDP模式下,分析数据包的发送方式——tun设备(三)

在分析 Kubernetes 环境中 Flannel UDP 模式的数据包转发时,我们提到 flannel.1 是一个 TUN 设备,它在数据包处理中起到了关键作用。


什么是 TUN 设备?

TUN 设备(Tunnel 设备)是 Linux 系统中一种虚拟网络接口,工作在 网络层(Layer 3),用于在用户态和内核态之间传递 IP 数据包。TUN 设备是 虚拟化网络 的核心组件,常用于 VPN、隧道技术(如 Flannel、OpenVPN)和网络虚拟化场景。

关键特性

  • 工作层次:TUN 设备处理 IP 数据包(网络层),而不处理链路层帧(如以太网帧)。相比之下,TAP 设备 工作在链路层(Layer 2),处理以太网帧。
  • 用户态与内核态桥接:TUN 设备充当用户态程序(如 flanneld)和内核网络协议栈之间的桥梁,允许用户态程序读写 IP 数据包。
  • 虚拟接口:TUN 设备是虚拟的,没有物理硬件支持,通过软件模拟网络接口的功能。
  • 用途:常用于网络隧道、虚拟化网络、VPN 和容器网络(如 Kubernetes 的 Flannel)。

TUN 设备的工作原理

TUN 设备可以看作一个“管道”,一端连接内核的网络协议栈,另一端连接用户态程序(如 flanneld)。其工作流程如下:

  1. 接收数据包

    • 当内核根据路由表决定将数据包发送到 TUN 设备(如 flannel.1)时,数据包从内核态传递到用户态。
    • 用户态程序(如 flanneld)通过文件描述符读取 TUN 设备上的数据包(通常是 IP 数据包)。
  2. 处理数据包

    • 用户态程序可以对数据包进行处理,例如封装(添加 UDP 头部)、加密或转发。
    • 在 Flannel UDP 模式中,flanneld 将原始 IP 数据包(例如目标 IP 为 10.244.2.5)封装为 UDP 数据包。
  3. 发送数据包

    • 用户态程序处理后的数据包(例如 UDP 封装后的数据包)通过 TUN 设备写回内核,或直接通过其他接口(如 enp0s3)发送。
    • 在接收方向,外部数据包到达 TUN 设备后,同样由用户态程序解封装,然后写回内核,交给协议栈处理。

TUN 设备在 Flannel UDP 模式中的作用

在 Kubernetes 环境中,Flannel 使用 UDP 模式时,flannel.1 是一个 TUN 设备,用于跨节点 Pod 通信。结合你的路由表和问题背景(ping 10.244.2.5),我们分析 TUN 设备(flannel.1)的具体作用:

路由表相关条目

10.244.2.0      10.244.2.0      255.255.255.0   UG    0      0        0 flannel.1
  • 数据包(目标 IP 10.244.2.5)匹配此路由,通过 flannel.1 发出,网关为 10.244.2.0

TUN 设备的工作流程

  1. 数据包到达 flannel.1

    • 当源 Pod(例如 10.244.0.x)发送 ICMP 数据包(ping 10.244.2.5),数据包通过 cni0 进入主机网络命名空间。
    • 主机路由表将数据包路由到 flannel.1,因为目标 IP 10.244.2.5 匹配 10.244.2.0/24
  2. flanneld 读取数据包

    • flannel.1 是一个 TUN 设备,数据包从内核态传递到用户态的 flanneld 进程。
    • 数据包是原始 IP 数据包(源 IP 10.244.0.x,目标 IP 10.244.2.5,大小为 84 字节:20 字节 IP 头部 + 64 字节 ICMP)。
  3. UDP 封装

    • flanneld 查询 etcd 或 Kubernetes API,确定 10.244.2.0/24 对应的目标节点物理 IP(例如 192.168.1.x)。
    • flanneld 将原始数据包封装为 UDP 数据包:
      • 外部 IP 头部:20 字节(源 IP 为当前节点物理 IP,目标 IP 为目标节点物理 IP)。
      • UDP 头部:8 字节(默认端口 8472)。
      • 原始数据包:84 字节。
      • 总大小:20 + 8 + 84 = 112 字节
    • 封装后的 UDP 数据包通过主机的物理接口(如 enp0s3)发送。
  4. 接收方向

    • 目标节点接收到 UDP 数据包(通过其物理接口),flanneld 通过目标节点的 TUN 设备(类似 flannel.1)读取数据。
    • flanneld 解封装,提取原始 IP 数据包,写回内核,通过 cni0 转发到目标 Pod(10.244.2.5)。

TUN 设备的角色

  • 桥接用户态和内核态flannel.1 允许 flanneld 进程处理跨节点通信,封装和解封装数据包。
  • 透明性:Pod 认为自己直接与目标 IP 通信,TUN 设备和 flanneld 隐藏了 UDP 封装的复杂性。
  • 灵活性:TUN 设备支持用户态程序(如 flanneld)自定义数据包处理,适合 Flannel UDP 模式的轻量实现。

TUN 设备与 UDP 模式的关联

在 Flannel UDP 模式中,TUN 设备(flannel.1)是关键组件:

  • 数据包封装:TUN 设备允许 flanneld 在用户态封装 IP 数据包为 UDP 数据包,适合不支持内核态 VXLAN 的环境。
  • 性能特点:UDP 模式通过用户态处理,性能低于 VXLAN(内核态),但更简单,适合小型集群或特殊环境。
  • 路由表依赖:路由表中的 10.244.2.0/24 条目将数据包导向 flannel.1,确保跨节点通信由 flanneld 处理。

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

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

相关文章

2025深圳国际无人机展深度解析:看点、厂商与创新亮点

2025深圳国际无人机展深度解析:看点、厂商与创新亮点 1.背景2.核心看点:技术突破与场景创新2.1 eVTOL(飞行汽车)的规模化展示2.2 智能无人机与无人值守平台2.3 新材料与核心零部件革新2.4 动态演示与赛事活动 3.头部无人机厂商4.核…

【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问

Docker安装Jitsi Meet指南-使用内网IP访问 下载官方代码配置环境变量复制示例环境文件并修改配置:编辑 .env 文件: 修改 docker-compose.yml 文件生成自签名证书启动服务最终验证 腾讯会议的平替。我们是每天开早晚会的,都是使用腾讯会议。腾…

使用Spring Boot和Spring Security结合JWT实现安全的RESTful API

使用Spring Boot和Spring Security结合JWT实现安全的RESTful API 引言 在现代Web应用中,安全性是至关重要的。Spring Boot和Spring Security提供了强大的工具来保护我们的应用程序,而JWT(JSON Web Token)则是一种轻量级的认证和…

对神经正切核的理解和推导(1)

声明: 本文是对Neural Tangent Kernel (NTK)基础推导 - Gearlesskai - 博客园文章内容的理解与推导,里面很多东西对我这种新手来说不太好理解,所以我力求通过这种方式理解文章的大部分内容。希望我的理解可以帮助你更…

基于 STC89C52 的养殖场智能温控系统设计与实现

摘要 本文提出一种基于 STC89C52 单片机的养殖场环境温度智能控制系统,通过集成高精度温度传感器、智能执行机构及人机交互模块,实现对养殖环境的实时监测与自动调控。系统具备温度阈值设定、超限报警及多模式控制功能,可有效提升养殖环境稳定性,降低能耗与人工成本。 一…

微信小程序调试

一、寻找答案 1. 创建小程序 https://zhuanlan.zhihu.com/p/1906013675883561860 2. 若有后端接口,需要调试 https://blog.csdn.net/animatecat/article/details/126949749 3. 比较细教程, 搭建修改配置 https://zhuanlan.zhihu.com/p/1893281527112136235 4. 查找…

使用DeepSeek实现数据处理

一、核心能力全景图 Ctrl+/ 唤醒智能助手,支持以下数据处理场景: 🧹 数据清洗与预处理📈 统计分析与可视化🤖 机器学习建模🚀 大数据性能优化📊 自动化报告生成⚡ 实时流数据处理二、高频场景实战(附魔法口令) 场景1:数据清洗自动化(Python示例) 口令: 处…

符合Python风格的对象(使用 __slots__ 类属性节省空间)

使用__slots__ 类属性节省空间 默认情况下,Python 在各个实例中名为__dict__ 的字典里存储实例属 性。如 3.9.3 节所述,为了使用底层的散列表提升访问速度,字典会消 耗大量内存。如果要处理数百万个属性不多的实例,通过__slots__…

民宿管理系统5

管理员管理&#xff1a; 新增管理员信息&#xff1a; 前端效果&#xff1a; 前端代码&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-form-i…

​腾讯地图轨迹云:重构位置管理的数字神经中枢

——从轨迹追踪到智能决策&#xff0c;开启产业互联网新篇章 在数字经济与实体经济深度融合的今天&#xff0c;位置服务已成为企业数字化转型的核心基础设施。无论是物流运输中的车辆调度、共享经济中的设备管理&#xff0c;还是智慧城市中的交通优化&#xff0c;精准的轨迹数…

rce命令执行原理及靶场实战(详细)

2. 原理 在根源上应用系统从设计上要给用户提供一个指定的远程命令操作的接口。漏洞主要出现在常见的路由器、防火墙、入侵检测等设备的web管理界面上。在管理界面提供了一个ping服务。提交后&#xff0c;系统对该IP进行ping&#xff0c;并且返回结果。如果后台服务器并没有对…

GeoTools 将 Shp 导入PostGIS 空间数据库

前言 ❝ GeoTools 在空间数据转换处理方面具有强大的能力&#xff0c;能够高效、简洁的操纵 Shp 数据。特别是与空间数据库PostGIS 相结合&#xff0c;更能展示出其空间数据处理的优势&#xff0c;借助 GeoTools&#xff0c;我们可以实现 Shp 数据高效入库。 本文上接系列文章 …

基于SpringBoot+Vue的家政服务系统源码适配H5小程序APP

市场前景 随着社会经济的发展和人口老龄化的加剧&#xff0c;家政服务需求不断增长。我国65岁及以上人口增长较快&#xff0c;2022年我国65岁及以上老年人数量达2.1亿人&#xff0c;占比较2016年增长4.1个百分点&#xff0c;达14.9%。我国65岁及以上人口数量庞大&#xff0c;老…

《企业级日志该怎么打?Java日志规范、分层设计与埋点实践》

大家好呀&#xff01;&#x1f44b; 今天我们要聊一个Java开发中超级重要但又经常被忽视的话题——日志系统&#xff01;&#x1f4dd; 不管你是刚入门的小白&#xff0c;还是工作多年的老司机&#xff0c;日志都是我们每天都要打交道的"好朋友"。那么&#xff0c;如…

1Panel vs 宝塔面板:现代化运维工具的全方位对比

1Panel vs 宝塔面板对比分析 1Panel 和 宝塔面板&#xff08;BT-Panel&#xff09;都是服务器管理工具&#xff0c;旨在简化 Linux 服务器的运维工作&#xff0c;但它们在设计理念、功能侧重点和技术实现上有明显差异。以下从多个维度对两者进行对比分析&#xff1a; 1. 定位与…

怎么开发一个网络协议模块(C语言框架)之(四) 信号量初始化

// 原始代码 /* gVrrpInstance.sem = OsixCreateBSem(OSIX_SEM_Q_PRIORITY, OSIX_SEM_FULL); */ gVrrpInstance.sem = OsixCreateMSem(OSIX_SEM_Q_FIFO | OSIX_SEM_DELETE_SAFE); if (gVrrpInstance.sem == NULL) {printf("[VRRP]:vrrp init error, failed to create vrrp…

电脑C盘清理技巧:释放空间,提升性能

文章目录 一、使用系统自带的磁盘清理工具&#xff08;一&#xff09;打开磁盘清理工具&#xff08;二&#xff09;清理临时文件&#xff08;三&#xff09;清理系统文件 二、使用第三方清理工具&#xff08;一&#xff09;CCleaner&#xff08;极力推荐&#xff09;&#xff0…

ARM笔记-ARM处理器及系统结构

第二章 ARM处理器及系统结构 2.1 ARM处理器简介 采用RISC架构的ARM微处理器的特点&#xff1a; 体积小、功耗低、低成本、高性能&#xff1b;支持 Thumb&#xff08;16位&#xff09;/ARM&#xff08;32位&#xff09;双指令集&#xff0c;能很好地兼容 8位/16位 器件&#x…

关于如何在Springboot项目中通过excel批量导入数据

接口文档 2.5 批量导入学生账号 2.5.1 基本信息 请求路径:/admin/students/batch-import 请求方式:POST 接口描述:通过上传Excel文件批量导入学生账号信息。 2.5.2 请求参数 参数格式:multipart/form-data 参数说明: 参数名称参数类型是否必须备注filefile是包含学…

【TypeScript】知识点梳理(四)

#没事去翻翻官网文档&#xff0c;其实有很多用法是我们还不知道的&#xff0c;官方资料总是最权威的&#xff0c;也推荐大家无聊看看各个官网hhh&#xff0c;不一定是记忆&#xff0c;但在某种场景下我们或许能想到还有多一种解决方式# noImplicitAny 当我们没有表明类型时&…