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