【DevOps】Linux 內核網絡子系統全面指南與性能調優

目錄

一、Linux 內核網絡子系統

1. Netfilter

主要特性

工作流程

2. Traffic Control (TC)

主要特性

工作流程

3. Socket

主要特性

工作流程

二、內核參數優化

1. net.ipv4.tcp_window_scaling

2. net.core.netdev_max_backlog

3. net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem

4. net.ipv4.tcp_fin_timeout

5. net.core.rmem_default 和 net.core.wmem_default

一、Linux 內核網絡子系統

Linux 內核的網絡子系統是其架構中非常復雜和強大的部分,負責處理所有網絡相關的操作。這些操作包括數據包過濾、地址轉換、流量控制、服務質量保證,以及為應用程序提供網絡通信的接口。下面我們詳細介紹幾個關鍵的網絡子系統:Netfilter、Traffic Control 和 Socket。

1. Netfilter

Netfilter?是 Linux 內核中一個非常重要的網絡子系統,主要用于在內核中實現包過濾、網絡地址轉換 (NAT) 和其他網絡相關的鉤子功能。Netfilter 提供了一系列的鉤子(hook),這些鉤子位于網絡協議棧的不同位置,可以捕獲網絡協議棧中的數據包,進行處理或決定數據包的去向。

主要特性
  • 數據包過濾:Netfilter 通過與 iptables(在較新的內核中是 nftables)的配合,可以實現包括但不限于 IP 地址、端口號、協議類型等條件的數據包過濾。

  • 網絡地址轉換 (NAT):Netfilter 支持源 NAT (SNAT)、目的 NAT (DNAT) 和端口映射,這對于路由器和防火墻的功能是非常關鍵的。

  • 狀態跟蹤:Netfilter 可以跟蹤每個網絡連接的狀態,這使得它可以識別和處理每個連接的數據包,如區分新連接、已建立的連接和結束的連接。

  • 用戶空間通信:Netfilter 可以通過?nfnetlink?與用戶空間程序通信,允許用戶空間程序動態地更改過濾規則或收集網絡狀態信息。

工作流程

Netfilter 提供了五個主要的鉤子點,它們位于網絡協議棧的不同層次:

  1. NF_IP_PRE_ROUTING:在路由決策之前,對進入的數據包進行處理。
  2. NF_IP_LOCAL_IN:在確定數據包目的地為本機后進行處理。
  3. NF_IP_FORWARD:在進行路由轉發決策后,對需要轉發的數據包進行處理。
  4. NF_IP_LOCAL_OUT:在本機產生的數據包即將發送出去前進行處理。
  5. NF_IP_POST_ROUTING:在數據包即將離開網卡前進行處理。

2. Traffic Control (TC)

Traffic Control (TC)?是 Linux 內核的另一個網絡子系統,用于實現網絡流量控制和服務質量(QoS)。TC 允許 Linux 內核對網絡接口的數據包發送隊列進行控制,包括帶寬限制、延遲管理和數據包排隊策略。

主要特性
  • 帶寬管理:通過諸如令牌桶過濾器 (TBF)、隨機早期檢測 (RED) 等機制,控制數據流的速率。

  • 排隊策略:包括 FIFO、Stochastic Fairness Queueing (SFQ)、Hierarchical Token Bucket (HTB) 等,用于控制數據包的發送順序和方式。

  • 分類:TC 使用分類器將數據包分流到不同的類和隊列,允許對不同類型的流量實施不同的控制策略。

  • 過濾:通過過濾器確定數據包屬于哪個類,過濾器可以基于多種條件,如協議、端口號、IP 地址等。

工作流程
  1. 分類:數據包首先通過分類器進行分類,判定進入哪個類。
  2. 排隊:每個類有自己的隊列,數據包按照策略進入相應的隊列。
  3. 調度:調度器根據策略從隊列中取出數據包發送。

3. Socket

Socket?是 Linux 內核提供的用于網絡通信的基本接口,屬于網絡子系統中的應用層接口部分。Socket 抽象了網絡通信的細節,使應用程序可以通過標準的接口發送和接收數據,而無需關心底層網絡協議的具體實現。

主要特性
  • 多種類型:支持多種類型的 Socket,包括流式套接字 (SOCK_STREAM)、數據報套接字 (SOCK_DGRAM) 和原始套接字 (SOCK_RAW)。

  • 多種協議:支持多種網絡協議,如 IPv4、IPv6、TCP、UDP 等。

  • 阻塞與非阻塞操作:Socket 可以在阻塞模式和非阻塞模式下工作,允許應用根據需要選擇合適的工作方式。

  • 安全特性:支持通過 SSL/TLS 等協議提供加密通信。

工作流程
  1. 創建 Socket:應用程序通過?socket()?系統調用創建一個 Socket。
  2. 配置 Socket:通過各種系統調用 (如?bind(),?listen(),?connect()) 配置 Socket 的屬性和行為。
  3. 數據傳輸:使用?send()?和?recv()?(或?write()?和?read()) 系統調用進行數據的發送和接收。
  4. 關閉 Socket:通過?close()?系統調用關閉 Socket。

這些子系統合作,形成了 Linux 內核中強大而靈活的網絡功能,支持從簡單的數據傳輸到復雜的網絡應用。

二、內核參數優化

在 Linux 系統中,通過調整內核參數來優化網絡性能是一種常見且有效的方法。內核參數可以控制 TCP/IP 棧和其他網絡子系統的行為,從而改善網絡吞吐量、降低延遲、增加連接的穩定性和響應速度。下面是對您提到的兩個參數的詳細介紹,以及其他一些常用的內核參數和它們的優化作用。

1. net.ipv4.tcp_window_scaling

  • 參數說明net.ipv4.tcp_window_scaling?是一個布爾值參數,用于啟用或禁用 TCP 窗口縮放功能。

  • 作用:TCP 窗口縮放是一種機制,允許 TCP 連接動態調整其接收窗口大小,從而適應不同的網絡延遲和帶寬條件。這個功能在高延遲或高帶寬的網絡環境(如衛星通信、長距離光纖連接)中尤其重要,可以顯著提高數據傳輸效率。

  • 默認值:通常默認為?1(啟用)。

  • 調整建議

    • 在網絡環境穩定且網絡延遲較低的局域網環境中,這個選項的效果不明顯,但在寬帶較大的網絡中,啟用窗口縮放可以提高傳輸性能。
    • 如果要啟用 TCP 窗口縮放,確保?sysctl?設置為?net.ipv4.tcp_window_scaling = 1

2. net.core.netdev_max_backlog

  • 參數說明net.core.netdev_max_backlog?設置了在內核處理之前,網絡設備驅動能夠隊列的接收包的最大數量。

  • 作用:這個參數決定了網絡設備接收隊列的最大長度,對于高速網絡或是在突發大量網絡請求時,增加這個參數的值可以減少因隊列溢出而導致的丟包,從而提高網絡性能。

  • 默認值:默認值可能在 1000 左右,具體值依據不同的內核和系統配置而變化。

  • 調整建議

    • 在高速網絡環境中或大量并發連接的服務器上,可以適當增加這個值,例如設置為?2000?或更高,如?3000
    • 修改方式:sysctl -w net.core.netdev_max_backlog=2000?或通過編輯?/etc/sysctl.conf?文件添加?net.core.netdev_max_backlog = 2000?并重新加載配置?sysctl -p

3. net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem

  • 參數說明

    • net.ipv4.tcp_rmem:這個參數控制 TCP 接收緩沖區的最小值、默認值和最大值,單位是字節。
    • net.ipv4.tcp_wmem:這個參數控制 TCP 發送緩沖區的最小值、默認值和最大值,單位是字節。
  • 作用:調整這些參數可以優化 TCP 的緩沖區大小,適應不同的網絡環境,特別是在高帶寬和高延遲的網絡中,增大這些值可以提高網絡性能。

  • 默認值:通常形式為?4096 87380 6291456

  • 調整建議

    • 對于高性能服務器,可以將這些值調整為更大,例如?4096 65536 16777216(對應最小、默認、最大)。
    • 修改方式:
      sysctl -w net.ipv4.tcp_rmem="4096 65536 16777216"
      sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
      

4. net.ipv4.tcp_fin_timeout

  • 參數說明net.ipv4.tcp_fin_timeout?指定了等待一個 TCP 連接完全終止前的超時時間,單位是秒。

  • 作用:這個參數影響 TIME-WAIT 狀態的持續時間。減少這個值可以快速回收套接字,但是太小可能導致舊的重復數據段出現在新的連接中。

  • 默認值:通常默認為?60?秒。

  • 調整建議

    • 對于處理大量短連接的服務器,可以適當減少這個值,例如設置為?30?或更低,如?15
    • 修改方式:sysctl -w net.ipv4.tcp_fin_timeout=30

5. net.core.rmem_default 和 net.core.wmem_default

  • 參數說明

    • net.core.rmem_default:指定接收套接字緩沖區的默認大小(字節)。
    • net.core.wmem_default:指定發送套接字緩沖區的默認大小(字節)。
  • 作用:這些參數控制非 TCP 套接字的默認緩沖區大小,對于 UDP 通信等場景下,增大這些值可以提高性能。

  • 默認值:通常為?212992

  • 調整建議

    • 對于需要大量 UDP 通信的應用,可以增加這些值,如設置為?262144?或更大。
    • 修改方式:
      sysctl -w net.core.rmem_default=262144
      sysctl -w net.core.wmem_default=262144
      

通過合理調整這些參數,可以顯著提高 Linux 系統的網絡性能,尤其是在高負載、高并發的網絡服務器環境中。每一次調整后,都應該進行充分的測試,以確保新的配置不僅提升了性能,而且保持了系統的穩定性和可靠性。

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

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

相關文章

第33次CSP認證Q1:詞頻統計

🍄題目描述 在學習了文本處理后,小 P 對英語書中的 𝑛n 篇文章進行了初步整理。 具體來說,小 P 將所有的英文單詞都轉化為了整數編號。假設這 𝑛n 篇文章中共出現了 𝑚m 個不同的單詞,則把它們…

網絡編程套接字 (二)---udosocket

本專欄內容為:Linux學習專欄,分為系統和網絡兩部分。 通過本專欄的深入學習,你可以了解并掌握Linux。 💓博主csdn個人主頁:小小unicorn ?專欄分類:網絡 🚚代碼倉庫:小小unicorn的代…

C++學習第二十九課:C++ 輸入輸出流詳解:從基礎到高級應用

在 C 中,流(stream)是一種用于實現輸入輸出操作的抽象概念。流可以看作是字節的流動,這些字節可以從一個地方流向另一個地方,例如從鍵盤輸入到程序中,或者從程序輸出到屏幕。C 提供了一套完整的流庫來處理各…

Qt中正則表達式的用法

一.基本功能介紹: 在Qt中,可以使用QRegularExpression類來處理正則表達式。以下是一些常用的正則表達式用法: 1.創建正則表達式對象: QRegularExpression regex("pattern"); 2.匹配字符串: QString str …

LeetCode 2960.統計已測試設備:看測試了多少次

【LetMeFly】2960.統計已測試設備:看測試了多少次 力扣題目鏈接:https://leetcode.cn/problems/count-tested-devices-after-test-operations/ 給你一個長度為 n 、下標從 0 開始的整數數組 batteryPercentages ,表示 n 個設備的電池百分比…

【QEMU系統分析之實例篇(十七)】

系列文章目錄 第十七章 QEMU系統仿真的機器創建分析實例 文章目錄 系列文章目錄第十七章 QEMU系統仿真的機器創建分析實例 前言一、QEMU是什么?二、QEMU系統仿真的機器創建分析實例1.系統仿真的命令行參數2.配置加速器configure_accelerators()do_configure_icount…

藍橋杯13屆JAVA A組 國賽

??????? package 藍橋杯國賽; // 貪心選個數最少的進行擺 // 2:1 ,3:1, 4:1,5 : 3,6:3,7:1 // 選 1,7,4,2,3,5,9 // 然后都選滿10個 public class 火彩棒數字 {public static void main(String[] a…

【CTFHub】HTTP 請求方式 302跳轉 cookie WP

1.請求方式 打開給出的URL進入一個頁面,提示原方法是GET,用CTFHUB方法就能獲得flag 思路:抓包,將GET方法改成CTFHUB方法進行重新發送請求,查看響應情況 1.打開代理服務器 2.打開BurpSuite 刷新頁面獲得攔截 3.發送…

【Excel VBA】深入理解 VBA 中的 CallByName 函數

動態調用方法與屬性:深入理解 VBA 中的 CallByName 函數 昨天在介紹Choose函數在復雜的VBA應用程序開發中,有時我們需要根據運行時的情況來決定調用哪個對象的哪個方法或屬性。這種靈活性可以通過 CallByName 函數實現。在本篇博客中,田辛老…

網絡Http和Socket通訊(基于面試)

每日一句:想得到世上最好的東西,先得讓世界看到最好的你 目錄 面試問OSI或TCP/IP,怎么回答? 面試問HTTP? 面試問Get類型,Pot類型區別? 面試什么是Socket套接字? 面試問什么是數據粘包&…

qt for android 的架構原理

qt for android實現架構,分享這幾幅很不錯圖。來自于 《Qt 林斌:整合Android IVI平臺打造統一的Qt數字座艙體驗》 1.實現架構圖 2.qt for android能力 3.java 和 qt混合開發 4. AutoMotive

46寸硅片為什么要留平邊(flat)?

知 識星球(星球名: 芯片制造與封測社區,星球號: 63559049)里的學員問: 2, 4, 6寸硅片都有 平 邊,它們有什么作用 ? 硅片的平邊(Flat&…

經典權限五張表案例分析

文章目錄 模塊分析模塊分析 描述五張表的關系重要知識講解抽取成一個BaseServletSpringIOC思想(底層)實現代碼IOC概述 SPI機制(為學習框架做思想和技術鋪墊)SPI引入1. 標準/規范2. 具體的實現3. 調用 SPI介紹SPI練習JDBC4.0免注冊驅動原理Servlet實現方式三 ServletContainerIn…

idea使用前的全局配置,一次配置,多次使用

前提:每次導入一個新的項目,就需要重新設置編碼、maven、jdk、git版本等信息。實際每個項目所用到的配置信息是一致的,除非換一家公司,不然不會改動到這些內容。 idea版本:2024.1.1 1.1、全局Maven配置 IDEA啟動頁面…

微火一文盤點:為何全域運營系統會成為創業新風口?

當前,微火全域運營已經成為創業的新風口,想要做微火全域運營服務商的創業者數量日益增多。據目前了解到的最新消息,微火全域運營系統的市場占有率已經超過了48%,并且還在持續不斷地上漲中。 所謂微火全域運營系統,就是…

InLine Chat功能優化對標Github Copilot,CodeGeeX帶來更高效、更直觀的編程體驗!

VSCode中的CodeGeeX 插件上線InLine Chat功能后,收到不少用戶的反饋,大家對行內交互編程這一功能非常感興趣。近期我們針對這個功能再次進行了深度優化,今天詳細介紹已經在VSCode插件v2.8.0版本上線的 CodeGeeX InLine Chat功能,以…

藍橋杯成績已出

藍橋杯的成績早就已經出來了,雖然沒有十分驚艷 ,但是對于最終的結果我是心滿意足的,感謝各位的陪伴,關于藍橋杯的刷題筆記我已經堅持更新了49篇,但是現在即將會告別一段落,人生即將進入下一個規劃。我們一起…

Spring框架學習筆記(一):Spring基本介紹(包含IOC容器底層結構)

1 官方資料 1.1 官網 https://spring.io/ 1.2 進入 Spring5 下拉 projects, 進入 Spring Framework 進入 Spring5 的 github 1.3 在maven項目中導入依賴 <dependencies><!--加入spring開發的基本包--><dependency><groupId>org.springframework<…

jni 返回二維byte數組

在JNI中返回二維byte數組&#xff0c;你需要在Java中準備一個相應的二維數組來接收這個返回值。在JNI層面&#xff0c;你可以創建一個二維的byte數組&#xff0c;并使用GetByteArrayRegion和SetByteArrayRegion來操作它。 以下是一個簡單的例子&#xff1a; public class Jni…

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機串口通信介紹STC12C5A60S2系列1T 8051單片機串口通信的結構基于STC12C5A60S2系列1T 8051單片機串口通信的特殊功能寄存器…