QUOTE
以文本方式查看主题- ZDNet China论坛 (http://forums.zdnet.com.cn/cgi-bin/leobbs.cgi)-- Microsoft Server (http://forums.zdnet.com.cn/cgi-bin/forums.cgi?forum=1)--- WinRoute FireWall下BT下载深入分析和解决办法 (http://forums.zdnet.com.cn/cgi-bin/forums.cgi?forum=1&topic=5224)---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:26pmBitTorrent下载讨论 作者紫川枫 2004年6月22日开始接触Kerio Winroute Firewall也是因为BT下载的原因,由于是内网用户,白天下载的速度最多不会超过10K,与我最初的期望相去甚远,终于到了无法忍耐的地步,也就有了对BitTorrent下载深入研究的兴趣。首先说说我的网络拓扑,512K ADSL拨号Modem(电信所说的512K其实与我们理解的不一样,512K=512Kbps=512K bits/s=64K bytes/s,也即个人用户所能独享的最大下载带宽只有64K/s),代理服务器Windows 2000 Advanced Server+SP4,使用Kerio Winroute FireWall 6.0代理上网,没有安装第三方防火墙和杀毒软件。局域网内BT下载客户机为Win98。如果你是外网用户,那么BT下载没有任何问题,基本上不需要做任何的配置就能达到理想的下载效果。怎样区别内网和外网,论坛上有很多类似的帖子,在这里我就不罗嗦了。很多帖子都提到通过端口映射来提速,个人认为完全没有必要,对于内网用户来说是个误导。这是根据BitTorrent协议使用Sniffer分析数据包得出来的结论。BT原理与其他的P2P软件相比,BT有个独特的地方,它存在一个中间的WEB服务器,就是我们在发布时所填写的announce,该服务器提供了发布的统一管理。BT 打开一个 torrent文件后,先要你选择文件保存哪里。然后判断该文件不存在的话就建立新文件,存在的话就用 Sha1 校验码去校验文件---错误的就是还没下载的,这样就可以实现续传了。现在知道要下载什么了,到哪里下载呢?这就要寻找有谁提供上传了,BT是通过WEB服务器来实现的,首先BT会通过分析 torrent 来得到发布网址,从而建立与服务端的连接。外网环境下BT客户端与WEB服务器建立TCP连接的过程 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:40pm图1 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:41pmSource Address 61.194.98.92 ADSL拨号软件从ISP处获得的外网地址Destiation Address 222.141.64.184 WEB服务器地址Source Port 2198Destiation Port 8000我们关注的是封装在TCP帧中的HTTP协议部分:GET /announce?info_hash=%FE%237eND%ED%3B%08%0A%118TH%03%BE%FD%86%E5%D2&peer_id=exbc%005%E1%F3Q%5EQM%B9%FD%5D%0FJ%33C%7B%BD&port=16351&natmapped=1&localip=61.149.98.92&uploaded=68468736&downloaded=52133888&left=411632144&compact=1&no_peer_id=1&event=started HTTP/1.0Host: btfans.3322.org:8000btfans.3322.org:8000是发布服务器的地址info_hash 是torrent文件中的 info 部分的Sha校验码,WEB通过它在发布列表找到对应的纪录peer_id 是自身的标识,它是12个0和当前时间+全球的唯一标识码(GUID)的Sha校验的前八位,共20位port 你提供上传的 port,亦即常说的监控端口,这里是16531IP 你的ip地址,没有的话服务器会自己找到,由于是在外网环境,所以IP为ISP提供的地址61.149.98.92(问题的关键就在这里,如果你是内网用户,那么BitTorrent客户端在此填入的地址即为你的内部分配地址,比如10.10.10.x,这个地址当然是不可路由的,下面我会对内网环境下TCP建立过程作相应的比较)uploadED downloadED 你上传和下载了多少,服务器可以用它来做流量分析 left 你还要下载多少个字节 event 状态,告诉服务器你是准备开始下载,还是停止,还是下载完成了 以上这个操作默认 5 分钟做一次,或由服务器设定服务器中有个一个 track 程序来管理这些请求,得到这一串代码后就会用 info_hash 来查找列表,找到你就可以下载。接着它会反连(NatCheck)你的 IP 和 Port来判断你是内网用户还是公网用户(象10.10.10.x这样的地址,它是连不通的,这就是我说的为什么内网用户做不做端口映射其实无所谓)。接下来服务器返回现在正在下载这个文件的所有公网用户的IP和port---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:43pm图2 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:45pm从上图可以看出服务端返回了一个公网用户的IP和Port列表HTTP: 6: d10:done peersi34e8:intervali1800e13:num completedi287e9:num peersi59e5:peersld2:ip14:218.184.78.2317:peer id20:exbcHTTP: porti6881eed2:ip14:218.81.227.1217:peer id20:exbcHTTP: 7: 4:porti15949eed2:ip13:61.64.155.1647:peer id20:exbcHTTP: 8: ? 4:porti10502eed2:ip14:219.197.64.2327:peer id20:exbc ┿ ?HTTP: ??:porti19856eed2:ip12:61.62.11.1557:peer id20:exbc 蘸?HTTP: ?S_4:porti21213eed2:ip13:210.68.150.147:peer id20:exbcHTTP: :@?:porti14373eed2:ip14:218.197.203.367:peer id20:exbcHTTP: '?\%_4:porti13425eed2:ip11:219.95.7.177:peer id20:exbcHTTP: >-O+d4:porti14673eed2:ip12:81.156.58.177:peer id20:exbcHTTP: ?_ ?:porti15498eed2:ip14:218.79.175.1637:peer id20:exbcHTTP: +t4:porti25868eed2:ip13:218.23.104.467:peer id20:exbc ?札HTTP: ?__K??:porti26102eed2:ip14:222.83.221.2547:peer id20:exbcHTTP: {???4:porti17104eed2:ip14:218.81.227.1217:peer id20:exbcHTTP: 9: 4:porti15949eed2:ip12:218.80.9.2467:peer id20:exbcHTTP: ?4:porti11458eed2:ip13:220.173.6.2407:peer id20:exbcHTTP: U o4:porti9711eed2:ip15:219.148.178.2147:peer id20:exbc 镥HTTP: _?g4:porti13128eed2:ip13:138.88.221.197:peer id20:exbcHTTP: ?g?:porti15492eed2:ip11:219.95.7.177:peer id20:exbcHTTP: _?:porti19753eed2:ip12:61.150.43.307:peer id20:exbcHTTP:象d10:done peersi34e8:intervali1800e13:num completedi287e9:num peersi59e5:peersld2:ip14:218.184.78.2317:peer id20:exbc这里Tracker的回应信息以一种简单高效可扩展的格式(Bencoding,B编码格式)传送。B编码的规则如下:字符串表示为前缀十进制的字符串长度加冒号再跟原字符串。 如4:spam就相当于'spam'。 整型数据的表示是前面加'i'后面加'e'中间是十进制数,如i3e就相当于3,i-3e就是-3。整型数据没有长度限制。i-0e无效,所有以'i0'开头的除了代表0的i0e,其它都无效。 列表编码为一个'l'开头,后面跟它所包含的项目(已经被编码过)最后加一个'e',比如 l4:spam4:eggse 就等于 ['spam', 'eggs'] 。 字典编码为一个'd'开头,后面是关键值(key)及其对应值轮流出现,最后加一个'e'。 如:d3:cow3:moo4:spam4:eggse 相当于 {'cow': 'moo', 'spam': 'eggs'} d4:spaml1:a1:bee 相当于 {'spam': ['a', 'b']} 关键值必须是处理过的字符串(用原始字符串编码的,而不是数字字母混合编码的)。interval 1800 是告诉 BT 隔多少秒来查询一次seed和peer这里是 30 分钟,如果你是公网用户它会把你提交的 IP 和 Port 放到info_hash 对应的列表中,这样其它人就可以找到你。 同样我们可以注意到,公网用户的监听Port都是随机选择生成的,换句话来说,监听端口只是为了方便别人找到你。对于内网用户来说,即便你在网关上做了监听端口的映射,但是由于在与Tracer通讯的数据包中填入的是你的私有地址,Tracer就不会把你的IP和Port放入列表。因此你只能主动发起对列表中公网用户的连接,而没有远程端能找到你。内网环境下客户端与服务端的TCP通信前面说过,内网环境下,客户端与WEB服务器通信过程唯一不同的地方就在于填入的IP地址是本身的私有地址---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:47pm图3 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:47pmGET /announce?info_hash=%FE%237eND%ED%3B%08%0A%118TH%03%BE%FD%86%E5%D2&peer_id=exbc%005%C8%8DqnvF%BFj%E4%12P%9E%D1%FC&port=15600&natmapped=1&localip=10.10.10.8&uploaded=299663360&downloaded=188547600&left=275317264&compact=1&no_peer_id=1&event=startedHost: btfans.3322.org:8000综上所述,在内网环境下即便进行了端口映射,也因为Tracer不会把你提交的私有地址和端口放入info_hash列表中而导致没有远程端能主动发起与你监控端口的连接,所以下载的速度不会有根本的改善。除非你能强制客户端程序把你共享上网的IP提交给Tracer服务器作为你的绑定地址。比特精灵就正好有此项功能,同时它还能提供所有Windows平台UPnP端口映射功能,包括Win98、Me、XP,但是2000并不支持UPNP,弥补这一缺陷的办法是在Windows 2000代理服务器上安装Winroute Firewall。不需要做任何的端口映射,启用它的UpnP即可。---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:49pm图4 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:49pm接下来,在内网客户机安装BitSpirit,官方下载地址http://www.17yy.com/bs/安装好以后会生成一个检测UpnP设备的程序,按提示一步步往下走即可,它会自动查找安装在代理服务器的WinRoute FireWall。---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:50pm图5 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:51pm查找成功后会生成提示 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:52pm图6 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:53pm最关键的一步:选项->个人设置->高级,在“强制指定IP”一栏前打勾,填入代理服务器拨号上网后ISP分配的公网地址---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:55pm图7 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:55pm这样设置就行了,让我们来做一下验证,查看BitSpirit的网络状态日志:2004-06-22 20:06:11; 正在检查Torrent文件...;2004-06-22 20:06:11; 从Tracker服务器获取种子信息 ...;2004-06-2220:06:11;正在连接服务器:http://btbtbt.vicp.net:8000/announce?info_...&event=started;这样一来,Tracer就把你当成了公网用户,并把你的IP和Port放入hash_info列表当中,让其它的BT下载也能找到你,既有本地连接,又有远程端发起的主动连接,从而把内网下载速度提高到极限。如图,平均下来也有60多K的下载速度,这已经是512K ADSL所能达到的极限下载速度了。---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:56pm图8 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/22 10:57pm通过以上分析,希望你能对BitTorrent下载能有更深的认识,而不是在端口映射上做文章,那样治标不治本。让我们开始愉快的BT之旅吧!如有不妥之处,欢迎讨论! ---------------------------------------------------------------------------------- 作者: 风间子-- 发布时间: 2004/06/23 11:53am好帖子,精华 ---------------------------------------------------------------------------------- 作者: chinadragon-- 发布时间: 2004/06/25 04:07pm怪事了,我用你的方法BT下载速度确实提高了很多,可在用比特精灵下载时所有网页都打不开了 ---------------------------------------------------------------------------------- 作者: 为爱痴狂-- 发布时间: 2004/06/25 08:23pm真的很强呀。谢谢!!! ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/25 11:39pm网页都打不开?我这里没问题,开网页和BT下载两不误。BT下载抢线程的能力很强,由于你的IP地址被放入了hash_info列表中,因此会有大量的连接接入,你试着在高级选项里取消Connection Limit,应该没问题的。 ---------------------------------------------------------------------------------- 作者: step-- 发布时间: 2004/06/26 06:43pm确实不错,很少看到有人这么细致的分析问题解决问题了,赞一个先。---------------------------------------------------------------------------------- 作者: tteagle-- 发布时间: 2004/06/28 08:53am写的很详细,可惜我不太懂:)不过我用5.1.10版的kwf,没经过任何的特殊设置,也没有开启up-np,客户端我用bitcomet,速度很正常,我看过到过几百k ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/28 09:34am请问一下,你的带宽是多少? ---------------------------------------------------------------------------------- 作者: admins-- 发布时间: 2004/06/28 09:51am我用KWF6.0是为了防止内网用户使用P2P软件,你是在研究怎样用,呵呵!其实使用KWF的透明代理(网页认证)根本不需要这么多的设置,直接就可以用。 ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/28 11:33amKWF的透明代理?能不能说清楚一点。 ---------------------------------------------------------------------------------- 作者: 火月-- 发布时间: 2004/06/28 05:42pm也就是说KWF不用作任何设置,BT速度就会很好不过BT因为大量占用线程,从而导致了转换效率的下降如果先知Connection Limit,那么使用BT的用户在进行下载的时候很有可能其他的网络活动都无法正常工作,因为会很快到达Limit数目如果不限制的话,会对整个网络的影响较大,如果客户端数目少的话还可以,多一些的话最好禁止BT ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/28 05:56pm没错,其实只要在KWF上启用UPnP,用BitSpirit下载速度很快,现在我白天都不敢开BT下载。有一点我需要要指出,如果你的带宽本身很大,那么通过本地发起的大量连接也能达到比较快的速度,但是你试试用我的方法,想必速度会更快。毕竟主动连接和远程连接对速度的影响是很大的。关于这方面的帖子很多,我就不罗嗦了。还有楼上提到的开“透明代理”,我觉得不可行,应为KWF在做NAT的时候,只会修改源IP地址和源端口号,而不会深入TCP封装的包内部修改hash_info数据,这一点你可以验证一下。 ---------------------------------------------------------------------------------- 作者: tteagle-- 发布时间: 2004/06/28 06:48pm
QUOTE
下面引用由紫川枫在 2004/06/28 09:34am 发表的内容:请问一下,你的带宽是多少?
我用10M的. ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/28 07:01pm10M的带宽,那不用进行任何设置下载速度也很快了,毕竟出口有那么大,没有可比性。我512K ADSL的MOdem,如果不做设置,白天下载的速度最快也就10K。现在的速度平均下来也能有60K,已经很快了的。 ---------------------------------------------------------------------------------- 作者: zerohv-- 发布时间: 2004/06/29 01:49pm请问在内网IP的BT如何工作???我是内网IP一样可以上传下载,有时速度也挺快。我的网关不支持UPNP ---------------------------------------------------------------------------------- 作者: 紫川枫-- 发布时间: 2004/06/29 01:59pm内网只能主动连接hash_info返回的公网ip和端口。 ---------------------------------------------------------------------------------- 作者: huig-- 发布时间: 2004/06/29 02:42pm我的2M/KWF6启用UPnP,无其他设置,速度100左右不敢再快,因为还要照顾公司其他人上网。 ---------------------------------------------------------------------------------- 作者: kuang0516-- 发布时间: 2004/07/13 10:17pm看了各位的帖子,真是受益非浅;我公司电脑比较多,出口却不是很大;领导在网速慢的时候只知道找我这个管理员的麻烦,却不知公司有那么几个君子,他们使用BT下载的哪个爽呀...我现在就是要精研BT下载,以求能够对其进行限制;公司出口设备是一台二手的CISCO4006,所有的配置方法都是靠自己上网学的,现在看了各位的帖子,对BT的了解又加深了一层,但还是没法实现我的意图;我现在想在4006上通过配置访问控制列表限制或禁用BT下载,各位有何良策呀。 ---------------------------------------------------------------------------------- 作者: 风间子-- 发布时间: 2004/07/14 01:20pm封锁端口 ---------------------------------------------------------------------------------- 作者: qhx301-- 发布时间: 2004/09/25 12:36pm[这个贴子最后由qhx301在 2004/09/25 03:13pm 第 1 次编辑]谢谢你啊,真是帮了大忙了。真是精华啊!!!可是老大啊,我那个比特精灵找不到UPNP设备,怎么回事啊?我是WINME的系统。谢谢-------------------------------------------------------------------------------- 版本: LeoBBS X Build040601
页:
[1]