簡介
在 Linux 網路管理中,虛擬網路卡(Virtual Network Interface)是一個重要的概念,廣泛應用於虛擬化、網路模擬和隧道技術中。本文將重點介紹 TUN(Network TUNnel)和 TAP(Network TAP),並詳細解釋它們的工作原理、應用場景及其配置方法。
什麼是虛擬網路卡?
虛擬網路卡是軟體實現的網路介面,與物理網路卡不同,它沒有物理硬體,只存在於作業系統的記憶體中。虛擬網路卡可以用來模擬網路環境,進行資料包的捕獲、分析和處理。
TUN 和 TAP 的基本概念
1. Tun (Network TUNnel)
TUN 是三層(網路層)的虛擬網路裝置,主要用於 IP 資料包的處理。TUN 裝置會模擬一個網路層介面,接收到的資料包會被傳遞給使用者空間的程式進行處理,處理完的資料包會被髮送回核心網路棧。
2. TAP(Network TAP)
TAP 是二層(資料鏈路層)的虛擬網路裝置,主要用於乙太網幀的處理。TAP 裝置可以模擬一個乙太網介面,能夠接收和傳送原始的乙太網幀。這使得 TAP 裝置非常適合用於橋接不同的網路環境,或者在虛擬機器中模擬物理網路卡。TAP是資料鏈路層的虛擬網路裝置。
Tun和Tap的異同
Tun是三層的裝置,該裝置沒有MAC地址,從字元裝置上讀取IP資料包,寫入的也是IP資料包,因此不能進行二層的操作,例如發ARP包和乙太網廣播
Tab是二層的裝置,該裝置有MAC地址,處理的是資料鏈路層的資料幀,從字元裝置上讀取的是資料鏈路層的資料幀,寫入的也是資料。
在使用上面,兩者都是透過字元裝置的方式進行讀取和寫入,Tun是三層網路裝置,而Tab是二層網路裝置,Tun常用於VPN等技術,由於工作在IP層,無法與物理網路卡做bridge,但可以透過三層交換(如 ip_forward)與物理網路卡連通,Tab裝置工作在第二層,收發的是MAC層資料包,擁有MAC層的功能,可以與物理網路卡做bridge,支援MAC層廣播
TUN和TAP應用場景
Tun是一個網路層裝置,支援點到點的網路通訊,常用於tunnel隧道和VPN的構建,tunnel技術是網路裝置把網路層資料包封裝到另一個協議中以跨過網路傳送到另一個網路裝置的處理過程,主要用於公網主機和私有網路互聯互通。在Linux系統中支援多種隧道技術,其底層實現原理都是基於Tun裝置。
TAP介面的典型應用場景是在虛擬化網路中。例如,我們透過KVM建立的多個VM(虛擬機器),以LinuxBridge(橋接網路)互通;實際上即是透過像vnet0這樣的TAP介面來接入LinuxBridge的。在這種場景下,KVM程式就是向TAP介面讀寫資料的使用者空間程式。當VM0向本機的eth0介面傳送資料,KVM會將資料傳送到TAP介面vnet0,再透過LinuxBridge將資料轉發到vnet1上。然後,KVM將資料傳送到VM1的eth0口。