★内网BT提速★BT错误提示★
作者:酷狐狸
-- 发布时间:2005-1-30 19:33:00
-- ★内网BT提速★BT错误提示★
BT运行原理分析
由于内网用户无法提供一个对外的端口,所以无法做服务器.但用BT的时候,发现它可以让内网用户做 Send。
比起其它的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 来得到一面一串网址
btfans.3322.org:6969/announc...2&event=started
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
软件下载和使用方法见后面帖子介绍l
但如果你的服务器是 win2000,并用自带的网络共享功能,那么有更简单的方法
在你共享的连接上按右键 ->属性
到公用设定板按下面的设定按钮,系统会弹出设置窗口
到服务板,按新增
名称 随便填
端口 6881
勾选TCP
私人网络中的计算机名称或ip 填你的本机ip
然后保存,再按同样的方法增加 6882-6889端口的映像,把它们通通指向你的计算机
(因为我的系统是繁体系统,所以以上的名称不一定和你的相同)
不明白的可以看看WIn2000帮助系统中有关 NAT的说明
以XP自带的防火墙为例,其它防火墙得设置与之类似.
1. 在控制面板中打开网络链接,然后打开本地链接的属性
2. 在本地连接_属性中选择高级,点击高级中的设置
3 高级设置中有一项是服务,点击其中的添加
4 打开服务设置后,在第一项服务描述中任意起一个名字
第二项中添上你的机器名或者IP
第三和第四项分别是外部于内部端口号,这两项要求填写的一样,
可以从6881-- 6890之间选择一个.最后把TCP选上,点击确定
5 每个BT占用一个,我们按照上面的设置,设置十个(6881--6890),据说BT只支持十个
用了端口映射后,只有你一个人爽,其它人还是老样子(包括服务器) ,不过你可以搞一台BT下载专用机
现在享受以下速度的快感吧
什么样的端口映射有效??
如果你的电脑的ip是公网的ip的话,BT的速度一般是很快的。
如果你的电脑是通过内部局域网上网的,也就是说你的ip是:
10.x.x.x
172.16.x.x至172.31.x.x
192.168.x.x
以上这些都是内网ip地址
那么要通过端口映像来提高速度。
但是要注意,一定要找到你上网的出口ip地址,也就是在网络上你的电脑的ip地址,这个地址是和你的机器上设置的地址不一样,现在很多论坛都提供这个功能,可以显示你自己的ip地址。
然后你要确定,这个ip地址所在的服务器是不是你能够控制的,因为端口映射软件必须安装在这台电脑上。(如何使用端口影射软件后面有介绍)
举列说明 1
学校某寝室有3台电脑,其中一台电脑A的ip地址是 218.196.116.xxx,很明显这个是公网的ip地址,其它两台电脑的ip地址是:192.168.0.2 和 192.168.0.3 。
这是一个由双网卡进行上网的结构,在服务器(192.168.0.1即218.196.116.xxx)上安装端口映射软件,为192.168.0.2和 192.168.0.3这两台内网的机器分配映射端口之后,它们用BT下载的话,速度就会有改善 ^_^
举列说明 2
某公司使用网通的宽带上网,公司有20台电脑,其中一台作为服务器,设置为自动获取ip地址,自动获取DNS服务器,通过双网卡,使用交换机连接,使得公司的其它19台电脑能上网,当然,这些电脑的ip设置也是192.168.0.2--192.168.0.254 。
在公司的服务器上使用 ipconfig/all 命令发现该服务器的ip地址为172开头的,说明公司的服务器也在内网里面,同时发现公司上网时的出口ip地址为211.xxx.xxx.xxx开头的公网ip地址。
在这种情况下,做端口映射就麻烦了。如果把端口映射软件安装在公司的服务器上,是完全没有效果的。因为真正的服务器在网通的机房里,如果你能说服网通机房管理员给你做个映射,那么这个映射只能对公司的服务器(192.168.0.1即172.16.xxx.xxx)有效。对于公司内部的的机子,相当于双层局域网,我个人还不知道如何做 ^_^