驅動和網卡的交互過程很少人會關注,但是如果你懂這方面的知識,會對用戶態的網絡編程更加理解深刻和通透。
驅動和網卡之間是異步通信。驅動在請求發送數據之後CPU就去幹別的事情去了。網卡發送完包之後通過中斷通知CPU,CPU再通過驅動程序瞭解到結果。和發送數據一樣,接收數據也是異步的。網卡把數據倒騰到主存之後再通過中斷通知CPU。
因此,預留一些空間來緩存發送和接受的buffer是必要的。大多數情況下,網卡使用環結構,這個環基本上就是一個隊列,它具有固定的條目數,每一個條目存儲一個發送或者接受的數據。條目被順序的輪流使用,可以複用。如下圖所示,可以看到數據傳送過程。
驅動接收上層的數據並創建一個網卡可以理解的數據包描述(send descriptor),包含了主存地址和大小。由於網卡只認識物理地址,所以驅動還需將虛擬地址轉換成物理地址,之後把send descriptor放到Tx ring之中。下一步通過通知網卡有新的數據了,之後網卡通過DMA(直接內存訪問)獲取元數據和數據發送出去。發送完之後通過DMA把結果寫回,之後發送中斷通知。
數據的接收和發送反推過程差不多,自己看圖:
不多說了,自己看圖也能理解了。
本片文章內容非常精簡,但不代表知識量少,大家可能也發現了源理君的文章篇幅不是很長,但會把知識講清楚、明白。
相關推薦
'今年很有價值的一篇文章,看完你就懂了'
"人來到這個世界上,只有兩件事:生和死。一件事已經做完了,另一件你還急什麼呢?是人,都有七情六慾。是心,都有喜怒哀樂,這些再正常不過了。別總抱怨自己活得累,過得辛苦。永遠記住:舒坦是留給死人的。苦,才是生活;累,才是工作;變,才是命運;忍,才是歷練;容,才是智慧;靜,才是修...
'查出甲狀腺結節該不該開刀?這篇文章告訴你怎麼做'
"很多人到醫院進行一次普通的體檢後,可能會發現自己患有甲狀腺結節。開始琢磨是不是需要到醫院進行手術切除,也有患有甲狀腺結節的人感覺自己離甲狀腺癌又進了一步,於是整日憂心忡忡。那麼,患有甲狀腺結節,究竟是不是需要做手術呢?想了解更多甲狀腺疾病方面問題?請+V 15564170...
'iPhone11怎麼買、去哪裡買最划算?一篇文章告訴你答案'
" 9月11日凌晨,iPhone11如約而至。儘管在發佈之後遭遇了大量的吐槽,但憑藉蘋果的金字招牌。短短一天之內,京東上的預約量已經超過90萬臺。可見蘋果的號召力還是不弱的。 看完了發佈會的你,是不是開始準備下單呢?或者正在猶豫買哪個型號?選擇國行還是港行?這篇快速購買...
'貴就好?一篇文章告訴你目前旗艦怎麼買最划算,實話'
"注:問題都是來源於“興趣部落”數碼愛好者發的帖子,我並沒有黑什麼手機,請知悉。看文章聽音樂是種享受,想聽什麼留言告知(都是付費無損包)歡迎小夥伴來到《國產旗艦手機動態欄目》當教主定了這個標題的時候“目前國產新旗艦什麼最值得買”,其實雖然充滿著不假思索的想法,但是依然處於絕...
'為什麼貓咪頻繁的蹲貓砂盆?而且會時不時慘叫。一篇文章告訴你'
"不知道廣大的鏟屎官有沒有過這樣的經歷?自己家的貓咪會去頻繁的蹲貓砂盆,可是卻沒有看到貓咪排尿或者排便,又或者是貓咪的排尿量沒有以前大,都是一滴一滴出來的,還帶著血,偶爾在蹲貓砂盆的時候還會慘叫幾聲?貓咪出現這樣的情況,鏟屎官可是要注意起來哦,一定要儘早帶貓咪就醫,因為這是...
'爆款文章開頭怎麼寫?這4個點你需要注意'
"好不容易想到一個完美標題,文章打開率不錯,結果讀者看完開頭就跑了!!這是一種什麼體驗?如果你還不知道如何寫文章開頭,這篇短文可以花幾分鐘看下。話不多,實用,可操作!關於文章開頭可以如何去寫,老賊之前推薦過一些落地性很強的角度:濃縮精華:可以對文章核心點進行高度概括,讓讀者...
'一篇文章告訴你如何看翡翠原石的表現'
"賭石作為一種既刺激又冒險的交易方式,賭的是經驗和運氣。翡翠是玉中之王,大皆歡喜。翡翠毛料,喜歡的人也越來越多,不僅因價值高,而是翡翠是世界所有石頭中唯一需要賭的賭石,具有誘人的神祕性和刺激性。一、檢查皮料的結晶狀況一般來說,翡翠礫石粗皮料結晶就大,結構就鬆軟、硬度就低、透...
推薦中...