2014-09-03 122 views
14

有人可以详细解释veth pair和tap接口以及这些设备如何连接到linux网桥或openvswitch的差异。我发现这是一个特殊的网络设备,它是成对创建的,我认为它是一种改变流量方向的方法,也就是说,当外出方向流量被发送到从Linux协议传送设备时堆栈,它被发送到另一个镜像veth设备,所以镜像将其视为一个方向流量并将其放回到Linux协议栈以供进一步使用。Linux中的虚拟网络设备

点击设备是逻辑网络设备,但与任何另外一个:它允许用户空间程序直接将流量注入到Linux协议栈中,并且它可以从堆栈中检索流量,并在用户空间打开一个到2级的Linux协议栈(或3级的tun设备)的隧道,该堆栈将考虑来自用户的数据如方向交通的步伐“

但它没有给我整个图片。

在此先感谢!

+1

superuser.com上的问题更好?参见linux虚拟网络简介。 。 。 http://superuser.com/questions/428694/creating-a-new-network-namespace-on-linux/817118#817118 – gaoithe 2014-09-26 11:22:34

回答

7

这个非常漂亮的博客条目看起来像你所需要的: Linux Switching – Interconnecting Namespaces 打开vSwitch。 。 。点击界面并查看配对图所示的配对示例细节。

+3

虽然这可能在理论上回答这个问题,[这将是更可取的](//meta.stackoverflow .com/q/8259)在这里包括答案的基本部分,并提供供参考的链接。 – slm 2015-04-29 20:03:46

9

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

虚拟以太网接口是成对的,并且它们像管一样连接 - 无论哪个来自一个veth接口都会出现在另一个对等veth接口中。 因此,您可以使用veth接口将网络名称空间通过存在物理接口的“默认”或“全局”名称空间连接到外部世界。

甲TAP设备,诸如vnet0是管理程序如KVM和Xen如何实现一个虚拟网络接口卡(通常称为VIF或vNIC的)。 发送到TAP设备的以太网帧由来宾操作系统接收。

11

这些虚拟网络工件的用途是相似的。但也有细微的差别,因此他们在不同情况下使用:

  1. TAP:用户空间应用程序/虚拟机可以读取或写入以太网帧水龙头接口,它会到达主机内核,在那里它将像通过物理(例如eth0)端口到达内核的任何其他以太网帧一样被处理。你可以把它潜在地添加到软件桥(如Linux的桥)

  2. VETH:通常用在当你试图连接哪个会想“弄个”两个实体(因为缺乏更好的短语)用于转发/接收帧的接口。这些实体可能是容器/网桥/ ovs-switch等。假设您想将docker/lxc容器连接到OVS。您可以创建一个veth对,并将第一个接口推送到docker/lxc(例如,作为phys接口),并将另一个接口推送到OVS。你不能用TAP做到这一点。

请注意,我们不应该误解我们在使用OVS时需要使用VETH而不是点击。我们总是可以在OVS中创建与抽头界面完全相同的内部端口。但是,这并非总是可行,例如,当您想连接到无法合成轻触式界面的实体时。 I.e .:

$ ovs-vsctl add-port ovs-switch-name tap0 

现在你可以使用tap0就像我们使用的tap接口。