一、QoS
- 服务质量(Quality of Service,QoS)就是指网络通信过程中,保障用户业务在带宽、 时延、抖动和丢包率等方面获得可预期的服务水平。家庭网内部的QoS主要指保证用户实时交互的业务符合用户的要求
二、服务模型
- QoS 服务模型是指一组实现端到端服务质量保证的方式,QoS 服务模型主要有如下3种:
尽力而为服务模型(Best-Effort service)
- 尽力而为服务模型是一个单一的服务模型,也是最简单的服务模型。
- 对尽力而为服务模型,网络尽最大的可能性来发送报文,但对时延、可靠性等性能不提供任何保证。
- 尽力而为服务模型是Linux网络的缺省服务模型,通过先进先出队列来实现
- 它适用于绝大多数网络应用,如HTTP、FTP和 E-Mail等
综合服务模型型(Integrated service)
- 综合服务模型,它可以满足多种QoS需求。
- 该模型使用资源预留协议(RSVP),RSVP 运行在从源端到目的端的每个设备上,可以监视每个流,以防止其消耗资源过多
- 这种体系能够明确区分并保证每一个业务流的服务质量,为网络提供最细粒度化的服务质量区分。
- 但是综合服务模型对设备的要求很高,当网络中的数据流数量很大时,设备的存储和处理能力会遇到很大的压力。
- 综合服务模型可扩展性很差,难以在互联网的核心网络实施。它仅适合在专用网络上实施
区分服务模型(Differentiated service)
- 区分服务模型如下图所示,是IETF工作组为了克服综合服务模型的可扩展性差而在1998年提出的另一个服务模型,目的是制定一个可扩展性相对较强的方法来保证 IP的服务质量
- 在区分服务模型中,根据服务要求对不同业务的数据进行分类,对报文按类进行优先级标记,然后有差别地提供服务
三、OpenWrt的服务模型
- OpenWrt采用区分服务模型来提供QoS。区分服务模型是一个多服务模型,它可以满足不同的QoS需求,例如优先保证通过HTTP上网流量
- 它采用流量分类、流量整形、拥塞管理和拥塞避免机制来进行QoS
-
流量分类:采用一定的规则识别符合某类特征的报文,它是对网络业务进行区分服务 的前提和基础。一般使用 Iptables 来根据端口和报文特征进行分类
-
流量整形:当流量被整形时,其传输速率是受到控制。整形可以大大降低使用的带宽,这样是为了更好的网络效应。它也被用来平滑流量的突发大流量。流量整形发生在出口处
-
调度:通过调度数据包的传输,可以在提高流量的交互性的同时,仍然保证大容量传 输的带宽。重新排序也被称为划分优先顺序,并且只发生在出口处
- 带宽控制用于QoS时,一般用于保障某一类用户的服务质量,在家庭网内部常用于保 障主人的带宽,限制访客的带宽
四、工具
- OpenWrt采用qos-Script来实现QoS,内部使用Iptables和Tc工具来实现QoS
- Iptables工具实现数据报文的分类
- Tc工具来实现配置Linux内核中优先级队列。Tc工具在iproute2代码包中。Tc的一个关键的概念是QDISC。QDISC 是“queueing discipline”的缩写,是指报文的排队规则,这是理解流量控制的基础
报文排队规则
- 当内核需要发送一个数据包到一个接口时,它被排入到配置该接口的队列中。紧接着, 内核试图从队列获得尽可能多的数据包,把它们交由网络适配器驱动程序来处理。一个最 简单的 QDISC 队列是“PFIFO”,它根本没有特别处理,是一个纯粹的先进先出队列。当 网络接口不能瞬间处理完成时,它能存储部分流量
- 类别:一些排队规则可以包含类,这些类又进一步包含了另外的排队规 则——流量可以在任何类内部排队规则。当内核试图取出一个数据包时,就可以来自任 何一个类的分类排队规则。排队规则可以在特定类别的队列中优先处理某些特定类型的 流量
- 过滤器用于数据包分类,以确定哪一类数据包将加入队列中。当流量到达带有子类的 类时,数据包需要进行分类。各种方法都可以这样做,其中一个是过滤器。附着在类中的 所有过滤器被调用,直到其中一个返回一个决定。如果没有判决做出,其他标准可能是可 用的。每一个排队规则都是不同的处理。需要注意,过滤器位于排队规则内部,它们不能 独立存在。详细内容请参考Tc手册
五、配置Qos软件包
qos-scripts软件包
- 在make menuconfig时,选择qos-scripts软件包:“Base system” ==> "qos-scripts"
- 编译后生成的软件包为qos-scripts
sqm-scripts、wshaper软件包
- 在OpenWrt中至少还有其他两个QoS软件包分别为sqm-scripts和wshaper
-
不能同时安装两个QoS软件包,因为它们均使用了Tc和iptables,并且按照不同的标准进行报文分类
六、配置文件(/etc/config/qos)
- QoS的UCI配置文件为/etc/config/qos,如何进行报文分类才能得到好的性能,这取决于应用程序
-
通常有两个处理原则:
- 优先处理小包。例如 TCP-ACKs 和 DNS 等
- 优先处理用户交互的报文。例如 SSH 等协议
- QoS-script的默认配置将域名请求和SSH访问作为优先规则。通常域名请求负载非常小,并且用户在上网时的第一步请求动作,用户通常会等待上网请求页面,因此设置为最 高优先级。SSH也是同样的原因,用户和服务器之间交互,用户等待服务器的响应。这样将对用户非常友好。QoS配置非常复杂,此处不再讲述