ipfw规则( 六 )



weight weight
指定的大小用来作匹配这个列队的流程 。这个大小必须是一个范围1..100, 和默认值1.

以下参数可以对双通道,和多列队进行配置 。

buckets hash-table-size
指定哈西表大小,是为了储存不同的列队 。由net.inet.ip.dummynet.hash_size默认为64,允许范围是16到1024 。

mask mask-specifier
dummynet可使你建立单一流程的列队 。一个可识别的流程,是由ip地址的演化而成的,端口和协议类型和管道设置里一样 。带有同样标示的包在演化后,进到同样的列队 。可用的掩码定义为以下几种:

dst-ip mask, src-ip mask, dst-port mask, src-port mask, proto
mask or all, 后面的这个表示所有有意义的所有领域的所有字节 。当用在管道的配置里时,每一个流程被指派一个和管道速度一样的速度 。当用在列队配置的时候,每一个流程被指派一个和列队大小一样的大小,并且所有流程按他们大小比例分享在同样的管道的带宽

noerror
当一个包从管道或列队中丢失,这个错误将报给呼叫路由得知,同样的方法,当一个列队装置填满后也会发生 。设置这个选项,报告数据包被成功接收,这个使需要一些试验的设备,在你想模拟丢失或堵塞在源端的路由器地方 。

plr packet-loss-rate
包的丢失机率,packet-loss-rate是一个0-1之间的浮点数,0就是没丢失,1是完全丢失,丢失机率内在表现为31bits.
queue {slots | sizeKbytes}
列队大小,用slots or KBytes表示 。默认值为50 slots,这个是典型的局域网设备的Queue大小 。注意,那个是适用比较慢的连接,你应该保持你的queue大小短一些,或者你的通信会受到由queue延迟的影响,例如:最大值为50的局域网的数据包(1500 bytes),这就意味着600Kbit或queue20s在一个30Kbit/s的管道上 。你如果从接口处得到一个带有太大MTU的数据包,就会导致连接失败,例如:回环接口有一个16kb的包 。

red | gred w_q/min_th/max_th/max_p
使用RED (自动搜索)运算法则 。w_q and max_p是0-1之间的浮点数(不包括0),当min_th and max_th是整数的时候指定了queue管理的极限(极限使用字节来计算,如果queue使用字节来定义的话,用slots是另外一种情况了) 。网络也支持RED的变量(gred).这些系统控制变量常用于控制RED的行为:

net.inet.ip.dummynet.red_lookup_depth
定义当连接空闲下来,计算queue平均值的精度(默认为256,必须大于0)

net.inet.ip.dummynet.red_avg_pkt_size
定义期望的数据包的平均大小(默认为512,必须大于0) 。

net.inet.ip.dummynet.red_max_pkt_size
定义期望的数据包的最大值,仅当queue极限用字节表示的时候使用(默认为1500,必须 大于0)

CHECKLIST
当计划规则时候的一些注意事项:
1:记住你的过滤包的走向,一个出,一个进 。更多的连接需要包在两个方向进行
2:记住测试的时候非常小心 。这是一个好建议当接近控制台的时候 。如果你不能使用控制台,用一个自动生成的源文件/usr/share/examples/ipfw/change_rules.sh.
3:不要忘记回环接口(127.0.0.1)

FINE POINTS
1:有一个环境使破碎的文件完全丢弃掉 。如果TCp头包含一个小于20字节的包,则丢弃,UDP头必须包含一个完整的8个字节的包,否则丢弃,ICMP包则丢弃那些ICMP头不包含4个字节的包,充分的指定 ICMP类型,编码,和检查总数 。这些包完全被记录下来,例如:``pullup failed""因为在包里没有足够好的数据去产生有用的日志文件 。

2:其它类型的包则无条件的丢弃,一个带碎片TCP包 。这是一个有效的包,但是只有一个有用,试图绕过防火墙 。当日志被激活,这些包被丢弃就像被规则-1丢弃一样 。

推荐阅读