CentOS下內核TCP參數優化配置詳解


主動關閉的一方在發送最后一個ACK后就會進入TIME_WAIT狀態,並停留2MSL(Max Segment LifeTime)時間,這個是TCP/IP必不可少的。

TCP/IP的設計者如此設計,主要原因有兩個:

1 防止上一次連接中的包迷路后重新出現,影響新的連接(經過2MSL時間后,上一次連接中所有重復的包都會消失)。

2 為了可靠地關閉TCP連接。主動關閉方發送的最后一個ACK(FIN)有可能會丟失,如果丟失,被動方會重新發FIN,這時如果主動方處於CLOSED狀態,就會響應RST而不是ACK。所以主動方要處於TIME_WAIT狀態,而不能是CLOSED狀態。另外,TIME_WAIT並不會占用很大的資源,除非受到攻擊

查看當前連接統計數:

netstat -n| awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 

CLOSED:無連接是活動的或正在進行中的。
LISTEN:服務器在等待進入呼叫。
SYN_RECV:一個連接請求已經到達,等待確認。
SYN_SENT:應用已經開始,打開一個連接。
ESTABLISHED:正常數據傳輸狀態。
FIN_WAIT1:應用說它已經完成。
FIN_WAIT2:另一邊已同意釋放。
CLOSING:兩邊同時嘗試關閉。
TIME_WAIT:另一邊已初始化一個釋放。
LAST_ACK:等待所有分組死掉。

修改Linux內核參數來減少Squid服務器的TIME_WAIT套接字數量

vim /etc/sysctl.conf

添加參數:

net.ipv4.tcp_syncookies=1 表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookie來處理,可防范少量的SYN攻擊。默認為0,表示關閉。

net.ipv4.tcp_tw_reuse=1 表示開啟重用。允許將TIME-WAIT套接字重新用於新的TCP連接。默認為0,表示關閉。

net.ipv4.tcp_tw_recycle=1 表示開啟TCP連接中TIME-WAIT套接字的快速回收。默認為0,表示關閉。

net.ipv4.tcp_fin_timeout=30 表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。

net.ipv4.tcp_keepalive_time=1200 表示當keepalive啟用時,TCP發送keepalive消息的頻度。默認是2小時,這里改為20分鍾。

net.ipv4.ip_local_port_range=1024 65000 表示向外連接的端口范圍。默認值很小:32768~61000,改為1024~65000。

net.ipv4.tcp_max_syn_backlog=8192 表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數。

net.ipv4.tcp_max_tw_buckets=5000 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數 字,TIME_WAIT套接字將立刻被清除並打印警告信息。默認為180000,改為5000。

vim /etc/sysctl.conf

net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1200
net.ipv4.ip_local_port_range=1024 65000
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_max_tw_buckets=5000

對於Apache、Nginx等服務器,前面介紹的幾個參 數已經可以很好地減少TIME_WAIT套接字數量,但是對於Squid來說,效果卻不大。有了此參數就可以控制TIME_WAIT套接字的最大數量,避 免Squid服務器被大量的TIME_WAIT套接字拖死。

  • 執行以下命令使內核配置立即生效:
/sbin/sysctl -p

Apache或Nginx等的Web服務器,或Nginx的反向代理,則只需要更改以下幾項即可:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000

郵件服務器,則建議內核方案如下:

net.ipv4.tcp_fin_timeout = 30 
net.ipv4.tcp_keepalive_time = 300 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.ip_local_port_range = 5000 65000
kernel.shmmax = 134217728

行以下命令使內核配置立即生效:

/sbin/sysctl -p


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM