热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Linux流量控制(二)--过滤器&分类

文章标题:Linux流量控制(二)--过滤器&分类。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

    使用过滤器分类

    每块网卡都有一个出口根排队规则,缺省情况下是pfifo_fast 排队规则。每个排队规则都指定一个句柄,句柄有两个部分,一个主号码和一个次号码。习惯上把根队列规定称为“1:”,等价于“1:0”。类的主号码必须与它们父辈的主号码一致。

    数据包是在根队列规定处入队和出队的,而内核只同根打交道。一个数据包可能是按照下面这个链状流程进行分类的:1: -> 1:1 -> 12: -> 12:2,数据包现在应该处于12:2 下属的某个队列规定中的某个队列中。在这个例子中,树的每个节点都附带着一个过滤器,用来选择下一步进入哪个分支。然而,这样也是允许的:1: -> 12:2,也就是说,根所附带的一个过滤器要求把数据包直接交给12:2。

    当内核决定把一个数据包发给网卡的时候,根队列规定1:会得到一个出队请求,然后把它传给1:1,然后依次传给10:、11:和12:,然后试图从它们中进行 dequeue()操作。也就是说,内核需要遍历整颗树,因为只有12:2 中才有这个数据包。换句话说,类及其兄弟仅仅与其“父队列规定”进行交谈,而不会与网卡进行交谈。只有根排队规则才能由内核进行出队操作。而且,任何类的出队操作都不会比它们的父类更快。

    为了决定用哪个类处理数据包,必须调用所谓的“分类器链” 进行选择。这个链中包含了这个分类队列规定所需的所有过滤器。

    Linux下可用的分类器有fw、u32、route等。fw根据防火墙如何对这个数据包做标记进行判断;u32根据数据包中的各个字段进行判断;route根据数据如何被路由进行判断。rsvp、rsvp6根据数据包的RSVP 情况进行判断,它只能用于自己的网络,互联网并不遵守RSVP;tcindex用于DSMARK排队规则。

    分类器一般都能接受几个参数,如下:

    protocol

    分类器所接受的协议。一般来说只会接受IP 数据。必要参数。

    parent

    分类器附带在哪个句柄上。句柄必须是一个已经存在的类。必要参数。

    prio

    分类器的优先权值。优先权值低的优先。

    handle

    对于不同过滤器,它的意义不同。

    fw

    fw分类器要依靠防火墙把需要引导的封包标识起来。所以必须先设定好防火墙,使用 ipchains/iptables给数据包打标签。

    例如:iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 1

    它的意思是把发往目的端口为53(DNS)的UDP数据包都打上标记1。

    tc filter add dev eth0 parent 10: protocol ip prio 1 handle 1 fw classid 10:1

    它的意思是打上标记为1的数据包优先级为1,并放入10:1队列中。

    u32

    u32分类器是当前很先进的过滤器。全部基于哈希表实现,所以当有很多过滤器的时候仍然能够保持健壮。u32 过滤器最简单的形式就是一系列记录,每条记录包含两个部分:一个选择器和一个动作。

    u32 选择器包含了能够对当前通过的数据包进行匹配的特征定义。它其实只是定义了IP 包头中某些位的匹配而已,但这种看似简单的方法却非常有效。

    例如:# tc filter add dev eth0 protocol ip parent 1:0 pref 10 u32 \

    match u32 00100000 00ff0000 at 0 flowid 1:10

    它的意思是匹配那些TOS 字段带有‘最小延迟’属性的数据包。

    普通选择器定义了要对数据包进行匹配的特征、掩码和偏移量。使用普通选择器,可以匹配IP(或者上层协议)头部的任意一个bit。一般选择器的语法是:

    match [ u32 | u16 | u8 ] PATTERN MASK [ at OFFSET | nexthdr+OFFSET]

    利用u32、u16 或u8 三个关键字中的一个来指明特征的bit 数。然后PATTERN和MASK 应该按照它定义的长度紧挨着写。OFFSET 参数是开始进行比较的偏移量(以字节计)。如果给出了“nexthdr+”关键字,偏移量就移到上层协议头部开始的位置。

    例如:# tc filter add dev eth0 parent 10: prio 3 u32 \

    match ip protocol 6 0xff \

    match u8 0x10 0xff at nexthdr+13 \

    flowid 10:1

    它的意思是匹配带有ACK 位的TCP 数据包,并将其放入10:1的队列中。

    route

    路由分类器基于路由表的路由结果进行过滤。当一个数据包穿越一个类,并到达一个标有“route”的过滤器的时候,它就会按照路由表内的信息进行分裂。

    例如:# ip route add 192.168.10.0/24 via 192.168.10.1 dev eth1 realm 10

    tc filter add dev eth1 parent 1:0 protocol ip prio 100 route to 10 classid 1:10

    目标网络192.168.10.0 定义为realm 10,凡是去往192.168.10.0 子网的数据包匹配到类1:10。

    原文地址 http://hi.baidu.com/esailzz/blog/item/ce24e53478dc283d5bb5f538.html


推荐阅读
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
author-avatar
手机用户2502938443
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有