有间论坛

 找回密码
 立即注册
搜索
热搜: 电影 连续剧
查看: 4439|回复: 0

[教程] [转贴]BT咝性?理分析及內網提速方法

[复制链接]
发表于 2004-2-3 00:18:38 | 显示全部楼层 |阅读模式
★★BT咝性?理分析及內網提速方法★★



由於內網用戶無法提供一個對外的端口,所以無法做服務器.但用BT的時候,發現它可以讓內網用戶做 Send,作為程序員就忍不住下載了它的源代碼分析了一把(為了看它,還專門去寫了一下Python:})

比起其他的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/announc...2&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.xxx7eer id20: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的確要比公網用戶要慢很多.於是有了下面的

內網提速大法

了解了原理我們就有解決的方法,不就是外面的人找不到我們嗎,讓他們找到不就行了
終極武器 NAT --端口映射(又叫網絡地址翻譯) 其原理這裡就不說了(其實也不是很復雜), 其作用是讓服務器把指定端口的請求轉發到指定的IP上,讓其他的機器來響應這些請求,而內網向外網發送的時候不再是像其他網關服務那樣隨機分配端口,而是用上面指定的端口

可以用的軟件有
WinRoute Pro
PortTunnel
軟件下載和使用方法見 http://www.pconline.com.cn/pcedu/so...1/127157_2.html

但如果你的服務器是 win2000,並用自帶的網絡共享功能,那麼有更簡單的方法
在你共享的連接上按右鍵 ->屬性
到公用設定板按下面的設定按鈕,系統會彈出設置窗口
到服務板,按新增
名稱 隨便填
端口 6881
勾選TCP
私人網絡中的電腦名稱或ip 填你的本機ip
然後保存,再按同樣的方法增加 6882-6889端口的映射,把它們通通指向你的電腦
(因為我的系統是繁體系統,所以以上的名稱不一定和你的相同)
不明白的可以看看WIn2000幫助系統中有關 NAT的說明

以XP自带的防火墙为例,其他防火墙得设置与之类似.

1.  在控制面板中打开网络链接,然后打开本地链接的属性
2.  在本地连接_属性中选择高级,点击高级中的设置
3   高级设置中有一项是服务,点击其中的添加
4   打开服务设置后,在第一项服务描述中任意起一个名字
   第二项中添上你的机器名或者IP
     第三和第四项分别是外部于内部端口号,这两项要求填写的一样,                     
     可以从6881--   6890之间选择一个.最后把TCP选上,点击确定
5  每个BT占用一个,我们按照上面的设置,设置十个(6881--6890),据说BT只支持十个


用了端口映射後,只有你一個人爽,其他人還是老樣子(包括服務器) ,不過你可以搞一台BT下載專用機現在享受以下速度的快感吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|有间论坛

GMT+8, 2024-11-27 08:32 , Processed in 0.057442 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表