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.mzph.cn/web/80927.shtml

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

相关文章

Java中创建线程的几种方式

目录 Java 创建线程的几种方式 一、继承 Thread 类 核心原理 实现步骤 代码示例 简化写法(Lambda 表达式) 优缺点 二、实现 Runnable 接口 核心原理 实现步骤 代码示例 简化写法(Lambda 表达式) 优缺点分析 三、实现…

[Git] 基本操作及用户配置

文章目录 现在所讲,全部是本地Git仓库,不是远程仓库!Git是版本控制工具,而并非只能用远程仓库的版本控制工具! 什么是“仓库”(Repository)?创建一个 Git 本地仓库:git i…

layui 介绍

layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈,从源代码到使用…

笔记:NAT

一、NAT 的基本概念 NAT(Network Address Translation,网络地址转换) 是一种在 IP 网络中重新映射 IP 地址的技术,主要用于解决 IPv4 地址短缺问题,同时提供一定的网络安全防护作用。 功能: 将内部网络&am…

cursor/vscode启动项目connect ETIMEDOUT 127.0.0.1:xx

现象: 上午正常使用cursor/vscode,因为需要写前端安装了nodejs16.20和vue2,结果下午启动前端服务无法访问,浏览器一直转圈。接着测试运行最简单的flask服务,vscode报错connect ETIMEDOUT 127.0.0.1:xx,要么…

EXO分布式部署deepseek r1

EXO 是一个支持分布式 AI 计算的框架,可以用于在多个设备(包括 Mac Studio)上运行大语言模型(LLM)。以下是联调 Mac Studio 512GB 的步骤: 安装 EXO • 从 EXO GitHub 仓库 下载源码或使用 git clone 获取…

python训练营打卡第30天

模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 一、导入官方库 1.标准导入:导入整个库 import mathprint(&quo…

Unity 多时间源Timer定时器实战分享:健壮性、高效性、多线程安全与稳定性能全面解析

简介 Timer 是一个 Unity 环境下高效、灵活的定时任务调度系统,支持以下功能: •支持多种时间源(游戏时间 / 非缩放时间 / 真实时间) •支持一次性延迟执行和重复执行 •提供 ID、回调、目标对象等多种查询和销毁方式 •内建…

深入理解Docker和K8S

深入理解Docker和K8S Docker 是大型架构的必备技能,也是云原生核心。Docker 容器化作为一种轻量级的虚拟化技术,其核心思想:将应用程序及其所有依赖项打包在一起,形成一个可移植的单元。 容器的本质是进程: 容器是在…

docker中使用openresty

1.为什么要使用openresty 我这边是因为要使用1Panel,第一个最大的原因,就是图方便,比较可以一键安装。但以前一直都是直接安装nginx。所以需要一个过度。 2.如何查看openResty使用了nginx哪个版本 /usr/local/openresty/nginx/sbin/nginx …

CSS【详解】弹性布局 flex

适用场景 一维(行或列)布局 基本概念 包裹所有被布局元素的父元素为容器 所有被布局的元素为项目 项目的排列方向(垂直/水平)为主轴 与主轴垂直的方向交交叉轴 容器上启用 flex 布局 将容器的 display 样式设置为 flex 或 i…

全能视频处理工具介绍说明

软件介绍 本文介绍的软件是FFmpeg小白助手,它是一款视频处理工具。 使用便捷性 这款FFmpeg小白助手无需安装,解压出来就能够直接投入使用。 主要功能概述 该工具主要具备格式转换、文件裁剪、文件压缩、文件合并这四大功能。 格式转换能力 软件支持…

Linux中的DNS的安装与配置

DNS简介 DNS(DomainNameSystem)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。 DNS使用的是53端口 通常DNS是以UDP这个较快速的数据传输协议来查询的,但是没有查…

tshark的使用技巧(wireshark的命令行,类似tcpdump):转换格式,设置filter

tshark的使用技巧(wireshark的命令行,类似tcpdump):转换格式,设置filter tshark一般在 C:\Program Files\Wireshark 使用管理员权限 打开cmd tshark -D 列出支持抓包的接口: c:\Program Files\Wiresh…

vscode打开的文件被覆盖/只能打开两个文件(Visual Studio Code)

vscode打开的文件被覆盖/只能打开两个文件(Visual Studio Code) 单击代码文件:是预览模式,只会显示有限的一两个文件,在一个tab里更新显示 双击代码文件:是编辑模式,可以同时显示多个代码文件…

唯创安全优化纸业车间安全环境:门口盲区预警报警器的应用与成效

一、客户现场 客户主要从事于卷烟纸、成型纸、烟草制造业用纸及其他特定用途纸类制品的加工、生产与销售。在其厂区内,叉车频繁作业,车间环境复杂。经实地查看,发现几大安全隐患: 门口拐角隐患:门口拐角处因卷帘门阻…

Debezium快照事件监听器系统设计

Debezium快照事件监听器系统设计 1. 系统概述 1.1 设计目标 为 Debezium 的快照过程提供可扩展的事件监听机制允许外部系统在快照过程中执行自定义逻辑提供线程安全的事件分发机制确保监听器的异常不会影响主快照流程1.2 核心功能 表快照开始事件监听表快照完成事件监听行数据…

Ubuntu 20.04安装及配置docker

在安装docker的过程中主要参考博客:ubuntu20.04 安装docker (详细版) 但是在测试: sudo docker run hello-world 时报错: docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request ca…

第23天-Python Flet 开发指南

环境准备 pip install flet 示例1:基础计数器应用 import flet as ftdef main(page: ft.Page):page.title = "计数器"page.vertical_alignment = ft.MainAxisAlignment.CENTERtxt_number = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, wid…

牛客网NC21989:牛牛学取余

牛客网NC21989:牛牛学取余 📝 题目描述 ⏱️ 限制条件 时间限制:C/C/Rust/Pascal 1秒,其他语言2秒空间限制:C/C/Rust/Pascal 32 M,其他语言64 M输入范围:两个整数,在int范围内 📥…