本篇文章給大家分享的是有關(guān)如何解析Linux tun/tap,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)公司主營昌圖網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,昌圖h5重慶小程序開發(fā)公司搭建,昌圖網(wǎng)站營銷推廣歡迎昌圖等地區(qū)企業(yè)咨詢
> 在計(jì)算機(jī)網(wǎng)絡(luò)中,tun與tap是操作系統(tǒng)內(nèi)核中的虛擬網(wǎng)絡(luò)設(shè)備。不同于普通靠硬件網(wǎng)絡(luò)適配器實(shí)現(xiàn)的設(shè)備,這些虛擬的網(wǎng)絡(luò)設(shè)備全部用軟件實(shí)現(xiàn),并向運(yùn)行于操作系統(tǒng)上的軟件提供與硬件的網(wǎng)絡(luò)設(shè)備完全相同的功能。
tun是網(wǎng)絡(luò)層的虛擬網(wǎng)絡(luò)設(shè)備,可以收發(fā)第三層數(shù)據(jù)報(bào)文包,如IP封包,因此常用于一些點(diǎn)對(duì)點(diǎn)IP隧道,例如OpenVPN,IPSec等。
tap是鏈路層的虛擬網(wǎng)絡(luò)設(shè)備,等同于一個(gè)以太網(wǎng)設(shè)備,它可以收發(fā)第二層數(shù)據(jù)報(bào)文包,如以太網(wǎng)數(shù)據(jù)幀。Tap最常見的用途就是做為虛擬機(jī)的網(wǎng)卡,因?yàn)樗推胀ǖ奈锢砭W(wǎng)卡更加相近,也經(jīng)常用作普通機(jī)器的虛擬網(wǎng)卡。
Linux tun/tap可以通過網(wǎng)絡(luò)接口和字符設(shè)備兩種方式進(jìn)行操作。
當(dāng)應(yīng)用程序使用標(biāo)準(zhǔn)網(wǎng)絡(luò)接口socket API操作tun/tap設(shè)備時(shí),和操作一個(gè)真實(shí)網(wǎng)卡無異。
當(dāng)應(yīng)用程序使用字符設(shè)備操作tun/tap設(shè)備時(shí),字符設(shè)備即充當(dāng)了用戶空間和內(nèi)核空間的橋梁直接讀寫二層或三層的數(shù)據(jù)報(bào)文。在 Linux 內(nèi)核 2.6.x 之后的版本中,tun/tap 對(duì)應(yīng)的字符設(shè)備文件分別為:
tun:/dev/net/tun tap:/dev/tap0
當(dāng)應(yīng)用程序打開字符設(shè)備時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的虛擬設(shè)備接口,一般以tunX和tapX方式命名,虛擬設(shè)備接口創(chuàng)建成功后,可以為其配置IP、MAC地址、路由等。當(dāng)一切配置完畢,應(yīng)用程序通過此字符文件設(shè)備寫入IP封包或以太網(wǎng)數(shù)據(jù)幀,tun/tap的驅(qū)動(dòng)程序會(huì)將數(shù)據(jù)報(bào)文直接發(fā)送到內(nèi)核空間,內(nèi)核空間收到數(shù)據(jù)后再交給系統(tǒng)的網(wǎng)絡(luò)協(xié)議棧進(jìn)行處理,最后網(wǎng)絡(luò)協(xié)議棧選擇合適的物理網(wǎng)卡將其發(fā)出,到此發(fā)送流程完成。而物理網(wǎng)卡收到數(shù)據(jù)報(bào)文時(shí)會(huì)交給網(wǎng)絡(luò)協(xié)議棧進(jìn)行處理,網(wǎng)絡(luò)協(xié)議棧匹配判斷之后通過tun/tap的驅(qū)動(dòng)程序?qū)?shù)據(jù)報(bào)文原封不動(dòng)的寫入到字符設(shè)備上,應(yīng)用程序從字符設(shè)備上讀取到IP封包或以太網(wǎng)數(shù)據(jù)幀,最后進(jìn)行相應(yīng)的處理,收取流程完成。
> 注意:當(dāng)應(yīng)用程序關(guān)閉字符設(shè)備時(shí),系統(tǒng)也會(huì)自動(dòng)刪除對(duì)應(yīng)的虛擬設(shè)備接口,并且會(huì)刪除掉創(chuàng)建的路由等信息。
tun/tap 雖然工作原理一致,但是工作的層次不一樣。
tun是三層網(wǎng)絡(luò)設(shè)備,收發(fā)的是IP層數(shù)據(jù)包,無法處理以太網(wǎng)數(shù)據(jù)幀,例如OpenVPN的路由模式就是使用了tun網(wǎng)絡(luò)設(shè)備,OpenVPN Server重新規(guī)劃了一個(gè)網(wǎng)段,所有的客戶端都會(huì)獲取到該網(wǎng)段下的一個(gè)IP,并且會(huì)添加對(duì)應(yīng)的路由規(guī)則,而客戶端與目標(biāo)機(jī)器產(chǎn)生的數(shù)據(jù)報(bào)文都要經(jīng)過OpenVPN網(wǎng)關(guān)才能轉(zhuǎn)發(fā)。
tap是二層網(wǎng)絡(luò)設(shè)備,收發(fā)以太網(wǎng)數(shù)據(jù)幀,擁有MAC層的功能,可以和物理網(wǎng)卡通過網(wǎng)橋相連,組成一個(gè)二層網(wǎng)絡(luò)。例如OpenVPN的橋接模式可以從外部打一條隧道到本地網(wǎng)絡(luò)。進(jìn)來的機(jī)器就像本地的機(jī)器一樣參與通訊,絲毫看不出這些機(jī)器是在遠(yuǎn)程。如果你有使用過虛擬機(jī)的經(jīng)驗(yàn),橋接模式也是一種十分常見的網(wǎng)絡(luò)方案,虛擬機(jī)會(huì)分配到和宿主機(jī)器同網(wǎng)段的IP,其他同網(wǎng)段的機(jī)器也可以通過網(wǎng)絡(luò)訪問到這臺(tái)虛擬機(jī)。
Linux 提供了一些命令行程序方便我們來創(chuàng)建持久化的tun/tap設(shè)備,但是如果沒有應(yīng)用程序打開對(duì)應(yīng)的文件描述符,tun/tap的狀態(tài)一直會(huì)是DOWN,還好的是這并不會(huì)影響我們把它當(dāng)作普通網(wǎng)卡去使用。
使用ip tuntap help
查看使用幫助
Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ] [ mode { tun | tap } ] [ user USER ] [ group GROUP ] [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ] Where: USER := { STRING | NUMBER } GROUP := { STRING | NUMBER }
# 創(chuàng)建 tap ip tuntap add dev tap0 mode tap # 創(chuàng)建 tun ip tuntap add dev tun0 mode tun # 刪除 tap ip tuntap del dev tap0 mode tap # 刪除 tun ip tuntap del dev tun0 mode tun
tun/tap 設(shè)備創(chuàng)建成功后可以當(dāng)作普通的網(wǎng)卡一樣使用,因此我們也可以通過ip link
命令來操作它。
# 例如使用ip link命令也可以刪除tun/tap設(shè)備 ip link del tap0 ip link del tun0
以上就是如何解析Linux tun/tap,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。