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

Linux 上的基礎網絡設備詳解

系統 Linux
本文中將一一分析在虛擬化技術中經常使用的幾種Linux網絡設備抽象類型:Bridge、802.1.qVLANdevice、VETH、TAP,詳細解釋如何用它們配合Linux中的Routetable、IPtable簡單的創建出本地虛擬網絡。

Linux抽象網絡設備簡介

和磁盤設備類似,Linux用戶想要使用網絡功能,不能通過直接操作硬件完成,而需要直接或間接的操作一個Linux為我們抽象出來的設備,既通用的Linux網絡設備來完成。一個常見的情況是,系統里裝有一個硬件網卡,Linux會在系統里為其生成一個網絡設備實例,如eth0,用戶需要對eth0發出命令以配置或使用它了。更多的硬件會帶來更多的設備實例,虛擬的硬件也會帶來更多的設備實例。隨著網絡技術,虛擬化技術的發展,更多的高級網絡設備被加入了到了Linux中,使得情況變得更加復雜。在以下章節中,將一一分析在虛擬化技術中經常使用的幾種Linux網絡設備抽象類型:Bridge、802.1.qVLANdevice、VETH、TAP,詳細解釋如何用它們配合Linux中的Routetable、IPtable簡單的創建出本地虛擬網絡。


相關網絡設備工作原理

Bridge

Bridge(橋)是Linux上用來做TCP/IP二層協議交換的設備,與現實世界中的交換機功能相似。Bridge設備實例可以和Linux上其他網絡設備實例連接,既attach一個從設備,類似于在現實世界中的交換機和一個用戶終端之間連接一根網線。當有數據到達時,Bridge會根據報文中的MAC信息進行廣播、轉發、丟棄處理。

圖1.Bridge設備工作過程

如圖所示,Bridge的功能主要在內核里實現。當一個從設備被attach到Bridge上時,相當于現實世界里交換機的端口被插入了一根連有終端的網線。這時在內核程序里,netdev_rx_handler_register()被調用,一個用于接受數據的回調函數被注冊。以后每當這個從設備收到數據時都會調用這個函數可以把數據轉發到Bridge上。當Bridge接收到此數據時,br_handle_frame()被調用,進行一個和現實世界中的交換機類似的處理過程:判斷包的類別(廣播/單點),查找內部MAC端口映射表,定位目標端口號,將數據轉發到目標端口或丟棄,自動更新內部MAC端口映射表以自我學習。

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

Bridge的實現當前有一個限制:當一個設備被attach到Bridge上時,那個設備的IP會變的無效,Linux不再使用那個IP在三層接受數據。舉例如下:如果eth0本來的IP是192.168.1.2,此時如果收到一個目標地址是192.168.1.2的數據,Linux的應用程序能通過Socket操作接受到它。而當eth0被attach到一個bridge0時,盡管eth0的IP還在,但應用程序是無法接受到上述數據的。此時應該把IP192.168.1.2賦予bridge0。

另外需要注意的是數據流的方向。對于一個被attach到Bridge上的設備來說,只有它收到數據時,此包數據才會被轉發到Bridge上,進而完成查表廣播等后續操作。當請求是發送類型時,數據是不會被轉發到Bridge上的,它會尋找下一個發送出口。用戶在配置網絡時經常忽略這一點從而造成網絡故障。

VLANdevicefor802.1.q

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

圖2.VLAN設備工作過程

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

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

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

TAP設備與VETH設備

TUN/TAP設備是一種讓用戶態程序向內核協議棧注入數據的設備,一個工作在三層,一個工作在二層,使用較多的是TAP設備。VETH設備出現較早,它的作用是反轉通訊數據的方向,需要發送的數據會被轉換成需要收到的數據重新送入內核網絡層進行處理,從而間接的完成數據的注入。

圖3.TAP設備和VETH設備工作過程

如圖所示,當一個TAP設備被創建時,在Linux設備文件目錄下將會生成一個對應char設備,用戶程序可以像打開普通文件一樣打開這個文件進行讀寫。當執行write()操作時,數據進入TAP設備,此時對于Linux網絡層來說,相當于TAP設備收到了一包數據,請求內核接受它,如同普通的物理網卡從外界收到一包數據一樣,不同的是其實數據來自Linux上的一個用戶程序。Linux收到此數據后將根據網絡配置進行后續處理,從而完成了用戶程序向Linux內核網絡層注入數據的功能。當用戶程序執行read()請求時,相當于向內核查詢TAP設備上是否有需要被發送出去的數據,有的話取出到用戶程序里,完成TAP設備的發送數據功能。針對TAP設備的一個形象的比喻是:使用TAP設備的應用程序相當于另外一臺計算機,TAP設備是本機的一個網卡,他們之間相互連接。應用程序通過read()/write()操作,和本機網絡核心進行通訊。

VETH設備總是成對出現,送到一端請求發送的數據總是從另一端以請求接受的形式出現。該設備不能被用戶程序直接操作,但使用起來比較簡單。創建并配置正確后,向其一端輸入數據,VETH會改變數據的方向并將其送入內核網絡核心,完成數據的注入。在另一端能讀到此數據。


網絡設置舉例說明

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

從vlan100子設備發送ARP報文

圖4.ARP from vlan100 child device

如圖所示,當用戶嘗試ping192.168.100.3時,Linux將會根據路由表,從vlan100子設備發出ARP報文,具體過程如下:

1)用戶ping192.168.100.3

2)Linux向vlan100子設備發送ARP信息。

3)ARP報文被打上VLANID100的Tag成為ARP@vlan100,轉發到母設備上。

4)VETH設備將這一發送請求轉變方向,成為一個需要接受處理的報文送入內核網絡模塊。

5)由于對端的VETH設備被加入到了bridge0上,并且內核發現它收到一個報文,于是報文被轉發到bridge0上。

6)bridge0處理此ARP@vlan100信息,根據TCP/IP二層協議發現是一個廣播請求,于是向它所知道的所有端口廣播此報文,其中一路進入另一對VETH設備的一端,一路進入TAP設備tap0,一路進入物理網卡設備eth0。此時在tap0上,用戶程序可以通過read()操作讀到ARP@vlan100,eth0將會向外界發送ARP@vlan100,但eth0的VLAN子設備不會收到它,因為此數據方向為請求發送而不是請求接收。

7)VETH將請求方向轉換,此時在另一端得到請求接受的ARP@vlan100報文。

8)對端VETH設備發現有數據需要接受,并且自己有兩個VLAN子設備,于是執行VLAN處理邏輯。其中一個子設備是vlan100,與ARP@vlan100吻合,于是去除VLANID100的Tag轉發到這個子設備上,重新成為標準的以太網ARP報文。另一個子設備由于ID不吻合,不會得到此報文。

9)此VLAN子設備又被attach到另一個橋bridge1上,于是轉發自己收到的ARP報文。

10)bridge1廣播ARP報文。

11)最終另外一個TAP設備tap1收到此請求發送報文,用戶程序通過read()可以得到它。

從vlan200子設備發送ARP報文

圖5.ARP from vlan200 child device

和前面情況類似,區別是VLANID是200,對端的vlan200子設備設置為reorder_hdr=0,表示此設備被要求保留收到的報文中的VLANTag。此時子設備會收到ARP報文,但是帶了VLANID200的Tag,既ARP@vlan200。

從中心bridge發送ARP報文

圖6.ARP from central bridge

當bridge0擁有IP時,通過Linux路由表用戶程序可以直接將ARP報文發向bridge0。這時tap0和外部網絡都能收到ARP,但VLAN子設備由于VLANID過濾的原因,將收不到ARP信息。

從外部網絡向物理網卡發送ARP@vlan200報文

圖7.ARP from external network

當外部網絡連接在一個支持VLAN并且對應端口為vlan200時,此情況會發生。此時所有的VLANID為200的VLAN子設備都將接受到報文,如果設置reorder_hdr=0則會收到帶Tag的ARP@vlan200。

從TAP設備以ping方式發送ARP

圖8.ping from TAP device

給tap0賦予IP并加入路由,此時再Ping其對應網段的未知IP會產生ARP發送請求。需要注意的是此時由于tap0上存在的是發送而不是接收請求,因此ARP報文不會被轉發到橋上,從而什么也不會發生。圖中右邊畫了一個類似情況:從vlan200子設備發送ARP請求。由于缺少VETH設備反轉請求方向,因此報文也不會被轉發到橋上,而是直接通過物理網卡發往外部網絡。

以文件操作方式從TAP設備發送報文

圖9.file operation on TAP device

用戶程序指定tap0設備發送報文有兩種方式:socket和fileoperation。當用socket_raw標志新建socket并指定設備編號時,可以要求內核將報文從tap0發送。但和前面的pingfromtap0情況類似,由于報文方向問題,消息并不會被轉發到bridge0上。當用open()方式打開tap設備文件時,情況有所不同。當執行write()操作時,內核認為tap0收到了報文,從而會觸發轉發動作,bridge0將收到它。如果發送的報文如圖所示,是一個以A為目的地的攜帶VLANID100Tag的單點報文,bridge0將會找到對應的設備進行轉發,對應的VLAN子設備將收到沒有VLANID100Tag的報文。


Linux上配置網絡設備命令舉例

以Redhat6.2紅帽Linux發行版為例,如果已安裝VLAN內核模塊和管理工具vconfig,TAP/TUN設備管理工具tunctl,那么可以用以下命令設置前述網絡設備:

創建Bridge:brctladdbr[BRIDGENAME]

刪除Bridge:brctldelbr[BRIDGENAME]

attach設備到Bridge:brctladdif[BRIDGENAME][DEVICENAME]

從Bridgedetach設備:brctldelif[BRIDGENAME][DEVICENAME]

查詢Bridge情況:brctlshow

創建VLAN設備:vconfigadd[PARENTDEVICENAME][VLANID]

刪除VLAN設備:vconfigrem[VLANDEVICENAME]

設置VLAN設備flag:vconfigset_flag[VLANDEVICENAME][FLAG][VALUE]

設置VLAN設備qos:

vconfigset_egress_map[VLANDEVICENAME][SKB_PRIORITY][VLAN_QOS]

vconfigset_ingress_map[VLANDEVICENAME][SKB_PRIORITY][VLAN_QOS]

查詢VLAN設備情況:cat/proc/net/vlan/[VLANDEVICENAME]

創建VETH設備:iplinkaddlink[DEVICENAME]typeveth

創建TAP設備:tunctl-p[TAPDEVICENAME]

刪除TAP設備:tunctl-d[TAPDEVICENAME]

查詢系統里所有二層設備,包括VETH/TAP設備:iplinkshow

刪除普通二層設備:iplinkdelete[DEVICENAME]type[TYPE]


小結

綜上所述,Linux已經提供一套基本工具供用戶創建出各種內部網絡,利用這些工具可以方便的創建出特定網絡給應用程序使用,包括云計算中的初級內部虛擬網絡。

責任編輯:黃丹 來源: developerworks
相關推薦

2023-05-12 07:27:24

Linux內核網絡設備驅動

2021-09-09 14:54:10

Linuxbridge網絡設備

2010-08-23 09:06:14

路由器配置

2021-05-30 07:55:26

虛擬網絡Docker

2011-11-23 13:45:35

最強悍網絡設備H3C

2009-10-21 14:43:42

linux網絡設備

2010-07-19 10:05:52

ibmdwLinux

2013-05-02 10:03:59

網絡管理網絡設備交換機

2020-04-20 21:22:50

網絡設備網絡協議計算機網絡

2022-07-12 10:01:33

網絡設備供應鏈

2011-06-30 09:43:53

虛擬設備虛擬網絡

2019-03-21 14:03:29

Wi-Fi 6Wi-Fi網絡

2011-05-13 17:49:56

2011-04-01 09:18:04

mrtg流量

2011-04-02 11:40:11

mrtg監控

2020-11-19 09:24:18

Linux GRE配置

2015-09-08 11:03:04

Linux網絡模擬IaaS

2023-12-26 17:01:33

網絡設備

2018-07-31 10:56:28

2021-04-13 09:12:45

網絡設備無線路由器交換機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色毛片在线观看 | 99re免费 | 久久久黄色 | 伊人网91| 久久99精品久久久久久国产越南 | 9久久婷婷国产综合精品性色 | 成人免费视频网站在线观看 | 国产精品久久久久久久久婷婷 | 9久久 | 日韩精品人成在线播放 | 日韩一区中文字幕 | 久久网一区二区三区 | 中文字幕一区二区三区精彩视频 | 久久亚| 大陆一级毛片免费视频观看 | 日韩av第一页 | 久久精品网 | 亚洲一区中文字幕 | 精品视频一区二区三区 | 国产精品久久久久久久久久久久 | 亚洲精品一区二区三区中文字幕 | 成人在线免费观看视频 | 欧美一级黄视频 | 午夜不卡福利视频 | 国产伦一区二区三区四区 | 国产精品美女久久久久久免费 | 精品在线一区二区 | 性色av网站 | 久久综合影院 | 久久婷婷av| 日韩中文一区二区 | 久久久久久91 | 丝袜久久| 亚洲欧美日韩精品久久亚洲区 | 久久免费精品视频 | 中文字幕国产在线 | 亚洲午夜视频在线观看 | 国产成人在线播放 | 色精品 | 亚洲国产激情 | 激情欧美日韩一区二区 |