par*_*lou 20 linux networking virtual tap
有人可以详细解释一下veth对和tap接口的区别以及这些设备如何连接到linux bridge或openvswitch.
我发现这个:"Veth是一个特殊的网络设备,它们是成对创建的,我认为它是一种改变流量方向的方法,也就是说,当出口方向的流量从Linux协议栈发送到veth设备时,它被发送了另一个镜像设备,因此镜像将其视为一个方向流量并将其放回Linux协议栈以供进一步使用.
Tap设备是逻辑网络设备,但与任何其他设备不同:它允许用户空间程序直接将流量注入Linux协议栈,以及它可以从堆栈中检索流量.它在用户空间的2级(或3级的tun设备)打开一个通往Linux协议栈的隧道,堆栈将把用户空间的数据视为方向流量"
但它没有给我全貌.
提前致谢!
Vis*_*esn 17
使用ip tuntap创建的Linux tap接口不能用于将网络命名空间连接到linuxbridges或openvswitch,因此我们需要依赖veth对.
虚拟以太网接口是成对出现的,它们像管子一样连接 - 一个veth接口中出现的任何东西都会出现在另一个对等的veth接口上.因此,您可以使用veth接口通过存在物理接口的"默认"或"全局"命名空间将网络命名空间连接到外部世界.
TAP设备(例如vnet0)是诸如KVM和Xen之类的管理程序如何实现虚拟网络接口卡(通常称为VIF或vNIC).发送到TAP设备的以太网帧由客户操作系统接收.
pr-*_*pal 15
这些虚拟网络工件的目的是类似的.但是存在细微的差异,因此它们在不同的情况下使用:
TAP:用户空间应用程序/ VM可以读取或写入一个以太网帧到tap接口,它将到达主机内核,在那里它将被处理,就像通过物理(例如eth0)端口到达内核的任何其他以太网帧一样.您可以将其添加到软件桥(例如linux-bridge)
VETH:通常在您尝试连接两个想要"掌握"(缺少更好的短语)的实体时,用于转发/接收帧的接口.这些实体可以是容器/桥/ ovs-switch等.假设您要将docker/lxc容器连接到OVS.您可以创建一个veth对并将第一个接口推送到docker/lxc(例如,作为phys接口),并将另一个接口推送到OVS.你不能用TAP做到这一点.
请注意,我们不应该误解我们需要使用VETH而不是在使用OVS时点击.我们总是可以在OVS中创建内部端口,其行为与tap接口完全相同.但这并不总是可行的,例如当您想要连接到无法合成类似tap的界面的实体时.即:
$ ovs-vsctl add-port ovs-switch-name tap0
Run Code Online (Sandbox Code Playgroud)
现在您可以使用tap0
我们使用tap接口.