成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux 上的基礎(chǔ)網(wǎng)絡(luò)設(shè)備詳解

系統(tǒng) Linux
本文中將一一分析在虛擬化技術(shù)中經(jīng)常使用的幾種Linux網(wǎng)絡(luò)設(shè)備抽象類(lèi)型:Bridge、802.1.qVLANdevice、VETH、TAP,詳細(xì)解釋如何用它們配合Linux中的Routetable、IPtable簡(jiǎn)單的創(chuàng)建出本地虛擬網(wǎng)絡(luò)。

Linux抽象網(wǎng)絡(luò)設(shè)備簡(jiǎn)介

和磁盤(pán)設(shè)備類(lèi)似,Linux用戶(hù)想要使用網(wǎng)絡(luò)功能,不能通過(guò)直接操作硬件完成,而需要直接或間接的操作一個(gè)Linux為我們抽象出來(lái)的設(shè)備,既通用的Linux網(wǎng)絡(luò)設(shè)備來(lái)完成。一個(gè)常見(jiàn)的情況是,系統(tǒng)里裝有一個(gè)硬件網(wǎng)卡,Linux會(huì)在系統(tǒng)里為其生成一個(gè)網(wǎng)絡(luò)設(shè)備實(shí)例,如eth0,用戶(hù)需要對(duì)eth0發(fā)出命令以配置或使用它了。更多的硬件會(huì)帶來(lái)更多的設(shè)備實(shí)例,虛擬的硬件也會(huì)帶來(lái)更多的設(shè)備實(shí)例。隨著網(wǎng)絡(luò)技術(shù),虛擬化技術(shù)的發(fā)展,更多的高級(jí)網(wǎng)絡(luò)設(shè)備被加入了到了Linux中,使得情況變得更加復(fù)雜。在以下章節(jié)中,將一一分析在虛擬化技術(shù)中經(jīng)常使用的幾種Linux網(wǎng)絡(luò)設(shè)備抽象類(lèi)型:Bridge、802.1.qVLANdevice、VETH、TAP,詳細(xì)解釋如何用它們配合Linux中的Routetable、IPtable簡(jiǎn)單的創(chuàng)建出本地虛擬網(wǎng)絡(luò)。


相關(guān)網(wǎng)絡(luò)設(shè)備工作原理

Bridge

Bridge(橋)是Linux上用來(lái)做TCP/IP二層協(xié)議交換的設(shè)備,與現(xiàn)實(shí)世界中的交換機(jī)功能相似。Bridge設(shè)備實(shí)例可以和Linux上其他網(wǎng)絡(luò)設(shè)備實(shí)例連接,既attach一個(gè)從設(shè)備,類(lèi)似于在現(xiàn)實(shí)世界中的交換機(jī)和一個(gè)用戶(hù)終端之間連接一根網(wǎng)線。當(dāng)有數(shù)據(jù)到達(dá)時(shí),Bridge會(huì)根據(jù)報(bào)文中的MAC信息進(jìn)行廣播、轉(zhuǎn)發(fā)、丟棄處理。

圖1.Bridge設(shè)備工作過(guò)程

如圖所示,Bridge的功能主要在內(nèi)核里實(shí)現(xiàn)。當(dāng)一個(gè)從設(shè)備被attach到Bridge上時(shí),相當(dāng)于現(xiàn)實(shí)世界里交換機(jī)的端口被插入了一根連有終端的網(wǎng)線。這時(shí)在內(nèi)核程序里,netdev_rx_handler_register()被調(diào)用,一個(gè)用于接受數(shù)據(jù)的回調(diào)函數(shù)被注冊(cè)。以后每當(dāng)這個(gè)從設(shè)備收到數(shù)據(jù)時(shí)都會(huì)調(diào)用這個(gè)函數(shù)可以把數(shù)據(jù)轉(zhuǎn)發(fā)到Bridge上。當(dāng)Bridge接收到此數(shù)據(jù)時(shí),br_handle_frame()被調(diào)用,進(jìn)行一個(gè)和現(xiàn)實(shí)世界中的交換機(jī)類(lèi)似的處理過(guò)程:判斷包的類(lèi)別(廣播/單點(diǎn)),查找內(nèi)部MAC端口映射表,定位目標(biāo)端口號(hào),將數(shù)據(jù)轉(zhuǎn)發(fā)到目標(biāo)端口或丟棄,自動(dòng)更新內(nèi)部MAC端口映射表以自我學(xué)習(xí)。

Bridge和現(xiàn)實(shí)世界中的二層交換機(jī)有一個(gè)區(qū)別,圖中左側(cè)畫(huà)出了這種情況:數(shù)據(jù)被直接發(fā)到Bridge上,而不是從一個(gè)端口接受。這種情況可以看做Bridge自己有一個(gè)MAC可以主動(dòng)發(fā)送報(bào)文,或者說(shuō)Bridge自帶了一個(gè)隱藏端口和寄主Linux系統(tǒng)自動(dòng)連接,Linux上的程序可以直接從這個(gè)端口向Bridge上的其他端口發(fā)數(shù)據(jù)。所以當(dāng)一個(gè)Bridge擁有一個(gè)網(wǎng)絡(luò)設(shè)備時(shí),如bridge0加入了eth0時(shí),實(shí)際上bridge0擁有兩個(gè)有效MAC地址,一個(gè)是bridge0的,一個(gè)是eth0的,他們之間可以通訊。由此帶來(lái)一個(gè)有意思的事情是,Bridge可以設(shè)置IP地址。通常來(lái)說(shuō)IP地址是三層協(xié)議的內(nèi)容,不應(yīng)該出現(xiàn)在二層設(shè)備Bridge上。但是Linux里Bridge是通用網(wǎng)絡(luò)設(shè)備抽象的一種,只要是網(wǎng)絡(luò)設(shè)備就能夠設(shè)定IP地址。當(dāng)一個(gè)bridge0擁有IP后,Linux便可以通過(guò)路由表或者IP表規(guī)則在三層定位bridge0,此時(shí)相當(dāng)于Linux擁有了另外一個(gè)隱藏的虛擬網(wǎng)卡和Bridge的隱藏端口相連,這個(gè)網(wǎng)卡就是名為bridge0的通用網(wǎng)絡(luò)設(shè)備,IP可以看成是這個(gè)網(wǎng)卡的。當(dāng)有符合此IP的數(shù)據(jù)到達(dá)bridge0時(shí),內(nèi)核協(xié)議棧認(rèn)為收到了一包目標(biāo)為本機(jī)的數(shù)據(jù),此時(shí)應(yīng)用程序可以通過(guò)Socket接收到它。一個(gè)更好的對(duì)比例子是現(xiàn)實(shí)世界中的帶路由的交換機(jī)設(shè)備,它也擁有一個(gè)隱藏的MAC地址,供設(shè)備中的三層協(xié)議處理程序和管理程序使用。設(shè)備里的三層協(xié)議處理程序,對(duì)應(yīng)名為bridge0的通用網(wǎng)絡(luò)設(shè)備的三層協(xié)議處理程序,即寄主Linux系統(tǒng)內(nèi)核協(xié)議棧程序。設(shè)備里的管理程序,對(duì)應(yīng)bridge0寄主Linux系統(tǒng)里的應(yīng)用程序。

Bridge的實(shí)現(xiàn)當(dāng)前有一個(gè)限制:當(dāng)一個(gè)設(shè)備被attach到Bridge上時(shí),那個(gè)設(shè)備的IP會(huì)變的無(wú)效,Linux不再使用那個(gè)IP在三層接受數(shù)據(jù)。舉例如下:如果eth0本來(lái)的IP是192.168.1.2,此時(shí)如果收到一個(gè)目標(biāo)地址是192.168.1.2的數(shù)據(jù),Linux的應(yīng)用程序能通過(guò)Socket操作接受到它。而當(dāng)eth0被attach到一個(gè)bridge0時(shí),盡管eth0的IP還在,但應(yīng)用程序是無(wú)法接受到上述數(shù)據(jù)的。此時(shí)應(yīng)該把IP192.168.1.2賦予bridge0。

另外需要注意的是數(shù)據(jù)流的方向。對(duì)于一個(gè)被attach到Bridge上的設(shè)備來(lái)說(shuō),只有它收到數(shù)據(jù)時(shí),此包數(shù)據(jù)才會(huì)被轉(zhuǎn)發(fā)到Bridge上,進(jìn)而完成查表廣播等后續(xù)操作。當(dāng)請(qǐng)求是發(fā)送類(lèi)型時(shí),數(shù)據(jù)是不會(huì)被轉(zhuǎn)發(fā)到Bridge上的,它會(huì)尋找下一個(gè)發(fā)送出口。用戶(hù)在配置網(wǎng)絡(luò)時(shí)經(jīng)常忽略這一點(diǎn)從而造成網(wǎng)絡(luò)故障。

VLANdevicefor802.1.q

VLAN又稱(chēng)虛擬網(wǎng)絡(luò),是一個(gè)被廣泛使用的概念,有些應(yīng)用程序把自己的內(nèi)部網(wǎng)絡(luò)也稱(chēng)為VLAN。此處主要說(shuō)的是在物理世界中存在的,需要協(xié)議支持的VLAN。它的種類(lèi)很多,按照協(xié)議原理一般分為:MACVLAN、802.1.qVLAN、802.1.qbgVLAN、802.1.qbhVLAN。其中出現(xiàn)較早,應(yīng)用廣泛并且比較成熟的是802.1.qVLAN,其基本原理是在二層協(xié)議里插入額外的VLAN協(xié)議數(shù)據(jù)(稱(chēng)為802.1.qVLANTag),同時(shí)保持和傳統(tǒng)二層設(shè)備的兼容性。Linux里的VLAN設(shè)備是對(duì)802.1.q協(xié)議的一種內(nèi)部軟件實(shí)現(xiàn),模擬現(xiàn)實(shí)世界中的802.1.q交換機(jī)。

圖2.VLAN設(shè)備工作過(guò)程

如圖所示,Linux里802.1.qVLAN設(shè)備是以母子關(guān)系成對(duì)出現(xiàn)的,母設(shè)備相當(dāng)于現(xiàn)實(shí)世界中的交換機(jī)TRUNK口,用于連接上級(jí)網(wǎng)絡(luò),子設(shè)備相當(dāng)于普通接口用于連接下級(jí)網(wǎng)絡(luò)。當(dāng)數(shù)據(jù)在母子設(shè)備間傳遞時(shí),內(nèi)核將會(huì)根據(jù)802.1.qVLANTag進(jìn)行對(duì)應(yīng)操作。母子設(shè)備之間是一對(duì)多的關(guān)系,一個(gè)母設(shè)備可以有多個(gè)子設(shè)備,一個(gè)子設(shè)備只有一個(gè)母設(shè)備。當(dāng)一個(gè)子設(shè)備有一包數(shù)據(jù)需要發(fā)送時(shí),數(shù)據(jù)將被加入VLANTag然后從母設(shè)備發(fā)送出去。當(dāng)母設(shè)備收到一包數(shù)據(jù)時(shí),它將會(huì)分析其中的VLANTag,如果有對(duì)應(yīng)的子設(shè)備存在,則把數(shù)據(jù)轉(zhuǎn)發(fā)到那個(gè)子設(shè)備上并根據(jù)設(shè)置移除VLANTag,否則丟棄該數(shù)據(jù)。在某些設(shè)置下,VLANTag可以不被移除以滿足某些監(jiān)聽(tīng)程序的需要,如DHCP服務(wù)程序。舉例說(shuō)明如下:eth0作為母設(shè)備創(chuàng)建一個(gè)ID為100的子設(shè)備eth0.100。此時(shí)如果有程序要求從eth0.100發(fā)送一包數(shù)據(jù),數(shù)據(jù)將被打上VLAN100的Tag從eth0發(fā)送出去。如果eth0收到一包數(shù)據(jù),VLANTag是100,數(shù)據(jù)將被轉(zhuǎn)發(fā)到eth0.100上,并根據(jù)設(shè)置決定是否移除VLANTag。如果eth0收到一包包含VLANTag101的數(shù)據(jù),其將被丟棄。上述過(guò)程隱含以下事實(shí):對(duì)于寄主Linux系統(tǒng)來(lái)說(shuō),母設(shè)備只能用來(lái)收數(shù)據(jù),子設(shè)備只能用來(lái)發(fā)送數(shù)據(jù)。和Bridge一樣,母子設(shè)備的數(shù)據(jù)也是有方向的,子設(shè)備收到的數(shù)據(jù)不會(huì)進(jìn)入母設(shè)備,同樣母設(shè)備上請(qǐng)求發(fā)送的數(shù)據(jù)不會(huì)被轉(zhuǎn)到子設(shè)備上。可以把VLAN母子設(shè)備作為一個(gè)整體想象為現(xiàn)實(shí)世界中的802.1.q交換機(jī),下級(jí)接口通過(guò)子設(shè)備連接到寄主Linux系統(tǒng)網(wǎng)絡(luò)里,上級(jí)接口同過(guò)主設(shè)備連接到上級(jí)網(wǎng)絡(luò),當(dāng)母設(shè)備是物理網(wǎng)卡時(shí)上級(jí)網(wǎng)絡(luò)是外界真實(shí)網(wǎng)絡(luò),當(dāng)母設(shè)備是另外一個(gè)Linux虛擬網(wǎng)絡(luò)設(shè)備時(shí)上級(jí)網(wǎng)絡(luò)仍然是寄主Linux系統(tǒng)網(wǎng)絡(luò)。

需要注意的是母子VLAN設(shè)備擁有相同的MAC地址,可以把它當(dāng)成現(xiàn)實(shí)世界中802.1.q交換機(jī)的MAC,因此多個(gè)VLAN設(shè)備會(huì)共享一個(gè)MAC。當(dāng)一個(gè)母設(shè)備擁有多個(gè)VLAN子設(shè)備時(shí),子設(shè)備之間是隔離的,不存在Bridge那樣的交換轉(zhuǎn)發(fā)關(guān)系,原因如下:802.1.qVLAN協(xié)議的主要目的是從邏輯上隔離子網(wǎng)。現(xiàn)實(shí)世界中的802.1.q交換機(jī)存在多個(gè)VLAN,每個(gè)VLAN擁有多個(gè)端口,同一VLAN端口之間可以交換轉(zhuǎn)發(fā),不同VLAN端口之間隔離,所以其包含兩層功能:交換與隔離。LinuxVLANdevice實(shí)現(xiàn)的是隔離功能,沒(méi)有交換功能。一個(gè)VLAN母設(shè)備不可能擁有兩個(gè)相同ID的VLAN子設(shè)備,因此也就不可能出現(xiàn)數(shù)據(jù)交換情況。如果想讓一個(gè)VLAN里接多個(gè)設(shè)備,就需要交換功能。在Linux里Bridge專(zhuān)門(mén)實(shí)現(xiàn)交換功能,因此將VLAN子設(shè)備attach到一個(gè)Bridge上就能完成后續(xù)的交換功能。總結(jié)起來(lái),Bridge加VLANdevice能在功能層面完整模擬現(xiàn)實(shí)世界里的802.1.q交換機(jī)。

Linux支持VLAN硬件加速,在安裝有特定硬件情況下,圖中所述內(nèi)核處理過(guò)程可以被放到物理設(shè)備上完成。

TAP設(shè)備與VETH設(shè)備

TUN/TAP設(shè)備是一種讓用戶(hù)態(tài)程序向內(nèi)核協(xié)議棧注入數(shù)據(jù)的設(shè)備,一個(gè)工作在三層,一個(gè)工作在二層,使用較多的是TAP設(shè)備。VETH設(shè)備出現(xiàn)較早,它的作用是反轉(zhuǎn)通訊數(shù)據(jù)的方向,需要發(fā)送的數(shù)據(jù)會(huì)被轉(zhuǎn)換成需要收到的數(shù)據(jù)重新送入內(nèi)核網(wǎng)絡(luò)層進(jìn)行處理,從而間接的完成數(shù)據(jù)的注入。

圖3.TAP設(shè)備和VETH設(shè)備工作過(guò)程

如圖所示,當(dāng)一個(gè)TAP設(shè)備被創(chuàng)建時(shí),在Linux設(shè)備文件目錄下將會(huì)生成一個(gè)對(duì)應(yīng)char設(shè)備,用戶(hù)程序可以像打開(kāi)普通文件一樣打開(kāi)這個(gè)文件進(jìn)行讀寫(xiě)。當(dāng)執(zhí)行write()操作時(shí),數(shù)據(jù)進(jìn)入TAP設(shè)備,此時(shí)對(duì)于Linux網(wǎng)絡(luò)層來(lái)說(shuō),相當(dāng)于TAP設(shè)備收到了一包數(shù)據(jù),請(qǐng)求內(nèi)核接受它,如同普通的物理網(wǎng)卡從外界收到一包數(shù)據(jù)一樣,不同的是其實(shí)數(shù)據(jù)來(lái)自Linux上的一個(gè)用戶(hù)程序。Linux收到此數(shù)據(jù)后將根據(jù)網(wǎng)絡(luò)配置進(jìn)行后續(xù)處理,從而完成了用戶(hù)程序向Linux內(nèi)核網(wǎng)絡(luò)層注入數(shù)據(jù)的功能。當(dāng)用戶(hù)程序執(zhí)行read()請(qǐng)求時(shí),相當(dāng)于向內(nèi)核查詢(xún)TAP設(shè)備上是否有需要被發(fā)送出去的數(shù)據(jù),有的話取出到用戶(hù)程序里,完成TAP設(shè)備的發(fā)送數(shù)據(jù)功能。針對(duì)TAP設(shè)備的一個(gè)形象的比喻是:使用TAP設(shè)備的應(yīng)用程序相當(dāng)于另外一臺(tái)計(jì)算機(jī),TAP設(shè)備是本機(jī)的一個(gè)網(wǎng)卡,他們之間相互連接。應(yīng)用程序通過(guò)read()/write()操作,和本機(jī)網(wǎng)絡(luò)核心進(jìn)行通訊。

VETH設(shè)備總是成對(duì)出現(xiàn),送到一端請(qǐng)求發(fā)送的數(shù)據(jù)總是從另一端以請(qǐng)求接受的形式出現(xiàn)。該設(shè)備不能被用戶(hù)程序直接操作,但使用起來(lái)比較簡(jiǎn)單。創(chuàng)建并配置正確后,向其一端輸入數(shù)據(jù),VETH會(huì)改變數(shù)據(jù)的方向并將其送入內(nèi)核網(wǎng)絡(luò)核心,完成數(shù)據(jù)的注入。在另一端能讀到此數(shù)據(jù)。


網(wǎng)絡(luò)設(shè)置舉例說(shuō)明

為了更好的說(shuō)明Linux網(wǎng)絡(luò)設(shè)備的用法,下面將用一系列的例子,說(shuō)明在一個(gè)復(fù)雜的Linux網(wǎng)絡(luò)元素組合出的虛擬網(wǎng)絡(luò)里,數(shù)據(jù)的流向。網(wǎng)絡(luò)設(shè)置簡(jiǎn)介如下:一個(gè)中心Bridge:bridge0下attach了4個(gè)網(wǎng)絡(luò)設(shè)備,包括2個(gè)VETH設(shè)備,1個(gè)TAP設(shè)備tap0,1個(gè)物理網(wǎng)卡eth0。在VETH的另外一端又創(chuàng)建了VLAN子設(shè)備。Linux上共存在2個(gè)VLAN網(wǎng)絡(luò),既vlan100與vlan200。物理網(wǎng)卡和外部網(wǎng)絡(luò)相連,并且在它之下創(chuàng)建了一個(gè)VLANID為200的VLAN子設(shè)備。

從vlan100子設(shè)備發(fā)送ARP報(bào)文

圖4.ARP from vlan100 child device

如圖所示,當(dāng)用戶(hù)嘗試ping192.168.100.3時(shí),Linux將會(huì)根據(jù)路由表,從vlan100子設(shè)備發(fā)出ARP報(bào)文,具體過(guò)程如下:

1)用戶(hù)ping192.168.100.3

2)Linux向vlan100子設(shè)備發(fā)送ARP信息。

3)ARP報(bào)文被打上VLANID100的Tag成為ARP@vlan100,轉(zhuǎn)發(fā)到母設(shè)備上。

4)VETH設(shè)備將這一發(fā)送請(qǐng)求轉(zhuǎn)變方向,成為一個(gè)需要接受處理的報(bào)文送入內(nèi)核網(wǎng)絡(luò)模塊。

5)由于對(duì)端的VETH設(shè)備被加入到了bridge0上,并且內(nèi)核發(fā)現(xiàn)它收到一個(gè)報(bào)文,于是報(bào)文被轉(zhuǎn)發(fā)到bridge0上。

6)bridge0處理此ARP@vlan100信息,根據(jù)TCP/IP二層協(xié)議發(fā)現(xiàn)是一個(gè)廣播請(qǐng)求,于是向它所知道的所有端口廣播此報(bào)文,其中一路進(jìn)入另一對(duì)VETH設(shè)備的一端,一路進(jìn)入TAP設(shè)備tap0,一路進(jìn)入物理網(wǎng)卡設(shè)備eth0。此時(shí)在tap0上,用戶(hù)程序可以通過(guò)read()操作讀到ARP@vlan100,eth0將會(huì)向外界發(fā)送ARP@vlan100,但eth0的VLAN子設(shè)備不會(huì)收到它,因?yàn)榇藬?shù)據(jù)方向?yàn)檎?qǐng)求發(fā)送而不是請(qǐng)求接收。

7)VETH將請(qǐng)求方向轉(zhuǎn)換,此時(shí)在另一端得到請(qǐng)求接受的ARP@vlan100報(bào)文。

8)對(duì)端VETH設(shè)備發(fā)現(xiàn)有數(shù)據(jù)需要接受,并且自己有兩個(gè)VLAN子設(shè)備,于是執(zhí)行VLAN處理邏輯。其中一個(gè)子設(shè)備是vlan100,與ARP@vlan100吻合,于是去除VLANID100的Tag轉(zhuǎn)發(fā)到這個(gè)子設(shè)備上,重新成為標(biāo)準(zhǔn)的以太網(wǎng)ARP報(bào)文。另一個(gè)子設(shè)備由于ID不吻合,不會(huì)得到此報(bào)文。

9)此VLAN子設(shè)備又被attach到另一個(gè)橋bridge1上,于是轉(zhuǎn)發(fā)自己收到的ARP報(bào)文。

10)bridge1廣播ARP報(bào)文。

11)最終另外一個(gè)TAP設(shè)備tap1收到此請(qǐng)求發(fā)送報(bào)文,用戶(hù)程序通過(guò)read()可以得到它。

從vlan200子設(shè)備發(fā)送ARP報(bào)文

圖5.ARP from vlan200 child device

和前面情況類(lèi)似,區(qū)別是VLANID是200,對(duì)端的vlan200子設(shè)備設(shè)置為reorder_hdr=0,表示此設(shè)備被要求保留收到的報(bào)文中的VLANTag。此時(shí)子設(shè)備會(huì)收到ARP報(bào)文,但是帶了VLANID200的Tag,既ARP@vlan200。

從中心bridge發(fā)送ARP報(bào)文

圖6.ARP from central bridge

當(dāng)bridge0擁有IP時(shí),通過(guò)Linux路由表用戶(hù)程序可以直接將ARP報(bào)文發(fā)向bridge0。這時(shí)tap0和外部網(wǎng)絡(luò)都能收到ARP,但VLAN子設(shè)備由于VLANID過(guò)濾的原因,將收不到ARP信息。

從外部網(wǎng)絡(luò)向物理網(wǎng)卡發(fā)送ARP@vlan200報(bào)文

圖7.ARP from external network

當(dāng)外部網(wǎng)絡(luò)連接在一個(gè)支持VLAN并且對(duì)應(yīng)端口為vlan200時(shí),此情況會(huì)發(fā)生。此時(shí)所有的VLANID為200的VLAN子設(shè)備都將接受到報(bào)文,如果設(shè)置reorder_hdr=0則會(huì)收到帶Tag的ARP@vlan200。

從TAP設(shè)備以ping方式發(fā)送ARP

圖8.ping from TAP device

給tap0賦予IP并加入路由,此時(shí)再Ping其對(duì)應(yīng)網(wǎng)段的未知IP會(huì)產(chǎn)生ARP發(fā)送請(qǐng)求。需要注意的是此時(shí)由于tap0上存在的是發(fā)送而不是接收請(qǐng)求,因此ARP報(bào)文不會(huì)被轉(zhuǎn)發(fā)到橋上,從而什么也不會(huì)發(fā)生。圖中右邊畫(huà)了一個(gè)類(lèi)似情況:從vlan200子設(shè)備發(fā)送ARP請(qǐng)求。由于缺少VETH設(shè)備反轉(zhuǎn)請(qǐng)求方向,因此報(bào)文也不會(huì)被轉(zhuǎn)發(fā)到橋上,而是直接通過(guò)物理網(wǎng)卡發(fā)往外部網(wǎng)絡(luò)。

以文件操作方式從TAP設(shè)備發(fā)送報(bào)文

圖9.file operation on TAP device

用戶(hù)程序指定tap0設(shè)備發(fā)送報(bào)文有兩種方式:socket和fileoperation。當(dāng)用socket_raw標(biāo)志新建socket并指定設(shè)備編號(hào)時(shí),可以要求內(nèi)核將報(bào)文從tap0發(fā)送。但和前面的pingfromtap0情況類(lèi)似,由于報(bào)文方向問(wèn)題,消息并不會(huì)被轉(zhuǎn)發(fā)到bridge0上。當(dāng)用open()方式打開(kāi)tap設(shè)備文件時(shí),情況有所不同。當(dāng)執(zhí)行write()操作時(shí),內(nèi)核認(rèn)為tap0收到了報(bào)文,從而會(huì)觸發(fā)轉(zhuǎn)發(fā)動(dòng)作,bridge0將收到它。如果發(fā)送的報(bào)文如圖所示,是一個(gè)以A為目的地的攜帶VLANID100Tag的單點(diǎn)報(bào)文,bridge0將會(huì)找到對(duì)應(yīng)的設(shè)備進(jìn)行轉(zhuǎn)發(fā),對(duì)應(yīng)的VLAN子設(shè)備將收到?jīng)]有VLANID100Tag的報(bào)文。


Linux上配置網(wǎng)絡(luò)設(shè)備命令舉例

以Redhat6.2紅帽Linux發(fā)行版為例,如果已安裝VLAN內(nèi)核模塊和管理工具vconfig,TAP/TUN設(shè)備管理工具tunctl,那么可以用以下命令設(shè)置前述網(wǎng)絡(luò)設(shè)備:

創(chuàng)建Bridge:brctladdbr[BRIDGENAME]

刪除Bridge:brctldelbr[BRIDGENAME]

attach設(shè)備到Bridge:brctladdif[BRIDGENAME][DEVICENAME]

從Bridgedetach設(shè)備:brctldelif[BRIDGENAME][DEVICENAME]

查詢(xún)Bridge情況:brctlshow

創(chuàng)建VLAN設(shè)備:vconfigadd[PARENTDEVICENAME][VLANID]

刪除VLAN設(shè)備:vconfigrem[VLANDEVICENAME]

設(shè)置VLAN設(shè)備flag:vconfigset_flag[VLANDEVICENAME][FLAG][VALUE]

設(shè)置VLAN設(shè)備qos:

vconfigset_egress_map[VLANDEVICENAME][SKB_PRIORITY][VLAN_QOS]

vconfigset_ingress_map[VLANDEVICENAME][SKB_PRIORITY][VLAN_QOS]

查詢(xún)VLAN設(shè)備情況:cat/proc/net/vlan/[VLANDEVICENAME]

創(chuàng)建VETH設(shè)備:iplinkaddlink[DEVICENAME]typeveth

創(chuàng)建TAP設(shè)備:tunctl-p[TAPDEVICENAME]

刪除TAP設(shè)備:tunctl-d[TAPDEVICENAME]

查詢(xún)系統(tǒng)里所有二層設(shè)備,包括VETH/TAP設(shè)備:iplinkshow

刪除普通二層設(shè)備:iplinkdelete[DEVICENAME]type[TYPE]


小結(jié)

綜上所述,Linux已經(jīng)提供一套基本工具供用戶(hù)創(chuàng)建出各種內(nèi)部網(wǎng)絡(luò),利用這些工具可以方便的創(chuàng)建出特定網(wǎng)絡(luò)給應(yīng)用程序使用,包括云計(jì)算中的初級(jí)內(nèi)部虛擬網(wǎng)絡(luò)。

責(zé)任編輯:黃丹 來(lái)源: developerworks
相關(guān)推薦

2023-05-12 07:27:24

Linux內(nèi)核網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)

2021-09-09 14:54:10

Linuxbridge網(wǎng)絡(luò)設(shè)備

2010-08-23 09:06:14

路由器配置

2021-05-30 07:55:26

虛擬網(wǎng)絡(luò)Docker

2011-11-23 13:45:35

最強(qiáng)悍網(wǎng)絡(luò)設(shè)備H3C

2009-10-21 14:43:42

linux網(wǎng)絡(luò)設(shè)備

2010-07-19 10:05:52

ibmdwLinux

2013-05-02 10:03:59

網(wǎng)絡(luò)管理網(wǎng)絡(luò)設(shè)備交換機(jī)

2022-07-12 10:01:33

網(wǎng)絡(luò)設(shè)備供應(yīng)鏈

2020-04-20 21:22:50

網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)協(xié)議計(jì)算機(jī)網(wǎng)絡(luò)

2019-03-21 14:03:29

Wi-Fi 6Wi-Fi網(wǎng)絡(luò)

2011-06-30 09:43:53

虛擬設(shè)備虛擬網(wǎng)絡(luò)

2011-04-01 09:18:04

mrtg流量

2011-05-13 17:49:56

2011-04-02 11:40:11

mrtg監(jiān)控

2020-11-19 09:24:18

Linux GRE配置

2015-09-08 11:03:04

Linux網(wǎng)絡(luò)模擬IaaS

2023-12-26 17:01:33

網(wǎng)絡(luò)設(shè)備

2018-07-31 10:56:28

2021-04-13 09:12:45

網(wǎng)絡(luò)設(shè)備無(wú)線路由器交換機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 黄色网址免费看 | 欧美视频精品 | 黄色大片视频 | 日韩成人在线观看 | 免费国产网站 | 97精品超碰一区二区三区 | 欧美精品久久久久久久久老牛影院 | 韩日精品在线观看 | 一区二区三区av | 国产日产精品一区二区三区四区 | 中文字幕在线播放第一页 | 秋霞电影一区二区 | 国产精品久久久久久一区二区三区 | 成人精品国产免费网站 | 欧美激情综合网 | 无毛av| 毛片链接 | 97超碰站 | 久久婷婷色 | 蜜臀久久 | 99色视频 | 九九在线视频 | www.夜夜骑 | 91久久国产综合久久91精品网站 | 欧美亚洲国产日韩 | 三级免费网| 人人爽人人爽人人片av | 手机看黄av免费网址 | 国产欧美精品一区 | 亚洲视频在线看 | 亚洲精品乱码久久久久久按摩观 | 国色天香综合网 | 九九久久精品 | www.99热| 亚洲国产精品人人爽夜夜爽 | 午夜小视频免费观看 | 国产露脸对白88av | 久久久久久免费观看 | 视频一区二区三区中文字幕 | 色综合久久久 | 久久综合国产 |