tun/tap 设备是 Linux 内核提供的强大功能,是构建虚拟网络(包括 Kubernetes 网络)的基石。
我会分三部分来详细解答:
- tun/tap 设备是什么? (概念与比喻)
- 它是怎么工作的? (原理与数据流)
- 在 Kubernetes 网络中有什么作用? (实践与应用)
一、tun/tap 设备是什么?
一句话概括:tun/tap 是 Linux 内核提供的虚拟网络设备,它们允许用户空间的程序像读写文件一样,来处理网络数据包。
它们是连接用户空间(如你的应用程序、Kubernetes 的网络插件)和内核网络协议栈之间的桥梁。
1. 核心概念
在 Linux 中,一切都是文件。网络设备(如物理网卡 eth0)在 /dev 目录下也有对应的设备文件。tun 和 tap 也是这样的设备文件,但它们是虚拟的,不对应任何物理硬件。
-
tun(Tunnel) 设备:- 工作在 L3 (网络层)。
- 它处理的是 IP 数据包。
- 你可以把它想象成一个虚拟的“点对点” (Point-to-Point) IP 隧道。从内核协议栈发送给
tun设备的 IP 包,会被直接“喂”给用户空间的程序。反之,用户空间程序写入tun设备的 IP 包,会被内核协议栈接收,仿佛是从一个真实网卡收到的。 - 比喻:
tun设备就像一个IP包的“传送门”。内核把 IP 包扔进传送门的一端,用户空间的程序在另一端接住。反之亦然。
-
tap(Terminal Access Point) 设备:- 工作在 L2 (数据链路层)。
- 它处理的是 以太网帧。
- 你可以把它想象成一个虚拟的“以太网卡”。内核会把完整的以太网帧(包含 MAC 头、IP 头等)发送给用户空间的程序。用户空间程序也可以构造完整的以太网帧写入
tap设备。 - 比喻:
tap设备就像一个虚拟的“网口”。内核把一整个数据链路层的帧(一个“信封”)塞给用户空间的程序,程序可以拆开这个信封,查看里面的内容,也可以自己封装一个新的信封塞回去。
2. tun vs. tap 对比
| 特性 | tun 设备 | tap 设备 |
|---|---|---|
| 工作层级 | L3 (网络层) | L2 (数据链路层) |
| 处理单元 | IP 数据包 | 以太网帧 |
| 内核视角 | 看作一个点对点隧道 | 看作一个虚拟以太网卡 |

最低0.47元/天 解锁文章
667

被折叠的 条评论
为什么被折叠?



