返回信息流目前拿到一个project,需要在windows上实现类似360的网络限速功能
不知道有没有什么推荐的算法,或者方法
利用公司买的netfilter sdk可以捕捉到每个session的本地端口和远程ip端口,还可以阻塞连接(on/off)
目前利用token bucket算法(如果速度超过带宽限制,平均速度降到限速之下才可以开启连接),做了一个初步的实现
遇到的问题是,在很快的网络条件下(6MB/s),即使每秒开启0.1s,也有600kB/s的速度,需要关闭连接好几秒,速度曲线不平滑,而且不能限制峰值速度,只能限制平均速度
如果增加限速线程的控制频率,会导致资源占用过多
如果对每个需要限速的程序开启单独的线程,实现和维护都有难度
实验室的同学建议利用tcp congestion window/tcp receive window限速
但不知利用什么途径控制这两个窗口?
另外,不知大家一般利用什么方法计算连接的round trip delay time
用360的限速功能感觉既快又准确,如果有知道他们才用的算法和方法的同学,希望能提示一下
我个人感觉360用的应该不是tcp window,因为不论tcp还是udp都可以限速
当然方法不限于netfilter sdk,用VS里面自带的lib也可以,只要是windows下的方法就可以
这是一条镜像帖。来源:北邮人论坛 / communications / #22030同步于 2013/1/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖
[问题]有没有人了解类似360网络限速功能是怎么实现的
hehej
2013/1/8镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
假设1K Bytes的包长,要限速到1M Bbps,平均每秒只有100多个包,包的间隔只有不到10ms。
要平滑限制带宽,就需要这个开关也达到毫秒级的开闭。如果开闭太慢,开了没等关几个往返tcp的速度就上去了,关了还没得开连丢几个包,tcp的速度就没了。
不管什么办法,还要注意各层之间的联动,不能在某一层关闭的时候上层直接出错释放。
恩恩,这个我有一阵也挺感兴趣的。。感觉360能限制到每个应用程序上面,应该是在传输层做了什么处理,具体的看有没有达人解释一下。。一般企业级的带宽管理和带宽限制软件应该差不多都是类似的思路。