網卡如何接收數據包

網線可以看作一個高速公路,物理幀也就是輛汽車,網卡呢?或許是個加油站吧。
從這個角度將,汽車和加油站沒有絕對的對應關係,所有的汽車都可以進入該加油站。
 
正常情況:
網線上的物理幀首先被網卡芯片獲取,網卡芯片會檢查物理幀的CRC,保證完整性。
其次,網卡芯片將物理幀頭去掉,得到MAC包。
網卡芯片檢查MAC包內的目的MAC地址信息,和本網卡的MAC地址是否一致?不一致,拋棄。
網卡芯片將MAC幀拷貝到網卡內部的緩衝區,觸發中斷。
驅動程序通過中斷,將MAC包拷貝到系統中,構建sk_buff。告訴上層。
上層去掉MAC包頭,得到需要的IP包。
 
過程中,網卡芯片對物理幀進行了MAC匹配過濾。這樣做可以減小系統負荷。
試想一下,若網卡芯片對所有的MAC幀不加判斷的直接提供給驅動,讓CPU判決會是什麼樣子呢?
當總線上數據繁忙,CPU將浪費大部分時間去判斷該MAC包是否是自己需要的,效率低下。
 
不正常模式(混聽):
網線上的物理幀首先被網卡芯片獲取,網卡芯片會檢查物理幀的CRC,保證完整性。
其次,網卡芯片將物理幀頭去掉,得到MAC包。
網卡芯片發現自己當前被配置爲混聽模式,就不對MAC包過濾。
網卡芯片將MAC幀拷貝到網卡內部的緩衝區,觸發中斷。
驅動程序通過中斷,將MAC包拷貝到系統中,構建sk_buff。告訴上層。
上層去掉MAC包頭,得到需要的IP包。
顯然,這裏的IP包並一定是發給自己的。
 
驅動的問題
網卡到底能不能接收其他MAC包,完全取決於網卡芯片中RCR(receive control register)配置。
驅動程序是決定網卡能否工作與混聽模式的橋樑。
混聽模式會加重CPU的負荷,而且也是不符合標準應用的!
 
所有的車輛都要從加油站穿過,(有些都不加油),加油站工作人員的任務量就可想而知。
 
 
當然也有例外,有些程序不通過驅動,也可以直接訪問網卡芯片RCR達到設置混聽模式。
所謂 條條大路通香港,就是這個道理:)沒有絕對的
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章