原创 NAPI 方式的實現 (linux網絡子系統學習 第三節 )

Linux 內核協議棧中報文接收的設計思路:NAPI接口和舊接口兩者有一下相同點: (1)、對報文的處理都應該放在軟中斷中處理。 (2)、兩者都有存儲報文的隊列,NAPI的隊列是由網卡來管理的,舊接口的隊列是由內核管理的。每個NAPI設備都

原创 GRO的實現 (linux網絡子系統學習 第七節)

GRO (generic receive offload)概述:GRO是在協議棧接收報文時進行減負的一種處理方式,該方式在設計上考慮了多種協議報文。主要原理是在接收端通過把多個相關的報文(比如TCP分段報文)組裝成一個大的報文後再傳送給協議

原创 收包軟中斷和netif_rx (linux網絡子系統學習 第四節 )

初始化報文接收軟中斷static int __init net_dev_init(void) { ...... open_softirq(NET_RX_SOFTIRQ, net_rx_action); ......

原创 鏈路層和網絡層的接口 (linux網絡子系統學習 第五節 )

網絡驅動接收到報文後,會初始化skb->protocol 字段。鏈路層的接收函數netif_receive_skb會根據該字段來確定把報文送給那個協議模塊進一步處理。以太網的設備調用 eth_type_trans()來給skb->proto

原创 軟中斷 (linux網絡子系統學習 第一節)

整個linux協議棧是運行在軟中斷環境中,所以學習協議棧首先要了解軟中斷。第一節就總結一下linux內核中軟中斷的具體實現。中斷的作用:當一箇中斷信號到達時,CPU必須停止它當前正做的工作,轉而去做中斷要求其做的事情。中斷分爲同步中斷和異步