16 1 2 核心中網路部分流程簡介

2021-05-14 14:46:50 字數 1604 閱讀 9703

網路協議棧是由若干個層組成的,網路資料的流程主要是指在協議棧的各個層之間的傳遞。在第

7.2節裡介紹了

tcp網路程式設計的流程,乙個

tcp伺服器的流程按照建立

socket()

,繫結(

bind()

)位址埠,偵聽埠

listen()

,接收連線

accept()

,傳送資料

send()

,接收資料

recv()

,關閉socket()

的順序來進行。與此對應核心的處理過程也是按照此順序進行的,網路資料在核心中的處理過程主要是在網絡卡和協議棧之間進行:從網絡卡接收資料,交給協議棧處理;協議棧將需要傳送的資料通過網路發出去。

圖16.3

總結了各層間在網路輸入輸出時的層間呼叫關係。由圖中可以看出,資料的流向主要有兩種。應用層輸出資料時,資料按照自上而下的順序,依次通過插口層、協議層和介面層;當有資料到達的時候,自下而上依次通過介面層、協議層和插口層的方式,在核心層傳遞。

圖16.3

網路輸入輸出的各層間呼叫

應用層的

socket

的初始化、繫結(

bind

)、銷毀通過呼叫核心層的

socket()

函式進行資源的申請、銷毀。

傳送資料的時候,將資料由插口層傳遞給協議層,協議層在

udp層新增

udp的首部、

tcp層新增

tcp的首部、

ip層新增

ip的首部,介面層的網絡卡則新增乙太網相關的資訊後,通過網絡卡的傳送程式傳送到網路上。

接收資料的過程是乙個相反的過程,當有資料到來的時候,網絡卡的中斷處理程式將資料從乙太網網絡卡的

fifo

對列中接收到核心,傳遞給協議層,協議層在

ip層剝離

ip的首部、

udp層剝離

udp的首部、

tcp層剝離

tcp的首部後傳遞給插口層,插口層查詢

socket

的標示後,將資料送給使用者層匹配的

socket。圖

16.4

為linux

核心層的網路協議棧的架構檢視。最上面是使用者空間層,應用層的程式位於此處。最底部是物理裝置,例如乙太網網絡卡等,提供網路資料的連線、收發。中

間是核心層,即網路協議棧子系統。流經網路棧內部的是

socket

緩衝區(由結構

sk_buffs

接連),它負責在源和匯點之間傳遞報文資料。在

16.1.4

節中會對

sk_buff 

的結構進行

介紹。圖16.4linux

核心網路協議棧架構

頂部(參見圖

16.4

)是系統呼叫介面,它為使用者空間的應用程式提供了一種訪問核心網路子系統的介面。位於其下面的是乙個協議無關層,它提供了一種通用方法來使用底層傳輸層協議。然後是實際協議,在

linux

中包括內嵌的協議

tcp、

udp,當然還有

ip。然後是另外乙個網路裝置協議無關層,提供了與各個裝置驅動程式通訊的通用介面,最下面是裝置驅動程式本身。

核心中讀寫檔案

在使用者態,可以使用open,close,read,write等系統呼叫來訪問檔案。那麼核心中呢?使用filp open等函式進行操作,但是這些操作又有些需要注意的地方。在實際應用中,我們可以把系統執行的一些狀態記錄到記憶體中,但記憶體畢竟小,而且在系統重啟後,資料會丟失。那麼是否可以在核心中開啟乙...

Java核心中的核心 多型

一句話概括多型 也叫動態繫結 在執行期間,判斷其引用的實際型別,根據其實際的型別,呼叫對應的方法。多型可以幫助我們的程式的顆擴充套件性達到極致。多型的三個必要條件 1 要有繼承。2 子類要重寫父類的方法。3 父類的引用指向子類的物件。根據以下的 來理解 class animal 在animal類裡面...

IoC容器 Spring核心中的核心

spring 容器是 spring 框架的核心。容器將建立物件,把它們連線在一起,配置它們,並管理他們的整個生命週期從建立到銷毀。spring 容器使用依賴注入 di 來管理組成乙個應用程式的元件。這些物件被稱為 spring bean。1 spring主要容器包括beanfactory sprin...