一、QoS
QoS: Quality of Service(服务质量)
是指网络通信过程中,允许用户业务在丢包率、延迟、抖动和带宽等方面获得可预期的服务水平。更简单地说:QoS就是针对各种不同需求,提供不同服务质量的网络服务。
IP QoS目标:
避免并管理IP网络拥塞
减少IP报文的丢失率
调控IP网络的流量
为特定用户或特定业务提供专用带宽
支撑IP网络上的实时业务

在传统IP网络中,对所有报文都无区别地等同对待,每个路由器对所有报文都采用先入先出的策略(FIFO)处理,也就是说:它尽力而为(Best-effort)地将报文送到目的地,但是对报文的吞吐量、延迟、延迟抖动、丢包率等都不能预期,可能很好,也可能极差,一切都要视网络状况而定。随着计算机网络的高速发展,对带宽、延迟、抖动敏感的且实时性强的语音、图像、重要数据同时在网上传输,使得网络资源极大地丰富。但是同时人们对于网络传输数据质量的要求也越来越高,人们期望报文在吞吐量、延迟、延迟抖动、丢包率等方面获得一定程度上的服务保证,期望可以根据客户类型提供有差别的服务。解决这些问题的一个途径是增加网络的带宽,但带宽的增加毕竟是有限的,且代价昂贵,它也只能在一定程度上缓解这个问题。提供QoS将是人们对未来IP网络的基本要求。

二、IP QoS 三种模型
服务模型,是指一组端到端的QoS功能,通常QoS提供以下三种服务模型:
+Best-Effort service (尽力而为服务模型)
是目前Internet的缺省服务模型,主要实现技术是先进先出队列(FIFO)
+Intergrated service(综合服务模型,简称Intserv)
业务通过信令向网络申请特定的QoS服务,网络在流量参数描述的范围内,预留资源以承诺满足该请求
+Differentiated service(区分服务模型,简称Diffserv)
当网络出现拥塞时,根据业务的不同服务等级约定,有差别地进行流量控制和转发来解决拥塞问题

1.Best-Effort模型
+Best-Effort是单一的服务模型,也是最简单的服务模型
+应用程序可任意发送任意报文,不需要事先得到批准或通知网络
+网络尽最大可能发送这些报文,但对时延,可靠性等新能不提供任何保障
+Best-Effort service是目前Internet的缺省服务模型,主要实现技术是先进先出队列(FIFO)
适用于绝大多数网络应用,如FTP、E-Mail等

2.IntServ模型
+为应用提供可控制的、端到端的服务
+网络单元支持QoS的控制机制
+应用程序向网络申请特定的QoS服务
+信令协议在网络中部署QoS请求
+RSVP是主要使用的信令协议

Integrated service是一个综合服务模型,可满足多用户的QoS需求,这种服务模型在发送报文前,需要向网络申请特定的服务。这个请求是通过信令(signal)来完成的,应用程序先通知网络发送报文的流量参数和所需的服务质量请求(如带宽、时延等)。应用程序在收到网络预留资源的确认信息后,才开始发送报文,发送报文被控制在流量参数规定的范围内。集成服务模型常常被用在网络边缘路由器上,传送QoS请求信令采用的是资源预留协议RSVP。
网络在收到应用程序的资源请求后,执行资源分配检查(Admission control),即基于应用程序的资源申请和网络现有的资源情况,判断是否为应用程序分配资源。一旦网络确认为应用程序的报文分配了资源,则只要应用程序的报文控制在流量参数描述的范围内,网络将承诺满足应用程序的QoS需求。而网络将为每个流(flow,由两端的IP地址、端口号、协议号确定)维护一个状态,并基于这个状态执行报文的分类、流量监管(policing)、排队及其调度,来实现对应用程序的承诺。
在Integrated service服务模型中,负责传送QoS请求的信令是RSVP(Resource Reservation Protocol,资源预留协议),它通知路由器应用程序的QoS需求。
Integrated service可以提供以下两种服务:
保证服务(Guaranteed service):它提供保证的带宽和时延限制来满足应用程序的要求。如VoIP应用可以预留10M带宽和要求不超过1秒的时延。
负载控制服务(Controlled-Load service):它保证即使在网络过载(overload)的情况下,能对报文提供近似于网络未过载类似的服务,即在网络拥塞的情况下,保证某些应用程序的报文低时延和高通过。

三、RSVP原理

RSVP是第一个标准QoS信令协议,它用来动态地建立端到端的QoS,它允许应用程序动态地申请网络带宽等。RSVP协议不是一个路由协议,相反,它按照路由协议规定的报文流的路径为报文申请预留资源,在路由发生变化后,它会按照新路由进行调整,并在新的路径上申请预留资源。RSVP只是在网络节点之间传递QoS请求,它本身不完成这些QoS的要求实现,而是通过其他技术如WFQ等来完成这些要求的实现。
RSVP信令在网络节点之间传送资源请求,而网络节点在收到这些请求后,需要为这些请求分配资源,这就是资源预留。网络节点比较资源请求和网络现有的资源,确定是否接受请求,在资源不够的情况下,这个请求可以被拒绝。
可以对每个资源请求设置不同的优先级,这样,优先级较高的资源请求可以在网络资源不够的情况下,抢占较低优先级的预留资源,来优先满足高优先级的资源请求。
资源预留判断是否接受资源请求,并承诺对接受了的资源请求提供请求的服务。但资源预留本身不实现承诺的服务,需要通过队列等其他技术来实现。

四、RSVP的问题
+要求端到端所有设备支持这一协议
+网络单元为每个应用保存状态信息,可拓展性差
+周期性同相邻单元交换状态信息,协议报文开销大
+不适合在大型网络中使用

基于信令实现的RSVP协议,目前在实施过程中遇到了很多问题,主要是RSVP要求端到端所有设备支持这一协议,对于一个从源地址到目的地址要经过很多设备的IP包来讲,做到这点是相当困难的,因为IP网本质是一个没有信令无连接网络,所以RSVP经过了几年的实践并不能在网络上真正实现。采用RSVP协议的另外一个困难是很难对各种应用预留带宽。随着网络带宽快速增加和各种新应用的不断出现,DiffServ逐渐成为QoS关键所在。

五、DiIFServ模型体系结构

Differentiated -Service即*差分服务模型_,它可以满足用户不同的QoS需求。与Integrated Service不同,它不需要信令,即在一个业务发出报文前,不需要通知路由器。对Differentiated Service,网络不需要为每个流维护软状态,它根据每个报文指定的QoS标记(着色结果),来提供特定的服务。当网络出现拥塞时,根据不同的服务等级要求,有差别地进行流量控制和转发来解决拥塞。采用相对优先权机制,有区别地控制不同信息流的分组聚类和转发行为,从而在保证服务质量和解决拥塞之间取得一个良好的折衷。业务在进入DS(DiffServ)网络时, 基于优先级(DSCP(DiffServ CodePoint)或IP优先级)进行业务流聚合,会聚成一个行为集合(BA,Behavior Aggregate)。
PHB(per-hop behavior):DS节点对特定的行为集合(BA)使用的转发行为,DS节点通过判别分组头中的DSCP来执行PHB。
具体的过程是:
首先,在网络的边缘进行不同业务的分类,打上不同的QoS标记(着色)。分类的依据可以是报文携带的四层、三层或二层的信息。如报文的源IP地址、目的IP地址、源MAC地址、目的MAC地址,TCP或UDP端口号等。
然后,在网络的内部,根据着色的结果在每一跳上进行相应的转发处理。比如通过拥塞管理机制,对实时业务提供快速转发处理,对普通业务提供尽力而为转发处理。流量整形,流量监管,拥塞避免等处理也类似,根据着色的结果,再逐跳的作相应的区别处理,从而获得网络两端业务不同业务类别的QoS保障。
Differentiated Service的端到端QoS保障通过以下一些技术来实现:
CAR:它根据报文所携带的信息进行分类,并利用Precedence或DSCP(DiffServ Coding Point)进行着色。CAR同时也完成流量的度量和监管。
GTS:对通过网络节点,指定的业务或所有业务进行流量整形,使其符合期望的流量指标。
队列机制:通过FIFO、PQ、CQ、WFQ等队列技术,在网络拥塞时进行拥塞管理,对不同业务的报文按用户指定的策略进行调度。
拥塞避免:主要使用WRED,对网络的拥塞情况进行预测,并在此基础上采取随机丢弃部分TCP报文的方式,达到拥塞避免,并避免全球TCP同步现象的发生。

报文的分类及标记

+报文分类及白偶记是QoS执行服务的基础
+报文分类使用技术: ACL和IP优先级
+根据分类结果交给其他模块处理或打标记(着色)供核心网络分类使用

报文分类可以把有相似QoS要求的业务的报文聚合成相应的类。分类的结果就是给报文打上某种标记,即着色。如果使用IP报文头的Precedence字段(TOS的高3个bit)进行着色,用户可以将报文最多分成8类。当然也可以按照RFC2474的定义,用DSCP(TOS的高6个bit)进行着色。报文着色以后,就可以方便下游节点进行相应的QoS处理,如拥塞管理、流量整形等。
网络管理者可以设置报文分类的策略,这个策略可以包括物理接口、源地址、目的地址、MAC地址、IP协议或应用程序的端口号等。一般的分类算法都局限在IP报文的头部所携带的信息,使用如链路层(Layer 2)、网络层(layer 3)、甚至传输层(layer 4)的信息。所以,它可以是一个由五元组(源地址、源端口号、协议号、目的地址、目的端口号)确定的流这样狭小的范围,也可以是到某某网段的所有报文。通常我们可以使用ACL来实现。
一般在网络边界,对报文进行着色,在网络的内部则简单的使用着色的结果作为队列调度、流量整形等处理的依据。QoS中用CAR来实现报文的分类及着色功能。下游(Downstream)网络可以选择接受上游(Upstream)网络的着色结果,也可以按照自己的分类标准重新进行着色。CAR是支持报文分类的主要技术,它同时承担流量监管的功能。用户可以通过不同的配置,让CAR只进行着色功能,让CAR只进行流量监管功能,或让CAR在进行流量监管的同时进行着色。CAR可以使用Precedence或DSCP进行着色。

流量监管与整形

一、流量监管-CAR

+CAR(Committed Access Rate):约定访问速率
+令牌桶算法
+对流量进行控制
整形(shaping)做业务流输出的速率符合业务模型的规定
丢弃(droping)根据特定规则丢弃分组
打标记(marking)设置报文的DS域(或IP优先级)

流量监管(traffic policing)的典型作用是限制进入某一网络的某一连接的流量与突发。在报文满足一定的条件时,如某个连接的报文流量过大,流量监管就可以对该报文采取不同的处理动作,例如丢弃报文,或重新设置报文的优先级等。通常的用法是使用CAR来限制某类报文的流量。 CAR使用IP头部的ToS字段来对报文进行分类,对于不同分类的流量,采取不同的动作。
CAR利用令牌桶(Token Bucket, TB)进行流量控制。
令牌桶按用户设定的速度向桶中放置令牌,并且,令牌桶有用户设定的容量,当桶中令牌的量超出桶的容量的时候,令牌的量不再增加。当令牌桶中充满令牌的时候,桶中所有的令牌代表的报文都可以瞬间被发送,这样可以允许数据的突发性传输。当令牌桶中没有令牌的时候,报文将不能被发送(丢弃),只有等到桶中生成了新的令牌,报文才可以发送,这就可以限制报文的流量只能是小于等于令牌生成的速度,达到限制流量的目的。
首先报文被分类,如果通过分类器识别出报文是某类要处理的报文,则进入令牌桶中进行处理。如果令牌桶中有足够的令牌可以用来发送报文,则认为是Conform,如果令牌不够,则认为是Exceed。然后在后面的动作机制中,可以分别对Conform的报文进行发送、丢弃、着色等处理。对Exceed的报文也可以进行发送、丢弃、着色等处理。当报文被令牌桶处理的时候,如果有一个报文被按Conform处理了,令牌桶中的令牌量按报文的长度做相应的减少。当报文被按Exceed处理了,令牌桶中的令牌不减少。
当CAR用作流量监管时,一般配置为: Conform的报文进行发送,对Exceed的报文进行丢弃。也就是令牌桶中的令牌足够时报文被发送,不够时报文被丢弃。这样,就可以对某类报文的流量进行控制。
CAR还可以进行报文的标记(Mark)或重新标记(Re-Mark)或者说着色与重着色。CAR可以通过Precedence或者DSCP来标记报文。

二、流量整形-GTS

通用流量整形(Generic Traffic Shaping,GTS)
利用CAR可以控制报文的流量特性,对流量加以限制,对不符合流量特性的报文进行丢弃。如果对需要丢弃的报文进行缓冲,将可以减少报文的丢弃,同时满足报文的流量特性,这就是通用流量整形(以后简称GTS)。
当报文到来的时候,首先对报文进行分类,如果分类器识别出报文需要进行GTS处理,则将报文送入GTS队列。如果GTS队令牌桶中令牌足够,则直接发送报文。如果令牌桶中的令牌不够,则进入队列中缓存。当队列中有报文的时候,GTS按一定的周期从队列中取出报文进行发送。每次发送报文时,将把GTS令牌桶中的令牌代表的数据量都发送出去。
GTS可以对不规则或不符合预定流量特性的流量进行整形,以利于网络上下游之间的带宽匹配。
每个接口,GTS选择下列两种方式之一来处理报文:
对接口所有流进行处理:此时若接口发送队列为空,且报文在单位时间内的流量未超过限制,报文被立即发送,否则报文进入接口发送缓存队列中。
对接口不同的流进行处理:将不同的流分别与流进行匹配,当规则匹配并且接口发送队列为空,且报文在单位时间内的流量未超过限制,报文被立即发送,否则报文进入接口发送缓存队列中。
为减少报文的无谓丢失,应在上游路由器出口对报文进行GTS处理,对于超出GTS流量特性的报文,缓存在上游路由器的接口缓冲区中。当网络拥塞消除时,GTS再从缓冲队列中取出报文继续发送。这样,发向下游路由器的报文将都符合路由器的流量规定,从而减少报文在下游路由器被丢弃的情况。若不在上游路由器出口做GTS处理,则所有超出下游路由器的CAR规定流量的报文将被下游路由器丢弃。
由于对GTS可能对报文进行缓存,那么使用GTS有可能增加报文的延迟。

三、物理接口总速率限制-LR

+LP(Line Rate):在一个物理接口上,限制接口发送报文(包括紧急报文)的总速率
+LR采用了令牌桶进行流量控制,所有经由接口发送的报文首先要经过LR的令牌桶进行处理
+利用QoS丰富的队列来缓存报文

物理接口限速(Line rate, LR)
LR的处理过程仍然采用令牌桶进行流量控制。如果用户在路由器的某个接口上配置了LR ,规定了流量特性,则所有经由该接口发送的报文首先要经过LR的令牌桶进行处理。如果令牌桶中有足够的令牌可以用来发送报文,则报文可以发送。如果令牌桶中的令牌不满足报文的发送条件,则报文入QOS队列进行拥塞管理。这样,就可以对通过该物理接口的报文流量进行控制。
LR的处理过程采用了令牌桶控制流量,当令牌桶中积存有令牌时,可以允许报文的突发性传输。当令牌桶中没有令牌的时候,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送,这就可以限制报文的流量只能是小于等于令牌生成的速度,具有限制流量,同时允许突发流量通过的目的。
LR相比较于CAR,能够限制在物理接口上通过的所有报文。CAR由于在IP层实现,对于不经过IP层处理的报文不起作用。较之于GTS,LR 不但能够对超过流量限制的报文进行缓存,并且利用QoS丰富的队列来缓存报文,而GTS则是将报文缓存在GTS队列中。由于CAR和GTS是在IP层实现的,所以对于不经过IP层处理的报文不起作用。

四、拥塞管理

+网络拥塞时,保证不同优先级的报文得到不同的QoS待遇,包括时延、带宽等
+将不同优先级的报文入不同的队列,不同队列将得到不同的调度优先级、概率或带宽保证
+算法:

对于网络单元,当分组到达的速度大于该接口传送分组的速度时,在该接口处就会产生拥塞。如果没有足够的存储空间来保存这些分组,它们其中的一部分就会丢失。分组的丢失又可能会导致发送该分组的主机或路由器因超时而重传此分组,这将导致恶性循环。
造成拥塞的因素有很多。比如,当分组流从高速链路进入路由器,由低速链路传送出去时,就可能产生拥塞;分组流同时从多个接口进入路由器、由一个接口转发出去或处理器速度慢也可能会产生拥塞。
拥塞管理是指网络在发生拥塞时,如何进行管理和控制。处理的方法是使用队列技术。将所有要从一个接口发出的报文 进入多个队列,按照各个队列的优先级进行处理。不同的队列算法用来解决不同的问题,并产生不同的效果。常用的队列有FIFO、PQ,CQ,WFQ等。
拥塞管理的处理包括队列的创建、报文的分类、将报文送入不同的队列、队列调度等。在一个接口没有发生拥塞的时候,报文在到达接口后立即就被发送出去,在报文到达的速度超过接口发送报文的速度时,接口就发生了拥塞。拥塞管理就会将这些报文进行分类,送入不同的队列;而队列调度对不同优先级的报文进行分别处理,优先级高的报文会得到优先处理。

五、拥塞避免

+传统的尾丢包在网络发生拥塞时对报文全部丢弃,并不加以区分
+TCP慢起动导致全局同步化
+进行拥塞避免,在网络没有发生拥塞以前根据队列状态进行有选择的丢包
+算法: RED、WRED

拥塞避免技术通过监控网络流量负载情况,尽力在网络拥塞发生之前预计并且避免在普通的网路上拥塞的发生。这些技术用来为不同优先级别的流量种类提供处理,在发生拥塞的情况下使得网络的吞吐量和利用效率最大化,并且使报文丢弃和延迟最小化。WRED就是一种避免拥塞的方法。
路由器允许在拥塞发生时期将输出流量存放在缓冲区中,在没有配置WRED的情况下使用尾部丢弃的方式来解决拥塞问题。由于内存资源的有限,传统的处理方法是,当队列的长度达到规定的最大长度时,所有到来的报文都被丢弃。尾部丢弃同等地对待所有的通信,不对服务等级进行区分。在拥塞发生期间,队列尾部的数据包将被丢弃,直到拥塞解决。对于TCP报文,由于大量的报文被丢弃,将造成TCP超时,从而引发TCP的慢启动和拥塞避免机制,使TCP减少报文的发送。当队列同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入慢启动和拥塞避免,称之为:TCP全局同步。这样多个TCP连接发向队列的报文将同时减少,使得发向队列的报文的量不及线路发送的速度,减少了线路带宽的利用。并且,发向队列的报文的流量总是忽大忽小,使线路上的流量总在极少和饱满之间波动。
为了避免拥塞,在网络没有发生拥塞以前根据队列状态进行有选择的丢包,当某个TCP连接的报文被丢弃,开始减速发送的时候,其他的TCP连接仍然有较高的发送速度。这样,无论什么时候,总有TCP连接在进行较快的发送,提高了线路带宽的利用率。RED(Random Early Detection )随机早期检测和WRED(Weighted Random Early Detection)加权随机早期检测就是用于的避免拥塞的方法。WRED与RED的区别在于前者引入IP优先权来区别丢弃策略,WRED在实际的应用中更为广泛。

加权早期随机检测—WRED

+WRED(weighted Random Early Detection): 加权随机早期检测
采用随机丢弃的策略,避免了尾部丢弃的方式二引起TCP全局同步
根据当前队列的深度来预测拥塞的情况
根据优先级定义不同的丢弃策略,定义上限阀值和下限阀值
相同的优先级不同的队列,队列长度越长丢弃概率越高

QoS配置

一、CAR配置
+定义规则
qos carl car-index { precedence precedence-value | mac mac-address }
+在接口上应用CAR策略或ACL
qos car {inbound | oubound }{ any | acl acl-index | carl carl-index } cir committed-rate cbs burst-size ebs excess-burst-size conform action exceed action
在每个接口上(inbound和outbound方向上),一共可应用100条CAR策略
在应用策略前,应该先禁止快速转发功能

二、GTS配置
+为某一类别流配置整形参数
qos gts acl acl-index cir committed-rate [cbs burst-size [ebs excess-burst-size [quence-length queue-length]]]
+为所有的流配置整形参数
qos gts any cir committed-rate [cbs burst-size [ebs excess-burst-size [queue-length queue-length]]]
这两条命令不能在同一接口使用
配置整形参数之前,应先关闭快速转发功能
Queue length 的默认值为50

三、LR的配置
+LR的配置命令
qos lr cir committed-rate [ cbs burst-size [ebs excess-burst-size ]]

四、FIFO配置
+配置FIFO队列中可容纳包的个数
qos fifo queue-length queue-length
+产看接口配置的队列策略
display interface interface-type interface-number

五、PQ配置
+配置优先队列
根据接口配置优先队列
qos pql pql-index inbound-interface type number queue { top | middle | normal | bottom }
根据网路层协议配置优先队列
qos pql pql-index protocol protocol-name queue-option queue { top | middle | normal | bottom }
配置缺省优先队列
qos pql pql-index default-queue { top | middle | normal | bottom }
在接口上应用优先队列组
qos pq pql pql-index
指定每一个优先队列的队列长度
qos pql pql-index queue { top | middle | normal | bottom } queue-length queue-length

六、PQ配置

七、CQ配置
+配置定制队列
根据接口配置定制队列
qos cql cql-index inbound-interface type number queue queue-number
根据网络层协议配置定制队列
qos cql cql-index protocol protocol-name queue-option queue queue-number
配置缺省定制队列
qos cql pql-index default-queue queue-number
在接口上应用定制队列组
qos cq cql cql-index
配置定制队列的队列长度
qos cql cql-index queue queue-number queue-length queue-length
配置定制队列连续发送字节数
qos cql cql-index queue queue-number serving byte-count

八、WFQ配置
+命令
qos wfq [ quene-length max-quenue-length [queue-number total-queue-number]]
Max-queue-length的缺省值为64个报文
Total-queue-number的缺省值为256个动态队列

九、WRED配置
+使能WRED
qos wred
+配置WRED计算平均队长的指数(可选)
qos wred weighting-constant exponent
+配置WRED个优先级参数(可选)
qos wred ip-precedence ip-precedence low-limit low-limit high-limit high-limit discard-probability discard-prob

www.huawei.com

QoS 服务质量的更多相关文章

  1. kubernetes之资源限制及QOS服务质量

    1.什么是资源限制? 1.1在kubernetes集群中,为了使得系统能够稳定的运行,通常会对Pod的资源使用量进行限制.在kubernetes集群中,如果有一个程序出现异常,并且占用大量的系统资源, ...

  2. Ocelot中文文档-Qos服务质量

    目前Ocelot支持一种QoS功能. 如果您希望在请求向下游服务时使用断路,则可以在ReRoute中进行设置. 这个功能使用了一个名为Polly的.NET库,这个库很棒,在这里可以找到它. 添加如下配 ...

  3. MQTT协议QoS服务质量 (Quality of Service 0, 1 & 2)概念学习

    什么是 QoS ? QoS (Quality of Service) 是发送者和接收者之间,对于消息传递的可靠程度的协商. QoS 的设计是 MQTT 协议里的重点.作为专为物联网场景设计的协议,MQ ...

  4. ITU-T E.800 有关服务质量(QoS)的术语定义

    摘要 ITU-T E.800建议书为服务质量(QoS)的研究和管理提供了一套通用术语.本建议书列出的与QoS相关的技术和非技术术语旨在代表电信市场所有各方(即用户.服务提供商.制造商和监管机构)的利益 ...

  5. ALLOT流控设备Qos解读

    ALLOT流控设备Qos解读  1. QOS 服务质量引擎 对于基于用户定义,QoS引擎根据用户定义进行决策,每个帧是否要: 传输数据帧到网络: 将数据帧存储在缓冲区: 丢掉数据帧. 新AOS改进了Q ...

  6. QoS专题-第5期-QoS实现之队列调度与报文丢弃

    QoS实现之队列调度与报文丢弃 前面的专题里面介绍了通过优先级映射或者MQC对报文进行分类和标记,那么分类之后要做什么呢?那就是根据分类结果对报文进行流量控制处理.拥塞管理和拥塞避免就是两种流量控制手 ...

  7. 快速掌握RabbitMQ(四)——两种消费模式和QOS的C#实现

    本篇介绍一下RabbitMQ中的消费模式,在前边的所有栗子中我们采用的消费者都是EventingBasicConsumer,其实RabbitMQ中还有其他两种消费模式:BasicGet和QueueBa ...

  8. .net core使用ocelot---第五篇 服务质量

    简介 .net core使用ocelot---第一篇 简单使用  .net core使用ocelot---第二篇 身份验证使用 .net core使用ocelot---第三篇 日志记录  .net c ...

  9. word20161218

    QoS, Quality of Service / 服务质量 QoS Admission Control Service / QoS 许可控制服务 Quality of Service, QoS / ...

随机推荐

  1. LeetCode - Daily Temperatures

    Given a list of daily temperatures, produce a list that, for each day in the input, tells you how ma ...

  2. MVC框架的理解(配置文件一次编写,所有的java代码都可以运行)

  3. Centos7提示swap交换空间不足解决方法

    一张图就能解决的问题,就不多bb了

  4. lch 儿童围棋课堂 启蒙篇 (李昌镐 著)

    第1章 了解围棋 第2章 无气不活 棋子的"气"第3章 有目数才能赢空第4章 常用术语第5章 吃子第6章 死活:眼第7章 死活:典型棋形第8章 布局:术语篇 第1章 了解围棋 (已 ...

  5. Java Dom4j XML用法总结

    1.新建XML文档:              Document doc = DocumentHelper.createDocument();             Element root = d ...

  6. DISC测试

    您的测评结果 您的测评结果是:SC主导DISC图形   结果解读 这种典型行为风格,可被大致描述为是"调解者"的类型.这种类型的人通常生性和善,关注细节.他们关心别人,并在工作中一 ...

  7. How tbb proxy works

  8. create-react-app 搭建的项目中,引入 webpack-bundle-analyzer 打包分析

    安装npm intall webpack-bundle-analyzer --save-dev 在 config/webpack.config.prod.js 文件(推荐)或 config/webpa ...

  9. C语言struct小知识

    1.C语言里的struct是不能包含成员函数的,只能有数据成员2.C语言struct定义变量只能用一下两种方式:struct { ... } x, y, z;struct point pt;直接poi ...

  10. 利用js获取客户端ip的方法

    1. 通过script标签引入url 比如如下代码: <script type="text/javascript" src="http://pv.sohu.com/ ...