2015年12月7日 星期一

網站下載過慢問題分析 - 以MSDN Download為例

最近想從MSDN Download訂閱下載檔案,但發現不管下載什麼檔案時,下載的速度大約都只能在15K~20K左右,而但我的網路是20MB/5MB,在其他的站台下載也不會有這麼慢的速度,透過測試網站進行確認時,也的確如我遇期,所以興起我進一步確認這個問題,也希望可以找到解決的方法。

經過一番的確認後,初步排除基本問題,如共同下載、中毒、網路速度過慢等問題,後來發現一個情況,那就是透過不同的瀏覽器會有不同的下載行為,在我透過Microsoft Internet Explorer、Microsoft Edge與Chrome這三套來分別進行測試時,發現IE與Chrome都只能在20k左右,但是透過Microsoft Edge卻可以達到2MB左右的速度,所以初步懷疑應該也不是網站限制流程的問題。

在以往的解法上,微軟官方在以前有提供透過工具(Microsoft File Transfer Manager)進行下載,可以加速處理,我以前試過也的確可以很快的下載完成,但很可惜的是在2015年3月以後就不支援了,在IE10(含)也無法透過此工具進行,雖然可以透過設定至IE9的相容性模式進行解決,但還是不太方便,而且其他的瀏覽器也無法透過此工具進行。

實際上的解法我放在最下法的部份,下面是我針對此問題透過Wireshark進分析的的過程與個人看法,再請大家參考,如有不對的部份也歡迎討論。


另外雖然看不到程式碼,但我想應該可以透過Wireshark捉個封包來看看,並藉以了解並從中找出一些眉目,所以我就索性在我Windows 10的電腦上同時透過Chrome與Edge分別各捉一個封包進行比較。

捉到的封包我們先透過Wireshark中的Analyze -> Expert Info進行分析,從下圖可以看到在透過Chrome進行下載時,會有多次的out-of order、duplicate ACK與Retransmission的情況發生,而且次數很多,相反的在Microsoft Edge上就沒有這種情況,但問題來了,發生這種情況時該如何進行調整,當然此時的建議或許你使用Microsoft Edge會是比較快的方式(哈)。

封包分析 - Chrome


封包分析 - Microsoft Edge


但進一步的從封包來看,發現從開始下載檔案後,二個瀏覽器在下載的行為上有不同的方式,首先從Chrome的下載行為上來看,Client端會送出一個Windows Size=65535,Len=0的封包,然後下一個封包Server端會回送Windows Size=20440,Len=1460的封包,然後一直反覆的確認每次的傳送。


但是從Microsoft Edge上來看,你可以發現雖然Client端也是送出一個Windows Size=65535與Len=0的封包,但是Server端卻可以直接進行處理,並直接進行傳送。

另外我們檢查在Chrome送出時,在Windows size scaling factor的值為-1。

但是在Microsoft Edge的部份,在Windows size scaling factor值為-2,我想這就是主要的原因所在,因為每次Windows Size都需要重覆的確認,造成傳送上的延遲,另外關於Windows size scaling factor的值說明,可以參考下列的連結說明。

[Window size scaling factor: -1 (unknown)]
https://ask.wireshark.org/questions/10071/window-size-scaling-factor-1-unknown

See RFC 1323 for the specification of the TCP window scale option.
http://www.ietf.org/rfc/rfc1323.txt.pdf

當知道原因後,我進一步的追查,果然找到一個解法,詳細說明請參考下列的說明,解決方法很簡單,只需調整登錄檔中的三個參數值,如下所示。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{a9469a2f-b852-4e88-a4ee-2d17e7c19c65}]
"MTU"=dword:00000578
"EnablePMTUBHDetect"=dword:00000001
"EnablePMTUDiscovery"=dword:00000000

上述紅色的文字即代表你網路介面卡的GUID,你可開啟一個Dos Command輸入下列的指令進行查詢,再將查詢到的值填入後,再將上述的值貼入.reg檔執行即可。

查詢有線網路卡介面:netsh lan show interfaces
查詢無線網路卡介面:netsh wlan show interfaces



Browser Connections Appear to Stop Responding When Accessing IIS Over SSL
https://support.microsoft.com/en-us/kb/285821

更改後再請重新啟動電腦,再進行確認,發現就算透過Chrome進行下載時,也可以達到2MB左名的速度。


關鍵字:Download SlowMSDN DownloadWindows Size Scaling FactorSpeed up Downloads

沒有留言:

張貼留言