Windows系統下的TCP參數優化

 

 TCP鏈接的狀態與關閉方式及其對Server與Client的影響http://www.2cto.com/net/201304/206071.html 一般會採用修改註冊表的方式改進Windows的系統參數。下面將爲你們介紹Windows系統下的TCP參數優化方式,適用於Windows 200三、Windows XP、Windows 7以及Server版。對於具體的系統環境與性能需求,優化方式會有所差別,效果也不盡相同,僅是我的的建議。全部的優化操做都經過修改註冊表實現,須要使用regedit命令進入註冊表並建立或修改參數,修改完成後須要重啓系統,以使之生效。如下使用的參數值均爲10進制。 1. TCPWindowSize   TCPWindowSize的值表示TCP的窗口大小。TCP Receive Window(TCP數據接收緩衝)定義了發送端在沒有得到接收端的確認信息的狀態下能夠發送的最大字節數。此數值越大,返回的確認信息就越少,相應的在發送端和接收端之間的通訊就越好。此數值較小時能夠下降發送端在等待接收端返回確認信息時發生超時的可能性,但這將增長網絡流量,下降有效吞吐率。TCP在發送端和接收端之間動態調整一個最大段長度MSS(Maximum Segment Size)的整數倍。MSS在鏈接開始創建時肯定,因爲TCP Receive Window被調整爲MSS的整數倍,在數據傳輸中徹底長度的TCP數據段的比例增長,故而提升了網絡吞吐率。   缺省狀況下,TCP將試圖根據MSS來優化窗口大小,起始值爲16KB,最大值爲64KB。TCPWindowSize的最大值一般爲65535字節(64KB),以太網最大段長度爲1460字節,低於64KB的1460的最大整數倍爲62420字節,於是能夠在註冊表中將TCPWindowSize設置爲62420,做爲高帶寬網絡中適用的性能優化值。具體操做以下:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲TCPWindowSize的REG_DWORD值,該值的範圍是從0到65535,將該值設置爲62420。 2. TCP1323Opts    爲了更高效地利用高帶寬網絡,可使用比上述TCP窗口大得多的TCP窗口大小,此特性是Windows 2000和Windows Server 2003中的新特性,稱爲TCP Window Scaling,它將之前的65535字節(64KB)的限制提升到了1073741824字節(1GB)。在帶寬與延遲的乘積值很高的鏈接上(例如衛星鏈接),可能須要將窗口的大小增長到64KB以上。使用TCP Window Scaling,系統能夠容許確認信息間更大數據量的傳輸,增長了網絡吞吐量及性能。發送端和接收端往返通訊所需的時間被稱爲迴環時間(RTT)。TCP Window Scaling僅在TCP鏈接的雙方都開啓時才真正有效。TCP有一個時間戳選項,經過更加頻繁地計算來提升RTT值的估測值,此選項特別有助於估測更長距離的廣域網上鍊接的RTT值,並更加精確地調整TCP重發超時時間。時間戳在TCP報頭提供了兩個區域,一個記錄開始重發的時間,另外一個記錄接收到的時間。時間戳對於TCP Window Scaling,即確認信息收到前的大數據包傳送特別有用,激活時間戳僅僅在每一個數據包的頭部增長12字節,對網絡流量的影響微乎其微。數據完整性與數據吞吐率最大化哪一個更爲重要是個須要評估的問題。在某些環境中,例如視頻流傳輸,須要更大的TCP窗口,這是最重要的,而數據完整性排在第二位。在這種環境中,TCP Window Scaling能夠不打開時間戳。當發送端和接收端均激活TCP Window Scaling和時間戳時,此特性纔有效。不過,若在發包時加入了時間戳,通過NAT以後,若是前面相同的端口被使用過,且時間戳大於這個鏈接發出的SYN中的時間戳,就會致使服務器忽略該SYN,表現爲用戶沒法正常完成TCP的3次握手。初始時生成小的TCP窗口,以後窗口大小將按照內部算法增大。具體操做以下:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲TCP1323Opts的REG_DWORD值,該值的具體含義爲:0(缺省值)表示禁用TCP Window Scaling和時間戳;1表示只啓用TCP Window Scaling;2表示只啓用時間戳;3表示同時啓用TCP Window Scaling和時間戳。TCP1323Opts設置爲激活TCP Window Scaling後,能夠將上文中的註冊表項TCPWindowSize的值增大,最大能達到1GB,爲了達到最佳性能,這裏的值最好設置成MSS的倍數,推薦值爲256960字節。 3. TCP 控制塊表   對於每一個TCP鏈接,控制變量保存在一個稱爲TCP控制塊(TCB)的內存塊中。TCB表的大小由註冊表項MaxHashTableSize控制。在活動鏈接不少的系統中,設定一個較大的表能夠下降系統定位TCB表的時間。在TCB表上分區能夠下降對錶的訪問的爭奪。增長分區的數量,TCP的性能會獲得優化,特別是在多處理器的系統上。註冊表項NumTcbTablePartitions控制分區的數量,默認是處理器個數的平方。TCB一般預置在內存中,以防止TCP反覆鏈接和斷開時,TCB反覆從新定位浪費時間,這種緩衝的方式促進了內存管理,但同時也限制了同一時刻容許的TCP鏈接數量。註冊表項MaxFreeTcbs決定了處於空閒等待狀態的TCB從新可用以前的鏈接數量,在NT架構中常設置成高於默認值,以確保有足夠的預置的TCB。從Windows 2000開始添加了一個新特性,下降超出預置TCB運行的可能性。若是處於等待狀態的鏈接多於MaxFreeTWTcbs中的設置,全部等待時間超過60秒的鏈接將被強制關閉,之後再次啓用。此特性合併到Windows 2000 Server和Windows Server 2003後,MaxFreeTcbs將再也不用於優化性能。具體操做:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲MaxHashTableSize的REG_DWORD值,該值的範圍是從1到65536,而且必須爲2的N次方,缺省值爲512,建議設爲8192。而後在Parameters子鍵下建立或修更名爲NumTcbTablePartitions的REG_DWORD值,該值的範圍是從1到65536,而且必須爲2的N次方,缺省值爲處理器個數的平方,建議設爲處理器核心數的4倍。 4. TcpTimedWaitDelay   TcpTimedWaitDelay的值表示系統釋放已關閉的TCP鏈接並複用其資源以前,必須等待的時間。這段時間間隔就是之前的Blog中提到的TIME_WAIT狀態(2MSL,數據包最長生命週期的兩倍狀態)。若是系統顯示大量鏈接處於TIME_WAIT狀態,則會致使併發量與吞吐量的嚴重降低,經過減少該項的值,系統能夠更快地釋放已關閉的鏈接,從而爲新鏈接提供更多的資源,特別是對於高併發短鏈接的Server具備積極的意義。   該項的缺省值是240,即等待4分鐘後釋放資源;系統支持的最小值爲30,即等待時間爲30秒。具體操做:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲TcpTimedWaitDelay的REG_DWORD值,該值的範圍是從0到300,建議將該值設置爲30。 5. MaxUserPort   MaxUserPort的值表示當應用程序向系統請求可用的端口時,TCP/IP可分配的最大端口號。若是系統顯示創建鏈接時出現異常,那麼有多是因爲匿名(臨時)端口數不夠致使的,特別是當系統打開大量端口來與Web service、數據庫或其餘遠程資源創建鏈接時。   該項的缺省值是十進制的5000,這也是系統容許的最小值。Windows默認爲匿名(臨時)端口保留的端口號範圍是從1024到5000。爲了得到更高的併發量,建議將該值至少設爲32768以上,甚至設爲理論最大值65534,特別是對於模擬高併發測試環境的Client具備積極的意義。具體操做:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲MaxUserPort的REG_DWORD值,該值的範圍是從5000到65534,缺省值爲5000,建議將該值設置爲65534。 6. 動態儲備   動態儲備的值使系統能自動調整其配置,以接受大量突發的鏈接請求。若是同時接收到大量鏈接請求,超出了系統的處理能力,那麼動態儲備就會自動增大系統支持的暫掛鏈接的數量(即Client已請求而Server還沒有處理的等待鏈接數,TCP鏈接的總數包括已鏈接數與等待鏈接數),從而可減小鏈接失敗的數量。系統的處理能力和支持的暫掛鏈接的數量不足時,Client的鏈接請求將直接被拒絕。   缺省狀況下,Windows 不啓用動態儲備,能夠經過如下操做進行開啓和設置:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters註冊表子鍵,在Parameters子鍵下建立或修改下列名稱的REG_DWORD值。 EnableDynamicBacklog,值爲1,表示開啓動態儲備。MinimumDynamicBacklog,值爲128,表示支持的最小暫掛鏈接的數量爲128。MaximumDynamicBacklog,值爲2048,表示支持的最大暫掛鏈接的數量爲2048。對於高併發短鏈接的Server,建議最大值設爲1024及以上。DynamicBacklogGrowthDelta,值爲128,表示支持的暫掛鏈接的數量的增量爲128,即數量不足時自增加128,直到達到設定的最大值,如2048。7. KeepAliveTime   KeepAliveTime的值控制系統嘗試驗證空閒鏈接是否仍然無缺的頻率。若是該鏈接在一段時間內沒有活動,那麼系統會發送保持鏈接的信號,若是網絡正常而且接收方是活動的,它就會響應。若是須要對丟失接收方的狀況敏感,也就是說須要更快地發現是否丟失了接收方,請考慮減少該值。而若是長期不活動的空閒鏈接的出現次數較多,但丟失接收方的狀況出現較少,那麼可能須要增大該值以減小開銷。   缺省狀況下,若是空閒鏈接在7200000毫秒(2小時)內沒有活動,系統就會發送保持鏈接的消息。 一般建議把該值設爲1800000毫秒,從而丟失的鏈接會在30分鐘內被檢測到。具體操做:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲KeepAliveTime的REG_DWORD值,爲該值設置適當的毫秒數。 8. KeepAliveInterval   KeepAliveInterval的值表示未收到另外一方對「保持鏈接」信號的響應時,系統重複發送「保持鏈接」信號的頻率。在無任何響應的狀況下,連續發送「保持鏈接」信號的次數超過TcpMaxDataRetransmissions(下文將介紹)的值時,將放棄該鏈接。若是網絡環境較差,容許較長的響應時間,則考慮增大該值以減小開銷;若是須要儘快驗證是否已丟失接收方,則考慮減少該值或TcpMaxDataRetransmissions值。   缺省狀況下,在未收到響應而從新發送「保持鏈接」的信號以前,系統會等待1000毫秒(1秒),能夠根據具體需求修改,具體操做:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲KeepAliveInterval的REG_DWORD值,爲該值設置適當的毫秒數。 9. TcpMaxDataRetransmissions   TcpMaxDataRetransmissions的值表示TCP數據重發,系統在現有鏈接上對無應答的數據段進行重發的次數。若是網絡環境不好,可能須要提升該值以保持有效的通訊,確保接收方收到數據;若是網絡環境很好,或者一般是因爲丟失接收方而致使數據的丟失,那麼能夠減少該值以減小驗證接收方是否丟失所花費的時間和開銷。   缺省狀況下,系統會從新發送未返回應答的數據段5次,能夠根據具體需求修改,具體操做:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲TcpMaxDataRetransmissions的REG_DWORD值,該值的範圍是從0到4294967295,缺省值爲5,根據實際狀況進行設置。 10. TcpMaxConnectRetransmisstions   TcpMaxConnectRetransmisstions的值表示TCP鏈接重發,TCP退出前重發非確認鏈接請求(SYN)的次數。對於每次嘗試,重發超時是成功重發的兩倍。在Windows Server 2003中默認超時次數是2,默認超時時間爲3秒(在註冊表項TCPInitialRTT中)。速度較慢的WAN鏈接中超時時間可相應增長,不一樣環境中可能會有不一樣的最優化設置,須要在實際環境中測試肯定。超時時間不要設置太大不然將不會發生網絡鏈接超時時間。具體操做:   瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters註冊表子鍵,在Parameters子鍵下建立或修更名爲TcpMaxConnectRetransmisstions的REG_DWORD值,該值的範圍是從0到255,缺省值爲2,根據實際狀況進行設置。而後在Parameters子鍵下建立或修更名爲TCPInitialRTT的REG_DWORD值,一樣根據實際狀況進行設置。 11. TcpAckFrequency   TcpAckFrequency的值表示系統發送應答消息的頻率。若是值爲2,那麼系統將在接收到2個分段以後發送應答,或是在接收到1個分段但在200毫秒內沒有接收到任何其餘分段的狀況下發送應答;若是值爲3,那麼系統將在接收到3個分段以後發送應答,或是在接收到1個或2個分段但在200毫秒內沒有接收到任何其餘分段的狀況下發送應答,以此類推。若是要經過消除應答延遲來縮短響應時間,那麼建議將該值設爲1。在此狀況下,系統會當即發送對每一個分段的應答;若是鏈接主要用於傳輸大量數據,而200毫秒的延遲並不重要,那麼能夠減少該值以下降應答的開銷。   缺省狀況下,系統將該值設爲2,即每隔一個分段應答一次。該值的有效範圍是0到255,其中0表示使用缺省值2,能夠根據具體需求修改,具體操做:html

  瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\xx(xx由網絡適配器決定)註冊表子鍵,在xx子鍵下建立或修更名爲TcpAckFrequency的REG_DWORD值,該值的範圍是從1到13,缺省值爲2,根據但願每發送幾個分段返回一個應答而設置該值,建議百兆網絡設爲5,千兆網絡設爲13。算法

相關文章
相關標籤/搜索