一、基本概述
1、有线和无线网络
目前最著名的有线网络是以太网,但无线网络WLAN是一个很有前途的发展领域。虽然它可能不会完全取代以太网,但它的用户越来越多,最有前途的无线网络是Wifi。本文介绍无线网络相关内容。
与有线网络相比,无线网络仍然存在很多缺点:
由于通信双方通过无线方式进行通信,因此在通信之前需要先建立连接;而有线网络则是通过线缆直接连接,没有这个过程。通信双方的通信方式为半双工;而有线网络可以是全双工的。通信过程中网络层以下发生错误的概率非常高,因此帧重传的概率非常高。有必要在网络层以下的协议中添加重传机制(不能仅仅依靠TCP/IP延迟等待重传等开销)。以确保);而有线网络的错误概率很小,网络层不需要这么复杂的机制。数据在无线环境下处理,很容易被抓包,存在安全风险。因为它发送和接收无线信号,所以消耗的电量很大,这对电池来说是一个考验。与有线网络的低吞吐量相比,这一点正在逐步改善。 802.11n协议可以达到600Mbps的吞吐量。
2、协议
以太网和Wifi使用的协议都属于IEEE 802协议集。其中,Ethenet采用802.3协议作为其网络层以下的协议;而Wifi则使用802.11作为其网络层以下的协议。无论是有线网络还是无线网络,网络层以上的部分基本都是一样的。
这里的主要焦点与Wifi 网络有关。 Wifi 的802.11 协议包含许多子部分。按时间顺序发展主要包括:
1999年9月制定的802.11a,工作在5gHZ频率范围(频段宽度325MHZ),最高传输速率为54mbps,但当时还不是很流行,所以使用得不多。 802.11b于1999年9月制定,比802.11a稍晚。它工作在2.4G频率范围(带宽83.5MHZ),最大传输速率为11mbps。 802.11g于2003年6月制定,工作在2.4gHZ频率范围(带宽83.5MHZ),最大传输速率为54mbps。 802.11n于2009年才获得IEEE批准,可以工作在2.4gHZ和5gHZ,最高传输速率为600mbps。这些协议都是无线网络通信所需的基础协议。最新的发展通常比最初的发展要好。
另外值得注意的是,802.11n在MAC层上做了一些重要的改进,从而带来了网络性能的巨大提升。例如:
因为传输速率很大程度上取决于信道宽度有多宽,而802.11n采用了一种技术,可以在传输数据时将两个信道合二为一,然后进行传输,极大地提高了传输速率(这也称为HT-40,高通过)。 802.11n的MIMO(多输入多输出)特性允许两对天线同时在同一信道上传输数据而不会互相干扰(使用OFDM特殊调制技术)
3、术语
在描述之前,我们需要了解无线网络中的一些常用术语。这里是一些后面描述中出现的新术语,会在描述中解释。
LAN:是局域网,是由路由器和主机组成的内部局域网。一般是有线网络。
WAN:是WAN,是一个更大的外部LAN。
WLAN(Wireless LAN,即无线局域网):之前我们说过LAN是局域网。事实上,大多数是指有线网络中的局域网。无线网络中的LAN一般采用WLAN。
AP(Access point的简称,即访问点,接入点):是无线网络中的一个特殊节点。
通过该节点,无线网络中的其他类型的节点可以与无线网络的外部和内部进行通信。此处,AP 和无线路由器位于一台设备(即Cisco E3000)上。
Station(工作站):代表连接到无线网络的设备。这些设备可以通过AP与其他内部设备或无线网络外部进行通信。
Assosiate:连接。如果Station想要加入无线网络,则需要与无线网络中的AP关联(即Associate)。
SSID:用于标识无线网络,稍后详细介绍。这里我们只需要了解每个无线网络都有自己的SSID即可。
BSSID:用于标识BSS。其格式与MAC地址相同,均为48位地址格式。
一般来说,它是无线接入点的MAC地址。在某种程度上,它的功能类似于SSID,只不过SSID是网络的名称,是人看到的,而BSSID是机器看到的,BSSID类似于MAC地址。
BSS(Basic Service Set):由一组相互通信的工作站组成,是802.11无线网络的基本组成部分。
IBSS 和基于基础设施的网络主要有两种类型。 IBSS 也称为ADHOC。组网是临时的,通信方式是站对站。这种组网方式这里不关心。我们关心的基础设施网络有Station-AP-Station的通信方式,都是无线网络。网络中的设备想要进行通信,就必须通过AP。在基础无线网络中,有两类最重要的设备:AP和Station。
DS(Distributed System):是一个分布式系统。
分布式系统是一个802.11逻辑组件,负责将帧转发到目标地址。 802.11 没有指定其技术细节。大多数商业产品使用桥接引擎和逐步系统介质来形成分布式系统。分散式系统是骨干网络,通常是以太网,在接入点之间转发帧。事实上,骨干网并不是阶梯系统的全部,而是它的媒介。主要有三点:(1)骨干网(如以太网)、(2)网桥(同时具有有线和无线网络接口的接入点都包括在内)、(3)属于骨干网的接入点。
其管辖的基础网络的站点通信(与外界或BSS内的站点)必须经过DS,而外部路由只知道站点的mac地址,因此也需要经过分布式路由系统了解电台的具体位置并正确传送。
步步系统中的接入点必须传递相互关联的工作站信息,这样整个步步系统才能知道哪个工作站与哪个ap关联,保证步步系统的正常运行。系统工作正常(即转发到正确的站)。
分散式系统还可以使用无线媒体(WDS),不一定是以太网。
简而言之,就是采用逐步系统骨干网络(如以太网)作为介质来连接各个接入点。每个接入点和其中的站可以形成一个BSS。每个接入点中的桥控制器具有到达骨干网络及其内部BSS无线网络接口(类似于两个MAC地址)的能力,站点通信需要经过分布式系统。
二、实践基础
1、一些参数
MAC
MAC(Medium/MediaAccess Control,媒体访问控制)是数据链路层的一部分。 MAC地址被烧录到网络接口卡(network Interface Card,简称NIC)中。它也称为硬件地址。它由48位(bit,一个字节为8位,1byte=8bits)十六进制数组成。位0-23称为组织唯一标识符(简称OUI),是用于标识LAN(局域网)节点的标识符(有些抓包工具在抓包时会将前三个字节映射为某种组织名称字符,您也可以选择不显示此映射)。位24-47 由制造商分配。
SSID
表示子网的名称。无线路由器可以使用此名称来为其他设备标识该无线路由器的子网。设备扫描的时候会扫描对应的SSID,然后你就可以选择对应的SSID来连接对应的无线网络(当然,不扫描,理论上也可以直接指定你事先已经知道的SSID来连接) )。 SSID 可以与其他SSID 重复,这样扫描时您会看到两个具有相同SSID 的无线网络。其实这个一般是用来扩展无线网络的(毕竟无线路由器的无线信号覆盖范围是有线的):当你想扩展无线网络的范围时(即固定SSID) ,您可以为多个路由器设置相同的SSID来达到此目的。 (这也是漫游的原理,漫游时我们可以远方或者本地拨打电话,即接入移动通信网络)。
SSID和BSSID不一定一一对应。一个BSSID可能对应不同Channel上的多个SSID,但它们在一个Channel上是一一对应的。另外,漫游时,虽然SSID不会改变,但是BSSID一定会改变。我们经常可以看到实际数据包中AP的MAC地址与BSSID只有几位数字不同。事实上,实际设备可能只有一个MAC地址,与BSSID没有对应关系。在包含路由功能和AP功能的无线路由器(Fat AP)上,很可能路由器有两个MAC地址,一个用于外部网络(WAN),一个用于内部网络(WLAN和LAN)。一般情况下,路由器有两个MAC地址。路由器上或者配置路由器的网页上只标注了外网的MAC地址;内部网络的MAC地址和外部网络的MAC地址一般只有少数不同(甚至是连续的,也有一些差异很大的例外)。
Band(频率范围)
一般来说,AP可以支持5G或2.4G两个频率范围的无线信号。如果两者可以同时设置,而不是互相排斥,那么这个路由器还可以支持两个频段(band),相当于这个ap可以建立两个无线网络,他们使用不同的频段(这个类似长波范围内的广播和短波范围内的广播)。
Channel(信道)
Channel是频段的进一步划分(将5G或2.4G频段范围进一步划分为几个小频段,每个频段称为一个Channel),包括5.18GHZ、Auto(DFS)等。在不同传输信道上的数据在信道覆盖不重叠的情况下不会互相干扰。对于渠道的使用有国际规定。其中一些频道无需授权即可直接使用(具体哪个频段的频道因国家而异)。不需要授权是指在传输数据时(无论使用哪种无线方式),设备可以通过发射和接收的功率使传输过程中的数据进入该信道的频率并在频段宽度内进行传输渠道的;授权使用是指不允许使用授权的信道进行传输,否则将违反规定,对信道造成干扰。其他数据的传输。另外,除了WiFi之外,微波、红外、蓝牙(使用802.15协议)的工作频段也在2.4gHZ范围内。因此,它们在传输时,由于运行在不同的协议下,会对WiFi传输造成干扰。通信,因此彼此将对方发送的信号识别为噪声。有时在配置AP时,Channel中有一个类似于Auto的选项值。这意味着当AP开启时,AP会扫描周围环境并选择干扰最小的信道进行通信。当选择一个频道后,一般不会改变。
Channel Width(信道宽度)
这里的Channel Width是信道的带宽,包括20M HZ、40M HZ等,代表一个Channel段的宽度(假设5G频段总宽度为100M,均分分为10个互不干扰的Channel,则每个Channel的通道宽度为100M/10=10M,实际的Channel不一定完全不重叠)。该参数可能取决于其他一些选项。例如,如果不是802.11N协议,则可能没有40M HZ Channel Width(N模式的一个特点是可以合并两个Channel,通过增加ChannelWidth来提高吞吐量)。例如,选择20M HZ的信道宽度后,再选择5.18GHZ信道,则意味着以5.18GHZ为中心的前10M HZ频段范围以及后续的10M HZ频段范围被占用。
从这一点可以看出,在配置无线AP时,如果家里有很多AP(即无线路由接入点),仔细设置它们的Channel Width和Channel可以保证它们之间不会互相干扰(类似于无线电中的串行通道))尽可能小。当然,如果它们互相干扰,Net Mode指定的协议也会有相应的处理方法供它们协调(比如谁先通信,谁等待一段时间),但网络的性能会在一定程度上降低。这边走。如果没有干扰就更好了。
Wireless Security(无线网络的安全性)
主要涉及WEP、WPA、WPA2和RC4、TKIP、AES。
IEEE 802.11制定的是技术标准,Wi-Fi联盟制定的是商业标准,Wi-Fi制定的商业标准与IEEE制定的技术标准基本一致。 WEP 是1999 年9 月采用的IEEE 802.11 标准的一部分; WPA(Wi-Fi Protected Access)实际上是Wi-Fi联盟制定的安全标准。该商业标准的目的是支持IEEE 802.11 i是一个以技术为导向的安全标准; WPA2实际上是WPA的第二个版本。直观地说,WEP 是一种较旧的身份验证方法,存在多个弱点,因此在2003 年被WPA 淘汰。2004 年,WPA 被完整的IEEE 802.11i 标准(也称为WPA2)取代。
WEP(有线等效保密)使用称为RC4 的RSA 加密技术; WPA(Wi-Fi 保护访问)使用新的TKIP 算法。 TKIP算法保留了RC4因此也有其弱点,但目前还没有更好的CCMP。完成了,所以首先在WPA上使用TKIP技术; WPA2是WPA的第二个版本,使用CCMP加密协议(在某些路由器等设备上设置加密协议或加密算法时,可能会使用AES Replaces CCMP等字样)。因此,WPA2+AES是最安全的。
另外,有些无线网络设备的参数中还会看到WPA-Enterprise/WPA2-Enterprise、WPA-Personal/WPA2-Personal等字样。其实WPA-Enterprise/WPA2-Enterprise就是WPA/WPA2; WPA-Personal/WPA2-Personal实际上是WPA-PSK/WPA2-PSK,它使用预共享密钥或密码验证模式而不是IEEE 802.1X/EAP验证模式。 PSK模式下无需使用认证服务器(如RADIUS)。服务器),因此特别适合家庭或SOHO用户。
另外,WEP 是一种旧的加密方法,工作在802.11B/G 模式下,而802.11N 草案不支持这种加密方法,因此如果802.11N 设备采用WEP 加密方法,则只能工作在802.11b/G 模式下。在g模式下,N的性能无法充分发挥。
事实上,在某些路由器上,设置可能并不严格遵循这个规定(例如,如果设置使用WPA,也可以选择AES),但大体是一样的。
Region(区域)
一般情况下,无线网络中的AP都会有一个参数表示其所在的Region,Station会根据AP中设置的Region来调整相应的发射功率,以符合该地区的规定。 AP调整过程一般是手动的。设置AP所在的Region后,该信息将包含在AP发送的Beacon帧中(后面会讲到);通过此AP 连接到无线网络上的Station。从Beacon帧中获知这些Region信息,并按照这些信息中的规定与AP进行通信。如果一开始AP设置错误,站点和AP将使用不符合所在地区规定的频段,可能会对所在地区的其他传输网络造成干扰。这应该是“非法的”。
Transmission Rate
设置传输速率。这里使用的无线网络传输协议不同(802.11a、802.11b、802.11g等),因此可以设置的速率范围不同。这里的速度是指理论速度。在实际应用中,由于各种干扰因素,传输速率可能会小于设定值。
一般来说,在无线网络中,在描述某种协议的性能时,需要注意描述中提到的传输速率(Datarate)和吞吐量(Throughput)是不同的。 Datarate是理论最大数据传输速率,而Throughput是实际最大数据吞吐量。由于制造商、传输时使用的协议等各种因素造成的开销,实际吞吐量会小于理论吞吐量。一般情况下,实际最大吞吐量约为理论最大吞吐量的50%左右(一个不准确但相对直观的估计:在网络中,高清视频所需的吞吐量只有30mbps左右,网络上的平均视频只有4mbps左右) )。
Qos(质量保证)
无线网络中的QOS 是质量保证。大致意思是在传输数据时,考虑各种因素(如计费政策、地区等),以一定的优先级(一般就是速度)来保证特定的传输需求,如果带宽足够,则不需要QOS。
RTS Threshold/CTS Protection Mode
这里的RTS是Request-To-Send的缩写,CTS是Clear-To-Send的缩写。设置RTS阈值后,如果超过该阈值,则会在发送信息之前先发送RTS以减少干扰,并且对应的CTS会响应之前的RTS。一般情况下,AP发送CTS数据,Station发送RTS数据。
这里简单解释一下RTS和CTS: 假设两个Station A和B都在同一个AP覆盖的无线网络范围内。由于距离的原因,它们可能彼此不可见(例如,它们位于AP 网络范围的两侧)。两端之间的距离大于两端的信号覆盖范围),但AP知道它们在自己的范围内。当A要在AP网络中进行通信时,其信息必须通过AP进行转发。由于A不知道B的存在,如果B也同时通过AP进行通信,则AP也会同时收到该消息。来自两个站A和B的通信请求,这在无线网络中是不允许的(在无线网络中,多人不能同时传输数据)。在这种情况下,B和A互相干扰通信,但彼此不可见(不可见节点称为隐藏节点)。如果一个网络中有很多这样的隐藏节点,必然会影响网络的性能(因为一旦数据发送失败,就必须重传,隐藏节点会增加重传的概率)。这时就可以使用RTS和CTS机制。即:当A想要通信时,首先向AP广播发送RTS,告诉AP“它想要通信”。同时,其他接收到RTS的站(它们对发送RTS的站是可见的)就会知道A要发送数据,因此不会发送数据,以免干扰A; AP收到RTS后,会广播发送CTS,告诉AP范围内的所有站点(包括A的隐藏节点B)“A将进行通信(也相当喻告诉A,A可以在不受干扰的情况下发送信息)” ,这样A的隐藏节点B也知道有A并且想要发送信息,那么B就不会干扰A。这里,A和B可以在不同的网络上,也就是说不同网络上的工作站还可以使用RTS/CTS来消除相互干扰。
Beacon Interval
表示无线路由器周期性广播其SSID的时间间隔。这个一般不用专门设置,使用默认值即可。如果停止广播,站点在扫描时可能会发现不定期广播的AP的SSID对应的网络丢失,从而导致连接断开。这里的定期广播是指AP会在其范围内定期广播SSID信息,以表明AP的存在。这样,Station进入某个区域后,就可以扫描得知该区域内是否有AP。当然,除了AP通过广播SSID来告知其无线网络的存在之外,Station还可以主动广播发现包来询问其可以覆盖的范围内是否有AP(也就是我们通常所说的)呼叫扫描接入点)。
DTIM Interval
DTIM/TIM 表示告诉Station AP 正在为Station 进行数据包缓冲的缓存时间(例如,当Station 处于睡眠状态时)。为了节省电池寿命,无线网络上的Station 可能会在一定时间后自动进入睡眠状态。此时AP会缓存发送给Station的数据,处于休眠状态的Station只会在一定的时间间隔内向AP发送数据帧,以确认是否有数据发送给自己。例如,当我们ping 主机上另一台睡眠机器时,另一台机器的响应时间比它不睡眠时的响应时间要长得多。
Fragmentation Threshold
表示包的碎片阈值。我们可以设置片段大小。当发送的数据包超过此阈值时,802.11协议将自动对数据包进行分片。如果分片值设置得较小,则整个数据包传输成功的可能性更大(因为如果发生错误,只需要传输一个分片而不是整个数据包。无线wifi中数据传输过程中出错的概率网络比有线以太网要大得多),当然开销也更大(因为需要额外的信息来标记每个分片,以及每个分片成功传输后涉及的重组问题)。
2、抓包
一般来说,当我们机器上的软件捕获无线网卡上的数据包时,这些数据包的目标地址实际上是本机的无线网卡,因为数据包没有发送到本机的无线网卡都被网卡屏蔽了。过滤。所以如果我们想要捕获无线网络环境中的所有数据包,我们需要给机器配备一个特殊的设备(sniffer就是嗅探器),然后通过抓包工具来捕获并分析。有一个名为AirPcap 的硬件设备就是用于此目的。其成本为数百至数千美元。它可以同时用作嗅探器或无线网卡。然而,当用作嗅探器时,它将捕获通过它的所有内容。包裹。该工具目前只有Windows版的驱动,因此在Windows上只能使用Wireshark抓包软件使用该工具进行抓包。
这里假设使用AirPcap嗅探和Wireshark软件进行抓包(其他抓包软件,如Linux下的tcpdump等,也有类似的分析)。这里不以图解的方式详细展示具体的抓包过程和分析方法,主要讲一下抓包时需要注意的问题(这里的包其实主要是指网络层以下的包,比较常见的有:名称应该是数据框)。
Wireshark显示包时,一般会根据协议中指定的字段来显示,有些地方还会以自己特定的方式显示。因为这里我们重点介绍抓包时需要注意的一些基本原则,所以在此不再过多阐述。粗略地说,在Wireshark软件中,显示包时,协议中指定的字段会分两部分显示:Header和Body。另外,Header之前还有两部分,是Wireshark显示的包的大小,以方便用户使用。全局信息,例如时间(例如,当您看到Channel 1 表明此数据包处于B 和G 模式时,则用BG1 表示)。所以,其实我们在分析的时候,其实应该按照以下两个部分来进行:Header和Body。稍后将基于上述进行进一步的解释。
抓包时,首先需要确认该包是否是完整、正确的包。只要校验和(checksum)不正确,就是一个错误的数据包,并且无法确定接收过程中出了什么问题,所以这个数据包应该被忽略,几乎没有分析价值。另外,抓包时,由于干扰等原因,抓到的内容可能不是实际传输所在Channel上的数据包(例如嗅探到了Channel 1,却嗅到了Channel 2的数据包)。
在授权阶段抓包的时候需要注意的是,真正的授权是在后面进行的。 Authentication的时候,初始阶段其实是Open(也就是没有授权),也就是说一开始其实连接就已经建立了,所以我们抓包的时候,首先看到的一般都是验证,但是之后,连接就真正建立起来了。然后使用802.11x等安全增强协议进行重新认证。如果失败,所建立的协会将立即断开。这个机制之所以会这样,是因为原来的802.11没有充分考虑安全性,同时也兼容了之前的802.11。
对于捕获的报文数据,请注意报文是否加密。根据协议标准的描述,如果数据包中存在dataprotected字段,则意味着数据本身是加密的。我不知道数据是什么。当然,如果有密码,Wireshark也有工具可以根据密码解密。有时它不起作用。这里所说的数据加密和网络的加密是不同的。也许访问网络本身需要密码(网络是安全的),但数据本身并没有crpted(加密)。对于加密的数据包,我们一般无法判断该数据包的用途、类型。
抓包时,请注意数据包中指示的源地址和目的地址以及数据包的序列号。在无线网络中通信时,当我们抓包时,我们可能会看到抓到的数据包对应
AP的MAC地址是不存在的,其实抓包时AP的MAC是BSSID,它和实际标注的MAC地址不一定一样(但是一般都差不多,也就是之后最后面的几位不一样)。有时候,我们看到抓取的包中的MAC地址有许多只相差几位,那么可能它们都属于一个设备(因为虽然设备可能只标注了一个网卡的MAC地址,但是它却“虚拟”出或者实际有多个MAC地址),所以当我们看到包中对应两个AP的MAC地址几乎一样的时候,一般来说,这两个MAC地址很可能就是一个设备的。还有在抓包的时候,一个地址上面的包的sequence(序号)是连续的,除非丢包了导致重复或者缺失。如果一个设备虚拟出来两个地址,那么也可能由于没有经过什么处理,导致这两个地址上面的包共同起来是连续的(如前所述,这两个地址和MAC很接近,应该是BSSID)。 抓取的数据帧如果是广播帧则不需要确认(ACK),如果是单播帧,则一般需要确认(ACK)。例如,Probe帧是广播帧,所以它无对应的ACK确认帧,对Probe的回复则叫做Probe Response;注意ACK帧本身用于确认,是单播的,但是它本身却不需要再被确认了。从包中的目的MAC地址中,可以看出这个包是广播/多播帧还是单播帧。MAC第一个字节的第一个位是1,表示组播,前两位是1表示广播,第一个字节第一个位是0表示单播。这里注意,MAC不是值,而是一个Pattern,所以没有Endian之说,也没有那个位高,那个MAC大之说。例如:“a8:27:26:....:b7”,这里第一个字节就是a8(10101000),其第一个字节的第一位就是8的最“右”位,即“0”,所以它的第一个字节的第一个位是0,是一个单播地址。其实,这里涉及到大端小端问题,后面也会讲到,总之,以太网线路上按Big Endian字节序传送报文(也就是最高字节先传送),而比特序是Little Endian(也就是字节内最低位先传送)所以,一个十六进制表示法表示的MAC地址01-80-C2-00-00-00,传送时的bit顺序就是:1000 0000 0000 0001 0100 0011 0000 0000 0000 0000 0000 0000。 使用Wire Shark在抓包或者显示包的时候,都可以设置过滤器(filter)。抓包时候设置的过滤器叫做capture filter,它是用BPF(berkerley package filter)这个比较通用的语言来描述(注意这不是Wireshark专用的filter语言,而是一个通用的语言)。但是抓包期间的过滤,有时候不准,所以我们一般先将所有的包抓取下来,然后用WireShark中显示的过滤器(即view filter)来显示我们关注的包,这里我们可以用macro来定义比较复杂的显示过滤条件。保存的时候,可以用按照显示过滤还是抓取过滤的方式保存内容。 尽量不要抓取Channel Width为40MHZ的Channel上的帧。我们还需要注意的是,使用Sniffer抓取无线网络包的时候,AirPcap无法正常抓取40MHZ Channel Width的包,或者说对抓取这个Channel Width上面的包支持不好。如果非要抓取40MHZ Channel Width的包,那么就在40或者36号Channel上面进行抓取,并在Wireshark上面设置channel=36,offset+1(平时offset都是0),这样能够抓取Channel Width为40MHZ的包(但是,其他Channel上面的40mHZ的包还是无法抓取),这是由AirPcap内部的芯片固件的问题决定的(估计broad com芯片公司也不愿花过多的精力来支持这个很少有人用的抓包工具的这个功能)。 另外,假设一个无线工作站是基于Android系统的(例如智能手机或者平板电子书)那么我们可以利用wpa_cli status命令来可以查看当前设备的连接的SSID,BSSID,MAC,IP等信息,(这里“cli”=“command line interface”)。 还有更“复杂”的命令wc和wl,其中wc是比较上层的命令,wl是下层的命令(是基于芯片是否支持的,例如wl在broadcom芯片上支持,但是在ti上面就没有了)。三、一些原理
1、常见的帧
在802.11中的帧有三种类型:管理帧(Management Frame,例如Beacon帧、Association帧)、控制帧(Control Frame,例如RTS帧、CTS帧、ACK帧)、数据帧(Data Frame,承载数据的载体,其中的DS字段用来标识方向很重要)。帧头部中的类型字段中会标识出该帧属于哪个字段。ACK帧
单播(unicast)帧都需要用ACK来确认,ACK本身不是广播帧,ACK在MAC上是unicast的,帧中有receive地址字段(用来标识是对谁的确认),但是它却不需要再确认了。ACK只有接收地址(receive)而无源地址(src)和序号(sequence),因为发送和接受是一个整体,发送之后,其他人(除了这个发送的接受者)都不会再发送数据了(无线协议中的冲突避免机制),所以接受者会发送一个没有src的ack帧给receiver,而接收ACK的一端会根据这个知道它收到了一个ACK帧(其实根据协议,应当把发送单播帧和收到它相应的ACK看作一个原子的不可分割的整体,表示一次成功的通信)。Beacon帧
Beacon帧定时广播发送,主要用来通知网络AP的存在性。Station和AP建立Association的时候,也需要用到Beacon。Station可以通过Scan来扫描到Beacon,从而得知AP的存在,也可以在扫描的时候通过主动发送Probe来探寻AP是否存在。也就是说,建立Association的时候有主动的扫描或者被动的扫描两种方式。另外,Beacon还包含了关于Power Save、以及地区等信息。Association帧
通常Association帧都有Probe Request和相应的Probe Response。Association的Request中有其所需要的Channel以及Data Rate等状态,以便让AP决定是否让它与自己建立Association。而关联是否成功,主要是看Response中的Status code是否为Success。Data帧
Data Frame具有方向,这个方向用DS(分布式系统)字段来标识,以区分不同类型帧中关于地址的解析方式;其它的类型Frame例如Control Frame或者管理帧中,这个字段是全零。这个字段用两位表示,这两个位的含义分别表示To Ds和From Ds,大致含义如下: To DS: 表示Station->AP,一般也叫Upload。 From DS表示AP->Station,一般也叫Download。 这里,我们可以大致将DS看做AP,To/From是从AP的角度来考虑的。To DS就是让AP干活。另外Data Frame中还有一个比较重要的字段就是Sequence,表示帧的序号。重传帧序号一样,但是多了一个Retry的字段表示该帧是重传的。 为了便于理解,这里再次详细解释一下DS字段的含义:To DS=0,From DS=0:表示Station之间的AD Hoc类似的通信,或者控制侦、管理侦。To DS=0,From DS=1:Station接收的侦。To DS=1,From DS=0:Station发送的侦。To DS=1,From DS=1:无线桥接器上的数据侦。这里,我们主要关注To DS和From DS分别是01和10的情况,DS虽然大致等于AP但是它不是AP,它其实是一个系统,从Station的角度来看,比较容易理解。并且To DS和From DS一定是无线网络上面数据侦才有的字段。2、帧和大端小端
Ethernet和802.11都是按照Little Endian的方式来传输数据,也就是说,而MAC层传输的时候,是采用Little Endian的方式,一个字节一个字节的传输的,前面的低位字节先传输,后面的高位字节后传输(传输单位不是按位而是字节);在协议标准上描述一个帧的时候,一般是先按照Little Endian的方式对其进行总体描述,然后具体细节说每个字段的值,这时候这个字段值是Big Endian方式表示的,这一点应当注意。 例如,协议标准中可能能对某个帧格式做如下的描述: |b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|...|...|这里,最低位b0在最前面,所以这里采用的就是小端的方式来描述帧的总体格式信息。传输的时候,就按照这里的方式,以字节为单位向物理层进行传输(先传b0~b7然后b8~b16等等)。 但是,在解释这个帧的各个域的时候却采用大端的方式进行描述。假设b3=0,b2=1,b1=0,b0=0四者共同组成一个名字为FLAG的域,那么会有类似如下的描述: FLAG=4(即FLAG为0100):表示XXX。所以,协议标准中具体描述某个域的时候,一般直接用大端方式表示的数值(b3b2b1b0=0100)来描述;而传输数据帧或者在协议标准中描述整体帧的时候,中给出的却是小端的方式(b0b1b2b3=0010)。 这里的每个字段都是帧的一个部分,在管理帧(后面会说)中长度不固定的部分又叫IE(information Element) 。 另外注意,内存地址是用来标记每个字节的而不是位,所以内存里面大端小端也是以字节而不是位为单位的(前面描述“大端“、”小端”的时候却以位序而非字节序,这一点需要明辨,不要混淆)。假设奔腾的机器,CPU为32位,采用Little Endian方式,那么表示1这个int类型整数的时候,假设它在数值上是十六进制的"00000001",那么存放在内存中却是由低位到高位依次存放的,由低到高地址依次为:01、00、00、00(也就是说小端方式存放在内存中的时候,是按照含有最低位的字节存放在低地址,注意是字节,在内存中“位”没有地址,所以没有大端小端一说)。在传递帧的时候,也是按照一个字节一个字节的传输,而一个字节内部在实际上其实没有什么端的分别,但是wireshark一律使用b7b6b5b4b3b2b1b0这样的方式来用大端的方式显示。 总之,需要注意网络层下面的帧的大端小端问题(不是网络中的字节序,TCP/IP中规定的网络字节序是Big Endian),大致就是:协议规定,传输的时候使用Little Endian;标准描述的时候用Big Endian和Little Endian都用;另外,Wire shark软件抓的包中,好象全都用Big Endian来进行标示(无论是信息窗口还是内存窗口都这样展示)。 注:大端、小端这里的端,为了便于记忆我们可以理解为起点。大端就是高位存放在前面,小端就是低位存放在前面。3、CSMA/CA的机制
与以太网的CSMA/CD机制(冲突检测)相对,802.11采用的CSMA/CA机制(冲突避免)。采用这个机制,可以保证每次通信的原子性(即每次通信所需要传输的多种不同类型的帧之间没有夹杂其它通信的帧的干扰),大体过程是: 链路空闲下来之后,所有Station在发送帧之前都首先等待一段时间(即DIFS,又称帧间隔时间);到达DIFS之后,所有Station进入竞争时间窗口(就是竞争期间),将这个竞争时间窗口分割成多个Slot(退避时间间隔),每个Station随机选择一个Slot;某个Station到达它Slot对应的时间后开始发送数据。选择的Slot越靠前,则Station在DIFS后等待的时间(退避时间)越短,也越早发送实际数据;退避窗口的Slot有多个,选择时可能某个Slot被多个站点同时选取,这时发送会产生真正的数据冲突(如果多个人同时发送,那么它们都要经过AP来转发,AP无法同时听见多个人的“说话声音”)那么Station就会再重新选择并发送;当某Station发送数据之后,所有Station会检测到链路忙,于是放弃尝试发送,等Station发送完数据之后,链路开始空闲,于是又进入到1)重新开始这个过程。对于以上的机制,如果我们让某个Station经过DIFS之后,选择的Slot越小,就意味着它发送帧的机会越大,也就是说这个Station的优先权越高。这就是Qos(质量保证)的基本,前面也说过,Qos就是“以一定的优先级来保证传输的特定要求”,要获得这种优先级,就要有相应的条件(例如“花钱”)(有一种不常用的无竞争发送,其实就是DIFS之后,不退避而直接发送)。 另外,其实对物理层上来说,所有的发送都是广播,单播与否只是在链路层以上分辨的。上面提到的检测链路是否忙,可以从链路上用软件方式进行(例如增加帧的特殊字段),也可以直接在物理层上进行,实际因为在物理层上成本较高,经常用的是前者,具体参见协议。软件检测大致的思路就是,进行一个通信的时候,这个通信包含多个帧,每个帧有不同的作用,发送的第一帧的时候,会通过其中的某个特殊字段(Duration字段,也叫NAV,即网络分配向量,是一个延迟时间值)告诉所有其它Station,在未来的一段时间内,链路被占用,以完成整个通信过程。这样,其它Station在此期间就不会发送数据干扰这次通信了,以后这个通信的每一帧以及其ACK确认帧之间都会有一个很小的时间间隔(小于DIFS,即SIFS),并且每帧会视情况延长那个Duration字段,保证整个通信期间确实不会有其它人干扰,这样整个通信就是原子性的了。4、帧的来源和目的地址
因为无线网络中没有采用有线电缆而是采用无线电波做为传输介质,所以需要将其网络层以下的帧格式封装的更复杂,才能像在有线网络那样传输数据。其中,仅从标识帧的来源和去向方面,无线网络中的帧就需要有四个地址,而不像以太网那样简单只有有两个地址(源和目的)。这四个地址分别是:SRC:源地址(SA),和以太网中的一样,就是发帧的最初地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。DST:目的地址(DA),和以太网中的一样,就是最终接受数据帧的地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。TX:也就是Transmiter(TA),表示无线网络中目前实际发送帧者的地址(可能是最初发帧的人,也可能是转发时候的路由)。RX:也就是Receiver(RA),表示无线网络中,目前实际接收帧者的地址(可能是最终的接收者,也可能是接收帧以便转发给接收者的ap)。注意,其实,还有一个BSSID,用来区分不同网络的标识。在802.11帧中,有四个地址字段,一般只用到其中的三个,并且,这四个字段对应哪种地址或者使用哪些地址,根据帧中的另外一个DS字段以及帧的类型而有不同的解释。 下面举三个例子。(1)无线网络中的Station和以太网中的Host进行通信
Station<- - - - ->AP<---------->Host当Station->Host的时候 首先Station->AP,这时候Src=Station,Dst=Host,Tx=Station,Rx=AP,然后AP->Host,这时候Src=Station,Dst=Host,因为AP转发的时候,是在以太网中,所以没有Tx和Rx。当Host->Station的时候 首先Host->AP,这时候Src=Host,Dst=Station,然后AP->Station,这时候,Src=Host,Dst=Station,Tx=AP,Rx=Station。(2)无线网络中的Station之间进行通信
Station1<- - - - ->AP<- - - - ->Station2当Station1->Station2时 首先Station1->AP,Src=Station1,Dst=Station2,Tx=Station1,Rx=AP,然后AP->Station2,Src=Station1,Dst=Station2,Tx=AP,Rx=Station2。可见,在无线网络中,始终存在Tx和Rx,但是,这四个地址中还是只有三个地址足矣。(3)当两个无线网络中的Station进行通信的时候
Station1<- - - - ->AP1<- - - - ->AP2<- - - - - ->Station2当Station1->Station2时: 首先Station1->AP1,Src=Station,Dst=Station2,Tx=Station1,Rx=AP1,然后AP1->AP2,Src=Station,Dst=Station2,Tx=AP1,Rx=AP2,然后AP2->Station2,Src=Station1,Dst=Station2,Tx=AP2,Rx=Station2。注意,这个时候,AP起到桥接的作用,所以四个地址各不相同,同时,AP之间或者Station和AP之间的那部分连接,也可以是以太网。 综上可知,无线网络中的Station想要通信,必须经过AP来进行“转发”,其实,Tx和Rx是无线网络中的发和收,也就是Radio;而Src和Dst是真正的发送源和接收者。5、Sleep和Power save(节电)
其实,无线网络中的Power save是指Station的Sleep(睡眠),并且这个Sleep并不是整个系统的Sleep,确切来说,应该是其wifi中Receiver(接收天线)的Sleep。Station在睡眠的期间还是可以Transmit(发送)的,只是当AP知道Station的Receiver处于Sleep状态时,就不会给Station发送帧了。Station在Sleep之前,会给AP发送一个特殊的帧,告诉AP说它(Station)要睡眠了,AP通过这个帧来记住是这个Station睡眠了,然后AP就不会给这个Station单独发送数据了。 当有和这个Station通信的包想通过AP转达的给这个Station时候,AP会帮这个Station将它们缓存起来,然后在Beacon广播帧中添加一个特殊的位(实际这个位是一个bitmap中的位,这个bitmap表示所有和该AP建立了关联的Station,而这个睡眠的Station的相应位为被置1则表示有消息要传达给这个Station),来表示这个Station有数据到达了(Beacon是定时广播的帧,前面说过它是用来通知无线网络,这个AP的状态),而不是直接发送给Station。而这个睡眠的Station,会在睡眠期间不时地醒来,以检查Beacon帧中的状态,当发现有给它的数据的时候,就会通过发送一个Power Poll的帧来收取数据,收取之后继续睡眠(所以ping一个睡眠状态的Station,响应的时间要慢好多)。 对于发送给这个Station的广播帧,其处理方式和普通帧有一点不同:当有广播帧要传达给这个Station的时候,AP会为这个Station缓存发送给它的广播帧,但是缓存的时间是DTIM(一般为300ms)。注意:单播帧缓存的时间不一定是多少,广播帧却缓存DTIM的时间。AP每发送一个Beacon的时候,都会将Dtim减少1,而Station睡眠的时候,会不时地醒来,查看一下Beacon帧中的dtim值。当Station发现其DTIM值变成0的时候,就醒来长一些的时间,看看有没有广播给它的数据,如果有的话就用类似Power Save Poll的帧接受,没有则继续睡眠。 这里,接收数据是根据是否有more data类似的字段来确认是否有更多的数据的;重发的帧是用类似retry的字段来标记。另外注意,当Station进行Sleep的时候,还是可以主动Tranmit消息的,当Station主动Transmit消息的时候,它会等待Reply,所以这个时候,Receiver是on的状态。用一个图示来标识Sleep,Receive,Transmit时的电源消耗状况,大致如下: power ^ trans | ------------------------ | | | receive | -----------| | | | | sleep |--------| |-------------------- |---------------------------------------------------------------------->time可见不同状态,电源消耗状态不同(传送比接收更耗电),另外,如果电源供电不足,在某个状态中就会出现通信失败的情况。(好像ap上面broadcom芯片中的睡眠之后,醒来立即重新发送的时候经常开始会失败,可能就是这个原因)。6、建立Association
下面是Station和Ap建立开放Association的过程: Ap周期性地广播Beacon帧Station广播Probe Request到达ApAp向Station发送Probe ReponseStation向Ap发送ACKStation向Ap发送Authentication RequestAp向Station发送ACKAp向Station发送Authentication ReponseStation向Ap发送ACKStation向Ap发送Association RequestAp向Station发送ACKAp向Station发送Association ReponseStation向Ap发送ACKStation和Ap开始相互通信。可见,广播帧不用回复,单播帧需要用ACK确认,ACK本身不用被确认。四、其它
如有更多补充性内容,有待添加。好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
【全面解析:WiFi基础入门知识汇总】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于有时间好好学习一下WIFI的基本知识了!
有14位网友表示赞同!
看来我的网络问题得找个专业人士帮忙解决了。
有8位网友表示赞同!
以前总觉得WIFI很简单,现在想想还是很多知らないことがあって。
有17位网友表示赞同!
看完文章,我感觉自己对WIFI更了解了呢。
有17位网友表示赞同!
希望这篇文章能帮助我更好地使用WIFI。
有14位网友表示赞同!
学习了新的知识总是很有成就感的!
有18位网友表示赞同!
最近想更换一下网络设备,这个整理很有用参考。
有18位网友表示赞同!
我的手机WIFI信号一直很差,该好好了解下原因了。
有11位网友表示赞同!
终于明白WIFI是怎么连接的了!
有9位网友表示赞同!
我想要自己开个小网吧,这篇文章正好可以让我学习一下知识。
有8位网友表示赞同!
这个整理看起来挺专业,值得我去慢慢阅读。
有10位网友表示赞同!
我想把文章发给我的朋友,他经常抱怨WIFI不好用。
有14位网友表示赞同!
学习了WIFI的基本知识,应该就能更方便地解决一些网络故障了
有17位网友表示赞同!
之前总是感觉WIFI太复杂,现在看来其实很简单。
有18位网友表示赞同!
这篇文章让我对WIFI的原理有了更深的了解。
有19位网友表示赞同!
希望以后能自己搭建一个家庭WIFI网络!
有10位网友表示赞同!
这篇整理很全面,涵盖了很多我感兴趣的内容。
有8位网友表示赞同!
学习新的知识总让人充满好奇心!
有15位网友表示赞同!