
問題
注意:首先我想了解為什麼會發生這種情況。當然,如果有一個解決方案也很好。 :)
當透過 HTTP 高速下載大檔案時,我的無線流量基本上停止:我無法開啟網頁,下載本身也會暫停。它在啟動後幾乎立即暫停;有時為 800 KB,有時為幾 MB。一段時間後,下載(和其他流量)恢復,但在同一下載過程中問題不斷重複出現。
透過同一路由器 (Linskys WRT120N) 使用有線連接時不會出現此問題。另請注意,連接是不是發生這種情況時掉落。只是流量停止,無法瀏覽網頁等(發送了SYN資料包但沒有收到任何內容等)
使用 Wireshark 檢查顯示發生以下情況:
- 伺服器發送資料包並得到客戶端的確認
- 伺服器發送資料包,但 SEQ 指示某些資料包遺失(一次出現 6 個資料包)。
- 伺服器發送更多資料包,客戶端使用「選擇性確認」來確認這些資料包
- 伺服器停止發送資料一段時間(因為遺失的資料包沒有被確認)或者路由器停止轉發它們?
- 最終,伺服器進行「重傳」並且流量恢復正常。
當發生資料包遺失時,這對我來說似乎是正常行為。讓我困惑的是在一次大型高速下載過程中持續出現的資料包遺失。
什麼可能導致這種情況?
我自己的想法如下:我的互聯網速度非常快(100 mbps),因此當開始大文件下載時,路由器會緩衝傳入的數據(因為無線會引入一些輕微的延遲/速度較低,部分原因是其他網路) ,但是緩衝區溢位並且路由器丟棄資料包以調節流量(並且因為它別無選擇)。
但怎麼會發生這種事呢? TCP 視窗大小不會限制未確認的資料量嗎?那麼,如果只有 64 KB 等待確認,路由器的緩衝區怎麼會溢位呢?
筆記:我已經透過netsh
選項停用了 TCP 視窗縮放和動態視窗大小,試圖解決此問題,但這似乎並不重要。
也,Wireshark 顯示伺服器發送 2 個資料包(1514 位元組)並且客戶端發送 ACK 的模式,那麼這是否排除了可能的緩衝區溢位?還有一些後續資料包是已收到...
我在這裡不知所措。感謝您的任何見解。
(可能)不是原因/我已經嘗試過的事情
- 瀏覽器
- Windows 7 中的各種 TCP 選項(
netsh
等) - 路由器設置,例如 MTU、信標間隔、UPnP...
答案1
解決方案
解決方案就是簡單地停用 WMM 支援在路由器設定中。顯然,出於某種原因,Linksys WRT120N WMM 支援在 Windows 7 無線系統中無法很好地發揮作用。
更多細節
通常,當問題發生時,流量最終會恢復(對於同一連接),就像封包在路由器排隊一段時間一樣。這些停頓通常會持續 40 秒或更長時間。說實話,我仍然感到困惑。
在此期間,無法建立其他(TCP)連線:當嘗試瀏覽網頁等時,筆記型電腦會發送SYN資料包,但不會有任何回應。但是,DNS 和 ARP 請求是處理正常。