Windows Vista引進了許多新的特性到TCP/IP棧,包括CTCP和TCP 窗口自動調整。這種新的實現相比較于以前windows的默認設置在更寬的internet連接會有更好的效果。并且能夠運行中調整TCP接受窗口(RWIN)的值,取決于BDP(帶寬時延產品)。然而,這導致許多老的路由器的問題并且限制用戶調整許多TCP/IP參數,但仍然有許多調整的空間。本文解釋知名的可調整的TCP/IP參數。
檢查TCP/IP狀態
為了檢查當前Vista TCP/IP可調整參數,在命令行輸入下面的命令:
netsh int tcp show global
你可以得到如下顯示:
這些設置的默認值和推薦狀態下面將介紹,兩個最重要的參數是 "Auto-Tuning Level" 和 "Congestion Control Provider".
TCP Auto-Tuning Level
為了關閉默認的RWIN自動調整行為,在命令行type:
netsh int tcp set global autotuninglevel=disable
默認auto-tuning level是正常,并且上面命令的可能設置是:
disabled:使用固定的TCP接受窗口。限制在64KB
highlyrestricted;允許接受窗口增加超過默認值,非常保守
restricted:在TCP接受窗口超過默認值的時候稍微控制其增長。
normal:默認值,允許RWIN與許多條件一起增長
experimental:允許RWIN增加在極端的情況下(不推薦,它可能降低通常情況下的性能,僅僅為了研究的目的。這會是RWIN超過16MB)。
我們的推薦:normal(除非你碰到問題)
如果你碰到問題,例如NAT路由和SPI防火墻,嘗試restricted,highlyrestricted或diabled狀態。
注意:
1.據報道,許多家庭的帶有SPI防火墻的NAT路由器在normal狀態下會有問題,降低速度,丟包并且總體降低網絡的性能。
2.自動調整和老的router之間會有問題,他們不支持TCPwindow的scaling
3.netsh命令執行后理解起作用,不要重新啟動
復合TCP-提高吞吐量
傳統的慢啟動和擁塞避免算法會幫助避免網絡擁塞,其在連接建立的開始通過逐漸增加TCP窗口,直到達到TCP接受窗口的邊界或者丟包,對于寬帶寬internet連接,高的TCP窗口和高的latency(高BDP),這種算法不能足夠快的增加TCP窗口而最終利用連接的帶寬。
復合TCP(CTCP)是一個新的方法,在Vista和Server 2008中可用(也有一個hotfix在XP/2003中可用)。CTCP主動在寬連接時增加TCP發送窗口(大的RWIN和BDP)。CTCP嘗試通過監視delay的變化情況和丟包情況來最大化吞吐量。其也確保它的行為并不消極地影響其他TCP連接。
默認,Vista是CTCP關閉的,server2008是打開的,打開這個選項能顯著增加吞吐量。
為了enable CTCP,命令行輸入:
netsh int tcp set global congestionprovider=ctcp
diable CTCP,輸入:
netsh int tcp set global congestionprovider=none
可能的選項是:ctcp, none,default(恢復系統默認值)
推薦使用ctcp
對于大多數寬連接使用這個新的CTCP擁塞控制算法會更好,強烈建議打開這個選項。
ECN CapabilityECN(明確地擁塞通知)是一種提供給路由器用一種可選的交流網絡擁塞方法的機制。在于降低重傳,ECN假定任何丟包都是由于router擁塞造成。其允許正在擁塞的router標記包并允許client自動降低傳輸速率來阻止更多的包丟失。ECN在Vista默認是diable的,由于其可能導致某些老router不支持這個特性的問題。
為了檢查你的router是否支持ECN,你可以使用Microsoft的Internet Connectivity Evaluation Tool,結果顯示 Traffic Congestion Test.
為了enable ECN,在命令行輸入:
netsh int tcp set global ecncapability=enabled
可能的設置是:enabled,diabled,default(恢復系統默認的狀態)
默認狀態是:disabled
推薦狀態:disabled.
更多ECN信息在:explicit congestion notification(ECN) for TCP/IP.
RSS-接收端scalingRSS設置使在多個處理器上平行處理接收到的包可能,當然需要避免包重組順序。其避免包重組分割的包為flows,使用單獨的一個處理器來處理所有包為指定的flow。包按照指定字段hash值來分割到流中,并且結果的hash值用來選擇處理器處理流。這個方法確保所有指定TCP連接的包在同一個處理器中,按照相同的順序被接受。
可能的RSS設置:disabled,enabled,default(恢復到系統默認值)。
默認狀態:enabled
推薦:enabled
TCP Chimney OffloadTCP Chimney Offload是window能將一個連接上的所有TCP處理offload給一個網卡。Offload是基于每個連接的,與任務offload比較,TCP chimney offload更減少網絡相關的CPU負載,將CPU時間free出來從而促進整體的性能。
The possible states are: disabled, enabled, default (restores chimney offload state to the system default)
Default state: enabled
Recommended: enabled
手動調整注冊表參數許多關于TCP/IP參數注冊表項的調整在以前的window有效,但在Vista和Server2008上不再有效了。下面是那些已經確認仍然有效的參數列表。注意為了改變這些設置并且使其有效,需要重新啟動計算機。同樣,任何改變推薦備份注冊表。
在regedit(啟動圖標->Run->輸入:regedit 系統管理員的身份),你可以看到這些keys:
MTU (最大傳輸單元) - 最大的包大小。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{...}\
MTU=1500 (DWORD, entry does not exist by default)
{....} 中的是你網卡的唯一標識。你可以通過IP地址來識別,如果IP地址被表示為DhcpIPAddress=192.168.x.x 文本值。
推薦使用默認值,除非你想縮小。Vista默認使用下面網絡最大可能的包。
注意:在有些測試環境中,正確的MTU 項可能有8的偏移,8偏移與PPPOE頭的大小一致,使用TCP Analyzer來檢查結果。
TCP 1323 Options
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
Tcp1323Opts=1 (DWORD, 這個項在你使用 "netsh int tcp set global autotuninglvl=..." 命令時創建, 默認設置0).
設置這項似乎沒有作用,由于auto-tuning 使用TCP 1323 scale 因子 并運行時改變, 不用管這個設置. 寬連接的時候最好設置該項為1。