linux的網路介面分為四部分:網路裝置介面,網路介面核心,網路協議族,網路介面socket層。
可參考:
網路裝置介面部分主要負責從物理介質接收和傳送資料,實現的檔案在linu/driver/net目錄下面。
網路介面核心部分是整個網路介面的關鍵部位,它為網路協議提供統一的傳送介面,遮蔽各種各樣的物理介質,同時有負責把來自下層的包向合適的協議配送。它是網路介面的中樞部份。它的主要實現檔案在linux/net/core目錄下,其中linux/net/core/dev.c為主要管理檔案。
網路介面socket層為使用者提供的網路服務的程式設計介面,主要的原始碼在linux/net/socket.c
傳送:
應用程式呼叫系統呼叫,將資料傳送給socket接收:socket檢查資料型別,呼叫相應的send函式
send函式檢查socket狀態、協議型別,傳給傳輸層
tcp/udp(傳輸層協議)為這些資料建立資料結構,加入協議頭部,比如埠號、檢驗和,傳給下層(網路層)
ip(網路層協議)新增ip頭,比如ip位址、檢驗和
如果資料報大小超過了mtu(最大資料報大小),則分片;ip將這些資料報傳給鏈路層
鏈路層寫到網絡卡佇列
網絡卡呼叫響應中斷驅動程式,傳送到網路
資料報從網路到達網絡卡,網絡卡接收幀,放入網絡卡buffer,在向系統傳送中斷請求
cpu呼叫相應中斷函式,這些中斷處理程式在網絡卡驅動中
中斷處理函式從網絡卡讀入記憶體,交給鏈路層
鏈路層將包放入自己的佇列,置軟中斷標誌位
程序排程器看到了標誌位,排程相應程序
該程序將包從佇列取出,與相應協議匹配,一般為ip協議,再將包傳遞給該協議接收函式
ip層對包進行錯誤檢測,無錯,路由
路由結果,packet被**或者繼續向上層傳遞
如果發往本機,進入鏈路層
鏈路層再進行錯誤偵測,查詢相應埠關聯socket,包被放入相應socket接收佇列
socket喚醒擁有該socket的程序,程序從系統呼叫read中返回,將資料拷貝到自己的buffer,返回使用者態。
網路資料報傳送接收全過程
linux的網路介面分為四部分 網路裝置介面,網路介面核心,網路協議族,網路介面socket層。可參考 應用程式呼叫系統呼叫,將資料傳送給socket socket檢查資料型別,呼叫相應的send函式 send函式檢查socket狀態 協議型別,傳給傳輸層 tcp udp 傳輸層協議 為這些資料建立...
網絡卡傳送與接收資料報
網絡卡如何傳送資料報 ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程式建立的mac包頭資訊,當然可以隨便輸入位址資訊的。主機偽裝就是這麼實現的。驅動程式將mac包拷貝到網絡卡晶元內部的緩衝...
網路資料報傳送的過程和DNS過程
在整個資料報傳輸過程當中,傳送 傳送端程序首先呼叫系統呼叫,然後把資料傳送給了socket,然後socket檢查資料型別,呼叫系統呼叫send函式,send函式檢查socket的狀態,協議型別,傳給了傳輸層,傳輸層對應的協議 udp或者是tcp為這些資料建立資料結構 然後加入對應的傳輸層協議頭部,然...