談到內核大家會覺得很神秘,關于內核參數(shù)的調整更是覺得云里霧里的。其實,并沒有大家想象的那么難,平時對它們的調整也是很少用到。
也許你有經歷,想了解一些內核參數(shù)的作用,然后去網上搜了很多文檔,結果發(fā)現(xiàn)大多都一樣,而且沒有人能夠說的很詳細。下面是我總結的幾個跟網絡相關的參數(shù),希望對你有所幫助。當然,我也不保證理解的一定到位,如果你有更好的理解,請留言回復!
1net.ipv4.tcp_max_tw_buckets
對于tcp連接,服務端和客戶端通信完后狀態(tài)變?yōu)?a href="http://www.brongaenegriffin.com/tags/ti/" target="_blank">timewait,假如某臺服務器非常忙,連接數(shù)特別多的話,那么這個timewait數(shù)量就會越來越大。畢竟它也是會占用一定的資源,所以應該有一個最大值,當超過這個值,系統(tǒng)就會刪除最早的連接,這樣始終保持在一個數(shù)量級。
這個數(shù)值就是由net.ipv4.tcp_max_tw_buckets這個參數(shù)來決定的。CentOS7系統(tǒng),你可以使用sysctl -a |grep tw_buckets來查看它的值,默認為32768,你可以適當把它調低,比如調整到8000,畢竟這個狀態(tài)的連接太多也是會消耗資源的。
但你不要把它調到幾十、幾百這樣,因為這種狀態(tài)的tcp連接也是有用的,如果同樣的客戶端再次和服務端通信,就不用再次建立新的連接了,用這個舊的通道,省時省力。
2net.ipv4.tcp_tw_recycle=1
該參數(shù)的作用是快速回收timewait狀態(tài)的連接。上面雖然提到系統(tǒng)會自動刪除掉timewait狀態(tài)的連接,但如果把這樣的連接重新利用起來豈不是更好。所以該參數(shù)設置為1就可以讓timewait狀態(tài)的連接快速回收,它需要和下面的參數(shù)配合一起使用。
3net.ipv4.tcp_tw_reuse=1
該參數(shù)設置為1,將timewait狀態(tài)的連接重新用于新的TCP連接,要結合上面的參數(shù)一起使用。
4net.ipv4.tcp_syncookies=1
tcp三次握手中,客戶端向服務端發(fā)起syn請求,服務端收到后,也會向客戶端發(fā)起syn請求同時連帶ack確認,假如客戶端發(fā)送請求后直接斷開和服務端的連接,不接收服務端發(fā)起的這個請求,服務端會重試多次。
這個重試的過程會持續(xù)一段時間,當這種狀態(tài)的連接數(shù)量非常大時,服務器會消耗很大的資源,從而造成癱瘓,正常的連接進不來,這種惡意的半連接行為其實叫做syn flood攻擊。
設置為1,是開啟SYN Cookies,開啟后可以避免發(fā)生上述的syn flood攻擊。開啟該參數(shù)后,服務端接收客戶端的ack后,再向客戶端發(fā)送ack+syn之前會要求client在短時間內回應一個序號,如果客戶端不能提供序號或者提供的序號不對則認為該客戶端不合法,于是不會發(fā)ack+syn給客戶端,更涉及不到重試。
5net.ipv4.tcp_max_syn_backlog
該參數(shù)定義系統(tǒng)能接受的最大半連接狀態(tài)的tcp連接數(shù)。客戶端向服務端發(fā)送了syn包,服務端收到后,會記錄一下,該參數(shù)決定最多能記錄幾個這樣的連接。我的CentOS7系統(tǒng),默認是256,當有syn flood攻擊時,這個數(shù)值太小則很容易導致服務器癱瘓,實際上此時服務器并沒有消耗太多資源(cpu、內存等),所以可以適當調大它,比如調整到30000。
6net.ipv4.tcp_syn_retries
該參數(shù)適用于客戶端,它定義發(fā)起syn的最大重試次數(shù),默認為5,建議改為2。
7 net.ipv4.tcp_synack_retries
該參數(shù)適用于服務端,它定義發(fā)起syn+ack的最大重試次數(shù),默認為5,建議改為2,可以適當預防syn flood攻擊。
8net.ipv4.ip_local_port_range
該參數(shù)定義端口范圍,系統(tǒng)默認保留端口為1024及以下,以上部分為自定義端口。這個參數(shù)適用于客戶端,當客戶端和服務端建立連接時,比如說訪問服務端的80端口,客戶端隨機開啟了一個端口和服務端發(fā)起連接,這個參數(shù)定義隨機端口的范圍。默認為3276861000,建議調整為102561000。
9net.ipv4.tcp_fin_timeout
tcp連接的狀態(tài)中,客戶端上有一個是FIN-WAIT-2狀態(tài),它是狀態(tài)變遷為timewait前一個狀態(tài)。該參數(shù)定義不屬于任何進程的該連接狀態(tài)的超時時間,默認值為60,建議調整為6。
10net.ipv4.tcp_keepalive_time
tcp連接狀態(tài)里,有一個是keepalived狀態(tài),只有在這個狀態(tài)下,客戶端和服務端才能通信。正常情況下,當通信完畢,客戶端或服務端會告訴對方要關閉連接,此時狀態(tài)就會變?yōu)閠imewait,如果客戶端沒有告訴服務端,并且服務端也沒有告訴客戶端關閉的話(例如,客戶端那邊斷網了),此時需要該參數(shù)來判定。
比如客戶端已經斷網了,但服務端上本次連接的狀態(tài)依然是keepalived,服務端為了確認客戶端是否斷網,就需要每隔一段時間去發(fā)一個探測包去確認一下看看對方是否在線。這個時間就由該參數(shù)決定。它的默認值為7200(單位為秒),建議設置為30。
11 net.ipv4.tcp_keepalive_intvl
該參數(shù)和上面的參數(shù)是一起的,服務端在規(guī)定時間內發(fā)起了探測,查看客戶端是否在線,如果客戶端并沒有確認,此時服務端還不能認定為對方不在線,而是要嘗試多次。該參數(shù)定義重新發(fā)送探測的時間,即第一次發(fā)現(xiàn)對方有問題后,過多久再次發(fā)起探測。
默認值為75秒(單位為秒),可以改為3。
12 net.ipv4.tcp_keepalive_probes
第10和第11個參數(shù)規(guī)定了何時發(fā)起探測和探測失敗后再過多久再發(fā)起探測,但并沒有定義一共探測幾次才算結束。該參數(shù)定義發(fā)起探測的包的數(shù)量。默認為9,建議設置2。
-
內核
+關注
關注
3文章
1416瀏覽量
41428 -
參數(shù)
+關注
關注
11文章
1867瀏覽量
33086
原文標題:常見網絡相關的內核參數(shù)調整
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Linux一些常見問題——內核編譯常見錯誤
NIOS II 常見問題總結
關于二叉樹一些數(shù)據(jù)結構和算法相關的題目
2019美西展一些總結分享
一些常見的PCB原型設計和裝配神話解析
總結一些常用的電平標準資料下載

學習linux內核的一些建議

評論