hghua 发表于 2011-2-20 14:42:38

Dlink 2760 固件均分带宽的设想,请固件高手指点

本帖最后由 hghua 于 2011-2-20 06:46 编辑

刚买了DB120双USB的猫,刷了“【DB120/rg100AA】零配置脱机版(基于DSL-2760_1.04源码编译)(2011.1.14) ”,一次成功。

其实我对脱机下载没兴趣,就是想实现:adsl拨号+无线路由+带宽平均共享(使用esfq算法,下叙)。
带宽平均共享就是:比如有两台电脑同时上网,如果其中一台电脑a只占用少量带宽,则另一台电脑b可以占用剩余的大部分带宽,但此时不应该影响电脑a的使用(比如a网游不能卡)。做到这一点的方法就是两台电脑的数据包分别进行排队,轮流进行数据发送,当电脑a的队列变空时,可以连续发送电脑b的数据包,这样带宽不浪费。此时若a又有数据包需要发送了,则即使b的队列很长,也要a、b交替发送。由于发送是轮流进行的,若两台电脑都在疯狂下载,则每台最多能使用一半带宽,即使一台使用p2p,另一台是普通的下载。

而linux默认的带宽分配算法pfifo的做法是:a、b使用同一个队列,如果b在队列中已经排了很多数据包,这时a来排队就要等b的数据都发出去后才能轮到,这样就很不公平了。

linux自带另外一个算法sfq,是对每个连接进行带宽平均分配的,这样如果b进行p2p下载产生了大量连接,a只有1个连接的话,a这个连接就要等很久才能得到一次发送数据的机会,对每台电脑来说就不公平。

由于linux自带算法的局限性,有人就开发了增强型的sfq算法,可以做到每台电脑均分带宽,就是我前面所想实现的那样。而且这个均分是自动的,不用指定总带宽,不用指定每台电脑分配多少带宽,同时上网的电脑多,就每台少分点,电脑少就多分点。一台电脑未使用到平均带宽的部分可以被其它电脑共享。

附带说一下对classful流量控制算法的想法:其基本思想就是对数据包进行优先级标记,只有高优先级的数据发送出去以后才能接着发送低优先级的数据。这个想法很好,但问题在于不同人或不同时候对优先的定义不一样,有时可能想在线视频优先,有时想游戏优先。所以这种算法不应该被设置在路由器中,否则就要频繁地去修改路由器配置了。路由器只要实现带宽均分,每台电脑有责任对自己的数据包发送进行规划,不同电脑可以有不同的规划。

dlink固件的好处是支持adsl拨号,及在网上有源代码:http://ftp.dlink.ru/pub/ADSL/GPL_source_code/DSL-2760U_BRU_D/
目前这个固件没有集成linux的tc流量控制命令。其自带的qos设置功能使用复杂,而且没有实现带宽均分的功能。因此想在源代码中添加tc及esfq(参考:http://fatooh.org/esfq-2.6/)算法补丁进行带宽分配。

现在想问问有没有高手会对源代码增加tc等功能?
我想只要用到共享上网的人都会需要这个功能的。

asdkeio 发表于 2011-2-20 22:35:05

纯支持,完全不懂

ggxx2008 发表于 2011-2-20 22:39:32

不懂。我现在只想把我辛辛苦苦脱机2个星期下载的文件拿出来。{{gangzai26{{
页: [1]
查看完整版本: Dlink 2760 固件均分带宽的设想,请固件高手指点