網絡虛擬化技術(二): TUN/TAP MACVLAN MACVTAP
TUN 設備
TUN 設備是一種虛擬網絡設備,通過此設備,程序可以方便得模擬網絡行為。先來看看物理設備是如何工作的:
所有物理網卡收到的包會交給內核的 Network Stack 處理,然後通過 Socket API 通知給用戶程序。下面看看 TUN 的工作方式:
普通的網卡通過網線收發數據包,但是 TUN 設備通過一個文件收發數據包。所有對這個文件的寫操作會通過 TUN 設備轉換成一個數據包送給內核;當內核發送一個包給 TUN 設備時,通過讀這個文件可以拿到包的內容。
如果我們使用 TUN 設備搭建一個基於 UDP VPN,那麼整個處理過程就是這樣:
數據包會通過內核網絡棧兩次。但是經過 App 的處理後,數據包可能已經加密,並且原有的 ip 頭被封裝在 udp 內部,所以第二次通過網絡棧內核看到的是截然不同的網絡包。
TAP 設備
TAP 設備與 TUN 設備工作方式完全相同,區別在於:
-
TUN 設備的 /dev/tunX 文件收發的是 IP 層數據包,只能工作在 IP 層,無法與物理網卡做 bridge,但是可以通過三層交換(如 ip_forward)與物理網卡連通。
-
TAP 設備的 /dev/tapX 文件收發的是 MAC 層數據包,擁有 MAC 層功能,可以與物理網卡做 bridge,支持 MAC 層廣播
MACVLAN
有時我們可能需要一塊物理網卡綁定多個 IP 以及多個 MAC 地址,雖然綁定多個 IP 很容易,但是這些 IP 會共享物理網卡的 MAC 地址,可能無法滿足我們的設計需求,所以有了 MACVLAN 設備,其工作方式如下:
MACVLAN 會根據收到包的目的 MAC 地址判斷這個包需要交給哪個虛擬網卡。單獨使用 MACVLAN 好像毫無意義,但是配合之前介紹的 network namespace 使用,我們可以構建這樣的網絡:
由於 macvlan 與 eth0 處於不同的 namespace,擁有不同的 network stack,這樣使用可以不需要建立 bridge 在 virtual namespace 裡面使用網絡。
MACVTAP
MACVTAP 是對 MACVLAN的改進,把 MACVLAN 與 TAP 設備的特點綜合一下,使用 MACVLAN 的方式收發數據包,但是收到的包不交給 network stack 處理,而是生成一個 /dev/tapX 文件,交給這個文件:
由於 MACVLAN 是工作在 MAC 層的,所以 MACVTAP 也只能工作在 MAC 層,不會有 MACVTUN 這樣的設備。
留言列表