<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網 大學生計算機學習社區

    CowNew開源團隊

    http://www.cownew.com 郵件請聯系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks

    BT全名為BitTorrent,是一個p2p軟件,你在下載download的同時,也在為其他用戶提供上傳upload,因為大家是“互相幫助”,所以不會隨著用戶數的增加而降低下載速度。
    下面是一般用ftp,http等分享流程:


    1.JPG

    下面是用BitTorrent分享的流程:


    2.JPG

    其實跟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來下載,所以下載的人越多,速度就越快。
    “計算機321”評論:大家用軟件的過程中一定要分析其原理,因為未來這些軟件有可能會要我們來開發,我們不是普通的用戶,而是未來的開發人員,比如像這篇文章就分析的很透徹。給大家留一個習題:分析一下為什么有人說BT軟件毀硬盤,要從操作系統、網絡原理等方面進行分析,要分析到硬盤的工作原理、網絡數據的發送接收,又想到的同學請到“計算機321”(http://jsj321.com)發表自己的看法,也可以聽老師在線講相關原理。
    內網用戶可以做Send的原理
    上面說到服務器只會返回公網的ip的,那內網用戶怎么可以做Send呢,這是因為BT是一個主動連接的軟件(即使你已經下載完了,也不也會主動連接他人)下面是一個仿真流程:
    1 內網用戶開始做 seed,
    2 服務器收到請求,由于是第一個所以也沒有peer返回
    3 公網用戶提交請求,由于seed是內網用戶所以也沒有peer返回,等待下載,但服務器會把它的IP放到列表中
    4 內網經過 interval 時間間隔后,再向服務器放出請求,得到上面得公網IP
    5 得到公網IP后,內網馬上進行連接
    6 公網用戶建立連接,數據開始傳輸 (注意現在是公網用戶做服務器,內網用戶做客戶端,是不是有點怪)
    7 其它內網用戶去上面公網用戶下載數據
    所以,內網用戶做 seed 一定要有公網用戶得參與,否則其它內網用戶無法下載。如果全部是內網用戶,那個所有連接都不會成立,當然這是比較極端的情況。
    以上可見,內網用戶不能和內網用戶連接,其它用戶無法從服務器查到你,所以無法主動連接你,你只能每隔30分鐘從服務器找到公網用戶一個個進行連接。
    由于中國很多用戶的是內網用戶(我從服務器上查回來的peer還沒試過超過10個的),所以內網用戶用BT的確要比公網用戶要慢很多。

    posted on 2008-09-18 16:03 CowNew開源團隊 閱讀(652) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 欧洲亚洲综合一区二区三区 | 三年片在线观看免费观看大全中国| 亚洲成年人免费网站| 亚洲国产美国国产综合一区二区 | 免费特级黄毛片在线成人观看| 两性刺激生活片免费视频| 精品国产无限资源免费观看| 国产精品久久永久免费| 国产精品色拉拉免费看| 永久免费的网站在线观看| 欧洲精品成人免费视频在线观看| 毛片基地免费观看| 国产青草视频在线观看免费影院| 国产精品免费电影| 亚洲乱码日产精品a级毛片久久| 亚洲中久无码永久在线观看同| 亚洲AV无码久久精品蜜桃| 99ri精品国产亚洲| 亚洲制服丝袜第一页| 亚洲av无一区二区三区| 欧洲乱码伦视频免费国产| 九九99热免费最新版| 久久精品国产大片免费观看| 亚洲一区免费在线观看| 国产成人免费爽爽爽视频| 免费v片在线观看品善网| 亚洲熟妇无码乱子AV电影| 亚洲国产老鸭窝一区二区三区 | 久久亚洲精品无码观看不卡| 亚洲AV无码乱码在线观看富二代| 亚洲女人初试黑人巨高清| 亚洲中文字幕乱码AV波多JI| 特级aa**毛片免费观看| 中文字幕无码毛片免费看| 51精品视频免费国产专区| 在线免费一区二区| 中文字幕专区在线亚洲| 亚洲黄色网址在线观看| 亚洲av无码日韩av无码网站冲| WWW免费视频在线观看播放| 24小时日本韩国高清免费|