其實之前已經有分析過網橋的原理,但是當時對其理解還是侷限於表面,對於其本身的實現原理並沒有結合linux源**進行分析,那麼本次實際上是要分析qemu對於網絡卡的模擬,那麼 從源頭來說,首先分析下橋接模式下資料是如何**的。
既然說到了橋接就不得不提到乙個資料鏈路層裝置------網橋。在計算機網路中,網橋作為乙個網路裝置應用也許並沒有那麼廣泛。但是作為它的擴充套件---交換機就顯得火的多了。交換機其本質就是相當於乙個多埠的網橋,大多數交換機是工作在資料鏈路層即l2層,但目前三層交換機也逐步浮出水面。在本片文章中我們說討論的僅僅是普通的二層交換機。
交換機既然工作在鏈路層,那麼其必定要比工作在物理層的集線器高明一點。即其**是基於幀的**,交換機可以提取到每個幀 的源mac和目的mac,並且其本身會維護乙個**表,表內包含有mac位址和其相應埠的對映。交換機收到乙個幀之後的處理流程如下:
1、每當交換機收到乙個幀,就提取出幀的源mac,然後查詢**表,表中若沒有這一項,就把該位址和進入的埠寫入**表,若存在,就更新!
2、然後提取目的mac,查詢**表,表中若有對應的項,就從對應的埠**出去,若沒有,就從除了接受該幀的所有埠**出去。
上面是對網橋(交換機基本原理的介紹),下面就談談linux核心中對這一特性的支援。
首先在橋接模式下,網絡卡需要設定成混雜模式。即接收所有到達的資料報,不管目的位址是否是網絡卡的mac。
在軟體方面,就要依賴與linux核心中的tun/tap驅動了。
tun/tap驅動詳解
tun/tap 用於虛擬網路裝置,tun虛擬網路層的裝置,而tap虛擬資料鏈路層的裝置。所以tun/tap驅動提供一種功能,即可以通過這種驅動建立介面(tun/tap),通過這些介面可以在核心和使用者空間傳送網路資料報,其中tun型別的介面可以傳送ip資料報即從鏈路層交付上來的包,不包含乙太網頭。tap介面可以傳送乙太網資料幀,就是鏈路層的包。
tun/tap驅動包含兩個部分,乙個是網絡卡驅動,乙個是字元裝置驅動。網絡卡驅動接收來自tcp/ip 協議棧的網路分包並傳送或者反過來將接收到的網路分包傳給協議棧處理;而字元驅動部分則將網路分包在核心與使用者態之間傳送,模擬物理鏈路的接收和傳送。tun/tap 驅動的字元裝置驅動部分向使用者態暴漏了乙個介面/dev/net/tun,其實是乙個字元裝置檔案,使用者空間的應用程式可以通過這個裝置檔案來和核心中的驅動程式進行互動,其操作方式和普通的檔案操作無異。
回想下連線一台交換機的pc機和外網互動的流程。一下幾個條件是必須的:
1、交換機上行埠--------用於連線外網
2、交換機下行埠--------用於連線交換機下面的各個pc機
3、網線
4、pc機(物理網絡卡)
外部資料通過交換機上行埠進入交換機,交換機工作在資料鏈路層,對資料幀提取mac位址,首先進行位址學習後,就進行資料幀的**,這裡根據位址表中是否包含做出不同的選擇,這不是重點,不在贅述。
然後資料幀通過網線到達pc機的物理網絡卡,然後系統就根據協議棧對資料報進行逐層處理最後交付了。
那麼上述情況遷移到虛擬化環境下,即在一台linux host上執行的虛擬機器,如何通過linux bridge上網?
其必要條件仍然有效,只不過需要採用另一種方式而已,見下圖
通過檢視上圖,我們不難發現,雖然遷移到了虛擬化的環境下,前面提到的四個條件依然存在
1、上行網路介面--------這裡表現為host的物理網絡卡,主要用以和外網互動
2、tap介面---------這裡就是虛擬出的網路裝置,稱之為tap device,這裡就是作為bridge的乙個埠,連線虛擬機器的虛擬網絡卡。
3、虛擬網線---------這裡主要表現為乙個裝置檔案/dev/net/tun ,使用者程式和tap接**互就是通過這個裝置檔案,從功能上來講就是類似於乙個網線。
4、虛擬網絡卡----------這裡就是從客戶端的角度,一台虛擬機器要傳送和接收網路資料報必定需要虛擬網絡卡
linux內部實現的bridge可以把一台機器上的多張網絡卡橋接起來,從而把自己作為一台交換機。同時,linux bridge還支援虛擬埠,即橋接的不一定都是物理網絡卡介面,還可以是虛擬介面。目前主要表現為tap介面,tap介面在邏輯上和物理網絡卡實現相同的功能,都可以接收和傳送資料報。所以這一應用也成就了虛擬化環境下的bridge實現。
到此基礎理論知識就介紹完了,那麼接下來就結合linux源**分析下橋接模式下資料報的**流程。
Linux下橋接模式詳解一
註冊已經好長時間,一直以來也沒有在上面寫過文章,都是隨意的記錄在了未知筆記上,今天開始本著分享和學習的精神想把之前總結的筆記逐步分享到,和大家一起學習,一起進步吧!2016 09 20 17 11 05 其實之前已經有分析過網橋的原理,但是當時對其理解還是侷限於表面,對於其本身的實現原理並沒有結合l...
CentOS下橋接模式設定靜態IP的方法
1 首先將虛擬機器設定成橋接模式 2 centos設定成靜態ip 一共需要修改兩個檔案,分別是 etc sysconfig network etc sysconfig network scripts ifcfg eth0 首先修改 etc sysconfig network 新增gateway 19...
Linux 系統網路橋接模式設定
使用橋接模式,設定網路連線 1 查詢本機ip 無線區域網介面卡 wlan 連線特定的 dns 字尾 ipv4 位址 192.168.31.206 子網掩碼 255.255.255.0 預設閘道器.192.168.31.1 2 修改網路配置檔案 cat etc sysconfig network sc...