BT種子檔案結構分析,參考:http://www.cnblogs.com/EasonJim/p/6601047.html
BT下載下傳,參考:http://baike.baidu.com/item/BT下載下傳
BitTorrent協定
BT全名為BitTorrent,是一個p2p軟體,你在下載下傳download的同時,也在為其他使用者提供上傳upload,因為大家是“互相幫助”,是以不會随着使用者數的增加而降低下載下傳速度。
下面是一般用ftp,http等分享流程:

下面是用BitTorrent分享的流程:
其實跟ED也十分相似,ED跟BT不同的地方有:
ED--要連上一個固定server BT--沒有固定server,隻要分享者制作出該分享檔案的.torrent檔公布出來便可
ED--分享的人越多速度越快? BT--種子seed越多速度越快
ED--世界性的分享 BT--團體性的分享(可做到速度保證)
ED--知道在分享者的user name &速度 BT--沒顯示使用者/分享者名字
比起其它的P2P軟體,BT有個獨特的地方,它存在一個中間的WEB伺服器,就是我們在釋出的時所填寫的announce。 該伺服器提供了釋出的統一管理,不像其它P2P軟體那樣到處去找哪些非常不穩定的個人伺服器,相對起來讓人安心的多。
該WEB伺服器更大的作用是内網使用者可以做 Send(下面會說明原理),這是其它軟體無法做到的,但不好的地方是announce當機的時候就無法下載下傳了。要知道P2P下載下傳關鍵是要人氣要高,announce停一下就搞到人氣全沒有了。
.torrent 的作用
大家都知道我們要用BT下載下傳 ,就要先下載下傳一個.torrent檔案,這個檔案到底有甚麼呢:
首先是 announce 紀錄了釋出伺服器的位置,讓BT知道是那個WEB伺服器釋出的,然後是一些檔案資訊,檔案名,目錄名,長度等等,最後是片段長度,和片段的 Sha1 校驗碼,(BT為了事現續傳和檔案校驗,就把檔案分成若幹個片段),大家可以用寫字闆打看torrent檔案看看,就是知道個大概,後面的亂碼是片段 Sha1 校驗碼。
開始-續傳的實作 sha校驗
BT 打開一個 torrent檔案後,先要你選擇檔案儲存那裡。然後判斷檔案不存在的話就建立新檔案,存在的話就用 Sha1 校驗碼去校驗檔案---錯誤的就是還沒下載下傳的,這樣就可以實作續傳了,但128位校驗,想不慢都不行
得到 peer
現在知道要下載下傳甚麼了,到那裡下載下傳呢?這就要尋找有誰提供上傳了,這裡BT是通過WEB伺服器來實作的,首先BT會通過分析 torrent 來得到下面一串網址
http://btfans.3322.org:6969/announce?info_hash=%CDg%D4%19%AD%96%9D%93%03%DB%E4%FFXA%C6%5D%043%17O&peer_id=%00%00%00%00%00%00%00%00%00%00%00%00%A3E%E0%9BeB%90d&port=6882&uploadED=0&downloadED=0&left=19171922&event=startED
http://BTfans.3322.org:6969/announce 是釋出伺服器的位址
info_hash 是torrent檔案中的 info 部分的Sha校驗碼,WEB通過它在釋出清單找到對應的紀錄
peer_id 是自身的辨別,它是12個0和目前時間+全球的唯一辨別碼(GUID)的Sha校驗的前八位,共20位
port 你提供上傳的 port
IP 你的ip位址,沒有的話伺服器會自己找到
uploadED downloadED 你上傳和下載下傳了多少,伺服器可以用它來做流量分析
left 你還要下載下傳多少個位元組
event 狀态,告訴伺服器你是準備開始下載下傳,還是停止,還是下載下傳完成了
以上這個操作預設 5 分鐘做一次,或由伺服器設定
伺服器會做什麼
伺服器中有個一個 track 程式來管理這些請求,得到這一串代碼後就會用 info_hash 來查找清單,找到你就可以下載下傳,找不到就對不起啦。接着它會反連(NatCheck)你的 IP 和 Port這樣就可以知道你是内網使用者還是共網使用者(如果你是内網使用者,它是連不通的,因為它會連到你的伺服器上,你的伺服器當然沒有這個端口啦),然後伺服器傳回現在正在下載下傳這個檔案的所有公網使用者的IP和port,就像是:d8:intervali1800e5eersld2:ip14:xxx.xxx.xx.xxx7eerid20:00180531904b7e3abdd74orti6881eeee
interval 1800 是告訴 BT 隔多少秒來查詢一次這裡是 30 分鐘 (有點過分了),最後如果你是公網使用者它會把你送出的 IP 和 Port 放到info_hash 對應的清單中,這樣其它人就可以找到你
下載下傳
得到這些 peer IP後,BT就可以找到對應的IP下載下傳了,BT會到所有的peer去尋找自己要下載下傳的東西,不是一定要到seed下載下傳。BT每找到一個peer就和建立一個Socket來下載下傳,是以下載下傳的人越多,速度就越快。
内網使用者可以做Send的原理
上面說到伺服器隻會傳回公網的ip的,那内網使用者怎麼可以做Send呢,這是因為BT是一個主動連接配接的軟體(即使你已經下載下傳完了,也不也會主動連接配接他人)下面是一個仿真流程:
1 内網使用者開始做 seed,
2 伺服器收到請求,由于是第一個是以也沒有peer傳回
3 公網使用者送出請求,由于seed是内網使用者是以也沒有peer傳回,等待下載下傳,但伺服器會把它的IP放到清單中
4 内網經過 interval 時間間隔後,再向伺服器放出請求,得到上面得公網IP
5 得到公網IP後,内網馬上進行連接配接
6 公網使用者建立連接配接,資料開始傳輸 (注意現在是公網使用者做伺服器,内網使用者做用戶端,是不是有點怪)
7 其它内網使用者去上面公網使用者下載下傳資料
是以,内網使用者做 seed 一定要有公網使用者得參與,否則其它内網使用者無法下載下傳。如果全部是内網使用者,那個所有連接配接都不會成立,當然這是比較極端的情況。
以上可見,内網使用者不能和内網使用者連接配接,其它使用者無法從伺服器查到你,是以無法主動連接配接你,你隻能每隔30分鐘從伺服器找到公網使用者一個個進行連接配接。
由于中國很多使用者的是内網使用者(我從伺服器上查回來的peer還沒試過超過10個的),是以内網使用者用BT的确要比公網使用者要慢很多
迅雷的下載下傳原理:
迅雷下載下傳原理分析(BitComet、迅雷是P2SP)
迅雷的工作原理據稱為”多資源超線程技術基于網格原理,能夠将網絡上存在的伺服器和計算機資源進行有效的整合”。實際上還是傳統的下載下傳技術,隻不過這種下載下傳技術綜合應用HTTP、FTP傳輸協定将檔案的檔案進行分塊、分片下載下傳;而且還可以将檔案等分,然後去不同位址下載下傳;并且在這些傳統下載下傳的過程中穿插P2P技術,也就是一種新的盜鍊技術。總體來說,迅雷的下載下傳呈現以下特點:
1、多點下載下傳。收集網上的所有下載下傳位址以便多點下載下傳。其他軟體如網際快車不會收集在下載下傳位址裡包含了使用者名和密碼的下載下傳位址,但迅雷一樣收集,然後供其他人使用。這就就是“盜鍊”,即盜用别人的連結。
2、使用類似BT的P2P下載下傳技術。迅雷啟動後,會在系統背後啟動兩個線程Thunder.exe和Issue.exe,線上程裡可以看得到。這兩個線程,就是要像BT那樣,共享本地硬碟上的檔案,讓其它迅雷使用者下載下傳。
3、收集使用者提供的資源。例如:當有一個使用者在一個電影網站上,得到一個下載下傳位址(A),然後用迅雷下載下傳,這個下載下傳位址就會被發到迅雷的伺服器上;另一個地方又有一個使用者在另一個網站上下載下傳同一部電影,迅雷的伺服器又得到另一個下載下傳位址(B)。迅雷伺服器就會把相同檔案的下載下傳位址(A,B)集合在一起,形成一個資源,而那兩個用迅雷下載下傳這兩個電影的使用者也算上,就會有四個下載下傳點。當又有使用者在别的地方準備下載下傳相同的電影的時候,迅雷就會在資料庫裡比較,找出相同的資源(其它下載下傳點也就是原先收集到的),提供給那個準備下載下傳的使用者下載下傳,這個使用者就會同時有多個下載下傳點來下載下傳而達到速度的飛升。
例:當有一個使用者在一個電影網站上,得到一個下載下傳位址(A),然後用迅雷下載下傳,這個下載下傳位址就會收集到迅雷的伺服器上。
在地球的另一個地方又有一個使用者在另一個網站上下載下傳同一部電影,而得到另一個下載下傳位址(B),就又會給迅雷伺服器收集。然後迅雷伺服器就會把相同檔案的下載下傳位址(A,B)集合在一起,形成一個資源。那兩個用迅雷下載下傳這兩個電影的使用者也算上。就會有四個下載下傳點了。而又有使用者在别的地方準備下載下傳相同的電影的時候,迅雷就會在資料庫裡比較,找出相同的資源(其它下載下傳點,也就是上面收集到的),提供給那個準備下載下傳的使用者下載下傳,那這個使用者就會同時有多個下載下傳點來下載下傳,而達到速度的提升。而這個使用者當然也不可能隻是享受高速的下載下傳,他同時也會上傳了他下載下傳的那部份資料(BT原理)。
是以,當一個使用者用迅雷下載下傳時,就會連上迅雷伺服器,查找資源,如果是熱門的檔案,迅雷就能傳回大量的下載下傳點,供這個使用者下載下傳。進而達到下載下傳速度的提升。
BT下載下傳原理分析(P2P)
BT是目前最熱門的下載下傳方式之一,它的全稱為“BitTorrent”簡稱“BT”,中文全稱“比特流”,但很多朋友将它戲稱為“變态下載下傳”,這又是什麼原因呢?
就HTTP、FTP、PUB等下載下傳方式而言,一般都是首先将檔案放到伺服器上,然後再由伺服器傳送到每位使用者的機器上,它的工作原理如圖1所示。是以如果同一時刻下載下傳的使用者數量太多,勢必影響到所有使用者的下載下傳速度,如果某些使用者使用了多線程下載下傳,那對帶寬的影響就更嚴重了,是以幾乎所有的下載下傳伺服器都有使用者數量和最高下載下傳速度等方面的限制。
很明顯,由于上述的原因,即使你使用的是寬帶網,通常也很難達到營運商許諾的最高下載下傳速度,這裡面固然有網絡的原因,但與伺服器的限制也不無關系。正因如此,BT下載下傳方式出現之後,很快就成為了下載下傳迷們的最愛。
BT伺服器是通過一種傳銷的方式來實作檔案共享的,它的工作原理如圖2所示。舉個例子來說吧,例如BT伺服器将一個檔案分成了N個部分,有甲、乙、丙、丁四位使用者同時下載下傳,那麼BT并不會完全從伺服器下載下傳這個檔案的所有部分,而是根據實際情況有選擇地從其他使用者的機器中下載下傳已下載下傳完成的部分。例如甲已經下載下傳了第1部分,乙已經下載下傳了第2部分,那麼丙就會從甲的機器中下載下傳第1部分,從乙的機器中下載下傳第2部分,當然甲、乙、丁三位使用者也在同時從丙的機器中下載下傳相應的部分,這就大大減輕了BT伺服器的負荷,也同時加快了丙的下載下傳速度,也就是說每台參加下載下傳的計算機既從其他使用者的計算機上下載下傳檔案,同時自身也向其他使用者提供下載下傳,是以參與下載下傳的使用者數量越多,下載下傳速度也越高。
原文:http://blog.csdn.net/it_man/article/details/6602771