2014-09-03 138 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接口。