【Linux 网络子系统深度拆解】虚拟网络设备内核实现:veth、bridge 与 macvlan

💡 原文中文,约15800字,阅读约需38分钟。
📝

内容提要

本文深入探讨了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。

➡️

继续阅读