搜尋
首頁系統教程Linux簡述Linux系統收發網路封包的過程

簡述Linux系統收發網路封包的過程

Feb 12, 2024 pm 09:54 PM
linuxlinux教程linux系統linux指令shell腳本網路卡驅動overflow嵌入式linuxlinux入門linux學習

Linux 伺服器收到網路封包,需要經過哪些處理,一步一步將資料傳給應用程式的呢?當應用程式發送封包時,Linux 又是如何操作將封包傳送出去的呢?今天我們就來聊聊這個話題。

在準備好接收網路封包之前,Linux需要做很多準備工作,例如:網路子系統的初始化、協定堆疊的註冊、網路卡驅動的初始化、啟動網路卡等等,只有這些都準備好了之後,才能真正開始接收網路包。

網路協定堆疊


#在介紹Linux收發網路封包之前,我們先來了解Linux網路協定堆疊。

國際標準化組織制定了開放式系統互聯通訊參考模型(Open System Interconnection Reference Model),也就是OSI 網路模型,該模型主要有7 層,分別是應用層、表示層、會話層、傳輸層、網路層、資料鏈結層以及實體層。

由於 OSI 模型太複雜,提出的只是存在於概念和理論上的一種模型,分層太多,增加了網路工作的複雜性,所以沒有大規模應用。
我們比較常見是TCP/IP 網路模型,Linux 系統正是依照這套網路模型來實現網路協定棧的。

TCP/IP 網路模型共有 4 層,分別是應用層、傳輸層、網路層和網路介面層,每一層負責的功能如下:

1、應用層 對應於OSI參考模型的高層,為使用者提供所需的各種服務,例如:FTP、Telnet、DNS、SMTP等.

2、傳輸層 對應OSI參考模型的傳輸層,為應用層實體提供端對端的通訊功能,保證了封包的順序傳送及資料的完整性。此層定義了兩個主要的協定:傳輸控制協定(TCP)和用戶資料報協定(UDP).

3、網路層 對應OSI參考模型的網路層,主要解決主機到主機的通訊問題。它所包含的協定設計資料包在整個網路上的邏輯傳輸。專注於重新賦予主機一個IP位址來完成對主機的尋址,它也負責資料包在多種網路中的路由。此層有三個主要協定:網際協定(IP)、網際網路群組管理協定(IGMP)和網際網路控制封包協定(ICMP)。

4、網路介面層 與OSI參考模型中的實體層與資料鏈結層相對應。它負責監視資料在主機和網路之間的交換。事實上,TCP/IP本身並未定義該層的協議,而由參與互連的各網路使用自己的實體層和資料鏈結層協議,然後與TCP/IP的網路存取層進行連接。位址解析協定(ARP)工作在此層,即OSI參考模型的資料鏈結層。
簡述Linux系統收發網路封包的過程

#接收網路封包


簡述Linux系統收發網路封包的過程

#網路封包到達網卡後,依照FIFO順序存入網卡的接收佇列,網卡透過 DMA 技術,將網路封包寫入指定的記憶體位址(Ring Buffer)。

Ring Buffer是在網卡驅動程式啟動時建立和初始化的,儲存的是sk_buff緩衝區的描述符(物理位址和大小等)。

#

當網路包到達時,從Ring Buffer取得指向的sk_buff描述符,透過DMA將資料寫入該位址。等sk_buff中的資料交由上層協定棧處理後,Ring Buffer中的描述更新為新分配的sk_buff。

#接著網路卡向 CPU 發起硬體中斷,當 CPU 收到硬體中斷要求後,根據中斷註冊表,找到註冊的中斷處理函數。

硬體中斷處理函數會做如下的事情:

1、屏蔽網卡的中斷

#目的是避免CPU被頻繁中斷而無法處理其他任務,屏蔽中斷是告訴網卡已經知道記憶體中有資料了,下次再收到資料包直接寫記憶體就可以了,不要再通知 CPU 了。

#2、發起軟體中斷,恢復剛才屏蔽的中斷

#「

#內核中的ksoftirqd 線程收到軟中斷後,就會調用相應軟中斷的處理函數來輪詢處理數據,即:從Ring Buffer 中獲取一個數據幀,用sk_buff 表示,作為一個網絡包交給網路協定棧從下到上進行逐層處理。

#網路協定堆疊對網路套件的處理流程如下:

#1、網路介面層

#「

#首先,網路介面層檢查封包的合法性和正確性,如果不合法或封包校驗不正確則丟棄,否則找出上層協定的類型(IPv4還是IPv6),去掉幀頭、幀尾,然後交給上層即網絡層處理。

#2、網路層

#「

#網路層取出IP頭,判斷網路包下一步的走向,是轉送還是交給上層。當確認網路包是要傳送給本機後,就取出上層協定的類型(例如TCP或UDP),去掉IP頭,然後交給傳輸層處理。

#3、傳輸層

#「

#傳輸層取出 TCP 頭或 UDP 頭後,根據四元組【 來源 IP、來源連接埠、目的 IP、目的連接埠 】,找出對應的 Socket,並把資料拷貝到 Socket 的接收緩衝區。

#4、應用層

#「

#最後,應用層程式呼叫 Socket 接口,將內核的 Socket 接收緩衝區的資料拷貝到應用層的緩衝區。

#到這裡,一個網路包的接收過程就結束了。

發送網路封包


#我們了解網路包的接收流程後,就很容易了解網路包的發送流程了。網路包的發送方向,正好跟接收方向相反。

首先,應用程式呼叫 Socket 發送網路包的介面。這是一個系統調用,會從用戶態陷入到內核態的套接字層。

套接字層會申請一個內核態的 sk_buff 內存,將用戶待發送的資料拷貝到 sk_buff 內存,並將其加入到Socket發送緩衝區等待網路協定棧的處理。

由於網路資料包從應用程式傳到核心時是原始數據,因此協定堆疊要在原始資料中加入通訊約定才能保證資料到達服務端能被正確辨識。網路協定堆疊從Socket 發送緩衝區中,取出資料包,然後依照TCP/IP 棧的分層(傳輸層、網路層、網路介面層),從上到下逐層處理,各層將協定的頭資訊不斷插入到資料包中。

協定堆疊對傳送封包的處理流程如下:

#1、傳輸層

#「

#在傳輸層,會為器添加TCP頭,同時拷貝一個新的sk_buff 副本,這是因為sk_buff 在到達網卡發送完成的時候,會被釋放掉,而TCP 協議是支援重傳的,為確保網路包可靠傳輸,在收到對方的ACK 之前,這個sk_buff 不能被刪除。

#2、網路層

#「

#在網路層,主要會做這些工作:選取路由(確認下一跳的 IP)、填充 IP 頭、netfilter 過濾、對超過 MTU 大小的封包進行分片。處理完這些工作後會交給網路介面層處理。

#3、網路介面層

#「

#

網路介面層會進行實體位址定址,以找到下一跳的 MAC 位址,填入幀頭和幀尾,將其放到傳送佇列中。然後觸發軟中斷告訴網卡驅動程式:佇列中有新的網路包需要發送。驅動程式收到通知會通過 DMA ,從發送包佇列中讀出網路幀,並透過DMA將資料寫入網卡的FIFO發送佇列。

#4、網路卡設備

#「

#網卡設備從FIFO發送隊列中取出資料包,將其發送到網路;當發送完成的時候,網卡設備會觸發一個硬中斷來釋放內存,主要是釋放 sk_buff內存和清理 RingBuffer 內存。最後,當收到這個 TCP 封包的 ACK 應答時,傳輸層就會釋放原始的 sk_buff。

#至此,一個網路包的發送流程就結束了。

以上是簡述Linux系統收發網路封包的過程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:良许Linux教程网。如有侵權,請聯絡admin@php.cn刪除
Linux操作是什麼?Linux操作是什麼?Apr 13, 2025 am 12:20 AM

Linux操作系統的核心是其命令行界面,通過命令行可以執行各種操作。 1.文件和目錄操作使用ls、cd、mkdir、rm等命令管理文件和目錄。 2.用戶和權限管理通過useradd、passwd、chmod等命令確保系統安全和資源分配。 3.進程管理使用ps、kill等命令監控和控制系統進程。 4.網絡操作包括ping、ifconfig、ssh等命令配置和管理網絡連接。 5.系統監控和維護通過top、df、du等命令了解系統運行狀態和資源使用情況。

使用Linux別名提高自定義命令快捷方式的生產率使用Linux別名提高自定義命令快捷方式的生產率Apr 12, 2025 am 11:43 AM

介紹 Linux是一個強大的操作系統,由於其靈活性和效率,開發人員,系統管理員和電源用戶都喜歡。但是,經常使用長而復雜的命令可能是乏味的

Linux實際上有什麼好處?Linux實際上有什麼好處?Apr 12, 2025 am 12:20 AM

Linux適用於服務器、開發環境和嵌入式系統。 1.作為服務器操作系統,Linux穩定高效,常用於部署高並發應用。 2.作為開發環境,Linux提供高效的命令行工具和包管理系統,提升開發效率。 3.在嵌入式系統中,Linux輕量且可定制,適合資源有限的環境。

在Linux上掌握道德黑客的基本工具和框架在Linux上掌握道德黑客的基本工具和框架Apr 11, 2025 am 09:11 AM

簡介:通過基於Linux的道德黑客攻擊數字邊界 在我們越來越相互聯繫的世界中,網絡安全至關重要。 道德黑客入侵和滲透測試對於主動識別和減輕脆弱性至關重要

如何學習Linux基礎知識?如何學習Linux基礎知識?Apr 10, 2025 am 09:32 AM

Linux基礎學習從零開始的方法包括:1.了解文件系統和命令行界面,2.掌握基本命令如ls、cd、mkdir,3.學習文件操作,如創建和編輯文件,4.探索高級用法如管道和grep命令,5.掌握調試技巧和性能優化,6.通過實踐和探索不斷提陞技能。

Linux最有用的是什麼?Linux最有用的是什麼?Apr 09, 2025 am 12:02 AM

Linux在服務器、嵌入式系統和桌面環境中的應用廣泛。 1)在服務器領域,Linux因其穩定性和安全性成為託管網站、數據庫和應用的理想選擇。 2)在嵌入式系統中,Linux因其高度定制性和高效性而受歡迎。 3)在桌面環境中,Linux提供了多種桌面環境,滿足不同用戶需求。

Linux的缺點是什麼?Linux的缺點是什麼?Apr 08, 2025 am 12:01 AM

Linux的缺點包括用戶體驗、軟件兼容性、硬件支持和學習曲線。 1.用戶體驗不如Windows或macOS友好,依賴命令行界面。 2.軟件兼容性不如其他系統,缺乏許多商業軟件的原生版本。 3.硬件支持不如Windows全面,可能需要手動編譯驅動程序。 4.學習曲線較陡峭,掌握命令行操作需要時間和耐心。

Linux難以學習嗎?Linux難以學習嗎?Apr 07, 2025 am 12:01 AM

Linuxisnothardtolearn,butthedifficultydependsonyourbackgroundandgoals.ForthosewithOSexperience,especiallycommand-linefamiliarity,Linuxisaneasytransition.Beginnersmayfaceasteeperlearningcurvebutcanmanagewithproperresources.Linux'sopen-sourcenature,bas

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。