在 Linux 网络管理中,虚拟网卡(Virtual Network Interface)是一个重要的概念,广泛应用于虚拟化、网络仿真和隧道技术中。本文将重点介绍 TUN(Network TUNnel)和 TAP(Network TAP),并详细解释它们的工作原理、应用场景及其配置方法。
虚拟网卡是软件实现的网络接口,与物理网卡不同,它没有物理硬件,只存在于操作系统的内存中。虚拟网卡可以用来模拟网络环境,进行数据包的捕获、分析和处理。
TUN 是三层(网络层)的虚拟网络设备,主要用于 IP 数据包的处理。TUN 设备会模拟一个网络层接口,接收到的数据包会被传递给用户空间的程序进行处理,处理完的数据包会被发送回内核网络栈。
TAP 是二层(数据链路层)的虚拟网络设备,主要用于以太网帧的处理。TAP 设备可以模拟一个以太网接口,能够接收和发送原始的以太网帧。这使得 TAP 设备非常适合用于桥接不同的网络环境,或者在虚拟机中模拟物理网卡。TAP是数据链路层的虚拟网络设备。
Tun是三层的设备,该设备没有MAC地址,从字符设备上读取IP数据包,写入的也是IP数据包,因此不能进行二层的操作,例如发ARP包和以太网广播
Tab是二层的设备,该设备有MAC地址,处理的是数据链路层的数据帧,从字符设备上读取的是数据链路层的数据帧,写入的也是数据。
在使用上面,两者都是通过字符设备的方式进行读取和写入,Tun是三层网络设备,而Tab是二层网络设备,Tun常用于VPN等技术,由于工作在IP层,无法与物理网卡做bridge,但可以通过三层交换(如 ip_forward)与物理网卡连通,Tab设备工作在第二层,收发的是MAC层数据包,拥有MAC层的功能,可以与物理网卡做bridge,支持MAC层广播
Tun是一个网络层设备,支持点到点的网络通信,常用于tunnel隧道和VPN的构建,tunnel技术是网络设备把网络层数据包封装到另一个协议中以跨过网络传送到另一个网络设备的处理过程,主要用于公网主机和私有网络互联互通。在Linux系统中支持多种隧道技术,其底层实现原理都是基于Tun设备。
TAP接口的典型应用场景是在虚拟化网络中。例如,我们通过KVM创建的多个VM(虚拟机),以LinuxBridge(桥接网络)互通;实际上即是通过像vnet0这样的TAP接口来接入LinuxBridge的。在这种场景下,KVM程序就是向TAP接口读写数据的用户空间程序。当VM0向本机的eth0接口发送数据,KVM会将数据发送到TAP接口vnet0,再通过LinuxBridge将数据转发到vnet1上。然后,KVM将数据发送到VM1的eth0口。