linux網絡設備層次

linux網絡設備驅動與字符設備和塊設備有很大的不同。
1.字符設備和塊設備對應/dev下的一個設備文件。而網絡設備不存在這樣的設備文件。網絡設備使用套接字socket訪問,雖然也使用read,write系統調用,但這些調用只作用於軟件對象。
2.塊設備只響應來自內核的請求,而網絡驅動程序異步接收來自外部世界的數據包,並向內核請求發送到內核。

linux內核中網絡子系統的設計基於設備無關及協議無關思想。即無論什麼網卡驅動、網絡協議,都對應統一的驅動程序。

linux網絡協議棧層次有四層:
網絡協議接口層
網絡設備接口層 
設備驅動功能層 
網絡設備媒介層

下面只分析下linux是如何實現網絡設備的設備無關性及協議無關性。

網絡協議接口層:給上層協議提供透明的數據包發送和接收接口。與協議無關
當要發送數據包時,ARP協議或者IP協議,都將調用這一層中的dev_queue_xmit()函數發送該數據包。
上層對數據包的接收時,通過netif_rx()接收。具體協議處理在上級網絡協議處理。
這其中需要一個很重要的結構體struct sk_buff.

網絡設備接口層:爲千變萬化的網絡設備定義統一、抽象的數據結構net_device結構體,實現多種硬件在軟件層次上的統一。與設備無關。
net_device結構體在內核中指代一個網絡設備,網絡設備驅動程序只需通過填充net_device中的具體成員並註冊net_device即可實現硬件操作函數與內核的掛接。使用統一的註冊、註銷及初始化等一系列函數。 

設備驅動功能層:填充net_device中的成員。管理物理網絡設備。
包括設備打開、停止、傳輸等操作。由於網絡包得接收可以由中斷產生,所以設備驅動功能層中另一個主題部分是中斷處理函數,負責讀取硬件上接收的數據包並傳送給上層協議。

網絡設備與媒介層:對應於實際的物理設備
包括設備寄存器的描述,寄存器讀寫函數等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章