下載文件的協議:HTTP、FTP、P2P

本篇學習筆記以HTTP、FTP、P2P敘述與網上下載文件有關的協議node

須要掌握的要點:算法

  • 下載一個文件可使用 HTTP 或 FTP,這兩種都是集中下載的方式,而 P2P 則換了一種思路,採起非中心化下載的方式
  • P2P 也是有兩種,一種是依賴於 tracker 的,也即元數據集中,文件數據分散;另外一種是基於分佈式的哈希算法,元數據和文件數據所有分散

HTTP與FTP

首先簡述HTTP下載和FTP下載的區別:數據庫

咱們先要知道,使用Web瀏覽器時,這兩個協議之間的差別幾乎不會對使用的方便性及下載時間產生影響。不過,二者卻擁有各自不一樣的結構。瀏覽器

HTTP下載

  • HTTP是一種爲了將位於全球各個地方的Web服務器中的內容發送給不特定多數用戶而制訂的協議。也就是說,能夠把HTTP看做是旨在向不特定多數的用戶「發放」文件的協議。
  • HTTP使用於從服務器讀取Web頁面內容。Web瀏覽器下載Web服務器中的HTML文件及圖像文件等,並臨時保存在我的電腦硬盤及內存中以供顯示。
  • 使用HTTP下載軟件等內容時的不一樣之處只是在因而否以Web瀏覽器顯示的方式保存,仍是以不顯示的方式保存而已。結構則徹底相同。所以,只要指定文件,任何人均可以進行下載。

FTP下載

FTP即文件傳輸協議安全

FTP 採用兩個 TCP 鏈接來傳輸一個文件。服務器

  • 控制鏈接:服務器以被動的方式,打開衆所周知用於 FTP 的端口 21,客戶端則主動發起鏈接。該鏈接將命令從客戶端傳給服務器,並傳回服務器的應答。經常使用的命令有:list——獲取文件目錄;reter——取一個文件;store——存一個文件。
  • 數據鏈接:每當一個文件在客戶端與服務器之間傳輸時,就建立一個數據鏈接。

另外一方面,FTP是爲了在特定主機之間「傳輸」文件而開發的協議。所以,在FTP通訊的起始階段,必須運行經過用戶ID和密碼確認通訊對方的認證程序,網絡

FTP下載和HTTP下載的區別之一就在與此。app

FTP 的兩種工做模式:分佈式

每傳輸一個文件,都要創建一個全新的數據鏈接。FTP 有兩種工做模式,分別是主動模式(PORT)和被動模式(PASV),這些都是站在 FTP 服務器的角度來講的。工具

P2P

不管是 HTTP 的方式,仍是 FTP 的方式,都有一個比較大的缺點,就是難以解決單一服務器的帶寬壓力, 由於它們使用的都是傳統的客戶端服務器的方式。

後來,一種創新的、稱爲 P2P 的方式流行起來。P2P就是peer-to-peer。資源開始並不集中地存儲在某些設備上,而是分散地存儲在多臺設備上。這些設備咱們姑且稱爲 peer。

P2P定義

  • Peer-to-peer 是一類容許一組用戶互相鏈接並直接從用戶硬盤上獲取文件的網絡
  • Peer-to-peer網絡是一個運行於我的電腦上的應用,經過網絡在用戶間分享文件。P2P網絡經過鏈接我的電腦分享文件而不是經過中央服務器
  • P2P是一種分佈式網絡,網絡的參與者共享他們所擁有的一部分硬件資源(處理能力、存儲能力、網絡鏈接能力、打印機等),這些共享資源須要由網絡提供服務和內容,能被其它對等節點(peer)直接訪問而無需通過中間實體。在此網絡中的參與者既是資源(服務和內容)提供者(server),又是資源(服務和內容)獲取者(client)

P2P特色

  1. 無中央服務器,打破了C/S模式
  2. 用戶之間互聯並分享文件。

P2P分類

  • 提供文件和其餘內容共享的P2P網絡,如Napster、Gnutella、eDonkey、emule、BitTorrent等;
  • 挖掘P2P對等計算能力和存儲共享能力,如SETI@home、Avaki、Popular Power等;
  • 基於P2P方式的協同處理與服務共享平臺,如JXTA、Magi、Groove、.NET My Service等;
  • 即時通信交流,包括ICQ、QICQ、Yahoo Messenger等;
  • 安全的P2P通信與信息共享,如Skype、Crowds、Onion Routing等。

BitTorrent

想要下載一個文件的時候,你只要獲得那些已經存在了文件的 peer,並和這些 peer 之間,創建點對點的鏈接,而不須要到中心服務器上,就能夠就近下載文件。

一旦下載了文件,你也就成爲 peer 中的一員,你旁邊的那些機器,也可能會選擇從你這裏下載文件,因此當你使用 P2P 軟件的時候,例如 BitTorrent,每每可以看到,既有下載流量,也有上傳的流量,也即你本身也加入了這個 P2P 的網絡,本身從別人那裏下載,同時也提供給其餘人下載。

能夠想象,這種方式,參與的人越多,下載速度越快,一切完美。

種子(.torrent)文件

可是有一個問題,當你想下載一個文件的時候,怎麼知道哪些 peer 有這個文件呢? 這就用到種子啦,也即我們比較熟悉的.torrent 文件。.torrent 文件由兩部分組成,分別是:announce(tracker URL)和文件信息。(tracker谷歌翻譯爲跟蹤器)

 文件信息裏面有這些內容:

  • info 區:這裏指定的是該種子有幾個文件、文件有多長、目錄結構,以及目錄和文件的名字
  • Name 字段:指定頂層目錄名字
  • 每一個段的大小:BitTorrent(簡稱 BT)協議把一個文件分紅不少個小段,而後分段下載
  • 段哈希值:將整個種子中,每一個段的 SHA-1 哈希值拼在一塊兒

工做過程:

  1. 下載時,BT 客戶端首先解析.torrent 文件,獲得 tracker 地址,而後鏈接 tracker 服務器。
  2. tracker 服務器迴應下載者的請求,將其餘下載者(包括髮布者)的 IP 提供給下載者。
  3. 下載者再鏈接其餘下載者,根據.torrent 文件,二者分別對方告知本身已經有的塊,而後交換對方沒有的數據。

此時不須要其餘服務器參與,並分散了單個線路上的數據流量,所以減輕了服務器的負擔。

這個過程也能夠看出,這種方式特別依賴 tracker。tracker 須要收集下載者信息的服務器,並將此信息提供給其餘下載者,使下載者們相互鏈接起來,傳輸數據。

雖然下載的過程是非中心化的,可是加入這個 P2P 網絡的時候,都須要藉助 tracker 中心服務器,這個服務器是用來登記有哪些用戶在請求哪些資源。

因此,這種工做方式有一個弊端,一旦 tracker 服務器出現故障或者線路遭到屏蔽,BT 工具就沒法正常工做了。

去中心化網絡(DHT)

爲了向完全去中心化邁步前進,後來就有了一種叫做DHT(Distributed Hash Table)的去中心化網絡。

每一個加入這個 DHT 網絡的人,都要負責存儲這個網絡裏的資源信息和其餘成員的聯繫信息,至關於全部人一塊兒構成了一個龐大的分佈式存儲數據庫。

有一種著名的 DHT 協議,叫Kademlia 協議。這個和區塊鏈的概念同樣,很抽象。

任何一個 BitTorrent 啓動以後,它都有兩個角色。一個是peer,監聽一個 TCP 端口,用來上傳和下載文件,這個角色代表,我這裏有某個文件。另外一個角色DHT node,監聽一個 UDP 的端口,經過這個角色,這個節點加入了一個 DHT 的網絡。

在 DHT 網絡裏面,每個 DHT node 都有一個 ID。這個 ID 是一個很長的串。每一個 DHT node 都有責任掌握一些知識,也就是文件索引,也即它應該知道某些文件是保存在哪些節點上。

它只須要有這些知識就能夠了,而它本身自己不必定就是保存這個文件的節點。

 

 

 

學習參考資料:知乎下載文件的協議的回答P2P協議概述常見P2P協議之BitTorrent 分析

相關文章
相關標籤/搜索