【Linux 网络子系统深度拆解】虚拟网络设备内核实现:veth、bridge 与 macvlan
内容提要
本文深入探讨了Linux虚拟网络设备的实现,包括veth、bridge、macvlan和tun/tap。veth用于跨命名空间通信,bridge作为软件二层交换机,macvlan提供轻量级MAC地址虚拟化,tun/tap则是内核与用户态之间的数据通道。文章详细分析了每种设备的性能、数据路径和适用场景,特别强调了veth和bridge的双重协议栈开销,以及macvlan和ipvlan的高性能特性。
关键要点
-
veth(虚拟以太网)是成对创建的虚拟网卡,主要用于跨命名空间通信。
-
veth 的发送路径不涉及硬件操作,采用零拷贝机制,直接将 skb 从一端搬运到另一端。
-
veth 的一个性能特征是 netfilter 钩子遍历两次,增加了跨命名空间通信的开销。
-
Linux bridge 是内核实现的二层交换机,支持 VLAN 过滤和 STP 状态机。
-
macvlan 提供轻量级的 MAC 地址虚拟化,允许在一个物理网卡上创建多个虚拟设备。
-
tun/tap 是内核与用户态之间的数据通道,支持用户态程序通过 read/write 收发网络包。
-
各类虚拟设备的吞吐量排序为:ipvlan L3 ≥ macvlan bridge > ipvlan L2 > veth + bridge >> tun/tap。
-
veth + bridge 是最通用的方案,适用于 Docker 和 Kubernetes,但性能相对较低。
延伸问答
veth的主要功能是什么?
veth主要用于跨命名空间通信,是容器网络中最常用的机制。
Linux bridge的作用是什么?
Linux bridge作为软件二层交换机,负责数据包的转发和VLAN过滤。
macvlan与bridge的主要区别是什么?
macvlan提供轻量级的MAC地址虚拟化,而bridge则需要进行MAC学习和STP处理,开销更大。
tun/tap设备的主要用途是什么?
tun/tap设备用于内核与用户态之间的数据通道,支持用户态程序收发网络包。
veth的性能特征是什么?
veth的发送路径采用零拷贝机制,但跨命名空间通信时netfilter钩子遍历两次,增加了开销。
不同虚拟设备的吞吐量排序是怎样的?
吞吐量排序为:ipvlan L3 ≥ macvlan bridge > ipvlan L2 > veth + bridge >> tun/tap。