CLOSE_WAIT生成的原因

 

CLOSE_WAITTCP的癌症,TCP的朋友。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

CLOSE_WAIT狀態的生成原因
首先我們知道,如果我們的服務器程序APACHE處於CLOSE_WAIT狀態的話,說明套接字是被動關閉的!

因爲如果是CLIENT端主動斷掉當前連接的話,那麼雙方關閉這個TCP連接共需要四個packet

      Client --->  FIN  --->  Server 

      Client <---  ACK  <---  Server 

 這時候Client端處於FIN_WAIT_2狀態;而Server 程序處於CLOSE_WAIT狀態。

      Client <---  FIN  <---  Server 

這時Server 發送FINClientServer 就置爲LAST_ACK狀態。

       Client --->  ACK  --->  Server 

Client迴應了ACK,那麼Server 的套接字纔會真正置爲CLOSED狀態。

Server 程序處於CLOSE_WAIT狀態,而不是LAST_ACK狀態,說明還沒有發FINClient,那麼可能是在關閉連接之前還有許多數據要發送或者其他事要做,導致沒有發這個FIN packet

通常來說,一個CLOSE_WAIT會維持至少2個小時的時間。如果有個流氓特地寫了個程序,給你造成一堆的CLOSE_WAIT,消耗

你的資源,那麼通常是等不到釋放那一刻,系統就已經解決崩潰了。

只能通過修改一下TCP/IP的參數,來縮短這個時間:修改tcp_keepalive_*系列參數有助於解決這個問題。

 

proc/sys/net/ipv4/下各項的意義

/proc/sys/net/ipv4/icmp_timeexceed_rate
這個在traceroute時導致著名的“Solaris middle star”。這個文件控制發送ICMP Time Exceeded消息的比率。
/proc/sys/net/ipv4/igmp_max_memberships
主機上最多有多少個igmp (多播)套接字進行監聽。
/proc/sys/net/ipv4/inet_peer_gc_maxtime
求 助: Add a little explanation about the inet peer storage? Minimum interval between garbage collection passes. This interval is in effect under low (or absent) memory pressure on the pool. Measured in jiffies.
/proc/sys/net/ipv4/inet_peer_gc_mintime
每一遍碎片收集之間的最小時間間隔。當內存壓力比較大的時候,調整這個間隔很有效。以jiffies計。
/proc/sys/net/ipv4/inet_peer_maxttl
entries
的最大生存期。在pool沒有內存壓力的情況下(比如,poolentries的數量很少的時候),未使用的entries經過一段時間就會過期。以jiffies計。
/proc/sys/net/ipv4/inet_peer_minttl
entries
的最小生存期。應該不小於匯聚端分片的生存期。當pool的大小不大於inet_peer_threshold時,這個最小生存期必須予以保證。以jiffies計。
/proc/sys/net/ipv4/inet_peer_threshold
The approximate size of the INET peer storage. Starting from this threshold entries will be thrown aggressively. This threshold also determines entries' time-to-live an
time intervals between garbage collection passes. More entries, less time-to-live, less GC interval.
/proc/sys/net/ipv4/ip_autoconfig
這個文件裏面寫着一個數字,表示主機是否通過RARPBOOTPDHCP或者其它機制取得其IP配置。否則就是0
/proc/sys/net/ipv4/ip_default_ttl
數據包的生存期。設置爲64是安全的。如果你的網絡規模巨大就提高這個值。不要因爲好玩而這麼做——那樣會產生有害的路由環路。實際上,在很多情況下你要考慮能否減小這個值。
/proc/sys/net/ipv4/ip_dynaddr/proc/sys/net/ipv4/icmp_destunreach_rate

如果你有一個動態地址的自動撥號接口,就得設置它。當你的自動撥號接口激活的時候,本地所有沒有收到答覆的TCP套接字會重新綁定到正確的地址上。這可以解決引發撥號的套接字本身無法工作,重試一次卻可以的問題。
/proc/sys/net/ipv4/ip_forward
內核是否轉發數據包。缺省禁止。
/proc/sys/net/ipv4/ip_local_port_range
用於向外連接的端口範圍。缺省情況下其實很小:10244999
/proc/sys/net/ipv4/ip_no_pmtu_disc
如果你想禁止“沿途MTU發現”就設置它。“沿途MTU發現”是一種技術,可以在傳輸路徑上檢測出最大可能的MTU值。參見Cookbook一章中關於“沿途MTU發現”的內容。
/proc/sys/net/ipv4/ipfrag_high_thresh
用 於IP分片匯聚的最大內存用量。分配了這麼多字節的內存後,一旦用盡,分片處理程序就會丟棄分片。When ipfrag_high_thresh bytes of memory is allocated for this purpose, the fragment handler will toss packets until ipfrag_low_thresh is reached.
/proc/sys/net/ipv4/ip_nonlocal_bind
如果你希望你的應用程序能夠綁定到不屬於本地網卡的地址上時,設置這個選項。如果你的機器沒有專線連接(甚至是動態連接)時非常有用,即使你的連接斷開,你的服務也可以啓動並綁定在一個指定的地址上。
/proc/sys/net/ipv4/ipfrag_low_thresh
用於IP分片匯聚的最小內存用量。
/proc/sys/net/ipv4/ipfrag_time
IP
分片在內存中的保留時間(秒數)
/proc/sys/net/ipv4/tcp_abort_on_overflow
一個布爾類型的標誌,控制着當有很多的連接請求時內核的行爲。啓用的話,如果服務超載,內核將主動地發送RST包。
/proc/sys/net/ipv4/tcp_fin_timeout
如 果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端可以出錯並永遠不關閉連接,甚至意外當機。缺省值是60秒。2.2 內核的通常值是180秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB服務器,也有因爲大量的死套接字而內存溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,因爲它最多隻能吃掉1.5K內存,但是它們的生存期長些。參見tcp_max_orphans

/proc/sys/net/ipv4/tcp_keepalive_time
keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時。
/proc/sys/net/ipv4/tcp_keepalive_intvl
當探測沒有確認時,重新發送探測的頻度。缺省是75秒。
/proc/sys/net/ipv4/tcp_keepalive_probes
在認定連接失效之前,發送多少個TCPkeepalive探測包。缺省值是9。這個值乘以tcp_keepalive_intvl之後決定了,一個連接發送了keepalive之後可以有多少時間沒有迴應。
/proc/sys/net/ipv4/tcp_max_orphans
系 統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被複位並打印出警告信息。這個限制僅僅是爲了防止簡單的DoS攻擊,你絕對不能過分依靠它或者人爲地減小這個值,更應該增加這個值(如果增加了內存之後)This limit exists only to prevent simple DoS attacks, you _must_ not rely on this o lower the limit artificially, but rather increase it (probably, after increasing installed memory), if network conditions require more than default value, an tune network services to linger an kill such states more aggressively. 讓我再次提醒你:每個孤兒套接字最多能夠吃掉你64K不可交換的內存。
/proc/sys/net/ipv4/tcp_orphan_retries
本端試圖關閉TCP連接之前重試多少次。缺省值是7,相當於50~16分鐘(取決於RTO)。如果你的機器是一個重載的WEB服務器,你應該考慮減低這個值,因爲這樣的套接字會消耗很多重要的資源。參見tcp_max_orphans
/proc/sys/net/ipv4/tcp_max_syn_backlog
記 錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有128M內存的系統而言,缺省值是1024,小內存的系統則是128。如果服務器不堪重負,試 試提高這個值。注意!如果你設置這個值大於1024,最好同時調整include/net/tcp.h中的TCP_SYNQ_HSIZE,以保證 TCP_SYNQ_HSIZE*16 tcp_max_syn_backlo,然後重新編譯內核。
/proc/sys/net/ipv4/tcp_max_tw_buckets
系 統同時保持timewait套接字的最大數量。如果超過這個數字,time-wait套接字將立刻被清除並打印警告信息。這個限制僅僅是爲了防止簡單的 DoS攻擊,你絕對不能過分依靠它或者人爲地減小這個值,如果網絡實際需要大於缺省值,更應該增加這個值(如果增加了內存之後)
/proc/sys/net/ipv4/tcp_retrans_collapse
爲兼容某些糟糕的打印機設置的“將錯就錯”選項。再次發送時,把數據包增大一些,來避免某些TCP協議棧的BUG

/proc/sys/net/ipv4/tcp_retries1
在認定出錯並向網絡層提交錯誤報告之前,重試多少次。缺省設置爲RFC規定的最小值:3,相當於3~8分鐘(取決於RIO)。
/proc/sys/net/ipv4/tcp_retries2
在殺死一個活動的TCP連接之前重試多少次。RFC 1122規定這個限制應該長於100秒。這個值太小了。缺省值是15,相當於13~30分鐘(取決於RIO)。
/proc/sys/net/ipv4/tcp_rfc1337
這個開關可以啓動對於在RFC1337中描述的“tcptime-wait暗殺危機”問題的修復。啓用後,內核將丟棄那些發往time-wait狀態TCP套接字的RST包。卻省爲0
/proc/sys/net/ipv4/tcp_sack
特別針對丟失的數據包使用選擇性ACK,這樣有助於快速恢復。
/proc/sys/net/ipv4/tcp_stdurg
使用TCP緊急指針的主機需求解釋。因爲絕大多數主機採用BSD解釋,所以如果你在Linux上打開它,可能會影響它與其它機器的正常通訊。缺省是FALSE
/proc/sys/net/ipv4/tcp_syn_retries
在內核放棄建立連接之前發送SYN包的數量。
/proc/sys/net/ipv4/tcp_synack_retries
爲了打開對端的連接,內核需要發送一個SYN並附帶一個迴應前面一個SYNACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量。
/proc/sys/net/ipv4/tcp_timestamps
時間戳可以避免序列號的卷繞。一個1Gbps的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的數據包。
/proc/sys/net/ipv4/tcp_tw_recycle
能夠更快地回收TIME-WAIT套接字。缺省值是1。除非有技術專家的建議和要求,否則不應修改。
/proc/sys/net/ipv4/tcp_window_scaling
一般來說TCP/IP允許窗口尺寸達到65535字節。對於速度確實很高的網絡而言這個值可能還是太小。這個選項允許設置上G字節的窗口大小,有利於在帶寬*延遲很大的環境中使用。
一旦內核認爲它無法發包,就會丟棄這個包,並向發包的主機發送ICMP通知。
/proc/sys/net/ipv4/icmp_echo_ignore_all
根本不要響應echo包。請不要設置爲缺省,它可能在你正被利用成爲DoS攻擊的跳板時可能有用。
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts [Useful]
如果你ping子網的子網地址,所有的機器都應該予以迴應。這可能成爲非常好用的拒絕服務攻擊工具。設置爲1來忽略這些子網廣播消息。
/proc/sys/net/ipv4/icmp_echoreply_rate
設置了向任意主機迴應echo請求的比率。
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
設置它之後,可以忽略由網絡中的那些聲稱迴應地址是廣播地址的主機生成的ICMP錯誤。
/proc/sys/net/ipv4/icmp_paramprob_rate
一個相對不很明確的ICMP消息,用來回應IP頭或TCP頭損壞的異常數據包。你可以通過這個文件控制消息的發送比率。

================================================================

 http://skylove.study-area.org/blog/2006/07/linuxip_29.html

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_reuseBOOLEAN
默認值是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

tcp_ecn
BOOLEAN
缺省值爲0
打開TCP的直接擁塞通告功能。

tcp_reordering
INTEGER
默認值是3
TCP流中重排序的數據報最大數量。 (一般有看到推薦把這個數值略微調整大一些,比如5)

tcp_retrans_collapse
BOOLEAN
缺省值爲1
對於某些有bug的打印機提供針對其bug的兼容性。(一般不需要這個支持,可以關閉它)

tcp_wmem(3
INTEGER變量)min, default, max
min
:爲TCP socket預留用於
發送緩衝的內存最小值。每個tcp socket都可以在建議以後都可以使用它。默認值爲4096(4K)

default
:爲TCP socket預留用於發送緩衝的內存數量,默認情況下該值會影響其它協議使用的net.core.wmem_default 值,一般要低於net.core.wmem_default的值。默認值爲
16384(16K)

max:
用於TCP socket發送緩衝的內存最大值。該值不會影響net.core.wmem_max"靜態"選擇參數SO_SNDBUF則不受該值影響。默認值爲
131072(128K)(對於服務器而言,增加這個參數的值對於發送數據很有幫助,在我的網絡環境中,修改爲了51200 131072 204800

tcp_rmem (3
INTEGER變量)min, default, max
min
:爲TCP socket預留用於
接收緩衝的內存數量,即使在內存出現緊張情況下tcp socket都至少會有這麼多數量的內存用於接收緩衝,默認值爲8K

default
:爲TCP socket預留用於接收緩衝的內存數量,默認情況下該值影響其它協議使用的 net.core.wmem_default 值。該值決定了在tcp_adv_win_scaletcp_app_wintcp_app_win=0默認值情況下,TCP窗口大小爲
65535。默認值爲87380

max
:用於TCP socket接收緩衝的內存最大值。該值不會影響 net.core.wmem_max"靜態"選擇參數 SO_SNDBUF則不受該值影響。默認值爲 128K。默認值爲87380*2 bytes(可以看出,.max的設置最好是default的兩倍,對於NAT來說主要該增加它,我的網絡裏爲 51200 131072 204800

tcp_mem(3
INTEGER變量)low, pressure, high
low
:當TCP使用了低於該值的
內存頁面數時,TCP不會考慮釋放內存。(理想情況下,這個值應與指定給 tcp_wmem 的第 2 個值相匹配 - 這第 2 個值表明,最大頁面大小乘以最大併發請求數除以頁大小 (131072 * 300 / 4096) )

pressure
:當TCP使用了超過該值的內存頁面數量時,TCP試圖穩定其內存使用,進入pressure模式,當內存消耗低於low值時則退出pressure狀態。(理想情況下這個值應該是 TCP 可以使用的總緩衝區大小的最大值 (204800 * 300 / 4096) )

high
:允許所有tcp sockets用於排隊緩衝數據報的頁面量。(如果超過這個值,TCP 連接將被拒絕,這就是爲什麼不要令其過於保守 (512000 * 300 / 4096) 的原因了。 在這種情況下,提供的價值很大,它能處理很多連接,是所預期的 2.5 倍;或者使現有連接能夠傳輸 2.5 倍的數據。 我的網絡裏爲192000 300000 732000)

一般情況下這些值是在系統啓動時根據系統內存數量計算得到的。

tcp_app_win :
INTEGER
默認值是31
保留max(window/2^tcp_app_win, mss)數量的窗口由於應用緩衝。當爲0時表示不需要緩衝。

tcp_adv_win_scale :
INTEGER
默認值爲2
計算緩衝開銷bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0)。

 

tcp_rfc1337 :BOOLEAN
缺省值爲0
這個開關可以啓動對於在RFC1337中描述的"tcp time-wait暗殺危機"問題的修復。啓用後,內核將丟棄那些發往time-wait狀態TCP套接字的RST .

 

tcp_low_latency : BOOLEAN
缺省值爲0
允許 TCP/IP 棧適應在高吞吐量情況下低延時的情況;這個選項一般情形是的禁用。(但在構建Beowulf 集羣的時候,打開它很有幫助)

 

tcp_westwood :BOOLEAN
缺省值爲0
啓用發送者端的擁塞控制算法,它可以維護對吞吐量的評估,並試圖對帶寬的整體利用情況進行優化;對於 WAN 通信來說應該啓用這個選項。

 

tcp_bic :BOOLEAN
缺省值爲0
爲快速長距離網絡啓用 Binary Increase Congestion;這樣可以更好地利用以 GB 速度進行操作的鏈接;對於 WAN 通信應該啓用這個選項。

 

 

 

# 以下一段爲抵抗syn flood攻擊,平時建議關閉

sysctl -w net.ipv4.tcp_syncookies=1              # tcp syncookie,默認關閉

sysctl -w net.ipv4.tcp_max_syn_backlog=1280   # syn隊列,默認1024> 1280可能工作不穩定,需要修改內核源碼參數

sysctl -w net.ipv4.tcp_synack_retries=2             # syn-ack握手狀態重試次數,默認5,遭受syn-flood攻擊時改爲12

sysctl -w net.ipv4.tcp_syn_retries=2                  # 外向syn握手重試次數,默認4

 

 

# 以下一段爲應對tcp connect連接耗盡攻擊,如果開啓iptables connlimit模塊可禁用

# 有嚴重連接性能影響和不穩定因素,慎用

sysctl -w tcp_tw_recycle=1                           # 默認0tw快速回收

sysctl -w tcp_tw_reuse=1                             # 默認0tw重用

sysctl -w tcp_keepalive_intvl=60                    # 默認75tcp keeplive探測輪詢時間

sysctl -w tcp_keepalive_probes=3                  # 默認9tcp keeplive探測輪詢次數

sysctl -w tcp_keepalive_time=1800                # 默認7200tcp keeplive時間

sysctl -w tcp_fin_timeout=30                        # 默認60tcp fin狀態超時時間

#sysctl -w net.ipv4.tcp_retries1=2                     # tcp連接重傳參數,慎用

#sysctl -w net.ipv4.tcp_retries2=8

 

sysctl -w net.ipv4.ip_conntrack_max=65535          # 增大iptables狀態跟蹤表

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章