2012-05-22 48 views
0

將Windows機器上的數據發送到具有高延遲的Windows或Linux網絡上的網絡使用率爲鏈路容量的10%。同時,通過同一網絡從Linux發送相同的數據幾乎快了十倍。即使僅通過延遲數據包在低延遲連接上模擬高延遲,問題也是如此。從Windows發送數據在任何延遲較高但linux速度很快的網絡上運行緩慢

它似乎影響我嘗試過的所有應用程序。測試在Windows 7和Windows Server 2003上進行,觀察到相同的行爲。

從tcpdump可以看出,Windows在快速突發中發送了大約10個數據包,然後等待ACK,同時Linux發送大約100個數據包而不等待ACK。

我試圖啓用化合物TCP沒有改進。

我正在尋找關於如何找出發生了什麼的任何建議。還有如何解決它。

+1

這不是一個編程問題,並且是StackOverflow的偏離主題。請花點時間查看[常見問題](http://stackoverflow.com/faq),以便更加熟悉在此提出的(以及不適合的)問題的類型。保持主題有助於保持SO是有用的*編程*資源。謝謝。 :) –

+0

好吧,它發生在任何LFN上,甚至用人工延遲的數據包模擬出來。在發佈之前,我正在閱讀FAQ,在我看來,任何用於Windows的網絡軟件的開發人員都必須處理這個問題,因此它適用於StackOverflow。我剛剛說得不好,還是你覺得它仍然是題外話? – mmm

+0

這是題外話題。 :) IT是一個網絡問題,而不是編程問題,除非您可以發佈導致您問題的代碼。如果我問一個關於我應該購買哪種計算機的問題,即使我說我正在使用計算機爲我的編程工作編寫代碼,也是無關緊要的。 –

回答

4

我能夠通過增加TCP的大小,以徹底解決我的問題發送,並在Windows註冊表中接收緩衝區(需要重新啓動):

[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Afd \Parameters] 
DefaultReceiveWindow = 1024000 
DefaultSendWindow = 1024000 

如果這些項不存在,則默認爲8KB兩者都是Windows在等待ACK的數據量。

還要確保

netsh interface tcp show global 

不顯示

Receive Window Auto-Tuning Level : disabled 

否則TCP窗口縮放不僅接受,而且用於發送,這將限制顯著的連接速度禁用。要啓用TCP Window Scaling設置Auto-Tuning級別爲例如正常:

netsh interface tcp set global autotuninglevel=normal 
相關問題