论坛风格切换切换到宽版
  • 780阅读
  • 7回复

[问题求助][img]http://linux.chinaunix.net/bbs/images/default/src_jh.gif[/img]也是一个速度匹配模块 [复制链接]

上一主题 下一主题
 
发帖
2025
C币
-235323
威望
401
贡献值
1
银元
-2
铜钱
4701
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
看springwind426.兄发了一个hashspeed,感觉代码.太多了。.
尝试用.较少的代码.写一个类似的模块,NO hash,NO proc。    健康

仅.仅是实现了功能,而且局限于所有所有调用这个模块的IP地址要在一个B段内(当然可以修改.代码实现更大的范围)。          婚庆

原理于hashsp.eed一样的域名
可以对IP段限速,也可以对单个IP,或.是几个.IP,使用--class定义电脑
speed match v0.1 option.s:          婚庆

--pps/bps/Bps   value   Limit by v.alue PacketPerSec..ond/BitsPerSecond/BytesPerSecond.

--ip/sip/dip    adders.s Match ip./src/dst adderss电影

--mask         . netmask Netmask for ip .adderss              乙肝

--class    .     id      class id leng.th(广告)

For limit 192.168.0.0/23 p.e.r C class for 20KBps..

iptables -A FORWARD -m speed --Bp.s 20k --ip 192.168.0.0 --mask 255..255.254.0 --class 24. -j DROP.

or iptables -A FORWARD -m speed --Bps 20k --ip. 192.1.68.0.0 --mask 23 --c.lass 24 -j DROP
复制代码

写的仓促,仅供研究。
http://upload.bbs.csuboy.com/Mon_1004/126_6744_bfa1cad875ad9ed.gif[/img]speed.tar.gz (4.04 KB) 下载次数:175--------------彩票
2008-.01-06 10:56    外汇

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线computerfs.
发帖
2136
C币
5128
威望
390
贡献值
1
银元
-2
铜钱
4676
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
注册时使用了计时器,不错的想法
学习一下

发帖
2037
C币
-235268
威望
387
贡献值
1
银元
0
铜钱
4662
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
看了一下代码,这个简单是由于没有使用可碰撞的 hash 算法,因此 IP 范围受限(16bits)
优点在于降低了编程难度,不必处理插入及查找时的碰撞情况

离线zskj.
发帖
2010
C币
-262954
威望
359
贡献值
1
银元
-4
铜钱
4414
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
有一个地方没有看懂
case IPT_SPEED_PPS:

        if(*count_it++ > info->speed) return true;
复制代码
若这次匹配满足了需求,下一次同样 IP 的数据包到来的时候呢?
根据我的理解,速率匹配是超过了封,不够了放,但是这里我只看到了超过了封,程序是如何实现不够了放的呢?
是不是和 timer 的使用有关?我没有理解这个速率控制的具体实现机制,ShadowStar 兄可否讲解一下

[ 本帖最后由 platinum 于 2008-1-6 12:25 编辑 ]

离线yueyehan.
发帖
2105
C币
-235151
威望
397
贡献值
1
银元
-3
铜钱
4728
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
其实这个模块的原理是匹配超过设定speed的数据包,使用DROP丢弃.

timer的作用是将计数器每隔1秒进行清零.

当数据包的速度达不到设定值时,return false,使之进入下一个规则进行匹配.

离线阿切.
发帖
2001
C币
-132461
威望
350
贡献值
1
银元
-1
铜钱
4409
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
查了些资料,学习了一下 timer 的用法,现在看明白整个代码的实现原理了
这个实现非常简单,但不知道效率如何

离线chinablue.
发帖
2151
C币
-235260
威望
390
贡献值
1
银元
-3
铜钱
4734
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
仅仅是一个功能上的实现。
效率我也没有测试过。

但是不应该比hashspeed低。

离线nxbbs.
发帖
2019
C币
-139325
威望
383
贡献值
1
银元
-4
铜钱
4555
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13
其实我认为一个合理的限速应该是并行+串行的。

即针对单个IP的数据包采用顺序处理,遇到超过限制速度的采取延迟发送的办法。保证数据流的完整性,避免丢包。
针对不同IP的数据包采用并行处理,即单个IP的延迟发送不会影响其它IP的数据包发送。

理论上实现起来并不太难,虽然操作系统采用顺序的包处理方式,但是只要有一个临时存储再发送的hook就可以。

但是在iptables中似乎是不能实现了。

快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个