標籤:

Steam 的下載原理是怎樣的?

steam下載速度通常能達到滿速,而迅雷卻達不到,為什麼?


這就要聊一聊Steam的下載史了。

G胖在開發Steam的時候,就是抱著讓玩家隨時隨地玩上自己的遊戲的野心,去聘請了BT之父——Bram Cohen,讓他來打造比德芙更絲滑的下載體驗。

&-->

很多人應該不知道Cohen,他是一名天才程序員,也是自閉症患者。

雖然美國的少兒編程滲透率很高,達到40%以上(也就是說幾乎兩個孩子里就有一個在學編程),但是一般孩子都是運用MIT開發的Scratch編程工具學習基礎的運算思維,沒有真正接觸代碼。但Cohen在五歲的時候,就掌握了C語言,到了十六歲,已經學會了三種編程語言了。

&-->

就是他,編寫了點對點文件共享協議BitTorrent,並且開發了第一款利用該協議的文件共享程序。

Cohen加入Steam之後,就採用了自己研發的P2P技術,將遊戲打包成GCF格式,沒有進行任何壓縮,玩家就只能直接全量下載。但是如高贊答主所說,因為是直接從伺服器進行傳輸,所以速度也是非常快的。

但這不是結局。

後來大家發現,這不壓縮就下載實際上很麻煩,如果遇上更新,還得重新下載。那怎麼辦呢?幾年前,Valve又發布了一個新內容下載系統SteamPipe,對Steam的下載功能進行了優化。

可以看看官方介紹:http://store.steampowered.com/news/5856/

其中一個很核心的點在於更改傳輸模式:即使用HTTP傳輸遊戲數據,把遊戲拆分成許多小塊,再加密壓縮,使得Steam數據能輕鬆地在防火牆間傳遞,還能使用第三方HTTP緩存和資源發布網路來提升下載的速度。

這個分割拆解的優勢,在SteamCN中的社區里有一個很詳細的講解,這裡給大家貼一段:

「用戶只需要一小塊一小塊地下載,每下載回一塊就解壓,最後就能組成完整的遊戲。

遊戲更新的時候,客戶端只要刪除過期的小塊,重新向從伺服器上下載回新的小塊就ok了。這樣不僅做到了邊下載邊解壓,而且解決了更新困難的問題。而且還能防止用戶抓包提取到下載鏈接然後用其他工具下載或分享給別人下載,因為遊戲已經變成很多小塊了,抓包只能抓到單個小塊的下載鏈接,而且下載鏈接是一次性的。

有些遊戲發行的前幾天會允許玩家預先載入,這個過程其實是允許用戶提前下載好這些經過加密壓縮的小塊,但是不提供解壓key,用戶沒法解壓也就沒法知道裡面的內容。等到遊戲正式發行的時候,Steam客戶端才會收到用於解壓的key,完成解壓過程。」(來源:https://steamcn.com/t96574-1-1)

而且回歸到核心想一想,Steam的本質就是遊戲分發平台,如果下載效率低,會迅速喪失許多用戶,這對它將是毀滅性的打擊。

可以預見,他們還會在追求速度的路上越走越遠。

畢竟G胖可是要掏空全世界錢包的男人啊!

&-->


我告訴你為什麼。

迅雷的下載協議是P2P,你要下的東西不在迅雷伺服器里,而在原地址以及其他伺服器里。你下的電影啊遊戲啊什麼的都是迅雷在原地址給你下,或者在其他幾個有相同資源的地址給你同時下。如果你不開會員,原地址多快下載速度就有多快。比如一個1G的照片壓縮包,原地址只給你10KB的下載速度,那你的下載速度也只有10KB。如果還有幾個鏈接有相同的文件,它就給你一起下載,起到加速的目的。迅雷下載的文件下方不是有個0/120之類的數字嗎?這就是鏈接數量,其中大部分都是死鏈,沒有任何速度的那種。

但是迅雷也有一個伺服器,儲存一些沒有違規的內容。如果你開了會員,迅雷就會把這個資源從伺服器端傳輸給你,這自然速度非常快。如果你沒有會員,你是沒有使用這個服務的權利的,自然沒有加速。但是千萬別以為你充了會員就一定能加速,我下載的90%的視頻內容都無法加速,只能隨緣下載,甚至直接告訴你資源違規,不能下載。你要不信,你可以試試用迅雷和其他P2P下載軟體同樣一個下載速度很慢的磁鏈或種子,你用BT彗星之類的軟體下載,那也很慢。而且根據我自己的測試,下載無法加速的文件,迅雷的速度和鏈接也比其他P2P軟體快的多。(但是迅雷直接不讓下這種情況很心煩)。

迅雷並沒有限速,P2P下載軟體給用戶限速那是找死,P2P文件的下載取決於原始地址的下載速度、擁有這個文件的伺服器的數量。比如1億人下載過一個同樣的視頻,這個視頻的下載鏈接就會非常多,迅雷就可以同時下載,你的網速多快,下載速度就有多快。假如這個視頻發布出來後,原始地址關閉了,下載過的人也寥寥無幾,那鏈接可能只有五六條,能用的可能就一條或者一條也沒有。這個時候就看迅雷伺服器有沒有這個文件,如果有,你開會員就能下,如果沒有,你開會員也下不了。

舉個例子:你用迅雷下載沒有違規的文件,但是它可用鏈接只有三條,下載速度每秒15KB,但是這個文件迅雷的伺服器正好有,如果你開了會員,迅雷從自己伺服器給你發,那你就可以獲得很強的加速效果。如果你下載一個文件,迅雷伺服器也沒有,或者它知道這個文件違規不給你加速,原下載速度每秒15KB,那你充了會員,下載速度也是15KB。

主流的下載軟體真正限速的是百度雲,原因就是我說的那樣。做存儲和流量是很費錢的。百度雲不充會員就限速,但是國外的網盤呢?要不收費更貴,要不空間特別小,要不廣告一堆,下載等待還限速。要是有一個可以代替百度網盤的免費網盤出現,百度網盤早就死了,又怎麼會被人詬病?事實上,個人用戶對百度雲盤怨聲載道的時候,那些小型做視頻,做教育,做網課的公司或機構,對百度雲簡直是樂開了花。每個月25塊錢,能存5TB內容,能快速分享給用戶,對於這些帶來的效益而言,25塊錢簡直九牛一毛。

說句題外話,迅雷最近一直被人詬病,比如廣告多,強制升級,瀏覽器軟體頁面,造成這一切的原因我認為是迅雷沒有找到更好的盈利方式。做數據很費錢,而隨著版權時代來臨和政策對網路色情內容的封殺,迅雷的會員們發現自己能下載的東西越來越少,能加速的東西也越來越少。下載器的核心就是下載,失去了這一點,會員們自然不會續費。當收入減少時候,迅雷作為一個上市公司自然要想別的發財渠道。被罵和死之間如何權衡,我想大家都有答案。

而steam的下載方式就很容易了,就是把遊戲文件從自己的伺服器發給你,當然快了。(評論區有人告訴我p2p的親爹就在steam搞下載,steam也用p2p技術)


1,steam下載前會預分配硬碟空間,所以只要你的下載速度小於硬碟連續寫入速度就不會被硬碟拖累,哪怕是機械硬碟(epic是邊下載邊寫入,機械硬碟經常卡掉速)

2,steam在全球都有節點,當然,playu和epic也是,唯獨origin在很多地區和國家沒有節點

3,steam可以手動鎖定下載節點,而playu和epic下載節點取決於dns返回結果,如果像我一樣喜歡用1.1.1.1作為dns,playu和epic經常會從海外節點下載,而steam仍然會從設置的節點下載(我一般設置為日本或新加坡)

4,steam下載完才開始更新文件,而epic是下載一個文件更新一個,同樣這也導致了在機械硬碟上epic的下載速度非常難看(而steam經常飛快的下載完然後再本地更新更上半小時)

5,steam本身相對資源消耗較低。雖然steam,playu,epic,origin,gog都是基於libcef(chromium)開發的套殼客戶端,但是steam相對自身佔用較低,與之相反的是epic,經常在高分屏上直接耗盡cpu,以及經常內存泄漏的playu


1/伺服器下載,打開設置可以看到節點很多。

2/BT下載,據說當年是請美國的BT之父布萊姆設計的。這是舊聞鏈接布萊姆加入v社設計steam系統


Steam在大陸有獨立CDN,然後加上P2P下載,HTTP直連,速度自然快


推薦閱讀:

有哪些Steam China上線之前必買的遊戲?
為什麼我的steam打不開人類一敗塗地的創意工坊?
為了《賽博朋克2077》公司差點破產,一年只賺了7800美元,這值得嗎?
救命!Steam停不下來買遊戲怎麼辦?
steam上有哪些畫風很好的輕galgame遊戲(比如Tricolour Lovestory)?

TAG:下載 | Steam |