在BT協議中有多個不同的角色:
Web服務器:用于發布靜態元信息文件�D�D“.torrent
■終端瀏覽器:用于查詢和獲取靜態元信息文件
■靜態元信息文件:使用bencoding編碼來保存數據,包含發布文件和Tracker信息
■BTTracker:對等節點信息的維護者和傳輸過程的調度者
■下載者:希望下載文件的需求者,在下載過程中同時上傳已經下載的部分
■原始下載者:文件的最初擁有者,對本文件只上傳不下載,在其他下載者共同擁有文件的全部內容后,它可能退出活動。
有BT有幾個工作過程:
■查詢過程:
查詢過程的參與者是:Web服務器、終端瀏覽器和靜態元信息文件。
原始下載者擁有一個文件,愿意與大家共享;他自己或讓其它相關者制作一個靜態元信息文件,發布在Web服務器上;下載者所在終端通過瀏覽器查詢到這個靜態元信息文件,并通過HTTP協議GET到這個文件;從文件中解析出Tracker信息和文件信息。
■控制過程:
控制過程的參與者是Tracker、下載者(包括原始下載者)。
BitTorrent擁有一個中心控制程序Tracker。它和下載者(包括原始下載者)通過HTTP協議來交換信息,下載者用HTTP的GET命令來傳遞信息,Track回應下載者的信息。
Tracker對所有下載者的信息進行維護,當它收到一個請求后,首先把對方的信息記錄下來(如果已經記錄在案,那么就檢查是否需要更新),然后將一部分(并非全部,根據設置的參數已經下載者的請求)參與下載同一個文件(一個tracker服務器可能同時維護多個文件的下載)的下載者的信息返回給對方。
而下載者通過靜態元信息文件中的信息,向tracker發一個HTTP的GET請求,并把它自己的信息放在GET的參數中;這個請求的大致意思是:我是xxx(一個唯一的id),我想下載yyy文件,我的ip是aaa,我用的端口是bbb;下載者還要定時向tracker發一個HTTP的GET請求,使之知道每個人的進度;假如下載者發生一個意外事件或者想要更多的peer列表,下載者會不定期重發請求。
一般來說當下載通過GET請求時使用的官方端口是Port6881~6889,如果使用6881發現占用就自動使用6882,依次類推。如果到6889端口還沒有找到空閑的端口,就自動放棄。但是目前的有些BT變種使用的非官方規范的端口,這給使用ACL功能進行BT控制的交換設備或者防火墻設備帶來一定的困難。
■傳輸過程:
每個下載者都可以看成一個服務器和一個客戶端,這正是P2P的真正含義。各個下載者通過從Tracker獲得的其他下載者的信息(其實是服務器信息),和其他下載者建立連接,交換文件。他們將通過BT對等協議進行對稱連接通訊。
傳輸過程的參與者是:下載者(包括原始下載者)
從服務器的角度看有幾個過程:按照發送給Tracker的端口進行網絡偵聽,等待連接信息;對每一個連接請求建立一個Socket保持連接;接到握手消息后發送我受消息:”19BittorrentProtocol”+8個空+Sha1hash+myID。
從客戶端角度來看有幾個過程:向從Tracker獲得的其他下載者發起一個TCP連接;向連接的服務器發送一個握手信息:”19BittorrentProtocol”+8個空+Sha1hash;握手完畢之后是長度前綴和信息輪流出現的數據流;每兩分鐘發送一個keepalive的空消息,防止連接超時。
從上述說明可以看出BT協議是利用HTTP協議進行傳輸,在其包傳輸過程中有些比較明顯的特征字如19bittorrentPortocol+8個空Sha1hash這些特征字是和其它應用協議相區別的,因此這個是網絡設備廠家控制BT的一個方法。
2、eMule協議原理:
電騾是一個基于電驢協議的非常流行的文件共享應用程序。電騾網絡由幾百個電騾服務器及數百萬個電騾客戶端組成。為了獲取網絡服務,客戶端將會鏈接到一個服務器。與服務器的鏈接直到客戶端已經位于系統內時才關閉。服務器履行信息索引服務,但不與其它服務器通信。
每一個電騾客戶端預置了一個服務器列表及一些在本地文件系統中的共享文件。客戶端用單一的TCP鏈接連接到服務器,登錄網絡,獲取相得到的文件信息及可用的客戶端。電騾客戶端用幾百個TCP鏈接同其它客戶端通信,上傳下載文件。每個電騾客戶端對它共享的每一個文件維持一個上傳隊列。下載中的客戶端加入隊列的末尾,逐漸的前進,直到到達隊列的頂端就開始下載它的文件。客戶端可以從其它幾個客戶端分別下載相同的文件的不同片段。客戶端也可以上傳哪些它還沒有完成下載文件的數據塊。最后,電騾擴充了電驢的性能,允許客戶端之間交換關于服務器、客戶端及文件的信息。注意客戶端與服務器之間的通信是建立在TCP基礎上的。服務器有一個內部的數據庫用于存儲客戶端與文件的信息。服務器不存儲任何文件。它為存儲的文件地址信息做集中索引。服務器的一個附加功能是作為那些在防火墻后,不能接受鏈接的客戶端之間的橋梁,但橋梁功能給服務器增加了相當大的負載。電騾使用UDP來提高客戶端與服務器及其它客戶端之間的性能。客戶端發送及接收UDP信息的能力對于客戶端的正確的日常操作來說不是強制性的。