Linux核心優化之TCP相關引數

塵埃092發表於2014-11-05

tcp_syn_retriesINTEGER
預設值是5
對於一個新建連線,核心要傳送多少個SYN連線請求才決定放棄。不應該大於255預設值是5,對應於180秒左右時間。(對於大負載而物理通訊良好的網路而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連線,對進來的連線,是由tcp_retries1決定的)

tcp_synack_retries
INTEGER
預設值是5
對於遠端的連線請求SYN,核心會傳送SYNACK資料包,以確認收到上一個SYN連線請求包。這是所謂的三次握手(threeway handshake)機制的第二個步驟。這裡決定核心在放棄連線之前所送出的SYN+ACK數目。不應該大於255預設值是5,對應於180秒左右時間。(可以根據上面的tcp_syn_retries來決定這個值)

tcp_keepalive_time
INTEGER
預設值是7200(2小時)
keepalive開啟的情況下,TCP傳送keepalive訊息的頻率。(由於目前網路攻擊等因素,造成了利用這個進行的攻擊很頻繁,曾經也有cu的朋友提到過,說如果2邊建立了連線,然後不傳送任何資料或者rst/fin訊息,那麼持續的時間是不是就是2小時,空連線攻擊?tcp_keepalive_time就是預防此情形的.我個人在做nat服務的時候的修改值為1800)

tcp_keepalive_probes
INTEGER
預設值是9
TCP
傳送keepalive探測以確定該連線已經斷開的次數。(注意:保持連線僅在SO_KEEPALIVE套接字選項被開啟是才傳送.次數預設不需要修改,當然根據情形也可以適當地縮短此值.設定為5比較合適)

tcp_keepalive_intvl
INTEGER
預設值為75
探測訊息傳送的頻率,乘以tcp_keepalive_probes就得到對於從開始探測以來沒有響應的連線殺除的時間。預設值為75秒,也就是沒有活動的連線將在大約11分鐘以後將被丟棄。(對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類伺服器需要改小該值,15是個比較合適的值)

tcp_retries1
INTEGER
預設值是3
放棄回應一個TCP連線請求前﹐需要進行多少次重試。RFC規定最低的數值是3這也是預設值﹐根據RTO的值大約在3-8分鐘之間。(注意:這個值同時還決定進入的syn連線)

tcp_retries2
INTEGER
預設值為15
在丟棄啟用(已建立通訊狀況)TCP連線之前﹐需要進行多少次重試。預設值為15,根據RTO的值來決定,相當於13-30分鐘(RFC1122規定,必須大於100).(這個值根據目前的網路設定,可以適當地改小,我的網路內修改為了5)

tcp_orphan_retries
INTEGER
預設值是7
在近端丟棄TCP連線之前﹐要進行多少次重試。預設值是7個﹐相當於50-16分鐘﹐視RTO而定。如果您的系統是負載很大的web伺服器﹐那麼也許需要降低該值﹐這類sockets可能會耗費大量的資源。另外參的考tcp_max_orphans(事實上做NAT的時候,降低該值也是好處顯著的,我本人的網路環境中降低該值為3)

tcp_fin_timeout
INTEGER
預設值是60
對於本端斷開的socket連線,TCP保持在FIN-WAIT-2狀態的時間。對方可能會斷開連線或一直不結束連線或不可預料的程式死亡。預設值為60秒。過去在2.2版本的核心中是180秒。您可以設定該值﹐但需要注意﹐如果您的機器為負載很重的web伺服器﹐您可能要冒記憶體被大量無效資料包填滿的風險﹐FIN-WAIT-2sockets 的危險性低於FIN-WAIT-1﹐因為它們最多隻吃1.5K的記憶體﹐但是它們存在時間更長。另外參考tcp_max_orphans(事實上做NAT的時候,降低該值也是好處顯著的,我本人的網路環境中降低該值為30)

tcp_max_tw_buckets
INTEGER
預設值是180000
系統在同時所處理的最大timewaitsockets 數目。如果超過此數的話﹐time-waitsocket 會被立即砍除並且顯示警告資訊。之所以要設定這個限制﹐純粹為了抵禦那些簡單的DoS攻擊﹐千萬不要人為的降低這個限制﹐不過﹐如果網路條件需要比預設值更多﹐則可以提高它(或許還要增加記憶體)(事實上做NAT的時候最好可以適當地增加該值)

tcp_tw_recycle
BOOLEAN
預設值是0
開啟快速TIME-WAITsockets 回收。除非得到技術專家的建議或要求﹐請不要隨意修改這個值。(NAT的時候,建議開啟它)


tcp_tw_reuseBOOLEAN
預設值是0
該檔案表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連線(這個對快速重啟動某些服務,而啟動後提示埠已經被使用的情形非常有幫助)

tcp_max_orphans
INTEGER
預設值是8192
系統所能處理不屬於任何程式的TCPsockets


相關文章