net.ipv4

net.ipv4

IPv4的核心管理功能,通過/proc/sys/net/ipv4/最佳化Linux下網路性能。

基本介紹

  • 中文名:net.ipv4
  • 默認值:5
  • 對應於:180秒左右時間
  • 傳送:keepalive探測確定該連線已斷開
基本參數,性能參數,

基本參數

tcp_syn_retries :INTEGER
默認值是5
對於一個新建連線,核心要傳送多少個 SYN 連線請求才決定放棄。不應該大於255,默認值是5,對應於180秒左右時間。(對於大負載而物理通信良好的網路而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連線,對進來的連線,是由tcp_retries1 決定的)
tcp_synack_retries :INTEGER
默認值是5
對於遠端的連線請求SYN,核心會傳送SYN + ACK數據報,以確認收到上一個 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-2 sockets 的危險性低於 FIN-WAIT-1 ﹐因為它們最多只吃 1.5K 的記憶體﹐但是它們存在時間更長。另外參考 tcp_max_orphans。(事實上做NAT的時候,降低該值也是好處顯著的,我本人的網路環境中降低該值為30)
tcp_max_tw_buckets :INTEGER
默認值是180000
系 統在同時所處理的最大 timewait sockets 數目。如果超過此數的話﹐time-wait socket 會被立即砍除並且顯示警告信息。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐千萬不要人為的降低這個限制﹐不過﹐如果網路條件需要比默認值更多﹐則可以提高它(或許還要增加記憶體)。(事實上做NAT的時候最好可以適當地增加該值)
tcp_tw_recycle :BOOLEAN
默認值是0
打開快速 TIME-WAIT sockets 回收。除非得到技術專家的建議或要求﹐請不要隨意修改這個值。(做NAT的時候,建議打開它)
tcp_tw_reuse:BOOLEAN
默認值是0
該檔案表示是否允許重新套用處於TIME-WAIT狀態的socket用於新的TCP連線(這個對快速重啟動某些服務,而啟動後提示連線埠已經被使用的情形非常有幫助)
tcp_max_orphans :INTEGER
預設值是8192
系統所能處理不屬於任何進程的TCP sockets最大數量。假如超過這個數量﹐那么不屬於任何進程的連線會被立即reset,並同時顯示警告信息。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制(這個值Redhat AS版本中設定為32768,但是很多防火牆修改的時候,建議該值修改為2000)
tcp_abort_on_overflow :BOOLEAN
預設值是0
守護進程太忙而不能接受新的連線,就象對方傳送reset訊息,默認值是false。這意味著當溢出的原因是因為一個偶然的猝發,那么連線將恢復狀態。只有在你確信守護進程真的不能完成連線請求時才打開該選項,該選項會影響客戶的使用。(對待已經滿載的sendmail,apache這類服務的時候,這個可以很快讓客戶端終止連線,可以給予服務程式處理已有連線的緩衝機會,所以很多防火牆上推薦打開它)

性能參數

tcp_syncookies :BOOLEAN
默認值是0
只有在核心編譯時選擇了CONFIG_SYNCOOKIES時才會發生作用。當出現syn等候佇列出現溢出時象對方傳送syncookies。目的是為了防止syn flood攻擊。
注意:該選項千萬不能用於那些沒有收到攻擊的高負載伺服器,如果在日誌中出現synflood訊息,但是調查發現沒有收到synflood攻擊,而是合法用戶的連線負載過高的原因,你應該調整其它參數來提高伺服器性能。參考:
tcp_max_syn_backlog
tcp_synack_retries
tcp_abort_on_overflow
syncookie嚴重的違背TCP協定,不允許使用TCP擴展,可能對某些服務導致嚴重的性能影響(如SMTP轉發)。(注意,該實現與BSD上面使用的tcp proxy一樣,是違反了RFC中關於tcp連線的三次握手實現的,但是對於防禦syn-flood的確很有用.)
tcp_stdurg :BOOLEAN
默認值為0
使用 TCP urg pointer 欄位中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋,因此如果您在 Linux 打開它﹐或會導致不能和它們正確溝通。
tcp_max_syn_backlog :INTEGER
對於那些依然還未獲得客戶端確認的連線請求﹐需要保存在佇列中最大數目。對於超過 128Mb 記憶體的系統﹐默認值是 1024 ﹐低於 128Mb 的則為 128。如果伺服器經常出現過載﹐可以嘗試增加這個數字。警告﹗假如您將此值設為大於 1024﹐最好修改 include/net/tcp.h 裡面的 TCP_SYNQ_HSIZE ﹐以保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog ﹐並且編進核心之內。(SYN Flood攻擊利用TCP協定散布握手的缺陷,偽造虛假源IP位址傳送大量TCP-SYN半打開連線到目標系統,最終導致目標系統Socket佇列資源耗 盡而無法接受新的連線。為了應付這種攻擊,現代Unix系統中普遍採用多連線佇列處理的方式來緩衝(而不是解決)這種攻擊,是用一個基本佇列處理正常的完 全連線套用(Connect()和Accept() ),是用另一個佇列單獨存放半打開連線。這種雙佇列處理方式和其他一些系統核心措施(例如Syn-Cookies/Caches)聯合套用時,能夠比較有效的緩解小規模的SYN Flood攻擊(事實證明<1000p/s)加大SYN佇列長度可以容納更多等待連線的網路連線數,所以對Server來說可以考慮增大該值.)
tcp_window_scaling :INTEGER
預設值為1
該檔案表示設定tcp/ip會話的滑動視窗大小是否可變。參數值為布爾值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的視窗最大可達到 65535 位元組,對於高速網路,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動視窗大小增大數個數量級,從而提高數據傳輸的能力(RFC 1323)。(對普通地百M網路而言,關閉會降低開銷,所以如果不是高速網路,可以考慮設定為0)
tcp_timestamps :BOOLEAN
預設值為1
Timestamps 用在其它一些東西中﹐可以防範那些偽造的 sequence 號碼。一條1G的寬頻線路或許會重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由於上次產生的)。Timestamp 會讓它知道這是個 '舊封包'。(該檔案表示是否啟用以一種比逾時重發更精確的方法(RFC 1323)來啟用對 RTT 的計算;為了實現更好的性能應該啟用這個選項。)
tcp_sack :BOOLEAN
預設值為1
使 用 Selective ACK﹐它可以用來查找特定的遺失的數據報--- 因此有助於快速恢復狀態。該檔案表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高性能(這樣可以讓傳送者只傳送丟失的報文段)。(對於廣域網通信來說這個選項應該啟用,但是這會增加對 CPU 的占用。)
tcp_fack :BOOLEAN
預設值為1
打開FACK擁塞避免和快速重傳功能。(注意,當tcp_sack設定為0的時候,這個值即使設定為1也無效)
tcp_dsack :BOOLEAN
預設值為1
允許TCP傳送"兩個完全相同"的SACK。

相關詞條

熱門詞條

聯絡我們