QOS服务质量(Quality Of Service)

文章目录

  • QOS服务质量(Quality Of Service)
    • 提要
    • QOS服务架构
      • 集成服务模型
      • 区分服务模型
      • Per-Hop Behavior
      • Modular QoS Command-Line
      • 延迟
      • 抖动
      • 丢包
      • 国际公约标准
        • 第一梯队:语音
        • 第二梯队:交互式视频
        • 第三梯队:信令Signaling
        • 第四梯队:关键业务流量(数据流量)
        • 第五梯队:大块数据流量
        • 第六梯队:冲浪流量
    • DS domain
      • 边界节点
      • 中心节点
    • 标记
      • 三层标记
        • IP Precedence(IP 优先级)
        • DSCP(DiffServ Code Point)
      • 二层标记:
    • 队列机制
      • FIFO
      • PQ
      • CQ
      • WFQ
      • CBWFQ
      • LLQ
      • IP RTP Prioritization
      • 总结
    • 随机早期检测
      • RED(早期随机丢弃)
      • WRED(基于权重的RED)

提要

​ 每一个网络设备的接口,都会利用一段内存去维护一个软件缓冲队列,当带宽不够,不足以发送一股流量时,将会把这股流量转移到缓冲队列中去进行排队,当有足够带宽来转发时,才会被转发走。

​ 需要注意的是内存是有限的,缓冲队列也是有限的,当带宽能力弱的流量在队列排队时,本身就已经增加了流量发送的延迟,并且排队由于时间不可控,延迟的不一致,还会导致流量发送的抖动。队列满了,队列里面的流量还不能够被转发走,但是新的流量也无法进入队列,将会被丢包。这被称之为尾丢弃

​ 网络中十分讽刺的一点是,越是重要的流量,对延迟、抖动、丢包更是非常敏感的流量,它们的带宽抢占是非常糟糕的,由于整体的网络中,默认是基于这个原则来转发流量的。

这个原则就是Be原则:Best Effort 尽力而为

所有的网络设备,一视同仁。不去区分流量类型。流量来了就给你发,先到先发,后到后发。

​ 但是越是重要的流量,越怕抖动、延迟、丢包。越不重要的流量,反而越不怕延迟、抖动、丢包。并且那些重要得了流量,它们的带宽能力反而弱,而那些不重要的流量,它们的带宽抢占能力反而更强。所以QOS应运而生


​ QOS诞生就是为了让交换机,路由器里面的流量进行分类处理。使得在有限的带宽下,尽可能的转发更重要的应用。

​ 但是QOS也是一把双刃剑,在将流量进行权重的划分之后,原本拥塞情况下,可能流量都能够通信,只是有些卡顿,但在部署QOS之后,部署人员可能会给关于应用,例如语音,视频等流量予以预留更多的资源,相反其他资源的可用流量将会减少。资源减少将会导致,在没有部署QOS之前时,所有的流量都能够被发送出去,只不过质量差一下罢了。当网络部署QOS后,这些流量可能都将发送不出去了。(因为原本网络就是拥塞)

​ 举一个现代化的例子

​ 很多城市都设有特定的公交车道,这个公交车道一般是四车道最右边的车道。在原本没有设定公交专用车道时,四车道都是可以随意开的,在高峰时期仅仅是有一些拥塞罢了。在我们通过政策设定专属的公交车道后,该路线途径车道都会设定一个专属的 ”公交车道“ ,车道是无法扩容的。我们能够保证高峰时期,公交车道是绝对不会堵车的。但是随即也带来了影响,那就是私家车道将会更加的堵塞,原本能够使用四车道的私家车,现如今只能使用三车道了,并且私家车的数量是越来越多的。所以会出现这一情况,就是高峰时期,原本车辆可能只是有一点堵车,但是还能走的情况下,经过部署之后,走都走不了了,这个就是所谓的QOS,也只一把双刃剑。

QOS服务架构

  • Best-Effor Service模型:是最简单的服务模型。应用程序可以在任何时候,发出任意数量的报文,而且不需要事先获得批准,也不需要通知网络。(尽力而为服务模型架构)

  • Integrated Service模型:是一个综合服务模型,它可以满足多种Qos需求。这种服务模型在发送报文之前,需要向网络申请特定的服务。(集成服务模型架构)

  • Differentiated Service模型:是通过设置报文头部的QOS参数信息,来告知网络节点它的QOS需求。报文传播路径尚的哥哥路由器都可以通过对报文头部的分析来获知报文的服务需求类别。(区分服务模型架构)

    注:上诉都不是协议,是一种架构

集成服务模型

​ 集成服务模型:在网络中如果启用集成服务模型后,应用本身要支持该模型的一些协议,在该模型中,最经典的协议是RSVP,RSVP称为资源预留协议。这个协议基本上代表了集成服务模型。在所有网络设备上开启RSVP就够了,只需要PC上的应用能够支持RSVP就可以了,那么RSVP会通过数据层面和数据层面,两个层面交互信息,来完成QOS的功能

​ 集成模型特点:源和目的地在数据层面通信之前,会先通过控制层面来交互RSVP协议报文。RSVP协议用来告知该源和目的地所经过的所有完整路径网络设备:**”我们这股流量就要过来了,请你们给这股流量,采取什么样的待遇“**比如说要预留多少带宽,保证它的延迟在什么范围之内,保证它的抖动在什么范围之内,交互完信令后,由于中间途径的网络设备都启用了RSVP,并且能够识别信令报文,只要它们有足够的资源能够给出,就会同意并且处理这个预留请求,预留相应的资源。这股流量在发送时,就可以根据所规定的服务级别,来给流量做统一的处理。这就是所谓的服务集成模型

​ 应用一定要能够支持集成服务模型的协议(如RSVP),如果应用无法支持,那么在产生流量之后,将无法发送RSVP协议信令,也将无法告知途径设备,我需要预留多少带宽 等等… …。这将会无法协商RSVP,这个时候想要实现集成服务模型,需要让PC连接的第一跳路由器,来帮助完成。当PC产生流量,并且发送流量给第一跳之后,路由器在帮这股流量转发之前,会先去帮PC去产生RSVP资源预留信令,并且沿途发一遍,发送并且协商完毕以后,途径所有网络设备都会给这个应用预留相应的资源,随即让数据层面流量去通信。这种方法相对会麻烦一些。因为该方法前提是路由器能够识别这些应用,并且路由器都要做非常复杂的配置,才能够为这重多的应用,来提供RSVP功能。但由于RSVP应用并不广泛,所以当前各种各样的应用层协议能够支持RSVP的,仅有少数部分。

​ 集成服务模型最大的特色就是将控制层面和数据层面分割开来,给一股流量,或者说是一个应用,到底提供什么级别的服务,这并不是路由器收到数据层面流量来考虑的,而是收到数据层面流量之前,通过交互RSVP信令,交互控制层面信息,来做一个提前通知。:”我通知你,接下来那股流量要来了,只要它来了,请你使用这种方式,来给他保证传输质量“ 并且它的第二个特色是没有差异化的处理,流量从源到达目的地,不管走的是怎样的路径,不管你经过怎样的路由器,我们所有路径上的设备,会给你这股流量,或者说是, 给你这个应用提供完全一样的服务,这就是集成服务模型。

​ 集成服务模型最大的特点是:能够保证绝对意义上的资源预留。保证关键业务的发送质量,但这也是该模型最大的缺陷所在。如果给语言预留10M带宽,但假设这10M带宽并没有被使用的情况下,比如说某一点时间并没有语言流,没有语言流量的产生,那么这10M带宽,别人也是无法使用的,这是它最大的缺陷:无法根据实时流量发送情况来实时的合理调配资源,它只能做到两点,就是要么预留,要么不预留。预留了,不管流量来与否,其他人也无法使用,但是能够保证关键业务的质量。如果不预留,那么这关键应用的质量无法得到保证。

但是!我们经常提到的QOS,一般都是指我们接下来要说的这种网络模型


区分服务模型

​ 集成服务模型工作过程:在数据转发之前,在控制层面上交互RSVP信令,告知沿途路径,我们这股流量即将过来,请给他提供什么样的服务,预留多少的带宽。如果网络设备有足够的资源,那么将会处理这个请求,并且预留相应的资源。

​ 集成服务模型的缺点就是,资源没办法合理控制,并且需要交互RSVP协议的话,需要应用去支持RSVP协议,但能够支持RSVP的应用在网络中占少部分的。

​ 区分服务模型就不同了,区分服务模型不会进行信令的交互,也不区分层面了。网络设备收到流量之后,首先做一个流量识别,这称之为“流量分类”,它可以根据三层报头,四层报头,乃至载荷中的参数来判定你是那一股流量,进行了分类之后,会给这股流量打上Qos标记,一股被打过标记的流量,就相当于上过色了,特殊了,接下来途径的网络设备,收到了这股上了色,打了标记的流量,只需要查看这个标记值,就能够轻松的识别,识别这股流量到底是那个分类的,知道你是那股分类之后,网络设备就要开始做相应的处理了,接下来要做的处理,叫做PHB。

Per-Hop Behavior

​ 因为网络中每台设备的接口,网络情况都是不一样的,途径设备中,有的可能拥塞,并不代表网络中没一个链路都是拥塞的,有的链路的带宽很低,但不代表完整路径的每一个接口带宽都是很低的情况,其实网络中,每台路由器收到同类别流量后,能够根据我们这一类别的情况,来走一个判断,到底是保留多少带宽,还是做限速处理,这都是由网络设备需要去做的事情。例如途径十台路由器,但这些路由器对这同一股流量做的策略,处理行为可能不一样,R1可能给这股流量预留两M带宽,并且做了个LLQ,R2可能给其预留3M带宽,做了个CBFW,R3可能做了个限速,因为R3出接口带宽较低,诸如此类。这个就是所谓的PHB逐跳行为

相较于集成服务模型端到端途径的所有网络设备,对同一股流量做相同的策略处理,而在集成服务模型中,是每台路由器对这股流量,都有着独立的处理方针,独立的来判断。根据我网络设备出接口带宽的实际情况,到底来做一个怎样的转发策略,那么这就是所谓的区分服务模型

区分服务模型相较于集成服务模型,在部署过程中,要更为复杂一些。因为每台路由器对于同一股流量,它们的处理方式是独立的,QOS配置在有着重要决策路由器上都需要部署,它可以部署的行为有:

1、流量分类:根据收到的流量特征,来确定这是股什么类型的流量。

2、流量标记:给这股流量打上相应的QOS标记。

3、流量管制:限速。

4、流量整形:限速和平滑,平滑是为了让这股流量不要那么激烈,不至于一会儿高速,一会儿低速。让流量变得比较平整一些。

5、流量队列:当拥塞参数时,规定了队列机制。(例如,排队机制是怎样的,有几个队列,每个队列有多深,报文过来后进入那个队列,调度离去时,优先级是怎样的,那种流量能够优先离队,离队算法是怎么计算的。)

6、拥塞避免机制:为了避免网络中的 ”尾丢弃“,通过一个随机早期丢弃的方式,来让队列满载之前,提前将不重要的流量基于丢弃。这样能够保证,尽可能的在队列中,缓存更多重要的流量,重要的流量不至于被一味的丢弃,这样能够增加重要流量的转发速率。

7、带宽优化机制:报头、载荷压缩链路分片与交错LFI机制,给那些链路带宽不足的链路,做的优化,这个优化能够在原本的带宽情况之下,使得带宽的利用率得到提升

流量管制于流量整形的说明:

可见它们两者都有着同一种功能,都有限速。但其实实际工作过程不同。

流量整形:流量整形工具延缓(延缓是通过把多余流量加入软件队列中等待)某一时刻(如带宽不足)中通过一个路由器数据包的速率,使得平均比特流的速率不会超过事先定义好的整形值。

流量管制:流量管制测量数据包进入或离开一个接口的比特速率。如果速率查过了事先定义好的值,那么将开始工作,要么丢弃过量的数据包,以保证所定义的速率不被超过。又或者标记此类过量的数据表,使得它在后续过程中优先被丢弃。

流量整形不丢弃数据包,流量管制要么丢弃数据包,要么标记它。

之所以说区分服务比集成服务麻烦,它麻烦在路由器对于一股流量,要进行的操作,该何去何从,并不是由应用程序来指定的,在集成服务模型中,这些都是由应用程序来指定的,应用程序指定这股流量,到达你们网络设备,你们预留多少带宽,做一个怎样的处理,所以网络设备只需要开启这个服务即可。其他的都由应用程序来指定。而在区分服务模型中,全都是由网络管理员根据网络设备流量情况,需求情况来做相应的配置,这样能够使得管理员根据实际的数据层面流量来决定,缺点就是过于麻烦了。配置起来也是十分的麻烦,好在思科做了一个整体架构,归纳了QOS。

Modular QoS Command-Line

​ 如果网络中没有部署那么默认服务模型就是BE。当部署了QOS,并希望通过应用层面的控制层面来告知沿途网络设备对于该股流量做如何的处理,并且是沿途所有网络设备都对同一应用的同一股流量做相同处理,那么就选择集成服务模型。当你希望网络更加的灵活,你希望路径中的网络设备对于同一个应用的同一股流量,做一个差异化处理,并使得带宽利用率更高,QOS做的更为细致,那么就选择区分服务模型

QOS部署的根因:在带宽不足,网络出现堵塞情况之下,尽可能的保证网络中关键业务流量,能够更为高效的转发。

延迟

​ 部署了QOS之后,能够在的带宽不足的情况之下,保证关键业务流量的四个要素,分别是:传输延迟、处理延迟、队列延迟和串行化延迟。这四要素将极度影响一股流量的发送质量,所谓的用户体验就是被其变化所影响。

草稿:部署QOS就是为了保证延迟、抖动和丢包敏感度高的应用,保证这三种参数是可控的。

1)何为传输延迟?通过网线传输需要流量,要么以光形式传,要么以电形式传。

2)何为处理延迟?网络设备收到帧后,需要查表转发,处理延迟就是查表的时间消耗。

3)何为串行化延迟?网络设备需要将帧和数据包,通过转换比特,再转换成脉冲信号的方式后,才能将其放在链路上传递,这个过程,就称之为串行化延迟。

如果网络中只有如上三种延迟,那你会发现任何应用在端到端发送数据的时候,这些延迟都是可控的,其实这些延迟都很小。而真正导致网络动荡较大的,就是队列延迟。

抖动

​ 由于队列延迟的存在,网络中才会出现抖动,何为抖动?就是我连续发送若干个报文,由于每一个报文经过的延迟是不一的,可能导致,先发先到,后发后到的情况,这种延迟不一致,叫做抖动

​ 为何导致延迟不一致?就是因为排队,有些报文排队时间长,有些时间短,这可能会导致:排队时间长的,那么早发送的可能后到,而排队时间短的被后发,可能会先到。抖动对于流量质量的影响,比延迟带来的影响还要大得多。延迟顶多导致接收数据时更为缓慢一些,但是抖动可能导致语音听不清晰了,视频画面看不清了。

​ 所以解决抖动的方式,就是让重要的流量,尽可能的不要去排队了。或者就算在排队的情况之下,也保证队列的调度机制,让这股流量能够尽早的被调度出去,这样就能减少抖动发生的可能性。

丢包

丢包可能在传输过程中的每一个环节发生。

​ 队列都是由内存来维护的,网络设备的内存是有限的,当排队时,排满了该何去何从?后进来的报文其实都被**“ 尾丢弃 “处理。尾丢弃就是所谓的丢包,丢包对于那些很在乎丢包的应用流量所带来的影响是及其之大的,例如语音、在线视频流量。所以尽可能的让它们不要排队,或者就算在队列中,也要在队列没有达到满载前,就把那些相对不重要的流量,按照一定比例,来丢弃。虽然这个队列还是有满载的可能,但是我们这些关键应用能够成功进入队列,不至于被 很惨的“ 尾丢弃 “**处理了,这样也就没有了丢包,那么关键应用的质量也就能够得到保证了。

这就是关于影响质量的三要素了,QOS所要做的功能就是延迟、可控和抖动可控。


国际公约标准

现在有一个问题出现了,因为数据都是要跨越一个又一个AS,才能到达真正的目的地的。但QOS都是每个AS内独立策略架构,我们的策略都是不一样, 会不会出现我这儿判定优先发出的流量,被你这AS判定垃圾流量从而丢弃

国际公约IEFT

这个国际公约IEFT就是为了解决这一现象而存在,它指定了一系列的度量衡。这对于Qos也是一样的,并不是说语音流量在我AS10内就是块宝,在你AS20就是垃圾流量。IEFT定义了一个标准,就是所有AS都要遵循的一个准则,你们对于同一股流量,可以有一个优先级判断的高低范围,但不能出现类似的情况,例如将语音这个优先级最高(次于控制层面流量)给判定为垃圾流量从而丢弃,这样就是太过于离谱了。

国际公约IEFT标准化组织定义

​ 国际公约的出台,就是规定了一个标准,对于流量优先级的范畴,可以有一个优先级定义上的小幅度调整,但不能出现类似将语音高优先级流量视为垃圾流量处理,不能够过于离谱了。保证同一级别流量,有一个尽可能相同的待遇。

第一梯队:语音

​ 国际公约对于流量有一个统一的度量衡,这个度量衡规定了流量的优先级梯队。首先是语音流量,语音流量处于第一梯队的原因就是十分的怕抖动。

​ 语音流量优先级等同于控制层面流量,对于路由器平台而言,控制层面流量是最优先锝,如果控制层面连路由都没有了,那么数据层面连工作都不需要工作了,没啥可以发送的了。控制层面发送的数据流量其实就是路由,这种流量除对丢包有一些敏感以外,对于延迟和抖动是不影响,不在乎的。而语音流量虽然是数据层面流量,要严格来讲并没有控制层面流量重要,但语音却是企业或客户花费重金部署的,所以它的重要程度和控制层面流量是一样的。

​ 语音流量对于延迟、抖动和丢包是非常敏感的。例如打电话时,如果发生了延迟,那么会说完后后,别人要过个几秒才能听到。再加上抖动的话,那么就会别人听不清你所说的话,你需要再复述一至两遍,别人可能才听得清,或者还是听不清。丢包导致的影响不仅仅是语音模糊了,直接导致根本听不到你再说什么了。总而言之语音流量对于三样东西很敏感:延迟、抖动和丢包

延迟就是听的慢,延迟就是听不清,丢包是直接听不到了。

第二梯队:交互式视频

​ 所以说了,在所有数据层面中,语音是最优先的。紧接着就是交互式视频了。

首先声明一点,交互式视频并不是B站,优酷这类视频,这类称之为流媒体视频,可以定义成冲浪流量了,这种优先级应该是最低的。为什么交互式视频要比语音更弱一点呢?明明打会议视频的时候,出现延迟,抖动的,会议都开不了了啊,并且会议商量的东西,可比语音商量的东西更重要,更不能耽搁啊,但其实:语音流量是较为温和,很弱的流量。但是交互式视频流量对于带宽的抢占能力是很强劲的。

​ 所以并不需要担心,并且如果要将语音和视频流量放在一块, 那么完蛋了,语音流量绝对被视频流量抢占光了,所以说如果想要优先处理视频流量,那么语音流量可能将无法发送出去了。

第三梯队:信令Signaling

​ 信令的优先级是低于语音和视频的,但要高于其他的,那么信令是什么呢?

集成服务模型中的RSVP其实就是一个信令协议,它的工作原理就是在数据层面通信之前,在控制层面交互信令。任何的语音和视频,你的应用在通信沟通之前都需要通过交互信令,先来打开咱们的媒体路径,当你的媒体路径打开之后,后续的才能走。信令这东西很重要,如果没有它,它丢包了,或者是没通的情况下,那媒体流,就无法通信,质量也得不到保证。信令本身并不是语音或视频,它对抖动和延迟,敏感度并不高,仅对丢包敏感高一些

第四梯队:关键业务流量(数据流量)

​ 这其实就是企业中的关键业务流量,例如证券公司 ,交互的一些证券数据。或者是财务公司,交互的一些财务报表,这些就称之为**“关键业务流量” ** ,由于它是数据流量**,数据流量最大的特点就是延迟抖动和丢包,我都不管,因为它能够重传**(财务报表过去有问题,那我就重传一次嘛),只要延迟抖动和丢包不是过于严重就行。由于在一个公司中,所有的业务流量里面,这些关键业务流量尤为重要,也更加大一些,所以同样作为数据流量,它的优先级是里面中最高的。

第五梯队:大块数据流量

什么叫大块数据流量?比如说上传或下载一些动则1G,10G,1T的文件,或者是数据库之间通过FCOE网络交互一些内容,它本身也是占用带宽的,但是它的作用性比关键业务流量是要低的,但是相比冲浪流量,肯定是要高的,所以在保证好关键业务流量之后,这些大块数据流量,能够保证,也请保证一下。

第六梯队:冲浪流量

何谓冲浪流量?听听歌,看看视频,浏览B站等。

所以说了,当部署区分服务模型时,虽然每台路由器独立的策略来管理流量,但有了这个准则后,不至于流量颠覆的太过离谱,不至于出现开头讲的,语音流量到你这儿就是直接视为垃圾流量丢包的情况,秉承这么一个原则,当我们部署完毕之后,我们这个AS就叫做DS domain(思科没有这个)


DS domain

​ Ds domain就是部署了区分服务模型后的域(AS),里面部署了本模型的路由器都称之为**“DS node”** ,叫做区分服务模型的节点,节点分为两类,分别是中心节点和边缘节点。

边界节点

​ 边界节点在域中用于连接其他域。在该节点上,要做两件事:流量分类和标记。首先要做的是流量分类,流量分类分为两种方式,分别是简单流分类复杂流分类

​ 所谓的复杂流分类就是给报文中的qos和二层标记都是处于空置情况下,当路由器收到这类没有做任何标记的流量后,将会利用ACL或其他工具,来做根据源目MAC地址,或者IP地址,或者源目端口号,乃至载荷字段的流量划分,这种就称之为**“复杂流分类”。反之,当这股流量本身携带了qos标记**,路由器收到携带标记的流量,能够直接基于标记来做分类。那么这种就称之为**“简单流分类"**

注:流量分类的标识符,什么样的标记对应那种了流量,这是可以自定义的,也可以根据IETF来做对应。

总结:做了标记的就是简单流,没做标记的就是复杂流,复杂流需要抓取报文中指定的字段来分析该报文,从而打标。

一般分类的工作,都是在边界路由器(边界节点)上部署。这样做的原因是,境外的流量是错综复杂的,域外的设备有无部署QOS,这点我们并不知晓。并且域外并不是一个AS,我们处理的流量来自不同的域,所以无法保证他们都会分类标记,所以要在域边界做一个分类功能,并且标记报文,这样能够让域内的中心路由器,做简单流分类,以减少资源消耗。

分类并标记能够减少后续路由器的资源消耗,这是它的第一个好处,第二个好处就是在队列情况下,标记了的流量能够更快的发送出去。并且当网络产生拥塞时,即使是在排队的情况下,也能够让标记了的流量,按照优先级从队列中优先离开并转发。这个标记也影响了队列的排队与调度。

中心节点

在我们中心节点中,部署做多的就数拥塞避免。首先要明白拥塞是如何产生的,才能够知道要去如何解决拥塞。当速率高的链路给速率低的链路发送流量时,就会产生拥塞(100M带宽链路给1M带宽流量发送流量,就会堵塞),出现高链路与低链路传输的情况下,部署限速是做优选择。一般限速部署在园区网边界,因为内网采用以太网链路,带宽都很高,而园区网出接口一般都是Serial链路,这种链路带宽都很低下(当然2020年了,带宽都OK了,而且现在qos的主要作用也不是缓解带宽压力,主要是保证数据能够优先被传输)为了避免拥塞,也可以做报头甚至载荷压缩。这能够更为高效的利用链路带宽,用于处理更多的流量。限速就是管制和整形,让优先权重较低的流量(例如冲浪流量)进行限速,使其发送的较为缓慢一些,对重要流量就不限速。还可以给这类流量,调整队列,保证就算是重要流量排队了,也能够优先发送走,对于不重要流量,任由它排队,排满了被丢弃,也就罢了。甚至还能部署RED或WRED等这种随机早期检测机制,当软件队列,排队占比超过指定的百分多少时,便开始随机丢弃队列中不重要的报文,这样能使排队队列中,排到更多的重要流量。这个就是拥塞避免。

标记

标记算是QOS中一大重要的东西了,分类之后要做标记,流量要基于标记优先级做转换,如果不了解标记的话,那么区分服务模型根本无法部署。流量分完类之后,为了方便咱们后续路由器,继续分类,为了方便咱们这些重要流量,在排队和离队的时候,拥有更高的优先级,你的要去了解,咱们这个标记本身,那么在QOS本身中呢,在区分服务模型中,标记分为三层标记和二层标记。

三层标记

三层标记只有路由器,多层交换能够识别,三层标记在v4中出现最多就是tos字段,v6环境下就是traffic-class标记,这个结合流标签,就是v6中的qos。当然本文主讲v4中的qos。三层标记见的最多的是那些?如果你是IPV4,那么就是tos字段,如果是IPV6呢,那么就是traffic-class标记,这个结合流标签啊,就是来做IPV6的qos,当然在ipv4中tos比较简单啊。

Tos(Type Of Service)

tos类别服务,这个字段只有1字节(8bit),在该字段中,做三层标记又两种标记格式,分别是:

1、IP Precedence(IP 优先级)

2、DSCP(区分服务码点)

优劣:IP P是早期标记方式,可用标记类别优先。DSCP加强了标记种类。

IP Precedence(IP 优先级)

它是使用tos字段,在从左往右数的3bit(0-7)来标识的,共有8种标记方式,但其中ip p7不能使用,所以仅能标记7种类型流量

IP P使用的是前3bit,后面5bit横为0(就是填充5),如果遇到IP P值为1的流量,那么他就是001 00000,对应的tos值是32(0010000换算十进制就是32),也就是说你抓tos值为32的流量,等同于抓ip p为1的流量。

IP P优先级 对应tos值 | 十进制
IP P6 110 00000 | 224
IP P5 101 00000 | 160
IP P4 100 00000 | 128
IP P3 011 00000 | 96
IP P2 010 00000 | 64
IP P1 001 00000 | 32
IP P0 000 00000 | 0

在使用ACL抓取流量的时候,也可以直接抓ip p值,也可以抓tos字段值,但如果要以tos字段方式,那么请按照8bit去抓取,如果是抓取ip p的话,只需要关注前3bit即可。

DSCP(DiffServ Code Point)

区分服务码点,是使用tos字段从左往右的前6bit(0-63)来标识,其中前三位为X位,后二位是Y位,第六位置0以表示该设备是以DSCP设置的服务类别,最后两位保留,用于显示拥塞通知(Explicit Congestion Notification,ECN)。X位是类选择符,Y位是丢弃优先级。

每一个DSCP编码值都被映射到一个已定义的PHB(Per-Hop-Behavior)。通过键入DSCP值,终端设备可对流量进行标识。分为四类分别是:

1、EF(Expedited Forwarding,加速转发)

EF是针对Voip语音流量的,DSCP值X为5(101);Y为3(11),也就是10111000(46)。

这个是专门给语音流量打的标记,只需要打上了这个标记,将会给脆弱的语音流量来做急速转发,从而保证尽管网络拥塞的情况下,也能做到高效发送。这种方式不用考虑其它流量是否分享其链路,适用于低时延、低丢失、低抖动、确保带宽的优先业务(如虚租用线路,语音等)

2、AF(Assured Forwarding,确保转发)

AF又分为四个小类(AF1/2/3/4),每个AF小类又按照三个丢弃优先级(Y位)。可以细分AF业务等级,需要注意的是:AF类的QOS等级低于EF类。

AF指的是X为1到4,Y值不能为0的数。于是就有

AF1:11,12,13

AF2:21,22,23

AF3:31,32,33

AF4:41,42,43

分别是四个大类,三个子类,子类通常指什么?

AF31那么就是X为3,Y为1,那么31换算就是01101000,那这个31,32,33建议同来标识同一股流量。这个X类标识它的优先级,X位越高,代表着流量类也就越位重要,比如说AF4类,永远高于其他三类(AF4>AF3>AF2>AF1)在同种流量中,如果网络出现丢包,那么将会根据Y位丢弃位来优先丢弃,首先丢弃同种流量中Y位为3的,例如AF类中出现丢包,那么优先丢弃AF43,然后AF43丢弃完毕后,丢弃AF42流量。

在换算过程中,首先要知道对应的DS值,然后将DS值换算成十进制,然后针对tos字段,这个值又是几。因为这样都能通过ACL来抓取,可以直接抓取tos字段,也能够抓dscp值,也能抓AF类别值。例子如下:

AF12就是X为1,Y为2的值。那么对应DS值为1(001),2(10)就是 001100 十进制就是12。tos字段需要将保留2位写上去,那么就是00110000,也就是48。

AF11对应 001010

AF12对应001100

AF13对应001110

AF21对应010010

AF22对应010100

3、CS(Class Selector,兼容IP)

是从IP TOS字段演变而来的,共8类;

4、BE(Best-Effort,尽力转发)

BE所有DSCP bit横向都为0,也就是标记类为0,不使用qos,不做标记。就是00000000(0)

CS中特殊一类,没有任何保证,AF类超限后可以降级为BE类,现有IP网络流量也都默认为此类。

二层标记:

二层标记,二层标记路由器也能识别,但是主要的是交换机通过识别二层标记来基于二层,做一个流量重要性的区分。

以太网环境中,交换期间不是有中继嘛,通过中继发送流量的时候,

802.1q的标记对吧,802.1q有四个字节 4Byte 其中里面3个比特bit叫 priority优先级字段,这个字段就是用来做二层的qos标记的,这个等同于是三层的tos,这个就是二层的标记字段,由于这个字段一共就只有三个比特,

这个做法就只有一个,叫做COS,Class Of Serivice。二层唯一标记方式,当你这个字段的值横为0的时候,也就是没有做任何qos标识的时候,我们在中继链路上发送的帧,我们称为叫802.1q帧,当你这个字段做了qos标记后,那咱们这个帧就换了一个叫法了,我们叫802.1p帧,

P和q的区别是什么呢?就是看你这个cos字段的值,是不是全0,如果是那么就是1q,如果不是,那么就是1p。当然这个是和ip p有继承关系的,


AF 保证转发类

AF指的是X为1到4,Y值为不能为0的数,

那么九有 11 12 13 21 22 23 ,31,32,33,41,42,43.

你会发现AF1里面有三个子类,AF2,3,4都各有三个子类,那么这个子类都是指的是什么

举个例子,AF31那么就是 X为3,Y为1,那么31是几?01101000,那这个31跟32跟33,其实建议,用来标识同一种类型的流量,这个3代表它的优先级,这个优先级越高,代表着它的流量类也就越重要,比如说AF4类的,永远要高于三类的,

三类的永远要高于三类的,这是一个公约,大家最好准许,每一个类种,还有三个子类对吧,这三个子类,我们称为叫丢弃优先级。什么叫丢弃优先级?就比如说同为视频流量,同为视频流量,AF41要优于42,42要优于43的,这样在拥塞情况下,可能你这股流量面临丢弃的风险,可能你这个时候,41它的丢弃的权重比是最低的,而43丢弃的权重比是最高的,就是当我不得已了,开始要丢弃了AF4字开头的流量了,肯定先丢弃的是43,43丢弃的差不多了那么就开始丢弃42的流量了,42丢的差不多了,那就再丢41。这个AF类算是DSCP最有特色的一点啊,它能够把每一种流量类,细化成三个子类。一共有四个类别,3*4 12个,12个加在一起就已经比 ip p要多了,因为ip p一共就只有8个,而能够使用的仅有7类,而我这个AF类,就一共有12个

AF43,首先需要知道,对应的DSCP值是几,然后这个值对于整个DSCP而言,对于的二进制转十进制,又是几,然后针对整个tos字段,它对应的值,又是几。

因为这些都能够通过acl的某种表现形式来抓。可以通过acl直接抓tos字段的值,能够抓dscp的值,也能抓af的类别。

AF12对应的DSCP值是00110000,它DSCP只看前6位,那么就是001100,转换成十进制就是12。如果转换成tos字段,那么它是48。

AF12对应的DSCP值是00110000,DSCP直看前6位,那么就是001100,转换成十进制就是12,但是对于tos字段,那么他是48(直接将DSCP值,8位全部换算)。

AF类算是DSCP中,用的最多的这么一个类别,其中呢4用来标识交互式视频,3用来标识信令,2用来标识关键业务流量,1用来标识大块数据业务。

语音流量直接同等控制层面流量优先级

CS向后兼容ip p标记的,因为在一个企业网络中,有些网络架构是较为先进的,有些是比较落后的,那么比较先进的,在做qos标记的时候,它既能支持ip p,又能支持DSCP,当然一般建议DSCP,但是老的路由器呢,ios版本优先,只能支持ip p,对于使用dscp这类,可以使用BE,EF,AF来处理,但是对于那些使用ip p的,

因为ip p无法识别af标记,因为你AF标记的Y位,这个在你ip p中咱们根本没用到,你这位置位的话,那么使用ip p的路由器根本无法识别,你这个值到底是什么意思,那么就需要向后兼容,就是你给他们发送带有标记流量的时候,

需要按照他们逻辑来,ip p的逻辑就是,只支持前三类置位的qos标记,CS的特色是什么呢?它的X取值范围就是1-6,

y的值横为0.这个是用来向后兼容ip p,比如你遇到CS 1,CS2,CS3,CS4,CS5,CS6,这个完全向后兼容IP P,

同样,CS5指的是X为5嘛,那么就是000000,对应的DSCP值为40,对应tos值是160。

在华为中,将DSCP这四类,称为四个PHB,

DSCP的灵魂就是根据每台路由器的实际情况,来决定对于一股流量来决定到底该如何决定,能够做的事有很多,并且每台路由器做的事都可以不一样,这才是PHB。

问题:

什么是QOS?

流量不足的情况下,保证那些对延迟抖动和丢包,比较敏感的应用,能够被优先转发的这么一系列技术。

QOS包括那些方面?

从架构来讲是三个,BE,集成、区分。

集成来讲就是RSVP,区分中流量分类,流量标记,拥塞管理,队列,随机早期检测,增加带宽利用率的话,又报头,载荷压缩,还有链路分段于交错

常见的QOS服务模型有哪些?

集成,区分,BE

中,DSCP、TOS和IP Precedence的关系?

IPv4报头用来做qos标记的,就是tos字段,有两种标记的格式,一个是早期的叫ip p,只使用前面3比特,一个是新型的,DSCP,使用前6bit,实则5bit。因为第六bit值 横为0,DSCP里面还分为四种标记类别,一个叫BE,一个叫EF,一个叫AF,一个叫CS,这些都是三层标记。当然三层标记最多了,因为qos说白了都是三层qos,但其实pc连接的不直接都是路由器,也有交换机,那么为了保证端到端的qos能够保持一致性,光有三层qos还不够的,还需要二层标记

队列机制

​ 队列就是无法发出后的流量,将会排到队列中去,而接口都有两个队列,分别是硬件队列软件队列,硬件队列有且只有一个,并且无法调控的。队列是一个比较容易理解的概念,我们在日常生活中也用到类似技术。例如我们去电影院买票的时候,大家排成几队顺序买票,排在前面的先拿到票(FIFO);有时突然冲出一个人跑到队伍的最前面拿出VIP证件马上就拿到了票(PQ),这类人属于特权阶级需要优先处理,后面的人只能等这类人买完票才能继续排队买票。

1)FIFO 先进先出队列

2)Priority Queueing 优先队列

3)Customized Queue 用户定制队列

4)Weighted Fair Queueing 加权公平队列

5)Class-Based Weighted Fair Queueing 基于类的加权公平队列

6)Low Latency Queueing 低延迟队列

FIFO

​ 先进先出队列。因为只有一个队列,所以不会给报文进行分类处理。

Internet默认服务模型是Be,采用FIFO队列策略。

草稿

FIFO关心的就是队列长度问题,队列长度将影响到时延、抖动和丢包率。因为队列长度是有限的,有可能被填满,这就涉及到该机制的丢弃原则,FIFO使用的是Tail Drop机制。如果定义了较长的队列长度,那么队列不容易**填满**,被丢弃的报文就减少了。但是!队列太长就会出现较高的延迟,一般延迟的增加也会导致抖动的增加。但如果定义了较短的队列,延迟的问题可以得到解决,但是发生Tail Drop的报文就变多了。类似的问题其他队列机制也存在这

Tail Drop机制:队列满载情况夏,后续进入的报文将被丢弃,而没有任何机制能够保证后续的报文可以挤掉以及在队列内的报文。

PQ

​ PQ使用四个子队列,优先级分别是high,medium,normal和low。PQ会先服务高优先级的子队列,当高优先级子队列没有数据后,再服务中等优先级子队列(High>Medium>Normal>Low)依次类推。如果PQ正在服务中等优先级子队列,但是高优先级队列又来了数据包,则PQ会中断对中等子队列的服务,转而向高优先级子队列服务。 每一个子队列都有一个最大队列深度(queue-size),如果达到了最大队列深度,则进行尾丢弃。配置该队列的接口,将会对收到的报文,进行流量分类,然后按照报文所属级别,让报文进入到所属优先级队列的尾部。PQ的优点是可以保证高优先级队列的报文可以得到较大带宽、较低的时延、较小的抖动;缺点是低优先级队列的报文不能得到及时的调度,甚至得不到调度,即会出现**“饿死”**现象。

PQ特征:

1)报文丢弃策略采用Tail Dorp机制;

2)每个队列内部使用FIFO逻辑

3)当从队列调度报文时,优先调离高优先级队列的

4)对低优先级的数据流而言,可能会被“饿死”,因为只有高优先级队列里有数据,PQ就不会服务低优先级队列

CQ

​ CQ解决了PQ中"饿死"的缺点,能够保证所有队列都能得到服务。CQ将报文分类,按照类别将报文分配到CQ的队列中去。CQ有(0-16)个队列,其中0是优先队列,只有队列0的报文发完,然后才处理1-16队列。所以队列0一般作为系统队列,把实时性要求高的交互式协议报文放到0号队列。

CQ对于每个队列,也可以规定队列中报文所占接口的带宽比例。这样能够让不同的业务的报文获得合理的带宽,从而既保证关键业务能获得较多的带宽,又不至于使非关键业务得不到带宽。

CQ采用Round Robin调度机制,从队列1开始,从每个队列中取出指定数目的报文,而CQ不会配置确切的链路带宽比例,而是配置字节数目。如果一段时间内某个队列为空,剩余的队列按照比例分配该空队列所占用的带宽。举例子来说:

例
现在配置了五个队列,每次取的字节数分别是5000:5000:10000:10000:20000如果五个队列都有充足的报文需要发送,那么每个队列分配的带宽比例为10%:10%:20%:20%:40%;假设队列4中有一段时间内没有报文发送,即队列为空。那么剩余的四个队列会把这20%按照1:1:2:4的比例进行分配,所以在这段时间内的实际分配为:12.5%:12.5%:25%:50%。

比例计算公式:该队列分配的字节数/所有队列分配的字节数=该链路占用链路比

CQ不能将报文进行分片,例如要从队列1中拿出字节1500的报文,可能会出现如下情况:前面拿了1499byt,还需要拿1byte,那就还需要拿一次。但是紧接着的一个报文大小是1500by,那么实际上从该队列拿出了2999byte。所以从局部来看,调度的比例和预期设备的结果有所吃醋如。

CQ特点:

1)Tail Drop是唯一的丢弃机制

2)最大16个队列

3)队列内部使用FIFO逻辑

4) 在对各队列进行调度时,使用Round-Robin对各队列按字节数调度。

CQ可以应用在对抖动要求不严格同时能够根据需要对不同分类的流量保留指定链路带宽的情况。CQ没有像PQ一样对某类流量提供低时延的服务,但是它可以保证在发生拥塞时1-16队列能够分配到指定额度的带宽。

WFQ

​ WFQ是一个复杂的排队过程,可以保证

WWF对报文按照五元组(流)分类,每一个流被分配到一个队列,该过程称为三类。WFQ入队采用Hash算法来自动完成,尽量将不同得流分入不同的队列。在出队的时候,WFQ按照IPP优先级来分配每个流应占有的带宽。

如:接口中有8个流,它们的优先级分别为0,2,2,3,4,5,6,7则带宽总额是:(所有流+1)的和,即:1+3+3+4+5+…=37。每个流所占带宽比例为:(自己优先级+1) / 所有流+1的和,即每个流可得带宽分别为:1/37,3/37,3/37,4/37,5/37等。**WFQ允许其他流使用某条流的剩余带宽。**这点和CQ一样

WFQ在保证公平的基础上对不同优先级的业务体现权值,而权值依赖于IP报文头中所携带的IP优先级。WQF时小字节,高IP优先级的流被优先调度,也就赋予了一个新的概念:序列号SN。报文在经过流分类后,决定该报文时入队列or丢弃前,都要赋予SN。SN的计算公式为Previous_SN+weight*new_packet_length,WFQ进行报文调度时都是先调度SN小的报文,为了保证IP Precedence大的能够获得更多的带宽。其中Previous_SN分为两种情况:

1)如果报文进入的队列为非空,使用该队列中最近进入队列报文的SN作为Previous_SN。

2)如果报文进入的队列为空,使用发送队列最近报文的SN作为Previous_SN

WFQ在进行报文的丢弃和入列时,也是依据SN的大小来进行的;

HQL:限制了所有队列中能够存放的报文总数目;

CDT:限制了每个队列中能够存放的报文数目。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XlX2a7VB-1583932422166)(https://s2.ax1x.com/2020/03/09/8SJ4KA.jpg)]

上述图中有四条流,每条流的pre相同,皆为0,只是报文的大小不同,flow1-4的报文长度从大到小,按照SN的计算公式,报文长度小的SN小,所以flow4中的报文会被优先调度出去,当然最终的决定因素还是SN的大小,对于SN相同的报文实行顺序调度,如本例所示:Packet5和Packet10的SN相同、Packet1和Packet11的SN相同,按照顺序调度规则,应该是Packet5在Packet10前,Packet1在Packet11前。最终的调度的结果是:13,14,15,16,9,5,10,1,11,6,12,2,7,8,3,4。

WFQ使用WFQ丢弃机制,该机制是Tail Drop的一种改进,其中的一个决定因素也是SN。另外WFQ还使用HQL和CDT来决定如何对报文进行丢弃。如果一个新的报文达到时HQL已经到达最大值,该报文直接被丢弃;如果此时HQL没有到达最大值,WFQ将该报文根据WFQ的分类原则进行分类决定进入到哪个队列并计算出SN,剩下的丢弃机制还会由CDT决定,CDT是每个队列自己的丢弃阀值,如果此时CDT没有到达最大值报文直接进入该队列,如果CDT已经达到阀值,则判断其它队列是否有SN比新进入的报文SN大,如果没有直接丢弃新进入的报文,如果其他队列有SN大于当前入队列的报文,WFQ会选择丢弃SN大最大的报文。简单的说就是当某个队列的报文数目已经超过该队列CDT,WFQ可以选择丢弃其它队列中SN最大的报文!其流程图可以参见上面的图8。

将WFQ的特点可以总结为如下特点:

(1) 基于元组对报文进行流分类,不支持用户自定义的分类

(2) WFQ丢弃机制,是对Tail Drop的改进

(3) 队列内部使用FIFO

(4) WFQ调度:优先服务低SN的报文

CBWFQ

CBFWQ通常使用ACL定义数据流类别,并将注入宽带和队列限制等参数应用于这些类别。

CBWFQ可以为每个队列保留最小的带宽,使用和CQ类似的报文分类;但是与CQ不同的是,用户可以配置CBFWQ实际占用的流量百分比,而不是字节数;和WFQ相比,CBWFQ可以在一个特定的队列里面使用WFQ机制:CBFWQ有一个特殊的队列,即缺省队列,只有该特殊队列可以采用WFQ机制。

CBWFWQW支持两种丢弃机制:Tail Drop和WRED。可以配置任何一个队列的丢弃机制为WRED,但并不是所有的队列配置WRED丢弃都是有好处的。WRED可以用在对丢包不是很敏感的数据队列;如果该队列是存放语音、视频报文,这类业务报文对丢包比较敏感就不适合采用WRED了。

CBWFQ有0-64队列,0队列是缺省队列,该队列是自动配置、不可人工干预。可以使用流分类将不同类型的报文映射到1-64队列,可以设置每个队列所占用的带宽比例;如果进入的报文不能匹配任何流分类,进入缺省队列,缺省队列可以使用FIFO或者WFQ机制,而1-64只能使用FIFO机制。为什么只有缺省队列0可以采用WFQ机制?这样有什么好处呢?前面已经提到CBWFQ可以根据分类将报文放入到指定队列,通过配置该队列的带宽比例获取相应的服务,如果在一段时间某个队列不需要该带宽,由其它队列共享;对于那些无法进行分类的报文统统放入到队列0,通过在0队列使用WFQ机制可以使该队列中的所有报文能够得到公平的调度。

CBWFQ的有一个严重的缺点就是没有一个队列可以满足那些对时延有特殊要求的报文,例如语音、视频流,也就是缺乏类似于PQ之类的严格优先级队列。

CBWFQ特点:
1)能够给不同的类保障一定的带宽
2)对传统的WFQ作了扩展支持用户自己定义流量的分类:
3)队列的个数和类别是一一对应,给每个class 保留带宽

CBWFQ与WFQ的区别:
WFQ: 用户无法控制分类,由HASH算法自己决定
CBWFQ:让用户对流量自己来分类
WFQ 对正常流量 处理没问题,但是对语音流量显得”太公平”(语音要求低延迟)
CBWFQ:考虑到公平特性,并没有考虑到语音的应用

LLQ

LLQ大致的作用就是保证某类报文的低时延,目前的实现方式都是通过严格优先级队列来保证该类报文被优先处理,从而保证低时延。实际上LLQ严格来讲并不是一个独立的队列机制,可以认为它是CBWFQ队列机制的一个变种。通过在在CBWFQ队列中加入了一个或者几个优先级队列来实现,以保证这些队列的优先处理,从而保证进入该分类的报文较低的时延;而通过设置带宽阀值,又能防止出现“饿死”现象。

IP RTP Prioritization

IP RTP Prioritization和LLQ类似,但又有一些不同点,它通过在WFQ或者CBWFQ队列中加入严格优先级队列来实现的。它通过区分UDP报文的目的端口号来对VOIP报文,从中选择出UDP目的端口号在一定范围之内且为偶数的流量。因为IP RTP是严格优先级队列,所以会被最先处理,并且通过一定的策略防止这个严格优先级队列占用太多的带宽,也就是说该严格优先级队列占用的带宽是有额度的,超过限制的流量被丢弃。

通过RTP的实现可以看出,RTP具有如下特点:

(1) 在CBWFQ中增加了一个低时延队列,保证VOIP报文的及时处理;

(2) 限制了优先级队列带宽大小,防止出现“饿死”现象;

(3) 流分类手段贫乏。

总结

队列调度机制 调度方式 丢弃机制
FIFO 顺序调度 尾丢弃
PQ 首先调度高优先级队列 尾丢弃
CQ 从每个队列取指定字节的报文,队列之间采用RR机制 尾丢弃
WFQ 先调度SN小的报文 改进的尾丢弃
CBWFQ 保证每个队列的设定带宽 伪丢弃或WRED
LLQ 首先服务低时延队列,但是低时延队列有阀值 尾丢弃或WRED
IP RTP 首先服务低时延队列,但是低时延队列有阀值 尾丢弃

本文参考资料:

随机早期检测

拥塞避免的实现是通过早期随机丢弃方式实现。是当拥塞还没有发生的情况下,丢弃一些不重要的数据包来保证队列不会发生大面积的拥塞,从而将丢弃规模将至最低。

RED(早期随机丢弃)

RED采用两个阀值,最小丢弃门限,最大丢弃门限。另外是一个随机丢弃率-丢弃可能性。当数据包的个数小于丢弃门限是不丢弃,当大于最大丢弃门限是实施尾部丢弃。当大于最小丢弃门限小于最大丢弃门限开始随机丢弃,随机丢弃的速率(丢弃可能性)会随着逼近最大丢弃门限的距离越来越近而增大。

WRED(基于权重的RED)

RED不能体现数据包的优先级参数,有可能优先级挺高的数据包反而被丢弃,所以引入weight值。WRED基于权重的RED,将不同IPP和DSCP的数据流作为RED的一个权重,去设置不同IPP数据流的最小门限值和最大门限值。

QOS教程[更新中]相关推荐

  1. Python数据分析入门教程(更新中)

    Python数据分析入门教程 你好! 这是一篇适用于初学者的Python数据分析入门教程 1. Numpy关于矩阵的操作 1.1数组与矩阵的基本概念 矩阵:矩阵是一个按照长方阵列排列的实数或复数集合( ...

  2. TP6基础教程-更新中

    1.下载框架 必须要有composer (composer镜像必须是国内的,网上直接搜composer镜像)   进入自己创建好的D:\webserver\www\tp6 目录,输入composer ...

  3. 戴维营教育-Swift语言中文教程和配套视频教程更新中

    戴维营教育-Swift语言中文教程更新中 http://blog.diveinedu.net/category/ios_8_development/ 戴维营教育-Swift语言的github翻译项目地 ...

  4. python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...

    感谢大家长期对Python爱好者社区的支持,后期Python爱好者社区推出Python网络爬虫系列教程.欢迎大家关注.以下系列教程大纲,欢迎大家补充.视频长期连载更新中 --------------- ...

  5. 《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

    目录 一.Autosar入门篇: 1.1 DBC专题(共9篇) 1.2 ARXML专题(共35篇) 1.2.1 CAN Matrix Arxml(共28篇) 1.2.2 ASWC Arxml(共7篇) ...

  6. 全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中)

    详细记录分析QCC51XX和QCC30XX系列,sdk解析,帮助你快速部署开发项目.教程没完结前,不定时持续更新,包括新发布文章和对已发布的补充更新. 本系列以3040为例,其他QCC5181,QCC ...

  7. 《Autosar_BSW高阶配置》总目录_培训教程持续更新中...

    目录 0 基础"开胃菜"(共20+篇) 0.1 CANFD和Classic CAN介绍 0.2 UDS/OBD诊断网络层/传输层介绍 0.3 常用UDS诊断服务介绍 0.4 所有O ...

  8. 《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

    欢迎大家订阅<Autosar_MCAL高阶配置>专栏(可以理解为是Autosar培训教程),献上常用的案例和配置方法.下方整理了相关博文的链接(单击蓝色字体即可跳转),方便大家获取. 本专 ...

  9. unity Shader Lab(cg hlsl glsl)着色器入门教程 以及 vs2019 支持unity shader语法(更新中2019.9.5)

    前言: 如果你对cg glsl hlsl 顶点着色器 片段着色器 表面着色器 固定渲染管线 等等有所疑惑,或是想学会unity的渲染,看这一篇就足够了.另外我博客的shader分类中还有很多shade ...

最新文章

  1. 【UVALive 4642】Malfatti Circles(圆,二分)
  2. c语言怎么解析midi文件,c – 无法读取midi文件? [扩展规格?]
  3. npm常用命令:ini他、install、remove及编译运行工程、使用淘宝npm镜像
  4. 【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)
  5. AndroidStudio_安卓原生开发_全局异常处理_并记录系统错误日志---Android原生开发工作笔记138
  6. 使用MMS(MongoDB Monitoring Service)监控MongoDB
  7. C++面试题整理,希望对大家有所帮助
  8. 黑客入侵WinXP常用七个技巧
  9. 美媒:马斯克已掌管推特 立即开除CEO、CFO,新CEO据传是曾经卖牛肉的中国人
  10. 转dmg 到iso。。。
  11. python deap_DEAP(Distributed Evolutionary Algorithms in Python)1.2.2文档(一)
  12. 腾讯云服务器测试评测情况(后期阿里云服务器、新浪云服务器)
  13. python多元回归因子选取_用Python进行多元线性回归分析(附代码)
  14. 嘉兴 机器人仓库 菜鸟_双11前菜鸟网络升级智能仓库 浙江嘉兴仓担当大任
  15. 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台
  16. 《特征工程入门与实践》--- 特征学习
  17. php mysql 库存变负数_解决并发情况下库存减为负数问题
  18. linux内核黑名单,如何将内核模块列入黑名单?
  19. Ubuntu12.04搭建BigBlueButton
  20. excel在线_在线excel也能跨表汇总数据了

热门文章

  1. NR/5G ~ R16 dormant BWP
  2. redis 发布订阅示例
  3. oracle ORA-00257异常处理及定时清理归档日志
  4. java祖师爷赏饭吃,你是靠老天爷赏饭吃,还是靠祖师爷赏饭吃?
  5. 如何查看本机的IP地址?
  6. MQ - 消息队列中点对点模型与发布/订阅模式的区别
  7. 基于Java+MySQL实现(Web)在线题库管理系统【100010067】
  8. hashMap源码分析1.8
  9. Excel基础教程(3)
  10. gitlab上删除项目