OverLord
大家上網(wǎng)有時候需要臨時下個小容量的文件,多是瀏覽器直接點(diǎn)擊,下載后即可打開。不同于BT下載等等,網(wǎng)頁下載使用的協(xié)議是HTTP協(xié)議。所以要搞清楚它們的下載原理,我們就需要從最基礎(chǔ)的HTTP協(xié)議看起。
所謂HTTP,全稱是HyperText TransferProtocol,即超文本傳輸協(xié)議。它是網(wǎng)絡(luò)上使用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,當(dāng)你輸入一個網(wǎng)址的時候,所有的起始都必須遵循這個標(biāo)準(zhǔn)—— 也就是客戶端和服務(wù)端的請求、應(yīng)答標(biāo)準(zhǔn)。所謂客戶端,就是終端用戶,也就是在電腦前的你,服務(wù)端就是網(wǎng)站本身(圖1)。
通過使用例如Chrome、Edge等任意瀏覽器輸入網(wǎng)址時,客戶端就會發(fā)起一個到服務(wù)端(網(wǎng)站)指定端口的請求,這個默認(rèn)的端口就是80端口。嚴(yán)格意義上,我們將客戶端叫做用戶代理,而服務(wù)器端通過8 0端口接收到來自客戶端的應(yīng)答請求時,會將自身存儲的一些資源,比如HTML網(wǎng)頁、圖片,以及文件(圖2)“反饋”給客戶端。
當(dāng)然,這只是一個非常簡單的理解。具體點(diǎn)說,當(dāng)客戶端向服務(wù)端發(fā)送某一個請求的時候,請求的這個信息中包含URL(鏈接地址)、協(xié)議版本(HTTP也是有協(xié)議版本的),以及請求的修飾符號、客戶端信息等等一并提交給服務(wù)端。服務(wù)端一一“了解”了客戶端的請求信息后才會做出回應(yīng)。
如果這個過程里某一個步驟出現(xiàn)了錯誤,那么產(chǎn)生錯誤的信息會反饋給客戶端,然后輸出到顯示屏幕上。當(dāng)然,這個過程都是作為用戶的你看不到的,你只需要輸入網(wǎng)址,或是鼠標(biāo)點(diǎn)擊鏈接,等待屏幕最終顯示信息(圖3)就可以了。
但是,在HTTP下載的時候,都是單一線程操作的,它不允許并發(fā)多個線程一起完成某一個“請求、反饋”動作,因此,即便可以實(shí)現(xiàn)斷點(diǎn)續(xù)傳,它的下載動作只能是單一線程執(zhí)行,通俗一點(diǎn)說就是單點(diǎn)傳輸,跑不滿帶寬。所以,很多時候大一點(diǎn)的文件,比如視頻、安裝鏡像等都不太使用這種“極為簡單、直白”的下載方式。
在互聯(lián)網(wǎng)上,最早也是有專門用來傳輸文件的協(xié)議,這便是FTP。它全稱是File TransferProtocol,也就是文件傳輸協(xié)議,是一個專門用于在計(jì)算機(jī)網(wǎng)絡(luò)上在客戶端和服務(wù)器之間進(jìn)行文件傳輸?shù)膽?yīng)用層協(xié)議(圖4)。相比于HTTP,F(xiàn)TP具備兩種方式進(jìn)行用戶認(rèn)證,第一種是匿名服務(wù),在這種設(shè)置狀態(tài)下,客戶端登錄服務(wù)器時不需要密碼,默認(rèn)用戶名為anonymous,該賬號不需要密碼驗(yàn)證即可進(jìn)行協(xié)議握手然后下載服務(wù)端的文件。而在設(shè)置密碼的時候,就需要使用對應(yīng)用戶名的密碼來進(jìn)行驗(yàn)證了。
同時,F(xiàn)TP的使用時也擁有兩種模式,即主動模式(PORT)和被動模式(PASV)(圖5)。所謂主動模式,就是當(dāng)客戶端和服務(wù)端在握手時,會在同一時間打開一個監(jiān)聽端口用以創(chuàng)建整個鏈接過程。在這種情況下,客戶端如果安裝有防火墻會產(chǎn)生鏈接錯誤。所以這就需要被動模式了,被動模式只要求服務(wù)器端產(chǎn)生一個監(jiān)聽相應(yīng)端口的進(jìn)程,這樣就可以繞過客戶端安裝了防火墻的問題。
具體來說,一個主動模式下的FTP鏈接過程是這樣的,客戶端隨機(jī)打開一個端口,一般來說是1024以后5000以內(nèi)的任意一個端口號,我們假設(shè)為X,同時使用21端口(FTP默認(rèn)端口)與服務(wù)端進(jìn)行鏈接(圖6)。此時監(jiān)聽端口X向服務(wù)端端口21發(fā)送命令,告辭服務(wù)端,客戶端正在監(jiān)聽的端口號,并且客戶端已經(jīng)做好了準(zhǔn)備以此端口接收數(shù)據(jù)。
雖然是專用的傳輸協(xié)議,但是FTP在客戶端于服務(wù)端的“溝通”上可以用話癆來形容,HTTP只需往復(fù)兩次即可建立握手,開始交換數(shù)據(jù)。那么FTP呢?從創(chuàng)建TCP鏈接開始,客戶端等待服務(wù)器端發(fā)送回執(zhí)、客戶端向服務(wù)器端發(fā)送用戶名并等待響應(yīng)、 客戶端向服務(wù)器端發(fā)送密碼并等待響應(yīng)、客戶端向服務(wù)器端發(fā)送SYST命令并等待響應(yīng)、客戶端向服務(wù)器端發(fā)送TYPE I命令并等待響應(yīng)、如果用戶需要在服務(wù)器端切換目錄,客戶端仍然發(fā)送命令并等待響應(yīng);主動模式下,客戶端需要發(fā)送命令到服務(wù)器端,然后等待響應(yīng)……怎么樣,是不是極為繁瑣?這樣帶來的后果也是讓服務(wù)端資源占用問題嚴(yán)重,最終的結(jié)果必然是被取而代之,被人們遺忘。
BT是簡稱,全稱是B i tTorrent協(xié)議,它是一個對等網(wǎng)絡(luò)中的文件下載協(xié)議。不同于HTTP、FTP的點(diǎn)對點(diǎn)(point-to-point)的協(xié)議,BitTorrent屬于用戶群對用戶群(peer-topeer),下載同一個文件的用戶人數(shù)越多,這個文件的下載速度越快,并且通過用戶的上行帶寬進(jìn)行上傳,維持分享狀態(tài)(圖7),成為其用戶端節(jié)點(diǎn)(圖8)下載的種子文件(.torrent),同時上傳及下載。
普通的HT TP/FTP下載使用TCP/IP協(xié)議,BitTorrent協(xié)議是架構(gòu)于TCP/IP協(xié)議之上的一個P2P文件傳輸通信協(xié)議,處于TCP/IP結(jié)構(gòu)的應(yīng)用層。當(dāng)一個被需要下載的文件要進(jìn)行分享的時候,文件發(fā)布者會根據(jù)該文件生成*.torrent后綴名的文件,即種子文件,也簡稱為“種子”(圖9)。這個種子本質(zhì)上是一個文本文件,它包含了兩部分信息,一方面是Tracker信息另一方面是文件自身的信息。
Tracker信息主要是BitTorrent下載中需要用到的Tracker服務(wù)器的地址和針對Tracker服務(wù)器的設(shè)置,文件信息是根據(jù)對目標(biāo)文件的計(jì)算生成的,計(jì)算結(jié)果根據(jù)BitTorrent協(xié)議內(nèi)的Bencode規(guī)則進(jìn)行編碼。它的主要原理是需要把提供下載的文件虛擬分成大小相等的塊,塊大小必須為2k的整數(shù)次方(由于是虛擬分塊,硬盤上并不產(chǎn)生各個塊文件),并把每個塊的索引信息和Hash驗(yàn)證碼寫入種子文件中??梢哉f,種子文件就是被下載文件的“索引”。
接下來,需要下載這個文件的用戶,就需要下載一個客戶端,并得到相對應(yīng)的種子文件。運(yùn)行客戶端,其首先解析種子文件中保存的Tracker信息地址,接著連接到Tracker服務(wù)器。當(dāng)網(wǎng)絡(luò)通暢的時候,Tracker服務(wù)器便會回應(yīng)下載者的請求,提供下載者其他下載者(包括發(fā)布者)的IP。下載的用戶再連接其他下載者,根據(jù)種子文件,分別告知對方自己已經(jīng)有的文件數(shù)據(jù)塊,然后交換對方所沒有的數(shù)據(jù)。此時不再需要其他服務(wù)器參與了,因?yàn)榉稚⒘藛蝹€線路上的數(shù)據(jù)流量,因此減輕了服務(wù)器負(fù)擔(dān)。
不過,用戶A和用戶B分別下載了這個文件的部分文件塊,那么他們又是如何保證文件的準(zhǔn)確性呢?下載文件的用戶每得到一個數(shù)據(jù)塊,就需要計(jì)算該數(shù)據(jù)塊的Hash值,并與種子文件中的Hash值進(jìn)行對比,如果一樣則說明正確,不一樣則需要重新下載(圖10)。
相比之下,使用HTTP或者FTP分享文件時,發(fā)布文件只能保存在一個或者幾個服務(wù)器上,點(diǎn)對點(diǎn)進(jìn)行傳輸(圖11),下載用戶(線程)一多,服務(wù)器就會變得不堪重負(fù),帶寬也被占滿,因此常常要對線程、速度進(jìn)行限制(圖12)。而BitTorrent協(xié)議的下載就不一樣了,服務(wù)器只負(fù)責(zé)分發(fā)信息和對種子“負(fù)責(zé)”,而人越多帶來的帶寬也更大,下載也就越快。
但是,種子也要保存到某個服務(wù)器上,一旦遇到無Tracker的情況又該如何?于是,一種新的網(wǎng)絡(luò)技術(shù)應(yīng)運(yùn)而生,這就是DHT網(wǎng)絡(luò)技術(shù)。Distributed Hash Table,即分布式哈希表,這是一種分布式存儲方法。在沒有服務(wù)器的情況下,每一個用戶客戶端負(fù)責(zé)一個小范圍內(nèi)的“路由”,并保存一小部分?jǐn)?shù)據(jù),從而實(shí)現(xiàn)DHT整個網(wǎng)絡(luò)的尋址和存儲。這個技術(shù)的應(yīng)用讓BitTorrent下載可以免除連接Tracker服務(wù)器就能下載——DHT網(wǎng)絡(luò)技術(shù)會賦予用戶與用戶之間“通訊”,互通有無,可以說進(jìn)一步完善了BitTorrent下載協(xié)議。
當(dāng)然,Bi tTorrent也不是無懈可擊的,即便有DHT網(wǎng)絡(luò)技術(shù)加持,但是如果一個文件在一段時間之后不再有用戶分享上傳,比如一些冷門資源,用戶即便擁有這個文件的種子也無法下載——這也是BitTorrent只適合在短時間內(nèi)下載熱門資源使用的根本原因。
對比專為下載而生的BitTorrent協(xié)議,ED2K(準(zhǔn)確的說應(yīng)該被稱作eDonkey2000 network)更被視作最友好的分享網(wǎng)絡(luò)協(xié)議(圖13)。與BitTorrent協(xié)議相同的地方在于,它也是基于分布式的(圖14),文件基于用戶群對用戶群(peer-to-peer)的保存、分享,而不是存儲于一個中樞服務(wù)器上。
不同于BitTorrent的是,它并不需要一個專門的文件存儲信息,只是使用ED2K格式的超鏈接即可(格式為ed2k://),這也是為什么筆者將eDonkey2000 network簡稱為ED2K的原因。所有的瀏覽器都可以識別ED2K連接,并將其連接到下載軟件上進(jìn)行文件傳輸共享。一個典型的ED2K 連接包含的信息為三個部分,分別是文件名、文件的大小、文件的ED2K Hash值。大致完整的格式是這樣的:ed2k://|file|<文件名>|<文件大小>|<文件Hash>|/,例如ed2k://|file|eMule0.49c.zip|2868871|0F88EEFA9D8AD3F43DABAC9982D2450C|/(圖15)。這樣對比之下,它免除了像BitTorrent那樣還需要額外下載一個文件的繁瑣,擁有鏈接即可。
當(dāng)這樣一個連接被粘貼到支持ED2K下載的軟件中時,eDonkey的客戶端程序就會連接到該網(wǎng)絡(luò)來共享文件。而eDonkey服務(wù)器作為一個通訊中心,會讓用戶在ED2K網(wǎng)絡(luò)內(nèi)查找文件。當(dāng)然,每一個用戶在使用ED2K下載客戶端的時候,都必須指定一個共享目錄,為的就是可以分享文件,而不是單純的下載。另外比較智能的地方在于,ED2K分享文件的時候使用混合MD4摘要算法來檢查識別文件,也就是說,即便是不同文件的文件名,只要混合MD4摘要算法識別文件一致,也可以將其納入分享。
ED2K的另一大好處在于,它可以比BitTorrent更長期保持分享文件內(nèi)容,因?yàn)镋D2K沒有中心節(jié)點(diǎn),它將所有參與的用戶視為分享者,只要用戶文件沒有刪除,并且作為資源分享就可以一直上傳數(shù)據(jù)文件,讓文件長期保持在網(wǎng)絡(luò)共享之中。
磁力鏈接是現(xiàn)在最為流行的下載方式,甚至是沒有之一了吧?磁力鏈接全稱為MagnetUniform Resource Identifier,是一種是對等網(wǎng)絡(luò)中進(jìn)行信息檢索和下載文檔的鏈接協(xié)議。和基于URL網(wǎng)絡(luò)地址的區(qū)別在于,磁力鏈接是基于元數(shù)據(jù)(metadata)文件內(nèi)容,屬于統(tǒng)一資源名稱(圖16)。
磁力鏈接本身不是基于文檔的IP地址或者定位符,而是在分布式的數(shù)據(jù)庫中通過HashFunction(散列函數(shù)值)識別、搜索,然后提供下載服務(wù)的一種方式。也就是說,它不依賴任何一個中心的服務(wù)器。而且,它不需要Tracker服務(wù)器,不需要*.torrent 文件,僅需要一連串字符就可以進(jìn)行文件下載,當(dāng)然這一切都是基于DHT技術(shù)和PEX技術(shù)才得以實(shí)現(xiàn)的。
磁力鏈接另一個優(yōu)勢是跨平臺和開放性,磁力鏈接可以在幾乎所有的平臺,包括手機(jī)上的應(yīng)用程序中下載——BitTorrent在這方面是無能為力的。因?yàn)榇帕︽溄硬捎玫氖菢O為簡潔的純文本格式,所以用戶很方便的可以將其復(fù)制在任何擁有下載軟件的設(shè)備中(圖17)。
磁力鏈接的格式究竟什么樣子呢?舉例來說,magnet:?xt=urn:btih:CB434C9025A5255ED17454C97C089399,這樣一組串列復(fù)制到下載軟件中就可以了。其中,“magnet:”是協(xié)議名稱,“xt:”則是exacttopic的縮寫,其為包含文件哈希值(Hash)的統(tǒng)一資源名稱,“urn:”即Uniform ResourceName,表示資源名,“btih:”則是BitTorrent info hash的簡寫,實(shí)際是種子散列函數(shù),最后的一串文字就是具體的文件名稱了。
磁力鏈接的優(yōu)勢不止于此,傳統(tǒng)的Bi tTorrent下載還需要Tracker 服務(wù)器,而磁力則會根據(jù)下載文件的哈希值生成一個獨(dú)有的文本格式“指紋”(圖18),然后根據(jù)這個“指紋”匹配識別文件并下載。而且最棒的地方在于,任何用戶都可以生成這樣一個文件“指紋”,因此磁力鏈接不需要任何中心服務(wù)器就能下載,極為方便。
前面筆者給大家詳細(xì)介紹了各種下載協(xié)議的優(yōu)劣區(qū)別,那么重點(diǎn)來了,究竟什么用什么軟件來下載呢?
Free Download Manager
之所以推薦Free Download Manager,無外乎Internet Download Manager屬于收費(fèi)軟件,固然后者功能更強(qiáng)大,但畢竟秉持著免費(fèi)夠用就好的原則,筆者還是更推薦Free Download Manager一些。Free DownloadManager擁有非常多的功能,比如智能限速、斷點(diǎn)續(xù)傳、計(jì)劃任務(wù)、網(wǎng)頁抓取等等,而且,它還可以實(shí)現(xiàn)下載部分音頻、視頻文件的時候同時預(yù)覽播放的功能。而且,它在支持的下載方式上,包含了BitTorrent、FTP、HTTP下載,同時還支持磁力鏈接。如果說最大的遺憾,莫過于它無法支持EK2K鏈接下載了。
官網(wǎng)地址:https://www.freedownloadmanager.org/zh/
EagleGet
EagleGet是近幾年開始流行的下載軟件。界面清爽是EagleGet的一大特色,而且如果你不喜歡還可以自行更換皮膚。當(dāng)然了,諸如監(jiān)控剪貼板、瀏覽器集成插件、音視頻的嗅探下載,批量下載以及隊(duì)列這些功能樣樣具備。不過,它的缺點(diǎn)在于,它不能夠支持BitTorrent和磁力鏈接。對筆者而言,它更像是一個補(bǔ)充,尤其是搭配FreeDownload Manager使用比較合適——總有一個軟件能夠幫助到你。
官網(wǎng)地址:
https://eagleget.en.softonic.com/
Motrix
沒有廣告、幾乎全兼容,體積又小巧,這就是Motrix的重要特色。這款異軍突起的下載軟件非常受歡迎,而且它還是一款開源免費(fèi)的產(chǎn)品。Motrix可以支持包括HTTP、FTP、BitTorrent、磁力鏈接在內(nèi)的下載方式,而且它甚至支持百度網(wǎng)盤及迅雷專有協(xié)議的下載,這著實(shí)令人意外。需要注意的是,Motrix百度網(wǎng)盤的下載功能需要遵從百度網(wǎng)盤本身的下行速度。更重要的是,它對平臺的支持非常友善,Windows和macOS下都可以使用,有興趣的朋友不妨下載試用一番。
官網(wǎng)地址:https://motrix.app/zh-CN/
官網(wǎng)地址:https://www.qbittorrent.org/
qBittTorrent
也許你會認(rèn)為μTo rrent很好用,但是這款qBittTorrent直接在官網(wǎng)聲稱自己的目標(biāo)就是一款能夠替代μTorrent的開源軟件。qBittTorrent支持中文,并且全面無廣告設(shè)計(jì),還集成有搜索引擎,能夠直接在軟件內(nèi)指定進(jìn)行分類搜索,并且支持DHT網(wǎng)絡(luò),支持磁力鏈接等等,作為一款下載軟件,qBittTorrent不可謂想得不周全,非常了得。
相對于EagleGet的雙平臺使用,qBit tTorrent的跨平臺支持度更進(jìn)一步,它可以支持包括Windows在內(nèi),macOS、Linux、FreeBSD在內(nèi)的多個桌面操作系統(tǒng)。不僅如此,它在擴(kuò)展功能上也極具創(chuàng)意,包括Web頁面管理、UPnP支持、PEX對等交換、LSD本地發(fā)現(xiàn)功能、IPV6的支持,甚至還有很多第三方插件??梢哉f,qBi ttTorrent絕對是最值得選擇的下載軟件之一。
Transmission
Transmission作為一款老牌下載軟件,是筆者推薦的主要原因之一。其次,就是它的功能十分強(qiáng)大。它可以支持Windows、macOS、Linux系統(tǒng),還支持encryption、Web界面、遠(yuǎn)程控制(這個功能比較獨(dú)特)、磁力鏈接、DHT網(wǎng)絡(luò)、uTP、UPnP、NATPMP等等功能,還能夠?qū)崿F(xiàn)目錄監(jiān)控、全局或者單一下載的速度限制,簡直無所不能。如果你選擇一款功能全面而且下載性能出色的軟件,Transmission是不可錯過的選擇。
官網(wǎng)地址:https://transmissionbt.com/
迅雷
論下載,無論如何也必須要提到的就是迅雷了。作為國內(nèi)的王牌下載軟件,迅雷的強(qiáng)大有目共睹。非會員模式下,支持幾乎所有的下載方式,什么FTP、HTTP下載,BitTorrent、ED2K、磁力鏈接,它都可以實(shí)現(xiàn)。而在會員功能部分,它還能夠提供離線下載、會員加速等服務(wù),當(dāng)然這些需要有“鈔能力”,迅雷也對應(yīng)的提供了加速、離線下載的服務(wù)器支撐,這才讓迅雷的會員具有較高的價值。
但是需要注意,迅雷強(qiáng)大的功能對內(nèi)存、處理器的性能還是有一定的要求的,如果你的電腦配置跟不上時代,很可能會出現(xiàn)下載時處理器占用過高的問題。