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)进行封装。以下是数据包从发出到最终传输的步骤:

  1. 路由匹配

    • 目标 IP 10.244.2.5 匹配路由 10.244.2.0/24,指定通过 flannel.1 接口,网关为 10.244.2.0
    • 数据包被发送到 flannel.1,这是一个虚拟 TUN 设备,数据包会从内核态传递到用户态的 flanneld 进程。
  2. Flanneld 的 UDP 封装

    • flanneld 进程接收到数据包后,查询 etcd 或 Kubernetes API 中的子网映射,确定 10.244.2.0/24 对应的目标节点。例如,目标节点的物理 IP 可能是 192.168.1.x(假设在 192.168.1.0/24 网络中)。
    • flanneld 将原始数据包(目标 IP 10.244.2.5)封装为 UDP 数据包,默认使用端口 8472。
    • 封装后的 UDP 数据包的目标 IP 是目标节点的物理 IP(例如 192.168.1.x),源 IP 是当前节点的物理 IP(例如 192.168.1.y)。
  3. 通过物理网卡发送

    • 封装后的 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。

  4. 目标节点处理

    • 目标节点上的 flanneld 进程监听 UDP 端口 8472,接收到 UDP 数据包。
    • flanneld 解封装数据包,提取原始数据包(目标 IP 10.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 发出。

数据包路径总结

  1. 数据包(目标 IP 10.244.2.5)根据路由表通过 flannel.1 发出。
  2. flannel.1 将数据包交给 flanneldflanneld 封装为 UDP 数据包(目标 IP 为目标节点的物理 IP,例如 192.168.1.x)。
  3. UDP 数据包根据路由表(192.168.1.0/24)通过 enp0s3 发出。
  4. 目标节点接收 UDP 数据包,解封装后转发到目标 Pod。

最终答案

是的,发往 10.244.2.5 的数据包最终会经过物理网卡 enp0s3 ,因为 Flannel UDP 模式将数据包封装为 UDP 格式后,通过物理网络接口 enp0s3 发送到目标节点。

复制代码
 - UDP 模式下,数据包在 `enp0s3` 上是 UDP 封装的,源和目标 IP 分别是发送和接收节点的物理 IP,端口为 8472。
  • 验证方法
    • 使用更广的过滤条件抓包,例如:

      bash 复制代码
      tcpdump -i enp0s3 udp port 8472

      这会抓取 Flannel UDP 模式的所有流量(默认端口 8472)。

    • 检查是否有 UDP 数据包,源和目标 IP 是否为节点间的物理 IP(例如 192.168.1.y -> 192.168.1.x)。

    • 如果需要确认数据包内容,可以使用 -X 查看数据包的原始内容,检查是否包含内部的 Pod IP 10.244.2.5


相关推荐
羊锦磊5 小时前
[ java 网络 ] TPC与UDP协议
java·网络·网络协议
cpsvps9 小时前
文件系统完整性校验工具在美服安全审计中的关键作用与实施步骤
服务器·网络·架构
♤SF♤9 小时前
SSL 剥离漏洞
网络·安全·https
猫头虎9 小时前
新手小白如何快速检测IP 的好坏?
网络·人工智能·网络协议·tcp/ip·开源·github·php
简鹿办公9 小时前
如何查询并访问路由器的默认网关(IP地址)?
网络协议·智能路由器·怎样查看路由器ip
hhj123k9 小时前
渗透作业3
网络·学习
SY.ZHOU10 小时前
rtp、rtcp、rtsp、rtmp协议详解
网络协议·音视频
SKYDROID云卓小助手10 小时前
无人设备遥控器之多设备协同技术篇
网络·人工智能·嵌入式硬件·算法·信号处理
Web极客码11 小时前
如何为你的WordPress网站选择合适的安全插件
网络·安全
寒士obj11 小时前
HTTPS的工作原理
网络协议·http·https