802.11 Power Save(节电/省电/节能)机制总结

背景介绍

802.11 Power Save机制

了解WIFI节能的机制之前,首先要了解WIFI能耗的消耗发生在什么状态下,显而易见,发送和接收肯定是消耗能量的,还有一点是要认识到的,Power Save通常是在STA端进行的,AP需要一直广播并且很多AP都是固定位置并接电源的,移动性小,所以AP的power save基本上是要求支持STA的power save,不至于STA进入省电跟AP不兼容,我当前的认识里只有2个AP是可以省电的,一个就是TPC,可以对AP进行发射功率配置;另一个是SMPS,协商选择关闭某些天线的收发来达到节能效果。回过来接着讲耗能的状态,其实一般的WIFI设备还有两个状态:sleep状态(别以为sleep status下不耗能)和接收空闲状态。下面是四个状态:

· Sleep :节点进入休眠状态,关闭接收和发送,能耗最低;

· Rx idle:接收空闲状态,其实这个是CCA检测状态,并未进行数据的接收;

· RX:接收状态,STA检测到要发送给自己的数据,对数据进行接收;

· TX:发送状态,就是发送数据。

这四种状态是可以相互转换的,譬如数sleep状态转换成RX idle,然后RX idle可以转换到RX或者TX状态。数据通信的部分都是发生在TX和RX状态下,但是为了不产生传输冲突,WIFI大部分状态是处于Rx idle下的,而且这个状态下接近于RX状态,良好的使用power save机制是可以很大限度的进行节能的。

沿着这个思路其实就是要尽量降低RX idle的时间和增加Sleep的时间,从而引出了AP的缓存技术和STA的PS机制,这里只讲PS机制。

Power save机制

省电模式的前提机制

省电模式的前提机制,AP的beacon中携带TIM(Traffic indication Map)字段,里面包含DTIM Count,DTIM Period,Bitmap Control和Part Virt Bmap字段,下文会有详细介绍,先看DTIM period,这个通常在AP的配置上可以设置,不同厂商这个DTIM周期值会不同,有配置2也有配置3的,这个值如果较大,那么对AP的缓存能力有较高要求,设置较小sta 需要频繁从sleep中唤醒,PS效果不佳,这个值的意义就在于处于PS状态下的STA会在多少个beacon帧后醒来,就是sta的唤醒周期;而DITM Count就是对period的计数,表明当前beacon是period的第几个。这种状态是sta和AP关联上之后的场景,另一个是STA并未关联上AP,此时的STA状态是不定时地去进行信道扫描,每隔一些时间扫描一次,扫描后进行sleep,周期性的从sleep中醒来再扫描一次,这是未关联时的省电方式。

传统省掉模式(Legacy Power Save)

有了上面的了解,下面说一下传统省电模式的原理,也是我们所说的乒乓模式。假设某个时间STA进入sleep,它通过发送数据帧或null-date帧来告诉AP我进入省电了,这个帧的节能位会被置1,如下图:

AP收到这个帧后就不发数据帧给处于省电模式下的STA了。然后DITM period后STA wake up,并收到AP的beacon,在beacon 中DTIM 信息元素中根据AID 来告诉sta,在你sleep的时候有发给你的数据,我替你存下了,你现在醒了,快来取吧。这个时候STA发送PS-Poll帧给AP,告诉AP我来取数据了,AP收到PS-Poll后就将对应sta的缓存数据发给STA,,如果有多个数据帧的话那就在数据帧的more data位上置1,表示后续还有缓存数据,STA继续发送PS-Poll给AP,AP再传数据帧,一来一回,一来一回,直到data帧的more date位为0,AP会给STA发一个Null-data。LPS的流程示意图:

PS-Poll帧的结构可以参考如下信息:

可以明显看到PS-poll并没有Duration/ID信息,看地址信息也只有BSSID和Transmitter,没有包含Source AD,这里多了一个AID来告诉AP,我是来取这个AID的缓存数据的。Null-data还是很正常的。

传统省电模式的不足

PS-Poll省电机制定义在802.11的协议中,这个机制存在两个不足:一是效率低,二是时延大。

1. 效率低主要是STA要获到缓存于AP中的数据,必须通过发送PS-Poll帧,完成一次完整的交互过程(PS-Poll,ACK)。每次帧交互都需要进行退避机制及信道接入,造成额外开销增多,效率比较低。

2. 时延比较大,是因为STA每次根据DTIM间隔定时醒来接收AP的广播帧,如果AP为STA缓存数据帧,则STA发送PS-Poll,否则STA继续进入睡眠状态。因为DTIM一般Beacon间距的整数倍,Beacon间距时间一般为100ms,所以STA与AP进行数据交互的时延比较大,对一般时间敏感的业务数据(如语音或视频数据)并不能很好的支持。如果STA使用传统省电机制,如果需要进行语音数据传输,一般有两种做法,一是让STA保持ACTIVE状态,二是降低DTIM间距。

快速省电模式(Fast Power Save)

快速省电模式是在L PS的基础上来的,被称为PS-NULL-Poll机制。这个PS-null-Poll的机制是当STA wake up后,解析到beacon中有自己的缓存帧,则会发送一个null data帧给AP,并将PS位置为0,表示不节能了,需要获取所以缓存的数据,AP收到这个null-data后,从缓存队列中依次取出一个缓存data帧发送给STA,直到所有的缓存数据帧发送完,当然最后一个data帧的more data位会被置0。STA收到所有缓存帧后,直接发一个null data帧 给AP,并将PS位置1,表示自己再次进入PS状态。

快速PS和LPS的区别显而易见,LPS是一个PS-poll获取一个缓存帧,一次一帧,而且ps-poll ack都不能少,而Fast PS是一次null-data表示sleep or wake状态。并获取所以缓存帧,就好比搬运货物,LPS是徒手,一次一个箱子,来回跑,而Fast PS是用传送带,建立连接后,箱子一个一个的往传送带上搬运。

快速省电模式的不足

提升了LPS的效率,但是对敏感优先级的data不友好,时延问题并未解决。

APSD(Automatic Power Save Delivery)

APSD是基于802.11e新增的PS机制,这里面包含了带有QOS属性的PS机制,其实APSD是有些类似FAST PS的,也是一次触发,多次传输。APSD有两种模式:S-APSD(基于调度的自动省电模式)和U-APSD(非排程自动省电模式)。

S-APSD(Scheduler - Automatic Power Save Delivery)

S-APSD更像一个PCF下的PS模式,大家都知道PCF是AP来轮询下面的STA是否有数据要收发,若有数据上下行,只有AP轮询到某一个STA的时候,这个STA才会进行接入信道进行数据的收发,这种模式很少见,在常用的wifi收发中用到的基本上都是U-APSD,而S-APSD实际也没啥包可抓,下图是S-APSD的一个简单的工作模式。

在S-APSD中,SP(Service Period)是预先AP调度的,在调度时间将要到来之时,QOS-AP会发送一个triger frame,同时QOS-STA也会提前醒来接受该帧,从而开启一个服务时间。该服务时间是通过管理帧中的Schedule Element字段进行调度的,所以QOS-STA可以提前知道什么时候应该醒来。在上图中,QOS-AP发送的triger就是PS-Poll,然后就开始和QOS-STA交换数据,即STA向AP反馈数据之后,AP再向STA反馈数据,这样交替切换,直到SP时间结束。

在这里,QOS-AP和QOS-STA交换数据还是上下行按序切换的。

U-APSD(Unscheduled Automatic Power Save Delivery)

U-APSD这个才像是DCF下的qos-PS模式。比较常见的一种WMM –PS模式,包很容易抓到。AP 支持省电在WMM IE 信息元素其中的一个bit位会表明是否支持WMM 省电 (即U-APSD support)。STA 支持省电在关联请求中查看WMM IE 的Qos info字段4个AC 是否支持UAPSD(即比特位为1),抓包见下图:

 

U-APSD 是对传统省电的改进,在客户端关联的时候双方确定了哪些AC(BE/BK/VI/VO---qos的属性

)具有发送属性,哪些AC 有触发属性,以及触发后最多允许的发送报文数量--MAX-SP;客户端在休眠的时候,发往客户端的具有发送属性的AC将缓存在发送缓存队列,客户端需要发送具有触发属性的AC 去获取缓存帧。AP收到触发报文后,按照接入时候确定的发送报文数量,发送属于发送队列的帧。没有发送属性的 AC 仍然使用802.11传统的方式来传送。

在UAPSD省电下的STA 只有两种状态 DOVE和AWAKE;AP只能在STA 在AWAKE下才能给STA发数据,AP在STA DOVE的情况下给STA 缓存数据;换个角度想STA 可以在任何的情况下向AP 发送数据,因为AP永远是awake;

UAPSD的主要设计思想在于称作U-SP(unscheduled service period)。


STA 发送触发帧(空帧或数据帧)给AP ,AP向STA回复ACK后,U-SP被启动,AP通过EDCA的方式开始向STA发送缓存数据,U-SP的长度有MAX-SP(service period)决定;MAX-SP在WMM IE 的Qos info 中被定义,用于定义发往客户端的报文数量(在关联时候就被定义)。

MAX-SP在关联和重关联的时候被定义,在U-SP期间,AP必须向STA发送至少一个数据帧,如果AP没有缓存帧,则发送一个空帧,但是不能超过最大帧数;在U-SP期间,AP收到的STA的帧数据不叫做触发帧。U-SP结束后,AP通过在Qos 控制字段里的EOSP(Eed of service period)字段置为1来结束一次U-SP(EOSP在发送的缓存帧中查看是否最后一个置为1)。STA收到这个帧后,STA 就可以进入DOVE,AP 继续为STA缓存数据直到下一个U-SP传输开始;AP通过协调帧控制字段中的More Data字段来通知STA有更多的缓存帧,如果EOSP=1,more data=1 ,在立即发起一次新的U-SP传输,如果AP 没有数据发送给STA ,则发送一个空帧给STA;

展示一个QOS-null-data的帧:

APSD省电主要应用在具备优先级的数据中,没有优先级的data还是按照传统的省电模式进行。

UAPSD省电的优缺点

UAPSD克服了PS-Poll省电机制的缺点,提升了效率,同时时延相对较小。如果STA每20ms向AP发送数据,则AP也可以每20ms向STA发送数据,因此数据时延大致为20ms, 相对PS-Poll时延为n*100ms小。UAPSD也有缺点,因为STA通过向AP发送触发帧来发起一次U-SP传输,当STA发送触发帧后,STA进入AWAKE状态,并且等待AP向STA发送数据帧或空帧,直到AP发送的帧数据中EOSP字段被置1,STA才能重新进入省电模式DOVE。 注释(必须等待AP 发的帧数据EOSP 字段被职位1 才能进去省电)。上图的EOSP位就是置1的。

PSMP(Power-Save Multi-Poll)

备注:来源于网上。

实际上从802.11e中引入TXOP,Block ACK,802.11n中引入的RIFS,帧聚合,802.11ac中引入MU-MIMO,这些技术都会导致AP的突发(burst)下行传输的效率相比上行接入效率要高。

所以从节能模式的角度而言,在APSD中,先分节点,再分上下行的传输模式,就没有先分上下行,再分节点的传输效率高,那么后者就是PSMP设计的基本想法。

PSMP(Power-Save Multi-Poll):在802.11n中新增的模式,可以理解是引入了更严格的调度机制,其首先利用一个PSMP帧来调度整个节能模式的传输周期,将其分成PSMP下行传输时段,PSMP-DTT(PSMP Downlink Transmission Time)和PSMP上行传输时段,PSMP-UTT(PSMP Uplink Transmission Time)。在PSMP-DTT过程中,AP进行突发传输,其中帧间间隔可能会更小,比如RIFS。RIFS的时间会比SIFS会更小,SIFS时间是包含了一个发送状态到接受状态的切换时间,而RIFS仅仅是两次发送状态之间的切换时间。在该过程中,节点可以不采用CCA,直接在被调度的具体时间内醒来,并接受数据,从而可以获得更多的休眠时间,从而节能。在PSMP-UTT时间内,节点仅仅会在被调度的周期内醒来,并反馈上行数据帧,从而也减少了较多的监听过程,节约了能量。在PSMP中,若AP的下行传输中存在广播/组播包,那么会在PSMP-DTT时间内,第一个数据帧进行发送,这点实际上和之前的PSM模式传输组播或者广播帧是一样的。

如下图表述了一个PSMP的时序调度:

那么AP首先发送一个PSMP帧,该帧中包含了后续时间内,下行链路和上行链路具体的调度安排。然后开始进入PSMP-DTT时间,第一个是发送本地缓存的组播/广播帧(即PSMP-DTT1时刻内),然后按序发送节点所对应的缓存单播帧,这里PSMP-DTT时间内,帧间间隔可以采用RIFS,以达到更高的效率。对于ACK的部分,由于笔者没有做详细考证,所以没有加以描述。当PSMP-DTT时间结束后,节点会依次在自己对应的上行调度周期内,发送数据帧,如STA1就在PSMP-UTT1中发送上行数据。当PSMP-UTT时间结束后,这一轮PSMP的数据交换就完成了。

通过上述过程,也可以看出PSMP基本上也是一种基于调度的PS机制,使用到新的IFS,目前我也没有见过类似的基于RIFS的PS商用产品。优缺点个人感觉是对AP的调度要求高,对于传动的基于DCF竞争机制的AP会有一定的难容性。当然技术上实现也会难一些。

SMPS(Spatial Multiplexing Power Save)

SMPS是空间复用省电机制,也是11n引入的基于多天线引入的省电机制。基于的原理很简单,当业务量很少,负载不大时,选择关闭其中部分天线的收发功能来达到省电的目的。实际上STA不好贸然关闭自己的天线,因为AP端有可能单流也可能多流,发送流大于接收流的话,会造成无法正确接收。所以STA在SMPS的机制中需要跟AP有沟通,协商并配合完成通道关闭和激活。

在SMPS中有设置中有三种,3关闭SMPS,0静态SMPS,1动态SMPS,出自802.11n-2009—page68—table 7-43j。

SMPS的能力信息位表示在HT Capability info 的SM Power Save字段上或者通过SMPS Action帧交互SMPS能力信息。如图:

备注:我抓到很多SMPS位是11,但是他表示的却是:Spatial Multiplexing enable,我表示很无奈啊。

静态SMPS的流程很简单,STA需要1根天线来进行收发时,STA发送一个ACTION帧告诉AP你要切换到单流进行发送帧,若要恢复到多流则发送一个SMPS 静态disable的ACTION帧给AP,来结束单条流的下行。下图是静态SMPS的流程图:

动态SMPS听名字就可以理解它的作用,就是根据情况在单流和多流之间切换进行下行操作。交互帧是跟静态有区别的,看下图:

其中当STA发送一个动态模式的action frame后,需要通过接收一个单流的RTS使能多接收通道;当接收到目的地地址是自己的MAC地址的时,接收者切换到对应的多个接收通道,并且在接收结束时,关闭多流模式切换回原有的模式。而在静态模式中,这个切换需要一个显示的action frame,这里需要注意一点,SMPS不能区分多流传输之前的RTS/CTS和其他RTS/CTS,所以STA收到RTS后,给CTS后就会切入到多流收发状态下。

问题:为什么要发单流的RTS 才能使能多接收通道,如何让STA知道要接收MIMO 数据?

这个用一个单播帧就可以,协议建议用RTS,当然单播数据帧也可以,看厂商实现方式了。收到发送给自己的RTS,就认为有双流数据发送给自己,就需要切换到多通道;SMPS默认只开一条天线,如果收到RTS就把所有天线都打开。

综上:

· 静态的SMPS模式下,STA仅维护一个接收通道空闲,AP不会发送MIMO数据给处于Static SMPS模式的STA。HT STA可以使用SMPS Action帧交互SMPS状态;一个非AP的HT STA 可以利用HT Capability info域中的SM Power save 字段达到相同的目的。后者,使能STA关联后立刻用单通道接收。

· SMPS使得STA在一段时间内只激活一条接收通道,若STA处于动态的SMPS,也只有当AP 发送多流数据时才会根据AP发送的RTS切换为多接收通道,从而达到节能目的;

· SMPS Frame是一种HT 管理帧,用来指示SMPS的状态改变。AP和STA可以通过该帧来交互SMPS状态;

· SMPS帧控制字段信息其中:

Category字段为7,即HT类型。

HT Action字段为1,即SMPS。

TXOP-PS(Transmit Opportunity-Power Save)

TXOP的含义,当STA需要传输MSDU时,并不会在获得接入机会的同时接入信道,而是等待一段时间后再进行发送,一个STA从其获取接入信道的机会到其开始传输的时间叫做一个TXOP。

TXOP-PS是802.11AC协议新加的一种STA测的节能机制。其思想是“尽可能的早地识别出当前接收帧是否发给自己”,如果不是,则STA可以在该帧所处的当前TXOP剩下的时间内进入TXOP节能模式,待下一个TXOP才重新醒来,通过这种方式,可以实现TXOP内的少量节能。

TXOP-PS需要AP和STA同时都支持才可以实现,并且只有VHT AP和STA才有可能支持。

在VHT Cap info域中,B21代表TXOP-PS的能力,而AP 通过 beacon 、probe response、association response帧宣告自己具有TXOP-PS能力,而STA通过probe request、association request宣称自己具有TXOP-PS 能力。

VHT 能力域中对 VHT PS 字段的定义及解析:

我以为没法抓到支持VHT-TXOP的AP,但实际上我竟然看到一个支持的AP,挺强:

问题1:在TXOP-PS中STA怎么做到识别该帧不是发给自己的,然后在剩下时间段的TXOP内进入省电?

11AC并没有引入BSS颜色(11AX才引入),而这里的其实是根据PPDU的SGI字段的信息来进行判断,先看一下11AC VHT的 物理帧格式:

其中前面的是传统的preamble信息,后面有VHT的preamble这里面还有两个信息:VHT-SGI-A和VHT-SGI-B。跟LP的定义一样,VHT preamble的信息也记录了调制方式、速率、时间同步等信息。这里面VHT-SGI-A是用来区分VHT PPDU和HT PPDU,非HT PPDU,SGI-B是用来区分不同带宽的。其同样是采用BPSK调制,以1/2速率的二进制卷积码进行传输的。下面看下SGI的结构。


这里面就包含了AID和TXOP-PS如果STA 的PHY接收到1个PPDU,解析SGI中的Partial AID跟自己的AID不一致,站点将停止后续的接收,进入TXOP-PS状态。
问题2:在TXOP-PS 阶段内,硬件会先判别终端发来的帧是否是我们的帧,如果我不是我们的帧,硬件会把包丢弃, 没有交到上层。上层是处于什么状态呢?

首先要明确TXOP-PS所处于的状态是active状态下的,上层其实是醒来的状态,这个醒可以认为就是省电状态下的醒,而TXOP-PS只是觉得,虽然我是醒的状态,但是包不是给我的,我都懒得再继续解析了;一般的醒来是还要解析到MAC头,看目的地址是不是发给我的,不是我的就丢掉,而这个是提前了。

协议上的一些信息贴在这,供学者参考。

上面来自于P802.11ac_D2.0的10.2章节。

总结&遗留问题

到这里Power save算是基本说完了,但是可能有同学有疑问,一个AP下那么多STAs,sta是通过什么机制确定AP有自己的缓存帧呢,如果STA关联上AP后一致没业务,占着茅坑不拉X怎么办,AP怎么不踢掉这样的STA呢,所以下面的内容做一下补充。

TIM域信息讲解:

AID的取值范围:0-2007

AID的分配:关联时在关联响应包中存在AID信息

AID确定后在后面sleep时可以通过AP的beacon中的TIM信息确认AP为哪个STA缓存数据。

· Element ID:元素识别码,用来标识beacon帧中所包含的不同字段。

· Length:长度,描述的是该Element的长度,实际上Element ID和Length是一般管理帧中information element必备的元素。

DTIM Count,DTIM Period:DTIM计数以及间隔的时间。在802.11协议中,我们可以看到三个概念,TIM,DTIM,ATIM。TIM是一种基本的流量指示图的结构,标准的TIM中仅仅指示AP缓存的单播信息,DTIM(Delivery Traffic Indication Map)是一种特殊的TIM,其除了缓存的单播信息,也同时指示AP缓存的组播信息。

Bitmap Control,Partial Virtual Bitmap:该字段就是Bitmap的具体字段,实际上与我们一开始描述的bitmap结构还存在一些区别。以下我们重点描述下协议中具体使用的bitmap结构。

AP是采用一种Bitmap结构,用来通知节点自己的buffer信息的,若将其看做一个矩阵的话,那么该矩阵的每一行有8列,最下包含1行,最大包含251行,换言之该矩阵最大的存储空间为251行,251*8-1=2007(除去多播标识)。

而Bitmap Control的信息代表了起AID的偏移量,假设AID=88,然后找出88号在Bitmap的哪一行,先看下Bitmap Control的位信息代表的意思:

第一位如果置1则代表缓存有多播帧,这里先讨论单播缓存的场景,第一位置0,若第二位置1,则缓存数据属于Bitmap矩阵图的第二行,若要计算此STA的AID值,首先起始值从2*8=16开始算起,然后如何确认具体AID,这个具体AID=起始AID之和+偏移量。而我们所说的偏移量就需要通过Part Virt Bmap的信息来确定。

就拿上面所说的AID=88,起始AID很容易推算出是X3位,因为X3位代表起始AID=8*8=64,而X4位是16*8=128,大于88,所有BitMap control的X3位置1,88=64+24,24介于2*8—4*8之间,所有X1位也置1,综上Bitmap control的信息位为:0 1 0 1 0 0 0 0。然后在计算具体的偏移量。

88=64+16+a,很显然可以计算a=8,所有偏移量Part Virt Bmap的值应该0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0,转化为16进制就是80.

从TIM域信息也可以反推AID的值,实际情况可以抓包验证下。

Keep-alive 机制

Keepalive机制其实就是一种保活机制,在长时间没有业务的情况下维持自己的连接状态,这个比较简单,流程一般如下:

· 使能保活机制:

1. STA关联上AP;

2. 长时间没业务,STA每隔30s (时间可以自定义)会给AP发一个QOS-null-data/Null-data数据,根据省电的模式来的,告知AP我还没走;

3. AP会回一个ACK表示我知道了;

· Disable保活机制:

1. STA关联上AP;

2. 长时间没业务,STA给AP发送任何信息,而AP会每隔5分钟会给这个sta发送一个null-data,如果AP收到ack回复,则继续上述操作,表示sta还在,如果AP没收到ACK回复,AP会发三次,也就是15分钟三个Null-data.;

3. AP三个Null-data都没有收到ACK,AP就确认这个sta掉线了,会发单播去关联给这个STA,解除关联状态;

尽管他不是省电的内容,其实在了解省电的时候可能会有这种疑问,所以就把保活放在后面,以供参考。

申明:部分图形来源于网络,侵权则删。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619084.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

ctfshow-web-红包题第七弹

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 首先上来访问就是phpinfo。常规思路先扫一下目录。 发现一个.git文件403,这种情况通常都是存在文件夹,但是不能直接访问文件夹导致的。那么我们可以使用git_extract工具进行获取内容。…

SIP 协议路由规则详解

文章目录 SIP 路由关键字段SIP 路由图解 SIP 路由关键字段 SIP 协议实际上和 HTTP 类似,都是基于文本、可阅读的应用层协议,二者的不同之处在于 SIP 协议是有状态的。在 SIP 协议中,影响报文路由的相关字段如下表所示,总结起来如…

字体试衣间--轻松管理你的字体

2007年10月07日 14:44:00 PS达人们一般都收集有很多素材,字体便是其中之一,而且还颇为重要。硬盘上存有几百种字体是常事,即使上千,也不奇怪。但这么多字体,管理起来就很成问题了。 因此,今天给大家推荐这个…

NGINX相关配置

NGINX相关配置 NGINX配置信息 nginx 官方帮助文档:http://nginx.org/en/docs/Nginx的配置文件的组成部分: 主配置文件:/conf/nginx.conf(/nginx/conf/nginx.conf) 子配置文件: include conf.d/*.conf#事件驱动相关的配置 同步 event { wo…

鸿蒙无锡有什么特产,无锡特产都有哪些,你知道吗

到外地旅游,我们总是不厌其烦的将当地的特产往家带。那么去到无锡,你应该带什么特产呢?“太湖明珠”无锡是江南鱼米之乡,物产富饶,无锡特产多种多样,是外地人了解无锡文化的重要载体。让我们来盘点一些无锡…

驶入脱贫“高速路”-国稻种芯-通榆县:稻谷农特产品推送进城

驶入脱贫“高速路”-国稻种芯-通榆县:稻谷农特产品推送进城 (采写记者:刘明洋、段续、刘慧、郭翔、于佳欣)新华网 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 国稻种芯中国水稻网 中国三农智库网-功能性农业农业大健康大…

前端需要理解的工程化知识

1 Git 1.1 Git 常见工作流程 Git 有4个区域:工作区(workspace)、index(暂存区)、repository(本地仓库)和remote(远程仓库),而工作区就是指对文件发生更改的地方&#xff…

LeetCode——回溯篇(一)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 77. 组合 216. 组合总和 III 17. 电话号码的字母组合 39. 组合总和 40. 组合总和 II 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的…

SQL Server 配置管理器无法打开

背景 在把机器重启后SQL SERVER 配置管理器就无法正常打开了 现象 Connection to target machine could not be made in a timely fashion 解决 打开服务器的服务列表,找到 Windows Management Instrumentation 服务,重启下他问题解决 总结 配置管理器我…

解决SQLSever配置管理器不见了

错误: 在与SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server 已配置为允许远程连接。provider:Named Pipes Provider,error:40-无法打开到SQL Server 的连接&#x…

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 TextEdit 文本编辑框 其定义为&#…

SQL Server 配置管理器不见了

SQL Server 配置管理器不见了 错误重现: 之前安装好的SQL Server 2012打开都没有问题,好多天没有打开了,今天打开我的SQL Server 2012 连接时出现错误: 在与SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或…

如何打开sql server配置管理器

1. 在开始菜单中找 2.如果开始菜单中找不到 按 win键R键 打开后在里面输入 SQLServerManager10.msc 这里的 SQLServerManager10.msc 对应的是SQL Sever 2008 SQL Sever 2019版本的对应的是 SQLServerManager15.msc 具体你sql server的版本对应的哪个,可以去C:\…

SQL 配置管理器找不到了

想用数据库建立远程连接,于是想把数据库改成IP地址连接,突然发现配置管理器不见了!!!!???百度了一下,有人说可以用win R打开后,输入 SQLServerMa…

SQLServer找不到配置管理器,如何打开配置管理器

总有些sqlserver安装完毕之后找不到配置管理器,想看个端口号或者看个服务的用户名,都很气。下面来介绍一下通过windows命令来打开SQLSERVER配置管理器。 首先:windows键R键 各个sqlserver版本在textbox中输入对应的命令如下: SQ…

空号检测API 接入的Java 和 Python 代码总结

空号检测api 是一种基于手机号码查询的技术工具,可以帮助企业准确识别无效手机号,包括空号、停机、库无等状态。通过使用空号检测API,企业能够过滤掉无效的手机号,确保将有限的资源和精力用于有效的目标客户群体,从而提…

【git进阶使用】 告别只会git clone 学会版本控制 ignore筛选 merge冲突等进阶操作

git使用大全 基本介绍git 快速上手一 环境安装(默认已安装)二 远程仓库克隆到本地1 进入rep文件夹目录2 复制远程仓库地址3 git clone克隆仓库内容到本地4 修改后版本控制4.1 修改文件4.2 git status查看版本库文件状态4.3 git add将文件加入版本库暂存区…

圣诞桌面装饰软件Xmas snow for Mac

Xmas snow for Mac是专为Mac用户所设计的圣诞桌面装饰软件,Xmas snow Mac版在您的桌面用下雪的方式来告诉你圣诞新年倒计时。您可以使用Xmas snow Mac破解版在您的桌面上添加圣诞树、圣诞花环、雪花、倒计时,您还可以每小时聆听圣诞节的曲调哦&#xff0…

c语言 桌面下雪程序,用C++写的在桌面上飘雪的特效程序

#include〈windows.h〉 #include〈time.h〉 #include〈stdlib.h〉 #include〈iostream.h〉 const int SnowNumber=500; //雪点数量 struct SnowNode {POINT postion; //雪点位置 int iColor; //先前的颜色 int iSpeed; //下落速度 int iMove; //下落距离 int iStick; //粘贴度 …

Linux/Unix桌面趣事:让桌面下雪

在这个节日里感到孤独么?试一下 Xsnow 吧!它是一个可以在 Unix/Linux 桌面下下雪的应用。圣诞老人和他的驯鹿会在屏幕中奔跑,伴随着雪片让你感受到节日的感觉。 我第一次安装它还是在 13、4 年前。它最初是在 1984 年 Macintosh 系统中创造的。你可以用…