本帖最后由 泰克教育 于 2022-8-15 11:34 编辑
一、前言
今天给大家带来的技术是QOS,要学好QOS,首先得明白什么是QoS?
随着网络的发展,网络环境中的流量类型也日渐增多,用户对网络的要求也越来越高,那么我们如何在有限的网络资源下,让用户体验到更好的网络服务呢?这时候Qos应运而生。
Qos(Quality of Service),顾名思义,就是提供服务保证质量。那对于网络来说QoS又是起什么作用?通常来说QoS就是对网络中带宽、延时、丢包率、抖动有一个控制。让我们网络中的数据以一个低延时,低丢包率,低抖动的形式在网络中传输,当然QoS的功能也不局限于此,站在高层面来看,只要是在提高我们的网络通信质量,就是在做QoS。
在传统网络下存在哪些问题使得我们需要QoS呢?如图
传统设备在转发报文的时候会依照先到先发的原则对报文执行统一的转发,那么当入口的速率远远高于出口的速率时,我的流量将得不到及时转发,导致流量拥塞,这使得一些关键性业务的数据(语音、视频)在传输的时候得不到保证,进而使用户的体验变差。
上面我们讲到了报文在转发的时候,如果链路有拥塞,报文在传输的过程中会出现问题,那么影响端到端通信质量的因素有哪些呢?这里我们简单介绍几个:
带宽:在一个单位时间,链路所能传输的数据量就是指带宽。那我们的链路带宽是如何计算的呢,如下图,在一条链路上最大是100Mbps的带宽,最小只有256Kbps的带宽可以使用,假设在链路传输的过程中,user-1端报文以100Mbps速率进入网络,当报文到达B路由器后,由于B的出口带宽较低,无法将user-1的数据及时的转发出去,此时流量就会因为得不到转发而产生拥塞,进而导致业务不正常。所以传输的过程中最大的带宽是我们链路的最小带宽。
网络时延:一份报文从发送端到接收端所需要的时间。时延通常包括传输时延、串行化时延、处理时延、队列时延,那么他们具体是如何计算的呢?我们来逐一解释:首先什么是传输时延,传输时延指的是链路一端设备发出的第一份报文的第一个数据位到达链路另外一端接收方所需要的时间,影响传输时延的因素一般有传输介质、传输距离;第二个串行化时延,它的计算是发送方发出报文的第一个比特到报文的最后一个比特所需要的时间,影响到串行化时延的因素有链路带宽和报文的大小;第三个处理时延,这个就比较好理解,处理时延的计算是报文从路由器入接口到出接口队列所需要的时间,影响到处理时延的因素主要是路由器的性能;最后一个队列时延,他指的是报文在队列中等待处理的时间,影响到队列时延的因素有报文的大小,队列中报文的大小及数量,以及队列调度机制。以上就是我们所说的网络时延。
丢包率:丢包率指的是在一次报文的发送过程中,丢的包所占全部报文的比重,我们称之为丢包率,通过定义我们可以知道丢包率是影响我们通信质量的一个很重要的因素,那么丢包(packet loss)会在哪些过程中产生呢?以下我们简单说几个,第一、在处理过程中,路由器在收到报文cpu处理的时候,因为处理器较忙,导致数据产生丢包;第二、在排队过程中,由于队列占满产生丢包;第三、在传输过程中,由于链路故障等问题产生丢包。通常极少的丢包对于网络通信的影响是很小的,但是大量的丢包会影响到我们正常的通信,以下我们以语音传输举例,如图:
语音数据在传输的过程中产生大量的丢包,导致通信的不可靠。 ​
抖动:在网络传输的过程中,由于端到端的时延不一样,导致报文不能在相同的时间间隔下到达接收端,这就叫抖动。通常来说时延越小,抖动也就越小。那么抖动会带来什么问题呢?
如图:在通信的过程中因为抖动使得语句的意思发生了改变,这在网络中是无法容忍的,所以传输过程中我们要保证一个较低的网络抖动。 ​
以上我们介绍了影响端到端通信质量的因素,或者说我们Qos所需要解决的问题。那么QoS如何解决这些问题呢? ​
二、QoS模型 ​
网络通信都是由各种流量组成,其中有语音流量、视频流量、上网流量、数据流量,而每一种流量他们所希望得到的服务又不相同,比如说,语音流量它在传输的过程中希望能保证尽量少的延迟和抖动,下载业务希望保证较高的带宽,但是这些流量所希望得到的保证又取决于网络QoS所提供的能力,根据所实现的服务不同,我们将QoS分为三个模型:
Best-Effort Services Model Best-Effort是一个比较单一的服务模型,也是一个比较简单的服务模型,设备根据先进先出的原则转发报文,不会事先做处理,也不会考虑所经过的网络情况,在Best-Effort服务模型下尽最大的可能性来发送报文,但对时延、抖动、丢包率等性能不提供任何保证,但他适用于绝大多数的应用,所以Best-Effort模型是网络缺省的服务模型,通过FIFO队列实现。
Integrated Services Model IntServ服务模型,他是一个比较复杂的服务模型,在这种服务模型下,需要用到RSVP协议(资源预留协议),该模型在工作的时候,节点在发送报文前,首先通过RSVP信令构建一条专属于这个流的资源预留路径,从而确保网络能够数据流的需求。但是在IntServ服务模型下的每一台设备都需要启用RSVP,并且周期性的交互状态信息,这使得我们的网络开销比较大,当前Internet中有成千上万条网络流,因此IntServ在大型网络中得不到广泛的应用
Differentiated Services Model DiffSer服务模型也叫区分服务模型,它的工作原理是将我们网络中的数据流进行分类、标记,对不同的类进行不同的处理,使其拥有不同的优先级转发、时延、丢包率、抖动等服务。 ​
DiffSer服务模型的分类和标记是在DS边界节点路由器上实现的,边界节点路由器通过MQC(Modular QoS Command-Line Interface)中的traffic classfail基于多种条件灵活的对报文进行分类,然后对不同类型的报文打上不同的标记,而节点外其他的路由器只需要简单的识别报文上所携带的标记,对其进行资源分配和流量管理即可,这样减少了网络中路由器的开销,也满足了不同的流需要不同的服务的需求。同是根据以上的特点,说明了DiffSer是一个基于流的QoS服务模型。 ​
DiffSer服务模型充分的利用了IP网络的灵活性,扩展性强等特点,将复杂的服务质量保证通过数据报文自身携带的信息转换为单跳行为,从而减少了DS节点的工作。使得该模型是目前应用最广的一种服务模型。 ​
三、QoS工作机制
分类/标记 ​ ​上面我们介绍了QoS的一些基本的概念,接下来我们就说一下QoS的工作机制,如图,这是Qos的一个理论框架,本章节我们先讲一下这里面的分类与标记。
为什么要对报文进行分类呢?在网络中要想实现差分服务就必须进行流量的分类,对进入DiffSer域的报文按照一定的分类原则(如通过ACL定义的规则)分类,对分类完成的流量打上标记,然后对不同标记的流量提供不同的服务。 ​
报文分类和标记依靠的就是QoS优先级,我们的设备在收到报文后,根据报文所携带的QoS优先级与设备内部优先级(设备内部区分报文服务等级的优先级)之间的转换,然后设备根据内部优先级提供有差别的QoS服务质量。在规划网络的时候用户可以在不同的网络使用不同的QoS优先级,比如说在valn使用802.1p,在ip网络中使用DSCP,在MPLS网络中我们去使用EXP。接下来我们详细讲一下QoS的优先级。 ​
在目前的Internet网络中为了针对不同的业务流量提供有差别的QoS服务质量,我们通过报文中的一些字段来标记一份业务流量,让设备依靠这些标记对流量提供差别服务,QoS中标记分为二层标记和三层标记。
二层标记 ​ Vlan帧中tag字段中的802.1P优先级当我们需要对二层做标记的时候,由于缺省的二层报文是没有地方可以携带标记的,如图:
​所以二层设备通常通过交换vlan帧,根据IEEE 802.1Q定义的Vlan帧中tag字段中的PRI字段(也可以称之为CoS)来表示QoS优先级,如图:
根据802.1Q头部中包含3比特长的PRI字段。我们定义了8种业务优先级CoS,按照优先级从高到低顺序取值为7、6、5、4、3、2、1和0。
MPlS报文中的EXP
MPLS报文跟IP报文相比他多了一个标签字段,这个标签字段的大小是四个字节大,如图:
对于MPLS我们通常将exp域作为MPLS的cos域,用来进行区分流量和支持MPLS网络的区分服务。EXP字段也是3bit大小,表示8个传输优先级,按照优先级从高到低顺序取值为7、6、5、4、3、2、1和0。
三层标记 ​ 三层标记通常所说的就是ipv4报文中的ToS域,ToS域有8个比特长,在QoS里面对于Tos域有两种应用方式:
IP-Precedence
跟据RFC791中的定义,我们将IPV4报文中的TOS字段的三个比特划为Precedence字段,用来表示IP报文的优先级,如图:
IPP将0~2比特定义成了优先级字段,也就是说IPP定义了8个报文传输优先级,分别是0、1、2、3、4、5、6、7,6和7是优先级最高的,路由协议之间通信通常使用这两个优先级,0~5是用户应用所使用的。以下每个优先级的使用: - 111 - Network Control
- 110 - Internetwork Control
- 101 - CRITIC/ECP
- 100 - Flash Override
- 011 – Flash
- 010 - Immediate
- 001 - Priority
- 000 - Routine
​在IPP中除了Preference字段,还定义了三个比特,分别是D、T、R。D是delay代表延时,0代表正常延时,1代表着低延时;T是Throughput代表吞吐量,0代表者是正常的吞吐量,1代表着高吞吐量;R是reliability代表可靠性的,0表示正常可靠性,1代表高可能性,使用的时候三个比特,只能将一个比特置位,如果都为零,那就说明是普通服务。
根据上面我们讲到IP-Precedence字段最多只能将IP报文分为8类,而在实际网络部署时,这些优先级是远远不够的,不能对数据流进行精细化的控制。所以RFC1349对我们的TOS域又进行了重新的定义,将第六个比特定义为C比特(Monetary Cost传输开销),之后,RFC2474将IPv4报文中的ToS域里面的0~5比特定义为DSCP,称之为DS字段,如图
在DS字段中0~5位用作区DSCP,同时将0~3位用作CSCP(相同CSCP的视为一类DSCP),6~7位我们将其保留。DS节点会根据DSCP去选择相对应的PHB,什么是PHB呢?DS节点对通过某一条链路的具有相同DSCP值的报文所执行的转发行为我们称之为PHB。目前我们通过DSCP值定义了四类PHB:
- CS PHB:CSCP(类选择代码点),他的范围是0~2总共三个比特,表示为“XXX000”X可以为0也可以为1,也就是说CSCP将DSCP的64个优先级分为了7类(没有000,全零为default PHB),分别是CS1(001)、CS2(010)、CS3(011)、CS4(100)、CS5(101)、CS6(110)、CS7(111),CS6和CS7最优,通常在网间、网内协议控制报文中使用,因为这些报文无法接收的话会引起协议中断,CS1和CS5一般是用户去应用。
- Default PHB:DSCP值为000000,每个DS节点都需要一个默认PHB,这个PHB就是现在网络中我们多见到的尽力而为(BE)转发行为,通常一份数据流,在没有可识别的DSCP时,节点就应该假设该流属于default PHB,执行转发行为。
- AF PHB:AF(AssuredForwarding)确保转发,由RFC2597定义,假设在实际传输的时候,如果流量超过了我们预定的信息速率特征描述,那么超出预定速率特征描述的流量和在预定范围内的流量不应该得到同样的发送概率,在这个情况下,一个节点流量可以超过预定特征描述,但是属于同一CSCP的包不应该被重新排序,不论这个包是否在预定特征描述内,那么问题来了,属于同一CSCP的数据流,可能存在多种业务流量,他们不重要的可能的在特征描述内,重要的在外边,反而得不到高的转发速率。AF PHB就为该问题提供了一种解决办法,AF定义了四个保证转发类,每一个DS节点为每一个保证转发类提供一定的转发资源,保证转发类分别是001、010、011、100,同时又将第3比特和第4特定义为丢弃位,这样在同一类数据中有根据丢弃位又可以分为三类01、10、11,这样使得流量能够得到较好的转发或者处理。所以AF的DSCP值为:
第一个十进制位越高转发可能性越高; 第二个十进制位越高丢弃可能性越高; ​ 快速转发PHB,由RFC2598定义,固定值为101110,EFPHB适用于承载语音的流量,因为语音要求低延迟,低抖动,低丢包率,是仅次于协议报文的最重要的报文。
以上就是分类与标记的内容。下期将给大家带来流量管理,拥塞避免,拥塞管理等内容。
|