POPPUR爱换

标题: 带宽汇集加速下载,另类实现 [打印本页]

作者: toor    时间: 2009-12-16 19:07
标题: 带宽汇集加速下载,另类实现
本帖最后由 toor 于 2010-1-4 00:04 编辑

普通的带宽叠加 是交给route来完成的,结构如下:

本地网络(LAN)-------支持多WAN负载均衡的router---------WAN 1----------isp
                                                                        ---------WAN 2----------isp

其中的 支持多WAN负载均衡的router 可以是专用设备,也可以是安装有Linux/*BSD的 PC机器,
包括 在windows里面用虚拟机运行routeros(linux),其实都是同一个方法.

我又想出一种方法并以试验成功,这种方法比较另类,是通过应用程序来实现带宽汇集,适用范围很小,效果嘛还不错,不需要格外的软件.
只需要 设置你的路由表,使得对应每个wan都有一条default 路由且其"距离值"(METRIC)相同.
大概就是这样:
route table
0/0 gateway_wan1 lan1 10
0/0 gateway_wan2 lan2 10

下面写一个实际的例子:
我这里的 ADSL,特点是,不支持绑定多重连接到同一个 IP 地址。但是可以同一个用户名密码拨通多个连接,且不限速(或能提供比一个连接更大的速度)。限速是针对帐号在pppoe接入上做的,一个帐号限速为2Mb.
结构:
本机------ADSL modem------电话线--------ISP PPPoe server
可以看成是这样:
本机----------------pppoe server
适用于windows 7/xp/2003/vista ,如果你用的是 Linux/*BSD的话 很早 内核就有负载均衡的东东了(Linux我记得是2003,*BSD晚一些,当时还有为好心人翻译了 Linux高级路由和流量控制 一文)
Windows默认情况下限制同样设备只能同时拨通一个pppoe链接,所以要修改注册表(我在这上面走了好大一段弯路最后用cfos的拨号搞定才看到注册表修改...更郁闷的是我这个方法早已有人在2005年实现并写了专门的dll来过滤每个链接来bind所有的出口ip,等会还回提到)
修改注册表里
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{4D36E972-E325-11CE-BFC1-08002bE10318}0004
下的WanEndpoints的数值,默认为1,修改为10,就可以同时连接10个PPPOE拨号,以此类推.
然后重新启动,建立二个pppoe连接,修改链接的属性:


然后拨通2个链接,记住每个链接的名称,ip,然后打开cmd
先看看接口
route PRINT
然后添加每个接口的default路由
route ADD 0.0.0.0 MASK 0.0.0.0 %1 METRIC 10
route ADD 0.0.0.0 MASK 0.0.0.0 %1 METRIC 10
%1指这个接口的网关ip(连接属性里有显示)

#python 代码
#coding:utf-8
import sys,os,re
ipconfig=os.popen('ipconfig').read()
x=0
n=2
while (x<n):
    gw=re.findall('默认网关.*?:s*(.*)',ipconfig)[x].strip()
    os.system('"route -4 ADD 0.0.0.0 MASK 0.0.0.0 %s METRIC 10"' %gw)
    print gw
    x+=1
# end   



之后在用
route PRINT
检查下,然后开启你的迅雷(http),utorrent,emule就像平常那样开始下载吧.

适用情况:
单物理线路可以多拨号的,isp限速是针对帐号的.比如上面我这种情况,或者是用小区宽带直接网线入户的但需要pppoe拨号来认证的
概括为 本机有多个出口的,且每个出口都有公网地址,至于多个出口不是同一个isp的(比如一条线电信,一条线网通),由于不做NAT,而且
ISP的router一般不会开启源地址检查,所以应该也适用.

后记,通过搜索,发现早在2005年即有人实现,但可惜是此人网站挂了,不过可以用google缓存来看
关键字:AnyCon, Cobind  作者 Yonsm (2005)
作者: watermore    时间: 2009-12-16 19:34
请继续
作者: once375ml    时间: 2009-12-16 19:35
本帖最后由 once375ml 于 2009-12-16 19:36 编辑

你这种方式如果用在BT ed2k网络我包你死的很快,HTTP应该能起到加速的作用

在很多P2P网络中每个用户都有一个ID,且和每次使用的IP绑定,一旦对方检测到你同一ID对应多IP,基本上你就在Ban名单中了,不行你找个还没有死透的VeryCD最热门的源试一下就知道,我保证你能链接上的不超过10个源,而且这10个没有ban掉你的也不是什么好客户端。



对于BT,在这种网络情况下,可以双机(或一实体机,连isp1,一虚拟机,连isp2)运行双Utorrent,然后通过真实Lan或者虚拟Lan(一实体机,一虚拟机)下,Lan互传来实现加速。貌似1.83还是1.84后的都能自动检测到lan client

对于电驴,只有少数几个MOD能利用utorrent的原理实现Lan互传
作者: toor    时间: 2009-12-16 19:53
你这种方式如果用在BT ed2k网络我包你死的很快,HTTP应该能起到加速的作用

在很多P2P网络中每个用户都有 ...
once375ml 发表于 2009-12-16 19:35

这位同学貌似是熟手啊,我没说完就知道什么意思了,不过据我实测:
HTTP需要多线程,比如迅雷,可以有很好的速度.
BT 我用的是 uTorrent 1.85 只开一个 速度也很好.
ed2k 用的是 Emule 这个我没有实测速度,只是用  netstat -nao -p tcp  看了下,发现它bind了所有的出口ip  现在写贴时候Emule下载速度是10K+ 不过以前不用这种方法的时候速度也很慢(我找的资源都很冷门,热门的一般都用BT)

下面贴张写帖子时候的UT图:
   
作者: yizaren    时间: 2009-12-16 19:56
来学习的!看样子自己内功还不深啊!
作者: caoyuxin    时间: 2009-12-16 20:03
用电驴不行,迅雷没问题立马可以拉到满速度~
作者: sonicxz    时间: 2009-12-16 20:50
本帖最后由 sonicxz 于 2009-12-16 21:49 编辑

技术文章,帮定

照着用了下,开启了多WAN,拨号成功,获得2个IP
过了一会再拨号,拨了N次都是同一IP导致冲突无法上网,怎么拨2次都是同一IP,诡异了,只有第一次成功的

也就无法修改路由表了

还是用ROS算了= =比较傻瓜型
作者: watermore    时间: 2009-12-16 20:57
这个原理本区去年也曾经有人贴过,也的确是cobind的方案。
但这个是楼主原创,乐于分享,加精。
作者: sinjiapo    时间: 2009-12-16 21:08
一直有人在论坛讨论这多重拨号的事,有人说可以,有人说电信服务给死了带宽。感觉有点迷惑,我自己弄总是不行。有没有人弄好的,来说说吧。
作者: toor    时间: 2009-12-16 21:14
一直有人在论坛讨论这多重拨号的事,有人说可以,有人说电信服务给死了带宽。感觉有点迷惑,我自己弄总是不 ...
sinjiapo 发表于 2009-12-16 21:08

你可以把你的情况说出来让大家来看看
是否可以一线多拨 每个地方都不一样的,需要你自己测试
作者: qdshido    时间: 2009-12-16 21:15
学习了。楼主的想法不错。
作者: toor    时间: 2009-12-16 21:43
回复 8# watermore
多谢版主了
我已经e-mail cobind的作者看他能否给我e-mail一份cobind试用,另据我实测,迅雷(下载http资源),utorrent,emule 这三个软件默认启动时就会bind本机所有的出口ip,不需要cobind.而浏览器(IE,firefox)只 bind一个ip
作者: sonicxz    时间: 2009-12-16 21:50
回复  watermore
多谢版主了
我已经e-mail cobind的作者看他能否给我e-mail一份cobind试用,另据我实测, ...
toor 发表于 2009-12-16 21:43


P2P软件

一般就是这样的
作者: liling99    时间: 2009-12-16 23:26
这样下pt会不会被封
作者: 2565372    时间: 2009-12-16 23:57
我也想知道pt会不好被封,看来很多这种文章还是没看懂下pt会被ban不会?这是我最关心的,O(∩_∩)O谢谢发此类技术文章
作者: toor    时间: 2009-12-17 00:20
本帖最后由 toor 于 2009-12-17 16:28 编辑
这样下pt会不会被封
liling99 发表于 2009-12-16 23:26

我也想知道pt会不好被封,看来很多这种文章还是没看懂下pt会被ban不会?这是我最关心的,O(∩_∩)O谢谢发此 ...
2565372 发表于 2009-12-16 23:57


会不会封要看你所在的PT站的规则,某站规则:
多IP(我可以从不同的电脑登录/下载吗?)

是的,目前Tracker服务器支持单个用户从任意个数的IP地址同时访问/下载。
然而,对于单种是有限制的。对于每个种子,最多允许3个做种的连接,最多只允许1个下载的连接(这意味着,对于某个种子你一次只能在一个地方下载)。


稳妥起见,PT时不要用此种方法了
作者: liling99    时间: 2009-12-17 00:56
不对啊,看规则应该是一个种子只能有一个ip下载,会被封的。
作者: rooney    时间: 2009-12-17 01:17
学习贴,网络知识还是不够丰富~
作者: sonicxz    时间: 2009-12-17 08:42
不对啊,看规则应该是一个种子只能有一个ip下载,会被封的。
liling99 发表于 2009-12-17 00:56


CHD PT站 9WAN 9IP挂过1小时多,还好没封
作者: robinwar    时间: 2009-12-17 09:53
记号下 闲了试试
作者: myfaint009    时间: 2009-12-17 11:27
记号下 学习
作者: runnie    时间: 2009-12-17 11:53
谁有CHD PT站的邀请?
作者: sinjiapo    时间: 2009-12-17 16:40
我在番禺,可以用路由以桥接方式,进行两次拨号,用两台电脑。但是带宽还是2M,并没有变成两个单独的2M。
作者: lanqiao    时间: 2009-12-17 17:04
留个记号,,有机会学习下
作者: machete    时间: 2009-12-17 21:51
有的运营商是会在物理线路上限速的,这样这个办法就无效了。有的时候还不支持多次拨号。而且还有很多给了主从账号的能二次拨号的,双账号带宽是平分的。以上这些楼主的方法都是无效的。
作者: Edison    时间: 2009-12-17 22:06
这个东西对于一般的玩家其实意义不大,不过如果你有办法在当地搜索到 n 个 wifi 上网,这就有趣了,蹭网蹭出几个 MB/s :p
作者: myfaint009    时间: 2009-12-18 09:02
这样设置 太麻烦了 每次拨号 就要重新输入网关地址
作者: StrikerFX    时间: 2009-12-19 16:30
多线负载后只要tracker只记录单个ip就不会有事,这个hdc以前讨论过的,我9 wan挂pt(chd、hdc、hdr、gg、pts)都用了几个月了也不见有事,如果不是因为电费问题的话就会一直用下去了
作者: kean    时间: 2009-12-19 17:45
进来学习的,发现看不懂
作者: toor    时间: 2009-12-19 19:48
多线负载后只要tracker只记录单个ip就不会有事,这个hdc以前讨论过的,我9 wan挂pt(chd、hdc、hdr、gg、pt ...
StrikerFX 发表于 2009-12-19 16:30

我 2wan挂了几天的CHD,暂时没有发现问题
作者: littlemouse    时间: 2009-12-19 20:39
学习下。
等下试验试验。
作者: 2565372    时间: 2009-12-19 21:59
今天下午和楼主两人,在他手把手的指导下·········没能成功说,网通物理上把带宽给限制了,不过也学到很多东西,嘿嘿,在这里,对楼主表示感谢
作者: toor    时间: 2009-12-19 22:24
今天下午和楼主两人,在他手把手的指导下·········没能成功说,网通物理上把带宽给限制了,不过也 ...
2565372 发表于 2009-12-19 21:59

可惜楼上这位同学的isp限制了一线多拨(错误号码:815) 白折腾了
作者: toor    时间: 2009-12-19 22:37
这样设置 太麻烦了 每次拨号 就要重新输入网关地址
myfaint009 发表于 2009-12-18 09:02

恩,是很麻烦,我是做了个批处理,要手动输入ip和接口,不过cobind作者写了个程序来自动绑定,代码如下,貌似用的win32 api

VOID SetRoute()
{
     UINT i, j;
     DWORD dwSize = 0;
     GetIpAddrTable(NULL, &dwSize, TRUE);
     PMIB_IPADDRTABLE p = (PMIB_IPADDRTABLE) new BYTE[dwSize];
     if (p)
     {
         if (GetIpAddrTable(p, &dwSize, TRUE) == NO_ERROR)
         {
             MIB_IPFORWARDROW ifEntry = { 0 };
             ifEntry.dwForwardMetric1 = 1;
             ifEntry.dwForwardProto = 3;
             ifEntry.dwForwardType = 3;
             ifEntry.dwForwardAge = -1;
             DWORD dwAddr[MAX_RAS];
             UINT uNumAddr = GetRasAddress(dwAddr);
             for (i = 0; i < p->dwNumEntries; i++)
             {
                 for (j = 0; j < uNumAddr; j++)
                 {
                     if (dwAddr[j] == p->table.dwAddr)
                     {
                         ifEntry.dwForwardIfIndex = p->table.dwIndex;
                         ifEntry.dwForwardNextHop = p->table.dwAddr;

                         CreateIpForwardEntry(&ifEntry);
                         break;
                     }
                 }
             }
         }
         delete[] p;
     }
}
作者: lucifersun    时间: 2009-12-20 19:37
你这种方式如果用在BT ed2k网络我包你死的很快,HTTP应该能起到加速的作用

在很多P2P网络中每个用户都有 ...
once375ml 发表于 2009-12-16 19:35


P2P软件也有办法,要编写规则表,指定BT的tracker服务器和eMule服务器的通讯必须从WAN1走,这样和服务器之间的通讯就只有一个固定的IP,而和peer的通讯就可以带宽叠加了
作者: kama9999    时间: 2009-12-21 11:02
为正式顶楼主!
作者: bosstang    时间: 2009-12-21 16:39
好文,顶之
作者: yukyyuky    时间: 2009-12-23 21:33

作者: yukyyuky    时间: 2009-12-23 21:45

作者: yukyyuky    时间: 2009-12-23 22:00

作者: 700    时间: 2009-12-27 19:57
谢谢发此类技术文章




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4