為什麼有時候下載沒速度了,暫停一下再繼續就立刻可以滿速下載呢?

害得我經常是坐在電腦前不敢走,一看速度為0了就趕緊暫停一下,然後再繼續,應該不是錯覺,因為經常碰到這種情況,下載東西掛機一天也沒下多少,暫停下繼續下重啟下軟體幾個小時就下完了,這是什麼原理? 有誰遇到過類似的情況嗎? 常發生這種情況的軟體:迅雷,雲盤,steam等。 感謝@vczh 輪子哥的關注之力,真誠感謝每一位認真回答了問題的答主。


因為現如今大多下載都是基於p2p的多連接。

比如包涵所需下載的文件伺服器共有1000台(可能是集群也可能是多站點),然後你的於其中300台鏈接了。300/1000。

其中這300台中可能有部分由於出口帶寬限制,或者回話鏈接限制等一些原因,有200台並不能為你提供數據傳輸(僅僅是連上去了)。這300/1000 本質上可以看為100/1000。

你暫停重連之後,出於下載工具的一系列演算法,你會重新鏈接到可提供數據傳輸的優質伺服器上。可重新返回300/1000或者500/1000這樣。

沒有實際測過,完全腦補,但是理論上應該是這樣的。

數據支持的話,

1.比如你開迅雷的時候,暫停前後顯示的會話鏈接基本是不一樣的。

2.你用某些在線視頻網站的時候,卡住了回退或者刷新可能就能通過卡住的節點,也是一個道理。

這些都是p2p的。


這個原因嘛,自己寫一個下載器就知道了。。

以前寫過一個回答,抄過來:為什麼進度條載入到99%總會卡住? - 知乎用戶的回答

如果一個子任務是慢的,那麼它很有可能一直都是慢的。而它是慢的這件事,要麼無法預知,要麼不好計算。這就導致了進度條總是在接近100%的地方慢下來。

無法預知型:

我自己寫過一個簡單的多線程下載器。從道理上來講,每個線程應該會分享當前可用的帶寬,並且當有線程下載完成的時候,剩餘線程的速度會有明顯回升。

但是實際情況卻是,有個別線程會由於飢餓而卡住或者速度緩慢,哪怕是其他線程已經下載完成,它的速度也不見改觀。這樣,隨著其他線程在快下載完時都一個個地完成任務退出,這個拖後腿的線程影響就越來越明顯。甚至有時候它會餓死,除非你暫停下載然後再重新下載(實際上這個過程重建了連接)。


雖然跟題主的疑惑關係不大,但是你們可能都很關心的問題:

怎樣播放下載到99.9%的視頻。

首先我們有一個下載到99.9%的視頻(實際上不是99.9%也可以)

打開文件夾,看到視頻的後綴是這樣的:

(這個是qq旋風,迅雷的可能有所不同)

然後我們只需要點開重命名,把最後的.tdl刪掉,變成:

你會發現文件圖標從未知變成了和其他視頻文件一樣的圖標。

然後就正常打開就可以了。

原理嘛,我猜應該是大部分視頻都是逐幀編碼的,所以下載到99.9%後實際上除了少量數幀外已經全部下載完畢了,可以正常觀看。缺掉的幀幾乎不影響觀看效果。當然,也正是如此,對於需要完整性的文件(rar等)往往不適用。

這個方法適用於很多格式的視頻文件(我也不知道都有哪些...),而且適用於下載到各種不同階段的視頻。比如你可以在一個視頻下載到20%的時候就用這個方法(可以複製一份進行修改,以免打斷下載進度)來預覽一下視頻。當然下載到20%的時候實際上只有不到20%的幀可以正常播放,而且不知道是哪些段能播,只好手動找了。

至於用途嘛...

總之,我用這個方法,在大學期間省了不少流量


下載器在執行下載任務的時候一般是多線程下載,這裡我們舉個例子,比如開啟了十個線程來下載。

開始下載以後,下載器將文件分十份,分別分給十個線程同時下載,這其中肯定有下得快的,也有下得慢的,不過由於大家都在下載,網速是接近於帶寬極限的,比如10MB/S。

過了很久以後,已經有幾個線程幹完活了,速度可能就掉到5MB/S,進度也到了95%。

再過了一會,下到了99%,只剩一個線程在下載了,速度也掉到了200KB/S,為什麼這個速度這麼慢呢?因為這就是那個悲催的線程。如果你願意等,這幾十M可能還是要5分鐘才能下完。

接下來就是見證奇蹟的時刻,暫停,繼續下載,下載器重新分配了任務,十個線程同時下載,速度立馬衝到10MB/S,不到十秒鐘,你下完了剛才需要五分鐘的東西,完成下載任務。


估計是網不好,服務端認為連接斷開放棄了,而客戶端還在傻傻的等。

--------

[假設有一個神秘鏈接 aa.bb/xx.avi,打開下載軟體輸入進去。然而這裡面還有一個不為人知的故事。]

Client:你好,可以說句話嗎,暗號1111

Server:好呀,收到1111,我的暗號2222

Client:收到2222

Client:那個……人家想下載xx.avi

Server:好的,文件1024M,不要著急,慢慢收哦。

Server:先抄給你第一份,收到了沒?

Client:收到,謝謝,么么噠。

Server:第二份那好咯,給。

Client:嗯嗯,第二份也收到。

Server:第三份給你,

Server:咦,人呢?

Server:第三份給你,

Server:咦,去哪裡了?

Server:第三份還要不要啦?

Server:艹,再見。

Client:第三份也收到啦,謝謝。靜靜等第四份……

[沒有然後了,如果這時重新下載]

Client:你好,請問有空說句話嘛,暗號5555

Server:好呀,收到5555,我的暗號6666

Client:收到6666

Client:那個……人家想下載xx.avi,從第四份開始

Server:好的,文件1024M,從第四份開始。

Server:第四份,收到沒?

Client:收到。

………………

Server:第一千零二十四份,給。

Client:終於收完啦,辛苦啦。

Server:累了,我沒事了,要走了,你還有事么8888。

Client:你要走了嗎,收到8888。

Client:那……我也沒事了,再見吧9999。

Server:再見9999。

[下載完了,那就該幹嘛趕緊幹嘛去了]

--------

用Linux一直遇到個問題,就是tcp連接中網路不穩定斷了服務端走了,但是客戶端可以掛起永遠不死,有沒有類似tcpview.exe這種方便的強制reset連接的工具。


歇會喘口氣跑的快


p2p就是有這樣的問題,解決起來很簡單,大家都無私一點,下完東西不要關下載器。

想了一下,現有的下載器都能間隔一段時間,自動檢測鏈路是否暢通,某個節點有問題,就會尋找該節點附近區域其他節點,這個演算法很簡單。所以排名第一的答案有問題。


通常是路由設備性能不足或者是ISP的Qos策略限制導致的。

典型的一個古老的例子,現在可能碰不到,xp在更新sp2以後,tcp/ip並發連接限制為10,對bt下載幾乎是災難性的,直接表現就是速度直線下降,然後又逐漸回升,如此反覆,基本上無法上網。

xp的這種現象已經不復存在,你碰到的可能是電信或者路由策略限制並發連接,或者qos策略導致的尾部丟棄引發的tcp全局同步

以上純屬猜測


同題主,steam剛開始滿速7mb/s,過一會就變成幾百甚至幾十kb/s了,重啟steam滿速,過一會又掉速,迅雷倒是一直滿速不會掉,至今不知道為什麼,求高手解答。電腦直連網線,全新系統無病毒。


以我的經驗來看,只要你開了會員,這種情況就不會發生了。


我想知道可不可以做一個每當速度減低了就自動暫停然後繼續的下載器


我總覺得題主是在下布袋戲。


可能是那個線程的tcp鏈接在中途已經沒有了,但是你這邊沒有得到rst或者fin還在傻等


可以試試idm


推薦閱讀:

陸金所的業務特徵、商業模式和推廣模式分別是什麼?
現在開一家小額貸款公司是否為時已晚?
「對市場風險偏好多元化,風險將通過對數據的深度加工,通過逆向交易實現風險分散」是什麼意思?
如何評價趣店的成功上市?
很多P2P平台宣傳壞賬率不到1%,真的可能嗎?

TAG:P2P | 計算機網路 | 資源下載 |