如下是在/etc/sysctl.conf文件中配置的幾個重要內核參數,這幾個參數的設置關係到系統性能:緩存
一、net.ipv4.tcp_syncookies
#此參數應該設置爲1,防止SYN Flood。
處在SYN_RECV的TCP鏈接稱爲半鏈接,存儲在SYN隊列。大量SYN_RECV會致使隊列溢出,後續請求將被內核直接丟棄,也就是SYN Flood攻擊。開啓syncookies後,當SYN隊列滿了後,TCP會經過原地址端口,目的地址端口和時間戳打造一個特別的Sequence Number(又叫cookie發回去,若是是攻擊者則不會有響應,若是是正常鏈接則把這個SYNCookie發回來,而後服務器端能夠經過cookie創建鏈接(即便不在SYN隊列)。安全
二、net.ipv4.tcp_fin_timeout
#此參數默認值60,TCP保持在FIN_WAIT2狀態的時間,超時後直接處於CLOSED,因此下降tcp_fin_timeout有助於減小TIME_WAIT數量。注意:雖然shutdown(SHUD_WR)也會處於FIN_WAIT2狀態,但超時並不起做用。服務器
三、net.ipv4.tcp_tw_recycle
#此參數默認值0,打開快速TIME_WAIT socket回收。
若是tcp_timestamps開啓的話,會緩存每一個鏈接的最新時間戳,若是後續請求時間戳小於緩存的時間戳,即視爲無效,相應的包被丟棄。因此若是是在NAT(Network Address Translation)網絡下,就可能出現數據包丟棄的現象,會致使大量的TCP鏈接創建錯誤。cookie
四、net.ipv4.tcp_tw_resue
#此參數默認值0,是否重用TIME_WAIT狀態的socket用於新的鏈接。
這個選項要比net.ipv4.tcp_tw_recycle安全,從協議的角度看,複用是安全的。複用條件:
1)net.ipv4.tcp_timestamps選項必須打開(客戶端也必須打開) ;
2) 重用TIME_WAIT的條件是收到最後一個包後超過1秒;網絡
五、net.ipv4.tcp_keepalive_time = 1200
#此參數表示TCP發送keepalive探測消息的間隔時間(秒),用於確認TCP鏈接是否有效。當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,可改成20分鐘。socket