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的確要比公網用戶要慢很多

?

?

迅雷的下載原理:
迅雷下載原理分析
迅雷的工作原理據稱為”多資源超線程技術基于網格原理,能夠將網絡上存在的服務器和計算機資源進行有效的整合”。實際上還是傳統的下載技術,只不過這種下載技術綜合應用HTTP、FTP傳輸協議將文件的文件進行分塊、分片下載;而且還可以將文件等分,然后去不同地址下載;并且在這些傳統下載的過程中穿插P2P技術,也就是一種新的盜鏈技術。總體來說,迅雷的下載呈現以下特點:
1、多點下載。收集網上的所有下載地址以便多點下載。其他軟件如網際快車不會收集在下載地址里包含了用戶名和密碼的下載地址,但迅雷一樣收集,然后供其他人使用。這就就是“盜鏈”,即盜用別人的鏈接。
2、使用類似BT的P2P下載技術。迅雷啟動后,會在系統背后啟動兩個線程Thunder。exe和Issue。exe,在線程里可以看得到。這兩個線程,就是要像BT那樣,共享本地硬盤上的文件,讓其它迅雷用戶下載。
3、收集用戶提供的資源。例如:當有一個用戶在一個電影網站上,得到一個下載地址(A),然后用迅雷下載,這個下載地址就會被發到迅雷的服務器上;另一個地方又有一個用戶在另一個網站上下載同一部電影,迅雷的服務器又得到另一個下載地址(B)。迅雷服務器就會把相同文件的下載地址(A,B)集合在一起,形成一個資源,而那兩個用迅雷下載這兩個電影的用戶也算上,就會有四個下載點。當又有用戶在別的地方準備下載相同的電影的時候,迅雷就會在數據庫里比較,找出相同的資源(其它下載點也就是原先收集到的),提供給那個準備下載的用戶下載,這個用戶就會同時有多個下載點來下載而達到速度的飛升。
例:當有一個用戶在一個電影網站上,得到一個下載地址(A),然后用迅雷下載,這個下載地址就會收集到迅雷的服務器上。
在地球的另一個地方又有一個用戶在另一個網站上下載同一部電影,而得到另一個下載地址(B),就又會給迅雷服務器收集。然后迅雷服務器就會把相同文件的下載地址(A,B)集合在一起,形成一個資源。那兩個用迅雷下載這兩個電影的用戶也算上。就會有四個下載點了。而又有用戶在別的地方準備下載相同的電影的時候,迅雷就會在數據庫里比較,找出相同的資源(其它下載點,也就是上面收集到的),提供給那個準備下載的用戶下載,那這個用戶就會同時有多個下載點來下載,而達到速度的提升。而這個用戶當然也不可能只是享受高速的下載,他同時也會上傳了他下載的那部份數據(BT原理)。
所以,當一個用戶用迅雷下載時,就會連上迅雷服務器,查找資源,如果是熱門的文件,迅雷就能返回大量的下載點,供這個用戶下載。從而達到下載速度的提升。
BT下載原理
BT是目前最熱門的下載方式之一,它的全稱為“BitTorrent”簡稱“BT”,中文全稱“比特流”,但很多朋友將它戲稱為“變態下載”,這又是什么原因呢?
就HTTP、FTP、PUB等下載方式而言,一般都是首先將文件放到服務器上,然后再由服務器傳送到每位用戶的機器上,它的工作原理如圖1所示。因此如果同一時刻下載的用戶數量太多,勢必影響到所有用戶的下載速度,如果某些用戶使用了多線程下載,那對帶寬的影響就更嚴重了,因此幾乎所有的下載服務器都有用戶數量和最高下載速度等方面的限制。
很明顯,由于上述的原因,即使你使用的是寬帶網,通常也很難達到運營商許諾的最高下載速度,這里面固然有網絡的原因,但與服務器的限制也不無關系。正因如此,BT下載方式出現之后,很快就成為了下載迷們的最愛。
BT服務器是通過一種傳銷的方式來實現文件共享的,它的工作原理如圖2所示。舉個例子來說吧,例如BT服務器將一個文件分成了N個部分,有甲、乙、丙、丁四位用戶同時下載,那么BT并不會完全從服務器下載這個文件的所有部分,而是根據實際情況有選擇地從其他用戶的機器中下載已下載完成的部分。例如甲已經下載了第1部分,乙已經下載了第2部分,那么丙就會從甲的機器中下載第1部分,從乙的機器中下載第2部分,當然甲、乙、丁三位用戶也在同時從丙的機器中下載相應的部分,這就大大減輕了BT服務器的負荷,也同時加快了丙的下載速度,也就是說每臺參加下載的計算機既從其他用戶的計算機上下載文件,同時自身也向其他用戶提供下載,因此參與下載的用戶數量越多,下載速度也越高。

?

轉載于:https://www.cnblogs.com/jinhengyu/p/10258049.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453740.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

表格列求和_excel表格制作,Excel表格的基本操作,包含制作一個表格10方面的知識...

創建表格,插入與刪除一行一列或多行多行,一次移動一行一列或多行多列,拆分與合并單元格,單元格內換行,表格求和與求平均值是Excel表格的基本操作;除此之外,Excel表格的基本操作還包括調整行高列…

深度學習之 FPN (Feature Pyramid Networks)

論文題目:Feature Pyramid Networks for Object Detection論文鏈接:https://arxiv.org/abs/1612.03144論文代碼:Caffe版本 https://github.com/unsky/FPN 《Feature Pyramid Networks for Object Detection》這篇論文主要解決的問題是目標檢…

ISLR—第二章 Statistical Learning

Statistical Learning Y 和X的關系why estimate f 用來預測 預測的時候可以將f^當成一個black box來用,目的主要是預測對應x時候的y而不關系它們之間的關系。用來推斷 推斷的時候,f^不能是一個black box,因為我們想知道predictor和response之…

提高編程思想

虛函數和抽象函數有什么區別 虛函數是有代碼的并明確允許子類去覆蓋,但子類也可不覆蓋,就是說可以直接用,不用重寫 抽象函數是沒有代碼,子類繼承后一定要重寫 ****************************************************************** 在一…

python特效代碼_網頁愛心特效弱爆了,我讓你點擊網頁顯示所有python模塊!

點擊網頁特效上周寫了一篇文章快速搭建個人博客的教程文章:其中說到了一個點擊網頁出現愛心特效的插件 click_heart.js ,當然大家可能也見過其他博客上面,有點擊網頁出現類似 富強、民主、文明、和諧等等,關于代碼在這里不多贅述,…

Python 包管理之 poetry

poetry是一個Python虛擬環境和依賴管理的工具。poetry和pipenv類似,另外還提供了打包和發布的功能。 官方文檔:python-poetry.org/docs/ python項目部署:poetry管理本地環境,上線用docker poetry 安裝 poetry提供多種安裝方式&#xff0c…

Windows數據庫編程接口簡介

數據庫是計算機中一種專門管理數據資源的系統,目前幾乎所有軟件都需要與數據庫打交道(包括操作系統,比如Windows上的注冊表其實也是一種數據庫),有些軟件更是以數據庫為核心因此掌握數據庫系統的使用方法以及數據庫系統…

映客都是互刷禮物嗎_映客互刷禮物有什么用_映客守護有什么用

一起直播、互刷禮物、改ID發性感照,趙本山女375x332 - 122KB - PNG一起直播、互刷禮物、改ID發性感照,趙本山女600x893 - 247KB - JPEG一起直播、互刷禮物、改ID發性感照,趙本山女600x448 - 151KB - JPEG土豪互刷禮物嚇壞男主播 即興表演鐵頭功撞墻560x688 - 57KB - JPEG一起直…

Python 之打包工具 setup.py

1. 為什么需要對項目分發打包? 平常我們習慣了使用 pip 來安裝一些第三方模塊,這個安裝過程之所以簡單,是因為模塊開發者為我們默默地為我們做了所有繁雜的工作,而這個過程就是 打包。 打包,就是將你的源代碼進一步封…

周進度----06

周學習進度06 周學習進度06 第16周 所花時間: 60min60min100min100min100min100min90min60min60min 代碼量(行) 500-800 博客量(篇) 4 了解到的知識 css樣式表的一些知識 項目流程的初步了解 一周的學習心得…

八個實用的CMD命令及開始→運行→命令集錦

這篇文章是很久前收藏在自己筆記本內的,具體的來源地址不清楚,先謝一下原作者吧. 共享出來大家一起學習一下: 一,ping    它是用來檢查網絡是否通暢或者網絡連接速度的命令。作為一個生活在網絡上的管理員或者黑客來說,ping命令是第一個必須掌握的DO…

2019如何轉換2010_9102年,你還不知道PPT怎么轉換成視頻嗎?小心落伍了

你在刷抖音的時候有沒有刷過這類視頻:成為人生贏家必備的書單、5個讓你看透人性的電影、6個讓你升職加薪的APP...如果你細心觀察的話,會發現這類視頻的做法基本都是一個樣的,像在翻相冊一樣,一頁頁過去,所以它們也叫做…

深度學習之RetinaNet

總述 Focal loss主要是為了解決one-stage目標檢測中正負樣本比例嚴重失衡的問題。該損失函數降低了大量簡單負樣本在訓練中所占的權重,也可理解為一種困難樣本挖掘。 目標識別有兩大經典結構: 第一類是以Faster RCNN為代表的兩級識別方法,這種結構的第…

js生成圖片

var image new Image(); var c document.getElementById("myCanvas"); var ctx c.getContext("2d"); var img document.getElementById("scream"); ctx.font "10px Arial";function createImg(name, zuowei, color) {// 姓名ctx…

淺談如何學習linux

一.為什么要學linux? 當然最重要是愛好和興趣!如果你這種必要學,或者根本不喜歡,請不要浪費時間,你學也學不好! 二.起步 你應該為自己創造一個學習linux的環境--在電腦上裝一個linux或unix 問題1:版本…

python的datetime函數_Python連載8-datetime包函數介紹

一、datetime包(上接連載7內容)1.函數:datetime(1)用法:輸入一個日期,來返回一個datetime類?(2)格式:datetime.datetime(年,月,日,hour,minute,second)其中hour,minute,…

深度學習之 soft-NMS

論文:《Improving Object DetectionWith One Line of Code》soft-NMS 英文論文鏈接:https://arxiv.org/pdf/1704.04503.pdfsoft-NMS github 鏈接:https://github.com/bharatsingh430/soft-nms 絕大部分目標檢測方法,最后都要用到…

項目微管理 - 總結也是新的開始

時間都去哪了?聽著這首耳熟能詳的旋律,感嘆著飛速流逝的年華,我漸漸的陷入到沉思之中。時間過的真的很快,從一名程序員到接手一個一線項目團隊一晃已經2年多了。在這段時間里,我接觸了各種各樣的人,處理了各…

一維二維_Excel二維數據轉一維,2種方法輕松搞定

今天是2020年1月1日,祝各位小伙伴們新年快樂,開心每一天~如下所示,左邊是二維交叉數據表,我們希望快速轉換成右邊的一維數據表如果復制粘貼,效率太低了,今天分享兩種方法,實現快速轉換1、powerq…

數百種 Windows 軟件的免費替代品列表

程序所執行任務的描述WindowsLinux1) 網絡連接網頁瀏覽器微軟 IE,網景 Netscape / Mozilla, Opera [私有],Firebird,……1) Netscape/Mozilla 2) Galeon. 3) Konqueror. 4) Opera.[私有] 5) Firebird. 6) Nautilus 7) Epiphany 8)…