WiFi基本知识总结 --- 通信框架及基础概念说明-程序员宅基地

技术标签: 人工智能  物联网  WiFi  big data  

注:本文的主要目的是为WiFi初学者,或由一定无线通信基础读者进一步了解WiFi。文中我会尽量以通俗易懂和便于初学者理解的语言来描述相关概念。

一、计算机网络模型

研究网路通信就必然避不开OSI七层网络模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。基本所有的网络通信系统都会基于这些标准来研究。
工程应用上为了简化OSI七层网络模型,将其简化为TCP/IP五层网络模型。这里,我对这种分层做了简单总结,如下图:
OSI网络模型和TCP/IP五层网络模型
这里为什么会提到OSI网络模型呢?目的是引出我们今天讨论的主角——WiFi。WiFi主要研究的是OSI网络模型的最下面两层:数据链路层(Data link layer)和物理层(Physical layer)。

二、WLAN与WiFi

WLAN(Wireless Local Area Network,无线局域网)

  • WLAN是指利用射频(Radio Frequency , RF)技术,使用电磁波并利用无线信道作为传输介质的计算机网络。以此所构成的局域网络,在空中进行通信连接。
  • WLAN技术的出现是为了弥补有线网络的不足,以达到网络延伸到目的,实现无网线、无距离限制的通常网络。目前常用的WLAN实现技术有蓝牙、zigbee、WiFi等等。
  • 需要注意的是,目前使用较广的是WLAN技术是WIFI,但是WiFi并不等同于WLAN,它只是WLAN实现技术的一种

WLAN与WiFi(Wireless Fidelity,无线保真)

  • WiFi是一个国际无线局域网(WLAN)标准,全称为Wireless Fidelity。
  • WiFi基于IEEE802.11协议族,IEEE802.11协议最初发表于1997年,定义了WLAN的MAC层和物理层标准。继802.11协议发表后,又相继推出了802.11a、8021.11b、802.11g、802.11n等。
  • WiFi是一个无线网络通信技术的品牌,由WIFI联盟所持有,使用在符合IEEE802.11标准上,目标是改善基于IEEE802.11标准的无线产品之间的互通性。
  • 所谓互通性也就是说,不同芯片厂商,产品商的WiFi产品可以基于IEEE802.11标准之下无障碍,流畅的进行通信交互。为了达到这个目的,WiFi联盟(WiFi Alliance,简称WFA)提出市面上流通的WiFi产品需要去他们指定的认证实验室进行认证测试。当然,这些都是收费的。那么是不是也可以不用去?也可以的,但是很多国家和地区会要求在本地售卖的WiFi产品过WFA认证。这也是为了更好的统一各个芯片厂商,使得大家生产出来的产品能够更好的互通互联,目前市场上的产品基本都有WIFI联盟的认证logo。不相信的话可以看看你的设备的,背面是否有如下logo:
    WiFi联盟log

WiFi 发展历史

WiFi发展历史一
WiFi发展历史二

三、IEEE 802协议族

  • IEEE802家族是由一些列局域网(Local area network,简称LAN)技术规范所组成的,802.11是其中之一。IEEE802规范的重心放在OSI模型的最下面两层,因为它们同时涵盖了物理层(physical,简称PHY)与数据链路层(data link)组件。

  • 802系列中的个别规范是由点号后的一位数定义的。例如,802.3是载波监听多路访问/冲突检测(Carrier Multiple Access network with Collision Detection,简称CSMA/CD规范)通常和Ethernet有关。

  • 802.11使用和802.2完全相同的LLC层和802协议中的48位MAC地址,这使得无线和有线之间的桥接非常方便。但是MAC地址只对无线局域网唯一。

  • 只要是802网络,就必然同时具备MAC与PHY两种组件。MAC是一组用以决定如何访问媒介与传送数据的规则,至于传送与接收的细节则交由PHY负责。换而言之,WIFI技术主要研究的是物理层以及数据链路层的东西
    80211

  • 802.11的数据链路层由两个子层构成,逻辑链路层LLC(Logic Link Control)和媒体控制层MAC(Media Access Control)。PHY连接一个数据链路层的设备(MAC)到一个物理媒介,保证数据在物理媒介上传输。常见的物理媒介有:光纤、有线、无线、量子

  • WiFi技术主要研究数据链路层和物理层,如下图所示。一般情况下,LLC层及以上由软件实现,MAC子层和PHY主要由硬件实现。
    在这里插入图片描述

四、IEEE 802.11协议族

第一版802.11协议标准在1997年发布后,陆续有很多802.11协议标准也发布出来了。

1. 802.11协议族简介

IEEE 802.11协议族定义了无线局网的MAC和PHY层标准,下面总结常见的IEEE 802.11类协议。

  • IEEE802.11系列常见协议

    •11a: for 5GHz at up to 54 Mb/s

    •11b: for 2.4GHz at up to 11 Mb/s

    •11g: for 2.4GHz at up to 54 Mb/s

    •11n: for 5GHz and 2.4GHz using MIMO at up to 600Mb/s

    •11c: Bridge operation

    •11d: International roaming

    •11e: Quality of Service (QoS)

    •11f: Inter-Access Point Protocol (IAPP)

    •11h: spectrum protection for radar and satellites

    •11i: security

    •11j: for Japan

    •11k: radio resource measurement

    •11p: for vehicular environment

    •11r: fast roaming

    •11s: ESS mesh networking

    •11T: wireless performance prediction

    •11u: interworking with non-802 networks

    •11v: WLAN management

    •11w: protected management

    •11y: 3650-3700 MHz in US

    •11z: Direct Link Setup

将上面提到的协议,整理如下:
802.11协议族
802.11协议族
IEEE802.11无线工作组制定的802.11类规范分为两个部分:

  1. 802.11 MAC层相关标准:只要是无线网络里面的一些功能的规范,或是具体协议的体现,如QOS、MESH、错误检测、数据帧校验、无线安全标准;
  2. 802.11 **物理层(PHY)**相关标准:主要定义了无线协议的工作频段,调制编码方式及最高速度支持;
    对上面提到的协议进一步分类如下:
  • MAC层(无线网络中的MAC层):
    对无线网络MAC层主要是用来对无线信道的通信媒介进行管理的协议。

    • IEEE 802.11d
    • IEEE 802.11e
    • IEEE 802.11h
    • IEEE 802.11i
    • IEEE 802.11j
    • IEEE 802.11k
  • 物理层(PHY层):

    • IEEE 802.11a

    • IEEE 802.11b

    • IEEE 802.11g

    • IEEE 802.11n

在WiFi技术中,物理层和PHY层用到的主要技术不同:
物理层:OFDM、OFDMA、MIMO等
MAC层:CSMA/CA、RTS/CTS、信道绑定、帧聚合技术、块确认技术等
关键技术

2. WiFi 4/5/6

  • 2018年,WiFi联盟对不同标准的WiFi协议指定了命名,802.11n被命名为WiFi 4,802.11ac被命名为WiFi 5,802.11ax被命名为WiFi 6,WiFi 4之前不做时代命名。
  • 下图给出了不同WiFi标准的介绍,基本上所有的标准都是使用的OFDM技术,唯有WiFi 6差异比较大,它的编码方式、空间流数、信道带宽都异于WiFi 4,WiFi 4是4条空间流,WiFi 6可以做到12条空间流。
    在这里插入图片描述
  • 随着802.11协议标准的不断迭代,WiFi的传输速度也越来越快。可以看到从OFDM技术引入WiFi后,WiFi的传输速度得到质的提升。下面来简单看一下,OFDM到底是什么。
  • OFDM(Orithogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(Multi Carrier Modulation),多载波调制的一种。通过频分复用实现高速串行数据的并行传输,它具有较好的抗多径衰弱能力,能够支持多用户接入。
  • OFDM技术由MCM(Multi-Carrier Modulation,多载波调制)发展而来。OFDM技术是多载波传输方案的实现方式之一,它的调制和解调是分别基于IFFT和FFT来实现的,是实现复杂度最低、应用最广的一种多载波传输方案。
  • OFDM是一种特殊的多载波技术,其主要思想是将信道分成若干正交子信道,将高速数据信号转换成并行的低速的子数据流,调制到在每个子信道上进行传输。各个子载波相互正交,扩频调制以后可以互相重叠,不但较少子载波间的干扰,还提高了频谱利用率。(即,当一个子载波到达波峰的时候,另一个子载波幅度为0,即两个子载波正交无干扰。)
802.11n的关键技术

在802.11ax(WiFi 6)出来以前,802.11n标准对WiFi技术的推动起到了很大的作用,可以说是WiFi技术迭代中非常重要的一代协议。我们这里简单分析一下,802.11n中使用到的一些关键技术以及它们对WiFi技术的推动作用。
802.11n关键技术

WiFi速率计算

WiFi速率计算

  • 理解:空间数据流数量影响传输速率,子载波编码bit数即每个子载波能传输多少个bit,编码率越高越好,有多少个有效的子载波用来承载数据的传输。
  • 空间流或天线数量:简单来讲就是天线的数量。MIMO场景下用于数据收发,如2*2MIMO。
  • Symbol与GI长度:Symbol就是一个信号。相邻的两个Symbol之间需要一定的空隙(GI),以避免Symbol之间的干扰。“Symbol + GI”的倒数就是每秒能传输出多少个Symbol。从11ac及以前,由于使用的FFT阶数不一样,Symbol和GI的数值会有些变化。
  • 编码方式:编码方式,说白了。就是要在1个Symbol里面尽量多的bit。从11a/b/g/n 到11ac,再到11ax,一直在做编码方式的优化。最新的11ax最高效的编码方式就是1024QAM,即1个Symbol可以包含10个bit的数据。
  • 码率:码率就是在原始的信息里面,加入一些用于纠错的码。用冗余换取提高可靠度。由于纠错码的引入,会导致真是的传输速率有所下降。在信道信噪比较高的时候,就会采用5/6码率,这样传输速率最高。
  • 有效子载波数量:在11ac及以前,采用64阶FFT,也就是把20MHZ切成64个子载波。到了11ax,采用256阶FFT,将20MHZ切成256个子载波。每个子载波承载一个Symbol。

3. WiFi通信频率与信道划分

  • WIFI通信所采用的通信频率,一般是2.4GHZ/5GHZ 。不同信号的信道的频率的划分是不同的。

  • 在2.4G频段,目前WiFi使用的通信频率为2.402GHZ ~ 2.483GHZ,在中国2.4G频段开放了1~13信道。每个信道之间的间隔均为5MHZ,每个信道的有效带宽是22MHZ。但是,实际使用中,有效的带宽是20MHz,其中有2MHz是隔离频带,起保护作用。

  • 相邻信道间有重叠,尽量不要同时使用,以免造成干扰。三个不重叠的信道:1、6、11;2、7、12;3、8、13;
    在这里插入图片描述

  • 不同的标准需要的带宽不同占用的信道数目也不同,802.11b/g需要20MHZ的带宽,因此占用5个信道;80.11n需要40MHZ因此占用9个信道

  • 802.11n在MAC层上进行了一些重要的改进,所以导致网络性能有了很大的提升例如:
    因为传输速率在很大的程度上取决于Channel(信道)的ChannelWidth有多宽,而802.11n中采用了一种技术,可以在传输数据的时候将两个信道合并为一个,再进行传输,极大地提高了传输速率(这又称HT-40,high through)

  • 另外呢,无线路由器的载波频率是可以调整的,即使两个路由器都是用同一个信道,他们也不会使用相同载波频率,不过相比于不同信道下的设备,同一信道下的路由器相互之间的干扰会更大一些,因此在使用上还是建议错开信道,最好两个设备间隔5个信道使用。

  • 不同国家的信道划分
    在这里插入图片描述

在这里插入图片描述

  • 可以看到信道对应的中心频率提升5MHZ,信道的编号就加1。
  • 每个国家允许5GHZ无线路由器使用的频段也各不相同,如果无线网卡和无线路由器所使用的5GHZ信道不匹配,就很可能存在兼容性问题。
  • 另外在维基百科上找到了彩色的信道划分图片:WLAN信道列表

五、WiFi基本概念

1. 基本WiFi网络框架 - 网络拓扑结构

在这里插入图片描述
网络拓扑结构-独立网络(Ad-hoc)

  • 仅由两个及以上STA组成,网络中不存在AP。
  • 各设备自发组网,设备之间是对等的。
  • 网络中所有的STA之间都可以直接通信,不需要转发。
  • Ad-hoc模式也称为对等模式,允许一组具有无线功能的计算机或移动设备之间为数据共享而迅速建立起无线连接。
    在这里插入图片描述

网络拓扑结构-基础网络(Infrastructure)

  • 基于AP组建的基础无线网络
  • 由AP创建,众多STA加入所组成
  • AP是整个网络的中心
  • 各STA间不能直接通信,需经AP转发

2. 网络拓扑结构

WiFi网络拓扑结构

3. WiFi常见术语

上面提到了一些我们在WiFi领域常用到的一些英文的缩写,初见肯定会很奇怪。所以这里对WiFi中常见的一下名词进行解释。

WM(Wireless Medium,无线媒介)
  • 802.11标准通过无线媒介在STA之间传递帧,多种物理无线媒介中射频(RF , radio frequency)物理层应用最广泛。
BSS(Basic Service Set,基础服务集)

AP(Access point)

  • 一种特殊的Station,将BSS连接到DS(Distribuition system,分布式系统)。AP位于BSS中心,AP在哪儿,BSS就在哪儿。

STA(Station)

  • 无线工作站,任何wireless设备都可以叫STA。比如正在使用无线网络的平板、手机、电脑等。
DS(Distribuition system,分布式系统)
  • 称为BSS的分布式网络,BSS解决了一个区域内多个无线终端通信,但终端通信往往分布在各个地方。它的作用是让不同区域的BSS连起来,让终端之间可以相互通信。

SSID(Service Set ID,服务集识别码)

  • 相当于无线网络的名称,用于标识一个BSS。作用是便于用户辨识。

BSSID(Basic Service Set ID,基础服务集识别码)

  • 唯一标识一个BSS,不同BSS下BSSID不同。BSSID本质是AP的MAC地址。
    BSS
ESS(Extended Service Set,扩展服务集)
  • 采用相同SSID的多个BSS形成的更大规模的虚拟BSS。要求两个BSS接入同一个DS,SSID相同,且BSS区域要有一定的重叠。

ESSID(Ectended Service Set ID,扩展服务集标识)

  • 各BSS相同的SSID成了ESS的身份标识,用于对终端通告一个连续的WLAN。
    ESS

六、802.11通信管理框架

和其他通信方式相似,在进行通信前,通信双方需要进行连接。在进行WiFi通信时也是一样,接下来我们仪器看下WiFi中的连接管理功能。
我将连接管理的流程进行了简化,目的是为了读者更好的理解这些流程。下面给出的一个标准化的WiFi连接管理流程。
WiFi连接流程
WiFi连接流程主要分为:扫描、认证、关联、四次握手四个步骤,其中四次握手并非必须的步骤。它根据系统的认证方式不同,决定是否进行四次握手这一步骤。一般,前面三步即扫描、认证、关联为WiFi建立连接所必须的步骤。

扫描(Scan)

802.11MAC通过使用Scanning功能来完成Discovery,其目的是:

  • 寻找一个网络;
  • 当STA漫游时寻找一个新的AP;

1. 主动扫描(active scan)
在每一个信道上针对特定的网络发送Probe request报文,从收到的Probe Response中获取BSS的基本信息以及AP的能力集,如BSSID、SSID、支持的速率、加密算法等 ,Probe Response包含的信息和Beacon帧类似的。
优点:速度快
缺点:耗电

2. 被动扫描(passive scan)
通过在每个信道上侦听AP定期发送的Beacon帧来发现网络,Beacon帧中包含的该AP所属的BSS的基本信息以及AP的基本能力级,包括:BSSID、SSID、支持的速率、支持的认证方式,加密算法、Beacon帧发送间隔等。STA在收到对应的Beacon帧后就会进行判断,此AP是否是我们要找的AP以及对应的能力是否匹配以支持连接。
优点:省电
缺点:耗时长

scan

认证(Authentication)

在扫描成功完成后,需要进行无线网络的认证,目的是:

  • 防止未授权的STA访问网络,在访问AP之前,需要先进行身份认证。

根据认证的网络类型的不同,又可以分为以下两种:

1. 开放系统认证(Open-System Authentication)
等同于不需要认证,没有任何安全防护能力。允许任何用户加入到无线网络中来。所有请求认证的STA都可以通过认证。类似于我们家里的路由器不设定密码的情况。

  1. STA发送包含station ID(typically the MAC address)的authentication request。
  2. AP回复包含成功或失败的authentication response。

在这里插入图片描述

2. 共享密钥认证(Shared-Key Authentication)
AP随机产生一个challenge包(即一个字符串)发送给STA,STA将接收到的字符串拷贝到新的消息中,用密钥加密后再发送给AP。AP接收到该消息后,用密钥将该消息解密,然后对解密后的字符串和最初给STA的字符串进行比较。相同则通过认证,不相同则认证失败。
shared key

关联(Association)

当设备认证流程验证通过后,设备会再发起连接请求以关联AP设备。AP将用户信息添加到数据库,向用户回复关联响应,此过程也常被称为注册。

关联的具体步骤为:

  • STA发送Association request帧给到AP,AP检查通过后会回复Association Response给到STA。STA在正确收到AP回复的Association Response后,两个设备就关联上了。

那么此时会根据安全方式的不同,有两种处理方式:

  1. 如果AP采用的Open-system方式,则到这里STA已经连上AP了。
  2. 如果AP采用的WPA-PSK/WPA2-PSK/WPA3等加密方式,那么此时设备还无法正常通信。设备还需要进行四次握手,以获取加密密钥。再正确获取加密密钥后,STA才能正常使用WiFi网络。
    关联
四次握手(Four-way handshake)

当AP采用WPA-PSK、WPA2-PSK、WPA3等加密方式的情况下,当STA在成功收到AP的Association Response后。会继续进行四次握手流程,以获取用于单播帧加密的PTK,基于组播/广播帧加密的GTK。
四次握手

七、无线安全

  • 与有线网络不同,理论上无线电波范围内的任何一个站点都可以监听并登录无线网络,所有发送或接收的数据、都有可能被截取。
  • 为了使授权站点可以访问网络而非法用户无法截取网络通信,无线网络安全就显得至关重要。
  • 安全性主要包括访问控制加密两大部分
  • 访问控制:保证只有授权用户才能访问敏感数据。
  • 加密:保证只有正确的接收方才能理解数据。

下面是WiFi技术中常见的一些加密方式。

Wired Equivalent Privacy (WEP)
  • WEP是最早的,最常用的,也是最脆弱的安全保证;
  • 使用共享秘钥RC4加密算法;
  • 有64位密钥和128位密钥两种加密方式;
  • 密钥长度最初为40位(5个字符),后来增加到104位(13个字符),有些设备可以支持152位加密。创建一个IV与秘钥共同加密数据包;

缺点:

  • WEP Key 长度太小;
  • WEP不提供自动修改密钥的方法;
  • IV 空间太小并且IV 重复使用(平均大约每 5 小时重复一次);
  • 如果不是share认证,即使WEP密码错误,站点端显示的还是连接上,只是不能正常数据通信;
WPA(Wi-Fi Protected Access,WiFi接入保护)
  • 遵循802.11i的草案,在802.11i未完成之前的过渡方案,对WEP的改进;
  • WPA 利用TKIP(Temporal Key Integrity Protocol,临时密钥完整性协议) 来代替WEP;
  • TKIP 仍用RC4加密算法, 但是每个包的RC4 key是不同的;
  • WPA 引入4个新算法;
  • 48位初始化向量(IV),IV顺序规则(IV Sequencing Rules);
  • 每包密钥构建(Per-Packet Key Construction);
  • Michael消息完整性代码Code,MIC以及密钥重获分发;
WPA2(Wi-Fi Protected Access 2,WiFi接入保护2)
  • 基于完整的802.11i标准。
  • 采用AES(Advanced Encryption Standard,高级加密协议)加密算法。
  • 采用CCMP(Counter Mode with Cipher-Block Chaining Message Authentication Code Protocol,加密块链消息验证码协议的计数器模式)密钥管理协议。
  • 支持缓存密钥和预认证。
WPA3(Wi-Fi Protected Access 3,WiFi接入保护3)
  • 基于WPA2全面升级,目前最新也是WiFi最安全的加密方式
  • 采用了更加安全的SAE(Simultaneous Authentication of Equals,对等实体同时验证)加密算法
  • 使用192位的Suite-B安全套件,相较于WPA2采用的128位密钥长度,该模式将密钥长度增加至192位,进一步提升了密码防御强度。
  • 密钥保护:使用更加安全的HMAC-SHA-384算法在四次握手阶段进行密钥导出和确认。
WPS(Wi-Fi Protected Setup)

类似的称呼:QSS/SES/AOSS/EZ-SETUP。
为解决无线安全设置比较繁琐、专业性强的问题。
如果你足够细心的话应该可以在,应该可以在家里面main路由器上找到标有WPS这个按钮,当然你家的路由器要支持这个功能的haul才可以使用。是不是突然发现这么多年终于知道那个按钮是干嘛了的感觉。

WPS有两种模式:PCB和PIN模式。因为本博客定位于科普,只介绍简单的基本知识。同样的,后面如有时间会更新一篇详细介绍该功能的文章。

关联过程
站点通过WPS协商过程获得AP当前的无线安全设置
​ (SSID,安全模式,密码)

正常接入到BSS。

2种常见的启动WPS协商的方式:

  • PIN:在AP上输入站点的PIN码;

  • PBC:2分钟内分别按下AP和站点上的按钮(你的STA上面也有该按钮才行)

同样的,还是盗个图来说明一下该模型
wps

八、总结

后续
  • 其实wifi想关的知识还有很多,一篇博客肯定是介绍不完,只在这里介绍些很基本的东西,算是一个科普吧。也正合了本文的开头,面向初学者的目的,希望本篇博客对你来说通俗易懂。后续笔者也会抽更多时间,针对WiFi协议的各个方面做进一步的探讨和研究。同时也会从软件架构层面做一些分析和解读。
荐书
  • wifi相关的知识如果要详细了解的话可能需要厚厚的一大本书,恰巧我看过这本书,并且打算把它推荐给你。Mattbew S. Gast写的《802.11无线网络权威指南》,由O’Reilly Taiwan公司编译 , 东南大学出版社出版的。好像O’Reilly Taiwan公司翻译了不少国外的技术类的书籍,而且质量都还不错,感兴趣的话可以找来看看。
  • 虽然这本书比较旧了,但是对连接WiFi的一些基本知识来讲,本相当经典且并不过时。
  • 在网上搜了一圈,终于找到了这本书的英文原版:《802.11 Wireless Networks: The Definitive Guide 》,免费的且可以下载下来。该网站上还有很多外文技术书籍都是免费,而且种类挺多,还能发送到kindle上面去看。有需求的同学可以去看看。
  • 倘若你熟读了本书,并了解了基本概念。如果想要进一步的研究WiFi,可以直接去IEEE 官网或者WFA官网找官方发布的最新的协议标准来看。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wit_732/article/details/103772676

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue