上一篇 | 下一篇

BT技术概述

发布: 2007-1-10 21:31 | 作者: 网络转载 | 来源: 本站原创 | 查看: 267次

 
   BT全名为BitTorrent,是2004年度互联网最热门的应用之一。BT是一个P2P下载软件(点对点下载软件),克服了传统下载方式的局限性,具有下载的人越多,文件下载速度就越快的特点。因此,吸引着众多的网民使用。当然,在校园网中也立即普及开来。那么BT目前是否适合在校园网环境中普遍应用呢?
 
一、 BT概述
 

        

       图1:传统下载方式                        图2: BT下载方式

    在传统下载方式中,一般是把文件由服务器端传送到客户端,例如FTP,HTTP,PUB等等,工作原理如图1。由于是从一台服务器下载,服务器所提供的带宽是一定的,因而下载人越多速度越慢。但是这样就出现了一个问题,随着用户的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,而且搞不好还会把服务器挂掉,所以很多的服务器会都有用户人数的限制,下载速度的限制,这样就给用户造成了诸多的不便。
  BT就不同,用BT下载反而是用户越多,下载越快,这是为什么呢?因为BT用的是一种传销的方式来达到共享的,工作原理如图2:BT首先在上传端把一个文件分成了Z个部分,甲在服务器随机下载了第N各部分,乙在服务器随机下载了第M个部分,这样甲的BT就会根据情况到乙的电脑上去下载乙已经下载好的M部分,乙的BT就会根据情况到甲的电脑上去下载甲已经下载好的N部分,这样就不但减轻了服务器端的负荷,也加快了用户方(甲乙)的下载速度,效率也提高了,更同样减少了地域之间的限制。比如说丙要连到服务器去下载的话可能才几K,但是要是到甲和乙的电脑上去下载就快得多了。所以说用的人越多,下载的人越多,大家也就越快,BT的优越性就在这里。而且,在你下载的同时,你也在上传(别人从你的电脑上下载那个文件的某个部分),所以说在享受别人提供的下载的同时,你也在贡献。

二、 BT原理分析
   比起其它的P2P软件,BT有个独特的地方,它存在一个中间的WEB服务器,就是在发布的时所填写的announce。该服务器提供了发布的统一管理,不像其它P2P软件那样到处去找哪些非常不稳定的个人服务器。同时也提供内网用户可以做Send,这是其它软件无法做到的。
要用BT下载 ,就要先下载一个.torrent文件,这个文件到底有什么呢: 首先是 announce 记录了发布服务器的位置,让BT知道是那个WEB服务器发布的,然后是一些文件信息,文件名,目录名,长度等等,最后是片段长度,和片段的 Sha 校验码,(BT为了实现续传和文件校验,就把文件分成若干个片段),大家可以用写字板打开torrent文件看看,就是知道个大概,后面的乱码是片段 Sha 校验码。
    BT 打开一个 .torrent文件后,先要你选择文件保存在哪里。然后判断文件不存在的话就建立新文件,存在的话就用 Sha校验码去校验文件,这样就可以实现续传。
    现在知道要下载什么了,那么到哪里下载呢?这就要寻找有谁提供上传了,这里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;
   uploadED downloadED:上传和下载了多少,服务器据此来做流量分析;
   left:下载主机还要下载多少个字节;
   event:表示状态,告诉服务器你是准备开始下载,还是停止,还是下载完成了。
    服务器会做什么呢?服务器中有个track 程序来管理这些请求,得到这一串代码后就会用 info_hash 来查找列表,找到就可以下载,没有找到则失败。接着它会反连(NatCheck)下载主机的 IP 和 Port这样就可以知道是内网用户还是公网用户(如果你是内网用户,它是连不通的,因为它会连到你的服务器上,你的服务器当然没有这个端口),然后服务器返回现在正在下载这个文件的所有公网用户的IP和port。
d8:intervali1800e5eersld2:ip14:xxx.xxx.xx.xxx7eerid20:00180531904b7e3abdd7
4orti6881eeee (bencoding编码)
 
interval 1800 是告诉 BT 隔多少秒来查询一次;最后如果你是公网用户它会把你提交的 IP 和 Port 放到info_hash 对应的列表中,这样其它人就可以找到你进行下载。
    得到这些 peer IP后,BT就可以找到对应的IP下载了,BT会到所有的peer去寻找自己要下载的东西,不是一定要到seed下载。BT每找到一个peer就和其建立一个Socket来下载,所以下载的人越多,速度就越快。
   上面说到服务器只会返回公网的ip的,那内网用户怎么可以做Seed呢,这是因为BT是一个主动连接的软件。下面是一个仿真流程:
1 内网用户开始做 seed
2 服务器收到请求,由于是第一个所以也没有peer返回
3 公网用户提交请求,由于seed是内网用户所以也没有peer返回,等待下载,但服务器会把它的IP放到列表中
4 内网经过 interval 时间间隔后,再向服务器放出请求,得到上面的公网IP
5 得到公网IP后,内网马上进行连接
6 公网用户建立连接,数据开始传输 (注意现在是公网用户做服务器,内网用户做客户端,是不是有点怪)
7 其它内网用户去上面公网用户下载数据
    所以,内网用户做 seed 一定要有公网用户的参与,否则其它内网用户无法下载。如果全部是内网用户,那么所有连接都不会成立,当然这是比较极端的情况。
    以上可见,内网用户不能和内网用户连接,其它用户无法从服务器查到你,所以无法主动连接你,你只能每隔一定的时间从服务器找到公网用户一个个进行连接。

字号: | 推荐给好友

 

评分:0

我来说两句

seccode