深入理解Linux網路技術內幕-網路裝置初始化(三)

來源:互聯網
上載者:User

虛擬設備

虛擬設備是建立在一個或多個真實裝置之上的抽象,虛擬設備與真實裝置之間的對應關係可以是一對一、一對多、多對一的,有可能在其他虛擬設備之上建立虛擬設備。但並非所有組合都有意義,也並非所有組合都有核心支援。

虛擬設備的使用情形有如下幾種:

  • 綁定(Bonding):一組真實裝置虛擬為一個虛擬設備,使其如同單一裝置來提高效能;
  • 802.1Q:這是一種VLAN標準,用VLAN前序擴充802.3/Ethernet幀頭,建立VLAN;
  • 橋接(Bridding):橋接介面就是橋接器的虛擬設備
  • 別名介面(aliasing interface):允許一個真實Ethernet介面可以具有多個虛擬介面(eth0:0 eth0:1等),每個介面都有自己的IP配置。現在,網路代碼的改進,在同一個NIC裝置上配置多個IP地址已經不需要定義一個新的虛擬介面。
  • 普通均衡器(true equalizer, TEQL):這是隊列規則,用於流量控制
  • 隧道介面(tunnel  interface):IP over IP隧道已經GRE(通用路由封裝)協議的實現基礎就是虛擬設備的建立

 

虛擬設備與核心網路通訊協定棧之間的互動

虛擬設備和真實裝置與核心的互動方式略有不同:

  • 初始化:大多數虛擬設備如同真實裝置一樣,都會被指派一個net_device資料結構,但並非所有的虛擬設備都會被指派一個net_device執行個體,別名裝置只是作為相關聯的真實裝置上的簡單標籤來實現的
  • 配置:大多數虛擬設備需要提供特殊的使用者空間工具來配置,尤其是只應用於虛擬設備的高層欄位,無法使用ifconfig等標準工具進行配置
  • 外部介面:每個虛擬設備通常都會輸出一個檔案或包含一些檔案的目錄到/proc檔案系統內,與虛擬設備相關的檔案屬於額外檔案,不會替代與物理裝置相關的檔案,也就是說虛擬設備會產生自己的/proc檔案,但本身自己沒有net_device執行個體的別名裝置是個例外
  • 傳輸:當虛擬設備與真實裝置不是一對一的關係時,用於傳輸的函數可能需要選擇所用的真實裝置以及其他任務,因為QoS是按照每個裝置的需要而應用的,虛擬設備和真實裝置之間有多重關係時,就意味著要配置流量控制
  • 接收:虛擬設備都是軟體對象,不需要參與系統上真實資源的互動,如註冊IRQ處理以及分配I/O連接埠和I/O記憶體等。因此不同種類的虛擬設備在接收資料包時具有不同的行為
  • 外部通知資訊:虛擬設備的邏輯是實現在真實裝置之上的,真實裝置對此邏輯毫無所知,因此無法將這些通知資訊傳過去。通知資訊就必須直接面對虛擬設備,如在綁定情形中,如果綁定裝置群組中的一個裝置宕機,則用於分配流量的演算法必須能夠發現這一情況,才能將後續流量避免分配給宕機裝置。與軟體實現觸發資訊不同的是硬體觸發的資訊如PCI電源管理,就無法直接到達虛擬設備,因為沒有和虛擬設備相關的硬體。

Proc檔案系統中相關與網路初始化的設定檔

/proc中的一些檔案會輸出內部資料結構和配置參數的值,用於記錄裝置驅動程式分配的資源和狀態。如lsmod命令就是將proc/modules檔案作為資訊來源輸出當前系統中載入的模組和依賴關係。

在/proc/net目錄下有裝置處理層初始化函數net_dev_init通過dev_proc_init和dev_mcast_init建立的檔案:

dev檔案:包含了註冊到核心中每個網路裝置有關接收和傳輸的一些統計資料:

dev_mcast檔案:顯示註冊到核心中每個網路裝置一些IP多播使用的參數值

wireless:類似於dev檔案,輸出每個無線裝置dev->get_wireless_stats的一些參數值。這些值只適用於無線裝置,因為無線裝置會分配一個資料結構來儲存這些統計資料

softnet_stat:輸出有關網路子系統使用的軟體中斷的統計資料

 

與系統初始化相關的函數

 

request_irq                            分配IRQ線並註冊中斷處理常式回呼函數,可以註冊獨享或共用中斷線

free_irq                                  登出中斷處理常式回呼函數,若沒有裝置再使用此中斷線,則釋放這個中斷線資源

request_region                      分配I/O連接埠及I/O記憶體

release_region                       釋放I/O連接埠及I/O記憶體

call_usermodehelper              調用使用者空間輔助應用程式

module_param                       模組配置參數

net_dev_init                          在系統引導期間對一段網路代碼做初始化

全域變數

dev_boot_phase                     布爾標識。以強制NIC裝置在驅動程式註冊前執行net_dev_init

資料結構

struct irq_action                    每個IRQ線執行個體定義結構,包括一個回呼函數

net_device                             描述一個網路裝置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.