Linux系統中跟TCP相關的內核參數

1.?TCP保活機制

參考?《Nginx(三) 配置文件詳解 - 基礎模塊》3.18章節


  • net.ipv4.tcp_keepalive_intvl:設置兩次相鄰探活檢測的間隔時間。默認是75秒,單位是秒。
  • net.ipv4.tcp_keepalive_probes:設置探活最多檢測次數。默認是9次,單位是次。
  • net.ipv4.tcp_keepalive_time:設置TCP連接保活時長。默認是7200秒,單位是秒。

2. TCP Fast Open Cookie?


  • net.ipv4.tcp_fastopen可選值是0、1、2、3,默認是1。設置為0時表示關閉Fast Open Cookie功能,設置為1時表示僅作為客戶端時使用Fast Open Cookie功能,設置為2時表示僅作為服務端時使用Fast Open Cookie功能,設置為3時表示無論作為客戶端還是服務端時都使用Fast Open Cookie功能。請注意,Fast?Open Cookie需要客戶端和服務端同時開啟才有效,開啟后可以用TCP報文首部的Fast?Open Cookie選項字段來聲明是否使用FOC。FOC生效后,使用HTTP協議通信時,可以減少因三次握手而帶來的1個RTT時間消耗(因為三次握手建立連接后,HTTP 請求必須在一個RTT后才能發送)。如果服務器僅作為服務端時,建議設置為2,如果是代理服務器,建議設置為3。

  • net.ipv4.tcp_fastopen_blackhole_timeout_sec = 3600

  • net.ipv4.tcp_fastopen_key = 00000000-00000000-00000000-00000000

3. 設置重傳次數最大值


  • net.ipv4.tcp_orphan_retries:FIN報文重傳次數最大值,默認值是0,特指8次。如果FIN報文重傳次數達到該值且規定等待時間已結束,連接將直接關閉。如果是孤兒連接,重傳次數雖未超過8次,但該連接自首次發出FIN報文開始,存活時間已超tcp_fin_timeout設定的時間,那么此時該連接也將會直接關閉。
  • net.ipv4.tcp_retries1報文超時重傳次數達到該值且規定等待時間已結束,指示IP層進行MTU探測、刷新路由等。默認是3次。
  • net.ipv4.tcp_retries2:報文超時重傳次數達到該值且規定等待時間已結束,連接將會直接關閉。默認是15次。
  • net.ipv4.tcp_syn_retries:SYN報文重傳次數最大值,默認是6次。如果SYN報文重傳次數達到該值且規定等待時間已結束,連接將直接關閉。
  • net.ipv4.tcp_synack_retries:SYN+ACK報文重傳次數最大值,默認是2次。如果SYN+ACK報文重傳次數達到該值且規定等待時間已結束,連接將直接關閉。

4. 孤兒連接

? ? ? ? 當進程調用 close() 函數關閉連接后,相關句柄已經釋放,無論該連接是處于?FIN_WAIT1 狀態,還是確實關閉了,此連接已經與進程無關,由內核和另一端完成四次揮手交互,此時這個連接叫做孤兒連接。

? ? ? ? 使用 close() 函數關閉連接是完全斷開連接,同時關閉讀和寫,無法繼續傳輸數據,是不優雅的,而 shutdown() 函數是優雅關閉連接,可以控制是關閉讀還是寫。


  • net.ipv4.tcp_max_orphans:指定系統內核最多能接管多少個孤兒連接。默認是16384個。如果孤兒連接數量超過該值,新增的孤兒連接將不再通過四次揮手來關閉連接,而是直接發送 RST 報文進行強制關閉,并發出警告信息。
  • net.ipv4.tcp_fin_timeout:指定孤兒連接在內核中的最大生存時間,單位是秒,默認是60秒,對應兩個MSL,該參數也是設置服務器主動關閉TCP連接時在TIME_WAIT狀態的2MSL等待時間。如果在60秒內還未關閉,連接將直接關閉。
  • net.ipv4.tcp_orphan_retries請參考第3章節。

5. 防御SYN Flood攻擊

參考?TCP三次握手、四次揮手及狀態轉換詳解


  • net.core.somaxconn:增大TCP全連接隊列/accept隊列大小,也是增大TCP半連接隊列的關鍵參數。默認值是128。
  • net.core.tcp_max_syn_backlog :增大TCP半連接隊列/SYN隊列大小。默認值是1024。
  • net.ipv4.tcp_syncookies:設置是否開啟syncookies。開啟syncookies后,不使用半連接隊列就可建立TCP連接。默認值是1,表示僅當 SYN 半連接隊列溢出時,才啟用它。設置為0時表示關閉,設置為2時表示無條件開啟。
  • net.core.netdev_max_backlog:設置每個網卡接收隊列的最大長度,防止網卡接收過載。默認值是1000個。內核從網卡收到數據包后,在交由協議棧(如IP、TCP)處理前會先將數據包放入一個緩沖隊列中,當接數據包的速率大于內核協議棧處理的速率時,這個緩沖隊列會不斷增長,但不能超過netdev_max_backlog 參數設置的值,否則數據包將被丟棄。默認情況下,netdev_max_backlog 參數的值是與系統的內存大小和 CPU 數量相關的動態值。它會根據系統的硬件配置進行自適應調整,通常情況下不需要手動設置。除非這臺服務器需要處理大量的網絡請求,我們才將該值調大。
  • net.ipv4.tcp_synack_retries:降低SYN+ACK報文重傳次數。默認是2次。請參考第3章節。

6. accept隊列已滿策略


  • net.ipv4.tcp_abort_on_overflow:該參數用于設置當accept隊列已滿時,是否要將后續請求建立的TCP連接置為RST,即返回RST報文。可選值是0或1,默認值是0,表示關閉。當accept隊列已滿時,如果該參數設置為0,服務端會丟棄掉客戶端返回的ack報文。如果設置為1,服務端將發送RST報文給客戶端,要求重置連接并重新建立連接。謹慎開啟該配置!?

7. 窗口放大


  • net.ipv4.tcp_window_scaling:設置是否開啟窗口放大功能。可選值是0或1,默認是1,表示開啟窗口放大功能。

8. 優化TIME-WAIT


  • net.ipv4.tcp_tw_reuse:設置是否復用處于 TIME_WAIT 狀態的TCP連接,可選值是0或1,默認是0,表示禁止復用連接。請注意,該配置僅適用于主動發起建立TCP連接的一方,也就是僅適用于客戶端。開啟該選項后,主動發起建立連接的一方在調用 connect() 函數時,如果選擇到的端口,已經被相同四元組的連接占用,那么就判斷該連接是否處于TIME_WAIT狀態,如果該連接處于 TIME_WAIT 狀態并且 TIME_WAIT 狀態持續時間已超過1秒,那么就重用這個連接,然后就可以正常使用該端口了。所以該選項只適用于主動發起建立連接的一方。如果服務器僅作為服務端,就完全沒必要開啟該功能。如果服務器是一臺代理服務器,建議開啟該功能。
  • net.ipv4.tcp_timestamps:設置是否開啟TCP時間戳功能,可選值是0或1,默認是1,表示開啟時間戳功能。開啟后,TCP 頭部就會使用時間戳選項,便于精確計算RTT,而且還能避免出現因序列號回繞(PAWS)而引起的延遲報文生效的問題。該參數是開啟tcp_tw_reuse功能的前提,在開啟tcp_tw_reuse功能前,必須將tcp_timestamps設置為1
  • net.ipv4.tcp_max_tw_buckets:設置處于TIME_WAIT狀態的TCP連接的最大值,默認值是5000。當系統中處于 TIME_WAIT 狀態的TCP連接數超過該值時,新關閉的連接就不再經歷 TIME_WAIT狀態,而是直接關閉,這個方法比較暴力。
  • net.ipv4.tcp_fin_timeout:該參數用于設置2MSL時間,請參考第4章節。

9. 快速重傳

參考?《TCP 核心工作機制》


  • net.ipv4.tcp_sack:設置是否開啟選擇性確認SACK,可選值是0或1,默認是1,表示開啟SACK。
  • net.ipv4.tcp_dsack:設置是否開啟D-SACK(選擇性確認時標識重復收到的數據),可選值是0或1,默認是1,表示開啟D-SACK。
  • net.ipv4.tcp_comp_sack_delay_ns:設置在壓縮SACK報文期間,SACK報文的延遲發送時間。單位是ns(納秒),默認值是1000000ns,也就是1ms。
  • net.ipv4.tcp_comp_sack_nr:設置壓縮SACK報文的最大數量。默認值是44。

10. 擁塞控制


  • ?net.ipv4.tcp_congestion_control = cubic
  • net.ipv4.tcp_allowed_congestion_control = reno cubic
  • net.ipv4.tcp_available_congestion_control = reno cubic

11. 設置緩沖區


  • tcp_wmem:設置發送緩沖區大小/范圍,默認值是“4096?? ?16384?? ?4194304”,3個參數單位都是字節Byte。
  • tcp_rmem:設置接收緩沖區大小/范圍,默認值是“4096?? ?87380?? ?6291456”,3個參數單位都是字節Byte。
  • tcp_mem:設置TCP緩沖區大小/范圍,默認值是“42147?? ?56197?? ?84294”,3個參數值單位都是頁面,一個頁面是4kb,
  • tcp_moderate_rcvbuf:設置是否開啟接收緩沖區動態調整功能,可選值是0或1,默認是1,表示開啟。
  • net.ipv4.tcp_adv_win_scale = 1

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

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

相關文章

ECMAScript3中數組方法

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>ECMAScript3中數組方法</title></head><body><script>//字符串和數組之間相轉換的方法 1.join() split() /*var str abcdefg…

implements Serializable

Serializable是一個對象序列化的接口&#xff0c;一個類只有實現了Serializable接口&#xff0c;它的對象才是可序列化的。因此如果要序列化某些類的對象&#xff0c;這些類就必須實現Serializable接口。而實際上&#xff0c;Serializable是一個空接口&#xff0c;沒有什么具體…

Codeforces 1045. A. Last chance(網絡流 + 線段樹優化建邊)

題意 給你 \(n\) 個武器&#xff0c;\(m\) 個敵人&#xff0c;問你最多消滅多少個敵人&#xff0c;并輸出方案。 總共有三種武器。 SQL 火箭 - 能消滅給你集合中的一個敵人 \(\sum |S| \le 100000\) &#xff1b;認知光束 - 可以消滅 \([l, r]\) 區間中的一個敵人&#xff1b;O…

常用宏定義 - 系統相關

/** 是否iPad */ #define isPad (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)/** 是否iPad */ #define someThing (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)? ipad: iphone/** 獲取系統版本 */ #define IOS_VERSION &#xff3b;[UIDevice currentDevi…

周鴻祎詳解360手機戰略:賺錢不靠硬件靠服務

摘要&#xff1a;奇虎360總裁周鴻祎不久前在微博上宣布360公司將要進軍手機行業的消息后&#xff0c;一度掀起業界的軒然大波&#xff0c;褒貶之聲均不絕于耳。對于合作廠商的選擇&#xff0c;周鴻祎直言出貨量是一個重要參考指標&#xff0c;“每年的出貨量最少不低于500萬~10…

解決報錯:;Syntax error on token(s), misplaced construct(s)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff0c;這是語法錯誤&#xff0c;如括號不匹配、代碼沒有寫在一個方法中、少分號、變量名不對、少半個大括號 ... 總之就…

java移位運算符

java中有三種移位運算符 << : 左移運算符&#xff0c;num << 1 相當于num乘以2 >> : 右移運算符&#xff0c;num >> 1 相當于num除以2 >>> : 無符號右移&#xff0c;忽略符號位&#xff0c;空位都以0補齊…

在頁面上顯示PDF

/// <summary>/// 讀取PDF文件/// </summary>/// <param name"fName">文件名稱(可以從其他地方傳進來)</param>/// <returns></returns>public FileStreamResult readPDF(string fName "pdf文件.pdf"){string dirp …

7.15模擬賽

T1.fuction 吐槽一波錯誤拼寫。 跟考場思路差不多&#xff0c;只不過細節挺多的呢。 判掉a0,b0,c0的幾種組合&#xff0c;還有負數的情況要打標記特殊處理。 然后就是一個拓歐啦&#xff0c;先求出ggcd(a,b)&#xff0c;順便求出axbyg的x和y&#xff0c;然后根據裴蜀定理&#…

蘇寧國美盈利報警:線下乏力線上重金加碼

摘要&#xff1a;國美電器則發布盈利預警&#xff0c;預計今年一季度凈利潤同比大幅減少———這也致使國美股價最近連續低位徘徊。蘇寧電器一季報顯示&#xff0c;今年1至3月公司營業收入226 .41億元&#xff0c;同比增長10%&#xff0c;但盈利9.51億元&#xff0c;同比下降15…

WebService到底是什么?

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、序言 大家或多或少都聽過WebService&#xff08;Web服務&#xff09;&#xff0c;有一段時間很多計算機期刊、書籍和網站都大肆的提…

JAVA中PO,VO,DTO,BO,DAO,POJO解釋

&#xff08;一&#xff09;VO與PO ORM是Object Relational Mapping&#xff08;對象關系映射&#xff09;的縮寫。通俗點講&#xff0c;就是將對象與關系數據庫綁定&#xff0c;用對象來表示關系數據。在O/R Mapping的世界里&#xff0c;有兩個基本的也是重要的東東需要了解&…

互掐盜播風云再起 三大視頻網站存和解可能

摘要&#xff1a;近期&#xff0c;視頻網站互掐盜播風云再起。騰訊視頻已于5月13日向PPS開炮&#xff0c;宣稱PPS盜播其五部獨家劇&#xff1b;5月14日&#xff0c;搜狐視頻亦指責PPS盜播其23部熱播劇。面對這兩家的連續開炮&#xff0c;PPS方面也進行了相應的回應&#xff0c;…

springboot和quartz整合實現動態定時任務(持久化單節點)

Quartz是一個完全由java編寫的開源作業調度框架,為在Java應用程序中進行作業調度提供了簡單卻強大的機制&#xff0c;它支持定時任務持久化到數據庫&#xff0c;從而避免了重啟服務器時任務丟失&#xff0c;支持分布式多節點&#xff0c;大大的提高了單節點定時任務的容錯性。s…

JAVA中protected的作用

類NewObject中有protected修飾的方法或者屬性&#xff0c;則&#xff1a; 同一個包中&#xff1a; 可在同一個包里的子類中實例化NewObject類獲得對象&#xff0c;然后可用該對象訪問protected修飾的方法或者屬性&#xff0c;即.操作訪問。可在同一個包里的非子類中實例化NewOb…

wsimport 不是內部或外部命令,也不是可運行的程序或批處理文件

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 今天使用wsimport生成webservice client端代碼&#xff0c;wsimport提示不是內部或外部命令&#xff0c;也不是可運行的程序或批處理文件…

靜態變量的多線程同步問題

2019獨角獸企業重金招聘Python工程師標準>>> 我們先來討論一個問題&#xff0c;一個類的靜態變量當類被多次實例化的時候&#xff0c;靜態變量是否會受影響&#xff1f;首先我們應該清楚的是靜態變量是在類被JVM classloader的時候分配內存&#xff0c;并且是分配在…

extends和implements區別

extends和implements區別 extends與implements的不同 1、在類的聲明中&#xff0c;通過關鍵字extends來創建一個類的子類。 一個類通過關鍵字implements聲明自己使用一個或者多個接口。 extends 是繼承某個類, 繼承之后可以使用父類的方法, 也可以重寫父類的方法; imple…

評論:電商巨頭們誰有勇氣曬曬“價格戰”賬單?

摘要&#xff1a;國內電商接二連三上演的“價格戰”&#xff0c;點燃了消費者的購買熱情。在筆者看來&#xff0c;如果有哪個大型電商有勇氣亮出價格戰賬單&#xff0c;那對競爭對手的刺激和打擊效果將非同一般。曬出了賬單后&#xff0c;消費者對購物場所的選擇也將一目了然&a…

The xxx collides with a package/type

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 當類和包&#xff0c;重名時&#xff0c;包會報錯誤&#xff1a;The package aaa.a collides with a type&#xff1b;類也會報警告&…