基于Router OS的网络QOS流量管理实现
[摘要] RouterOSMikrotik公司的软路由系统,可以将普通电脑转变成功能强大的专业级路由器,QOS是一种解决网络延迟和阻塞的控制机制,本文探讨了基于RouterOS路由平台的QOS实现,重点探讨了NAT模式下RouterOS软路由内数据流标记的原理和方法,以及在此基础上的HTB流量优先级控制,最终达到尽可能的提高网络中各种应用效果,减少网络拥塞,最大化利用带宽。
[关键词] RouterOSQOSHTB流量控制
随着我国互联网飞速发展,各种基于网络的应用越来越丰富,网络带宽增长速度总是滞后于应用的需求,网络带宽不可避免成为很多单位网络应用的瓶颈。如何管理网络来降低网络拥塞,最大化利用带宽成了必须要解决的问题,于是QOS应运而生,QOSQuality of Service)意为服务质量。简单说QOS理念不在于限制,而在于优先,网络中虽然应用繁多,但是各种应用对于带宽的需求、响应要求是不同的。QOS的基本思想是把数据分类,根据其类型决定通过的先后,在有限的带宽上尽可能让各种网络应用获得最好的效果。
RouterOS是东欧拉脱维亚Mikrotik公司的软路由产品,从性能和功能上丝毫不逊于中端路由器,RouterOS优点是对很多功能提供开放的设置和脚本编写,让管理员能够对路由器进行一些相当灵活的控制,RouterOS应用效果很依赖管理员的水平,因此也对管理员的技术有一定要求,门槛较高。
典型单位网络结构就是客户机、交换机和路由器组成的,路由器作为公网出口。网络管理员可以通过路由器可以限制任何一台局域网内电脑的公网流量,网络流量管理并非难事,但是事情真的是这么简单么,绝非如此。网络流量管理目标是什么?目标是最终实现最大化带宽利用,让网络上各种应用尽可能获得最好的效果。单纯的限速并不能达到这个目的,不能根据网络应用的特点让带宽各尽所需,相反还会极大的带宽浪费。
据此,合理的、具备QOS理念的流量管理的第一个难点就是对通过路由器的数据进行类型识别,这正是QOS网络流量管理的重点和难点。做不到这一点,后续的基于RouterOSHTB(队列树)优先控制就无从实现。
下面重点探讨RouterOS内的数据流标记和HTB的应用。
1、如何准确的标记(标记为RouterOS标记数据的术语)数据流。
IPV4地址已经枯竭的今天,NAT方式是绝大多数单位的组网访问公网的方式。下图是最简单的网络结构。
1NAT模式下路由器是怎么样工作的?
例如C要访问AC会发送一个数据包到路由器B192.168.88.100 --> 202.119.35.99C的地址为源地址,A的地址为目标地址,路由器收到此数据包后,会把数据包中C的地址替换为自己的公网地址202.119.35.1,然后再把这个地址发送到公网上,这样这个包才会包含合法的源地址,这样被访问的路由器返回信息时才能正确的到路由器B,于此同时,在这个替换转发的工程中,路由器会记录下映射信息,例如:
源地址 192.168.88.100:1260目标地址 202.119.35.99:80
路由器会动态的维护这样的列表,每一个从内网访问公网连接,路由器都会记录下来映射关系。然后修改源地址和端口,转发,公网返回的数据包,路由器再根据目标端口,查映射表,做逆向还原,最终把公网数据包发给内网机器,完成内网机器的公网访问。
2RouterOSMangle中该如何标记各种类型数据
MangleRouterOS中标记数据的地方,RouterOS的数据是基于特征来标记的。
IP->FireWall->Connection记录就是形如映射表一样的记录,是NAT功能所必须的,如果没有该表的支持,进出的数据就无法被正确转发,NAT功能就无法使用。Connection tracking只存在两个链表中,一个是output,另一个就是prerouting,而在prerouting中的tracking是在dst-nat之前,也就是说返回的数据包还没有被逆向替换回内网地址,内网发送的数据包的源地址也没有被修改。而NAT下,发起主动连接的只能是内网地址,所以在Connection中,源地址都是内网地址,目标地址皆为公网地址。
所以prerouting的数据包只有两类,一类是从A发送到B的,一类是从C发送到B的,前者即为下行数据,后者即为上行数据,我们的目标就是在prerouting中标记出各类型数据,为HTB中数据的Shaper(整形)和priority(优先)做准备。
1数据在Preroutingforwardpostrouting中数据包的状态
链表    进入接口    发出接口    Local进入    Pulic进入
Prerouting    确定    不确定    私有地址->公网IP    公网IP ->路由器公网IP
Forward    确定    确定    私有地址->公网IP    公网IP ->私有地址
Postrouting    不确定    确定    路由器私有IP->私有IP    私有IP ->公网IP
Prerouting中如何标记浏览网页数据流?
所谓标记,就是出需要标记数据的特征。
网页使用的是Web服务,是TCP协议的80端口,这个80端口在提供服务的公网服务器上是固定的,本地局域网内的端口为临时的随机端口。每一次Web访问都是一个ConnectionConnection是双向的,代表来回的数据,所以标记Web的连接,从下载和上传两个方向都可以。单独把浏览网页所产生的数据标记出来可采用以下特征即可。
2
协议类型    端口    链表    接口
tcp    src-ports:80    prerouting    in-interface:PublicL
tcp    dst-ports:80    prerouting    in-interface:Local
tcp    src-ports:80    prerouting   
tcp    dst-ports:80    prerouting   
这四种特征都可以正确的标记到web服务(12适用在多接口精确标记)。
如何标记客户机192.168.88.100Https数据流?(192.168.88.1为网关即路由器地址)
    首先根据表1,确定在数据流在相应链表中的接口和IP地址状态,以Prerouting为例,根据表一,在prerouting中,只有进入接口是确定的,从loacl接口进入的地址状态为:私有地址->公网IP,这是上行方向的数据,从Public接口进入的地址状态为:公网IP ->路由器公网IP,这是下行方向的数据,从下行数据的IP地址状态可以看出,在Prerouting中的数据并无客户机192.168.88.100的信息,这是因为在Prerouting中的数据还没有经过NAT转换,所以在这个例子中,是无法通过下行方向来标记我们所需要的数据,只能通过上行方向来标记。
Https全称Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,使用TCP协议和443端口。
最终标记特征为:
方向    协议类型    端口    链表    IP address
上行    tcp    dst-ports:443    prerouting    Scr-address:192.168.88.100
一旦正确的标记了连接,属于这个连接的双向数据包就可以很容易的标记到了。唯一需要注意的是,被标记的connection代表了双向的数据流向,所以在标记数据包(Packets)的时候,要通过指定 in-interface来区别上下行流量,in-interfacePublic时,标记的数据包为下行数据,in-interfacelocal的时,标记的数据包为上行数据。
所有通过路由器的数据均可在Preroutingforwardpostrouting三个链表中标记,具体参照上例Prerouting中标记方法,不再详述。
按照实际网络的需求,通过先标记connection,后标记属于该react router 6connection的数据包的方法,逐一把通过路由器的各种重要类型标记出来。一般来说,有几种数据类型是必须标记出来的,ICMP Internet控制报文协议,优先级最高,占用带宽很低;HttpHttps服务,优先级较高,占用带宽较高;P2P下载流量,优先级最低,占用带宽最高;其余流量优先级高于P2P即可。
其他特殊的应用,优先级根据需要自行设定。
2、在标记的基础上根据数据流类型进行优先控制
HTB等级令牌桶允许创建一个等级队列结构,并确定队列之间的关系。RouterOS定义了几个全局的虚拟接口,global-inglobal-outglobal-totalglobal-in代表所有进入RouterOS的数据,global-out代表所有离开RouterOS的数据,global-total为所有经过RouterOS的数据。
在本文的应用中,Prerouting中标记的数据是被包含在global-in中的,所以在Htb队列树中,global-in为所有标记的数据流的父队列,并且根据实际带宽,设定父队列的Max-limit属性,一般来说,Max-limit设置为实际最大带宽的90%为佳。为了对上行和下行带宽同时进行有效的流量管理,需要添加上行和下行两个父队列。
根据之前标记的分类,分别把上下行标记的数据依次添加到上下行父队列中,并设定相应的优先级和Limit-atMax-limit属性即可。RouterOS即会根据设定的参数,控制各类数据通过路由器的优先级达到以QOS理念来管理数据流量的效果。实际效果以一个下载应用a和一个Web页访问b为例,在A满速下载情况下,B可以流畅的访问网站而不受A的影响。另外在实
际应用中,特别是在上下行速度不对称的环境中,如宽带上网、不对称光纤,上行带宽比较紧张,应对不重要的应用上行带宽设定比较苛刻的Max-limit值,以确保良好的控制效果。
3、本文在实际应用中的不足
数据类型的识别是QOS能够有效实施的重要前提,在各种网络软件和技术不断发展的今天,通过路由器的数据类型繁多,基于RouterOS路由器系统的标记方法来识别数据类型有其局限型,并非所有的数据通过协议类型、端口,IP地址、进出接口等特征就能轻易识别出来的。比如有些下载软件经常采用TCP协议的80端口来传输数据,这样就无法采用该特征来标记Web流量了,导致QOS流量管理对这类应用控制无效,相应的解决办法可以采用RouterOS的连接速率特征来标记或其他专用流控软件来识别。
参考文献:
[1](美)史蒂文斯(W.Richard Stevens)《TCP/IP详解 1:协议》机械工业出版社 2007.8.1.