浅析网络流量控制系统在开源路由器上的实现(3)

  3.2流量模块

    通过捕包模块获取数据包及其信息。通过IP地址,统计出各IP以及各IP网段的网络数据流量,并统计出总的上行和下行流量。通过端口,统计出TCP/UDP源和目的端口的流量。通过应用层payload字段的字符串特征符来统计相应网络应用的流量。当总体流量超过一定的限定值,而引起网络拥塞时,根据具体情况,选择以上流量统计中的一种作为依据,动态地调用TC,对网络流量进行控制。

  3.3流量控制模块

    流量控制的基本步骤为:(1)针对网卡建立一个队列;(2)取出数据包源/目的地址、源/目的端口、协议类型五元组信息;(3)通过DPI对到达的数据包进行识别;(4)根据用户要求,使用netfilter/iptables匹配功能,为匹配到的数据包打上mark值;(5)在这个建立的队列上再建立分类;(6)设置过滤器为每一分类建立选路,使数据流进人相应队列,并分配带宽;(7)数据包调度。

    以下是对BT流量控制〔12]进行设置的一个例子。

    iptables设置:

    iptables一A PREROUTING一t mangle一p tcp一m BT一J一set一mark 1 //'"} BT连接标记为“1"

    TC设置:

    tc qdisc add dev eth0 handle 1:0 root htb//创建HTB的根队列策略

    tc class add dev eth0 parent 1:0 classid 1:1 htb rate95000kbps cell 95000kbps //设置主类带宽

    tc class add dev eth0 parent 1:1 classid 1:2 htb ratelOkbps ceil 80kbps prio 3 //建立一个BT子类,设置带宽在l0k到80k之间

    tc qdisc add dev eth0 parent 1:2 handle 1:2:1 pfifo//对BT、子类建立FIFO队列策略

    tc filter add dev eth0 parent 1:0 protocol ip prio 100handle 1 fw classid 1:2 //设置过滤器,将标记为“1”的BT包送到1:2这个类中

    采用HTB规则为以太网卡绑定一个主队列,并创建根分类,然后可以选择通过IP地址、端口号或网络应用分出子类,之后结合iptables的mark值进行过滤,数据流进人相应分类的队列。但是为了保证网络用户的基本使用,系统对一些常规的业务直接输出,而不作控制。流量控制流程图如图2所示。

  4 DD一wRT的流量控制功能定制

    定制步骤如下:

    1)下载固件解压和压缩工具的源代码fimiware_moc}一tools. tar. gz,解压并编译这个工具;

浅析网络流量控制系统在开源路由器上的实现(3)相关推荐