TCP 握手數據流

這張圖詳細描述了 TCP 握手過程中,從客戶端發送 SYN 包到服務器最終建立連接的整個數據流轉過程,包括網卡、內核、進程中的各個環節。下面對每個步驟進行詳細解釋:

客戶端到服務器的初始連接請求
  1. 客戶端發送 SYN 包
    • 客戶端發起一個 TCP 連接請求,發送 SYN(同步)包到服務器。
    • 這個 SYN 包是三次握手的第一步。
網卡驅動
  1. 進入網卡的 RingBuffer

    • 服務器的網卡接收到來自客戶端的 SYN 包,將其存儲在網卡硬件的 RingBuffer 中。
    • RingBuffer 是網卡內置的一個循環緩沖區,用于暫存接收到的數據包。
  2. DMA 傳輸

    • 網卡使用 DMA(Direct Memory Access)將數據包從 RingBuffer 傳輸到系統內存中的 DMA 緩沖區。
    • DMA 緩沖區位于系統內存,由網卡驅動程序管理。
內核處理
  1. 硬中斷觸發

    • 當數據包被 DMA 傳輸到系統內存后,網卡觸發硬中斷通知 CPU 數據包已經到達。
    • 硬中斷處理程序進行基本處理,如記錄中斷事件,并觸發軟中斷請求。
  2. 軟中斷處理

    • 軟中斷處理程序(如 NAPI 輪詢函數)將數據包從 DMA 緩沖區讀取,并復制到 sk_buff 結構中。
    • sk_buff 是內核中用于存儲和管理網絡數據包的數據結構。
  3. 協議棧處理

    • 數據包被存儲在 sk_buff 中,并傳遞給內核的網絡協議棧進行處理。
    • netif_receive_skb 函數中,數據包根據其協議類型(如 TCP、UDP、ARP 等)被傳遞到相應的處理函數。
TCP 三次握手處理
  1. 進入半連接隊列

    • 如果數據包是 TCP SYN 包,它將進入服務器的半連接隊列(Syn Queue)。
    • 半連接隊列用于存儲尚未完成三次握手的連接請求。
  2. 完成三次握手

    • 服務器發送 SYN-ACK 包給客戶端,并等待客戶端發送 ACK 包以完成三次握手。
    • 當服務器接收到客戶端的 ACK 包后,連接請求從半連接隊列移到全連接隊列(Accept Queue)。
進程處理
  1. 全連接隊列
    • 全連接隊列用于存儲已完成三次握手的連接請求,等待應用層調用 accept 系統調用來處理這些連接。
    • 應用程序調用 accept 后,連接從全連接隊列移到應用層,正式建立連接,準備進行數據傳輸。

DMA 緩沖區的滿情況和處理方法

DMA 緩沖區滿的處理
  1. 數據包丟失

    • 當 DMA 緩沖區滿時,新到的數據包無法存儲,將被丟棄。這會導致數據包丟失,特別是在高流量情況下。
  2. 優化措施

    • 增大 DMA 緩沖區:如果硬件允許,可以通過配置或升級網卡來增大 DMA 緩沖區的大小。
    • 調整系統參數:優化內核參數,以增加系統緩沖區的容量,提高整體處理能力。
    • 使用多隊列:配置網卡的多隊列機制,使得多個隊列可以并行處理數據包,提高處理效率。
    • 流量控制:在高流量情況下,使用流量控制和限流機制,減少數據包丟失。
示例命令
  • 調整 RingBuffer 和隊列大小

     bash 

    復制代碼

    ethtool -G eth0 rx 4096

  • 調整內核參數

     bash 

    復制代碼

    sysctl -w net.core.rmem_max=26214400 sysctl -w net.core.wmem_max=26214400

  • 調整中斷親和性

     bash 

    復制代碼

    echo 1 > /proc/irq/IRQ_NUMBER/smp_affinity

結論

TCP 握手過程中,數據包從網卡接收到系統內存,再到內核處理的整個過程,涉及硬件(如網卡、RingBuffer、DMA)和軟件(如 sk_buff、協議棧、連接隊列)多個層面的協作。DMA 緩沖區在高流量情況下可能會滿,通過合理的硬件配置和系統優化,可以提高網絡數據包處理能力,減少數據包丟失,保障網絡性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43187.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

添加點擊跳轉頁面,優化登錄和注冊頁路由

一、給注銷按鈕添加點擊跳轉至登錄頁 1、在路由中添加登錄頁路由 2、自定義登錄頁面 3、在app.vue頁面找到下拉框組件,添加點擊事件 4、使用vue-router中的useRoute和useRouter 點擊后可以跳轉,但是還存在問題,路徑這里如果我們需要更改登錄…

Linux——公網 IP別名設置,清屏,刪除別名,在linux中提供alias永久化的方法,命令歷史

#### ipe - 公網 IP別名設置: bash alias ipecurl ipinfo.io/ip [rootserver ~]# alias ipecurl ipinfo.io/ip [rootserver ~]# ipe 113.132.176.202[rootserver ~]# #### c - 清屏,一般使用 ctrl l 快捷鍵,也可以將 clear 命令定義得更短&…

JavaScript 作用域 與 var、let、const關鍵字

目錄 一、JavaScript 作用域 1、全局作用域 2、函數作用域 3、塊級作用域 4、綜合示例 5、總結 二、var、let、const 1、var 關鍵字 2、let 關鍵字 3、const 關鍵字 4、總結 5、使用場景 一、JavaScript 作用域 在JavaScript中,作用域是指程序中可訪問…

訂單到期關閉

文章目錄 前言一、場景?二、使用步驟1.項目配置好rocketmq2.讀入數據 其他方式處理訂單到期關閉定時任務 前言 實習期間在做訂單模塊。遇到過訂單到時關閉的場景。 因為我們在通過回調接收第三方訂單狀態的時候,使用了rocketmq,在遇到訂單超…

叁[3],使用Newtonsoft.Json.dll,異常記錄

開發環境 VS2022/.net6.0/WPF 1,異常1,反序列化數組異常。 convertError:"[{"不拉不拉***************************** 原因:檢查是Json字符串的數組格式異常。 正常數組字符串 "result":[{"key1":"value1"…

神經網絡構成、優化、常用函數+激活函數

Iris分類 數據集介紹,共有數據150組,每組包括長寬等4個輸入特征,同時給出輸入特征對應的Iris類別,分別用0,1,2表示。 從sklearn包datasets讀入數據集。 from sklearn import darasets from pandas impor…

vulnhub-NOOB-1

確認靶機 掃描靶機發現ftp Anonymous 的A大小寫都可以 查看文件 解密 登錄網頁 點擊about us會下載一個壓縮包 使用工具提取 steghide info 目標文件 //查看隱藏信息 steghide extract -sf 目標文件 //提取隱藏的文件 steghide embed -cf 隱藏信息的文件 -ef…

什么樣的開放式耳機好用舒服?南卡、倍思、Oladance高人氣質量絕佳產品力薦!

?開放式耳機在如今社會中已經迅速成為大家購買耳機的新趨勢,深受喜歡聽歌和熱愛運動的人群歡迎。當大家談到佩戴的穩固性時,開放式耳機都會收到一致好評。對于熱愛運動的人士而言,高品質的開放式耳機無疑是理想之選。特別是在近年來的一些騎…

算法學習記錄4

L2-012 關于堆的判斷 def checkHeap(heap, target):if target 0:return heapif heap[target] < heap[(target - 1) // 2]:temp heap[target]heap[target] heap[(target - 1) // 2]heap[(target - 1) // 2] tempheap checkHeap(heap, (target - 1) // 2)return heapdef…

2024.7.7刷題記錄

目錄 一、849. Dijkstra求最短路 I - AcWing題庫 二、850. Dijkstra求最短路 II - AcWing題庫 根據講解視頻寫的代碼 一、849. Dijkstra求最短路 I - AcWing題庫 N 600 MAXL 10010 # 最長邊長 # 稠密圖鄰接矩陣 g [[MAXL] * N for _ in range(N)] dist [MAXL] * N …

圖片kb太大了怎么改小?修改圖片kb的方法介紹

圖片kb太大了怎么改小&#xff1f;將圖片的文件大小&#xff08;以KB為單位&#xff09;縮小可以帶來多種優點&#xff0c;但也有一些缺點需要注意。縮小圖片文件大小可以顯著減少它在硬盤或其他存儲設備上占用的空間&#xff0c;使你能夠存儲更多的圖片和其他文件。而且&#…

KIVY 3D Rotating Monkey Head?

7 Python Kivy Projects (With Full Tutorials) – Pythonista Planet KIVY 3D Rotating Monkey Head kivy 3D 旋轉猴子頭How to display rotating monkey example in a given layout. Issue #6688 kivy/kivy GitHub 3d 模型下載鏈接 P99 - Download Free 3D model by …

【Qt】QItemSelectionModel 添加選中行

1. 介紹 QItemSelectionModel 中沒有直接添加選中行的方法&#xff0c;可以通過下面的方式添加。 2. 代碼 //定義 QSqlTableModel* m_tableModel; QItemSelectionModel* m_selectionModel;//添加選中行, 全選 void addAllLine() {for(int i0; i<m_tableModel->rowCoun…

【AI大模型新型智算中心技術體系深度分析 2024】

文末有福利&#xff01; ChatGPT 系 列 大 模 型 的 發 布&#xff0c; 不 僅 引 爆 全 球 科 技 圈&#xff0c; 更 加 夯 實 了 人 工 智 能&#xff08;Artificial Intelligence, AI&#xff09;在未來改變人類生產生活方式、引發社會文明和競爭力代際躍遷的戰略性地位。當…

mysql select count返回null

注意 mysql select count返回null 下面是百度的回答 在MySQL中&#xff0c;當SELECT COUNT(*)查詢返回NULL時&#xff0c;通常意味著查詢結果為空集&#xff0c;即沒有記錄匹配查詢條件。COUNT()函數在沒有匹配行的情況下返回NULL&#xff0c;而不是0。 解決方法&#xff1a…

ImportError: xxx: cannot open shared object file: No such file or directory

一類常見錯誤&#xff1a;編譯器器無法在目錄下找到共享目標文件&#xff0c; Linux(ubuntu)中共享的庫目錄為/usr/lib/x86_64-linux-gnu&#xff0c;gcc的編譯庫 在該目錄下創建共享文件&#xff08;偽造、下載&#x1f91c;cp)即可 sudo ln -s libtiff.so.6 libtiff.so.5

昇思25天學習打卡營第11天|ResNet50圖像分類

文章目錄 昇思MindSpore應用實踐基于MindSpore的ResNet50圖像分類1、ResNet50 簡介2、數據集預處理及可視化3、構建網絡構建 Building Block構建 Bottleneck Block構建 ResNet50 網絡 4、模型訓練5、圖像分類模型推理 Reference 昇思MindSpore應用實踐 本系列文章主要用于記錄…

Emacs相關

Emacs 詳細介紹 Emacs&#xff0c;全稱 Editor MACroS&#xff0c;是一款功能強大、歷史悠久的文本編輯器。它最早由 Richard Stallman 于 1976 年開發&#xff0c;是自由軟件運動的重要組成部分。Emacs 的設計理念強調可定制性和擴展性&#xff0c;使得它不僅僅是一個編輯器&…

AsyncRequestTimeoutException

在Spring MVC中&#xff0c;當一個異步請求超過配置的最大等待時間時&#xff0c;會拋出AsyncRequestTimeoutException異常。這個異常通常是由于服務器端的處理時間超過了客戶端允許的等待時間&#xff0c;或者是服務器本身的異步處理時間配置過短導致的。 spring: mvc: async…

scrapy寫爬蟲

Scrapy是一個用于爬取網站數據并提取結構化信息的Python框架 一、Scrapy介紹 1.引擎&#xff08;Engine&#xff09; – Scrapy的引擎是控制數據流和觸發事件的核心。它管理著Spider發送的請求和接收的響應&#xff0c;以及處理Spider生成的Item。引擎是Scrapy運行的驅動力。…