关于BT(BitTorrent)连接问题

xujiaoxiang 2003-12-19 02:11:28
BT(BitTorrent)相当于组成一个工作组,
---那么是如何记载工作组的成员的?

连接是要有IP的
---可是工作组中成员的IP是可以变化的
他是以什么来记载并找到成员的?

是下载的*.torrent 文件和客户端程序完成的么?
我想知道他的连接是怎么完成的
*.torrent 文件和客户端程序中都包含了那些必要的连接信息?

即:在没有对方IP ,不通过中间服务器,
双方有相同的*.torrent 文件和客户端程序,
怎样建立连接并进行通信

...全文
387 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
buzili 2003-12-19
  • 打赏
  • 举报
回复
去www.manfen.com(或是net)看
xujiaoxiang 2003-12-19
  • 打赏
  • 举报
回复
看来该揭贴了 thanks
xujiaoxiang 2003-12-19
  • 打赏
  • 举报
回复
是的 这些是建立连接以后做的事情

我想知道他是怎样建立连接的??
(在不知道对方IP,没有通过服务器的情况下)

个人想法: 对网络进行搜索,得到全部运行BT的机器的IP,再建立连接

是这样的么? 对网络搜索应该很慢的 可BT并不慢啊

BT的原码是公开的吧, 有没有看懂原码的高手啊!帮我解释一下
我找不到原码也看不懂那种语言
sungod8 2003-12-19
  • 打赏
  • 举报
回复
[ZT]

BT運行原理分析及內網提速


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的說明

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

BT的缺點:
1 用Python編寫,須然可以跨平台,但再Windows下耗資源比較多,特別是服務器應該考慮用C重寫 track www.torrentse.cx好像已經這樣做(其返回得東西和標準的不大一樣),但是不是重寫不得而知.

2 track 碰到內網Seed的時候,應該把 interval 設小一點
sungod8 2003-12-19
  • 打赏
  • 举报
回复
http://okbt.com/tutorial.html
sungod8 2003-12-19
  • 打赏
  • 举报
回复
BT首先在上传者端把一个文件分成了Z个部分,甲在服务器随机下载了第N各部分,乙在服务器随机下载了第M个部分,这样甲的BT就会根据情况到乙的电脑上去拿乙已经下载好的M部分,乙的BT就会根据情况去到甲的电脑上去拿甲已经下载好的N部分,这样就不但减轻了服务器端得负荷,也加快了用户方(甲乙)的下载速度,效率也提高了,更同样减少了地域之间的限制。比如说丙要连到服务器去下载的话可能才几K,但是要是到甲和乙的电脑上去拿就快得多了。所以说用的人越多,下载的人越多,大家也就越快,BT的优越性就在这里。而且,在你下载的同时,你也在上传(别人从你的电脑上拿那个文件的某个部分),所以说在享受别人提供的下载的同时,你也在贡献。
xujiaoxiang 2003-12-19
  • 打赏
  • 举报
回复
然后根据种子文件去连接种子,连接后你就和所有在线的人建立了连接。
-------是怎么根据种子文件去连接种子的?
ysqu 2003-12-19
  • 打赏
  • 举报
回复
打开BT的客户端后,首先是打开本地的种子文件
然后根据种子文件去连接种子,连接后你就和所有在线的人建立了连接。
这个过程中,你的IP也会被其他的BT客户端搜索到,也同时成为其他人可以下载“文件块”的一个“服务器”
到了你下载完毕的时候,你就成了一个“种子”

种子文件的格式是和BT的工作原理和客户端相关的。

6,185

社区成员

发帖
与我相关
我的任务
社区描述
windows网络管理与配置
社区管理员
  • 网络管理与配置社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧