linux - Linux 中的虚拟网络设备

标签 linux networking virtual tap

谁能详细解释一下 veth 对和 tap 接口(interface)的区别,以及这些设备如何连接到 linux bridge 或 openvswitch。

我发现了这个: “Veth 是成对创建的特殊网络设备,我认为它是一种改变流量方向的方法,也就是说,当出方向的流量从 Linux 协议(protocol)栈发送到 veth 设备时,它被发送到另一个它的镜像veth 设备,因此镜像将其视为方向流量并将其放回 Linux 协议(protocol)栈以供进一步使用。

Tap 设备是逻辑网络设备,但与其他设备不同的是:它允许用户空间程序直接将流量注入(inject) Linux 协议(protocol)栈,并且可以从堆栈中检索流量。它在用户空间的第 2 层(或第 3 层的 tun 设备)打开一条通往 Linux 协议(protocol)栈的隧道,该协议(protocol)栈会将来自用户空间的数据视为方向流量"

但它并没有给我全貌。

提前致谢!

最佳答案

使用 ip tuntap 创建的 Linux tap 接口(interface)不能用于附加网络命名空间到 linuxbridges 或 openvswitch,因此我们需要依赖 veth 对。

虚拟以太网接口(interface)成对出现,它们像一根 pipe 一样连接在一起——任何进入一个 veth 接口(interface)的东西都会从另一个对等的 veth 接口(interface)出来。 因此,您可以使用 veth 接口(interface)通过“默认”或“全局”命名空间将网络命名空间连接到外部世界 接口(interface)存在。

TAP 设备(例如 vnet0)是 KVM 和 Xen 等管理程序实现虚拟网络接口(interface)卡(通常称为 VIF 或 vNIC)的方式。 发送到 TAP 设备的以太网帧由 guest 操作系统接收。

关于linux - Linux 中的虚拟网络设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25641630/

相关文章:

c++ - 提升 asio 服务器客户端。连接局域网中的两台计算机

c# - 获取虚拟浏览器中的页面宽度和高度

linux - egrep 剩余的 alpha 行

linux - 在远程服务器上复制文件和目录,同时排除其中的一些

android - 唤醒锁似乎不起作用

c++ - C++ 中 `virtual` 关键字对对象而不是指针的行为

c++ - 在派生类 C++ 上访问方法的最佳方式

linux - 如何从 Linux 设备驱动程序访问 USB 总线号?

linux - CMake - 如何避免链接器命令行中的 CMAKE_CXX_FLAGS

networking - 通过真实IP与VMware虚拟机对话