QoS,ToS和DiffServ

来源:互联网 发布:淘宝快递破损怎么处理 编辑:程序博客网 时间:2024/04/30 04:24
0. 摘要QoS是目前网络技术中一个比较热的话题,本文就讨论实现QoS的一些底层的技术。1. 概述QoS(Quality of Service,服务质量)是用来描述网络的服务质量和数据优先权的。在互连网早期,各种数据都是平等的,网络带宽属于先来先得的自由抢占资源。随着互联网上数据类型的增加,对数据优先级需求也开始提出,比如对音频数据的实时性就要比视频数据高;而且付费用户希望自己数据的发送优先权也要高于免费用户。这些种种需求,促使了QoS的进一步研究和发展。2. ToS (RFC 1349)要实现QoS,首先就要对数据进行分类,而且分类标志就要在IP头的字段中,方便路由设备识别。对于IPv4包来说,有一个字段是用于描述数据包服务类型的,就是ToS(Type of Service)字段,8位,在RFC791中,该字段几乎还没有很明确的功能描述,可能是太超前了吧,当时还想不到会有扫描用。真正开始描述ToS字段的是RFC1349。ToS的取值不是任意的,在RFC1349中定义如下: 76543210 00010000 -- minimize delay 0x10 00001000 -- maximize throughput 0x08 00000100 -- maximize reliability 0x04 00000010 -- minimize monetary cost 0x02 00000000 -- normal service 0x00minimize delay:最小延迟,如telnet,FTP等maximize throughput:最大吞吐量,如FTP的数据通道等maximize reliability:最大可靠性,如SNMP等minimize monetary cost:最小费用,如NNTP等上面这4位最多只能有一位为1,最后一位必须为0。前3位用来表示数据优先级,但在一般网络实现中很少用,也一般为0,而在NetScreen防火墙中,使用ToS的前3位作为数据优先权的表示,所以可以设置0~7共8个优先级。RFC1349定义的ToS功能相对较弱,不过不少路由协议如OSPF都可以根据ToS进行路由决策。在IPv6(RFC2460)中,也有一个8位字段Traffic Class,用于区分数据优先级,但功能定义不遵守RFC1349。2. DiffServ (RFC2474, 2475)在RFC2474中重新定义了IPv4的TOS字段,并更名为DS字段,大小还是8位,废除了TFC1349中的定义。RFC2474中的定义: 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+---+ | DSCP | CU | +---+---+---+---+---+---+---+---+---+ DSCP: differentiated services codepoint CU: currently unused只有低6位有效,是一个大小不超过63的数。这个定义同时支持IPv4(ToS字段)和IPv6(Traffic Class字段)。在RFC2475中,详细描述了差别服务的体系结构。3. QoS有了数据级别,剩下的就是路由设备如何根据数据级别来转发数据包了,算法有简单的也有复杂的,理论用的最多的就是排队论了,俺一个大学同学后来出国读博士的题目就是和QoS有关的,他的论文俺也没看过,不过数学太深的俺也看不懂了。在linux内核中,有了多种QoS分配算法,在net/sched目录下,算法包括:CBQ、HTB、CSZ、ATM、RED、SFQ、TEQL、TBF、GRED等。在用户空间,可通过iproute2来进行控制,详细见Advance Routing Howto.在netfilter中,也有关于TOS目标用于ToS字段的修改等处理,可以配合iproute2实现数据分级控制。4. 总结QoS真正的难点还是在于数据的分发,但用Linux现有的open source的东西,也能做成一个相当不错的带QoS功能的路由器了。 原文地址 http://yfydz.cublog.cn
原创粉丝点击