1、1、有线和无线网络目前有线网络中最著名的是以太网(Ethenet),但是无线网络 WLAN 是一个很有前景的发展领域,虽然可能不会完全取代以太网,但是它正拥有越来越多的用户,无线网络中最有前景的是 Wifi。本文介绍无线网络相关内容。无线网络相比有线网络,还是有许多的缺点的:(*)通信双方因为是通过无线进行通信,所以通信之前需要建立连接;而有线网络就直接用线缆连接,不用这个过程了。(*)通信双方通信方式是半双工的通信方式;而有线网络可以是全双工。(*)通信时在网络层以下出错的概率非常高,所以帧的重传概率很大,需要在网络层之下的协议添加重传的机制(不能只依赖上面 TCP/IP 的延时等待重传等开
2、销来保证) ;而有线网络出错概率非常小,无需在网络层有如此复杂的机制。(*)数据是在无线环境下进行的,所以抓包非常容易,存在安全隐患。(*)因为收发无线信号,所以功耗较大,对电池来说是一个考验。(*)相对有线网络吞吐量低,这一点正在逐步改善,802.11n 协议可以达到 600Mbps的吞吐量。2、协议Ethenet 和 Wifi 采用的协议都属于 IEEE 802 协议集。其中,Ethenet 以 802.3 协议做为其网络层以下的协议;而 Wifi 以 802.11 做为其网络层以下的协议。无论是有线网络,还是无线网络,其网络层以上的部分,基本一样。这里主要关注的是 Wifi 网络中相关的
3、内容。 Wifi 的 802.11 协议包含许多子部分。其中按照时间顺序发展,主要有:(1)802.11a ,1999 年 9 月制定,工作在 5gHZ 的频率范围(频段宽度 325MHZ) ,最大传输速率 54mbps,但当时不是很流行,所以使用的不多。(2)802.11b ,1999 年 9 月制定,时间比 802.11a 稍晚,工作在 2.4g 的频率范围(频段宽度 83.5MHZ) ,最大传输速率 11mbps。(3)802.11g ,2003 年 6 月制定,工作在 2.4gHZ 频率范围(频段宽度 83.5MHZ) ,最大传输速率 54mbps。(4)802.11n ,2009 年
4、才被 IEEE 批准,在 2.4gHZ 和 5gHZ 均可工作,最大的传输速率为 600mbps。这些协议均为无线网络的通信所需的基本协议,最新发展的,一般要比最初的有所改善。另外值得注意的是,802.11n 在 MAC 层上进行了一些重要的改进,所以导致网络性能有了很大的提升例如:(*)因为传输速率在很大的程度上取决于 Channel(信道)的 ChannelWidth 有多宽,而 802.11n 中采用了一种技术,可以在传输数据的时候将两个信道合并为一个,再进行传输,极大地提高了传输速率(这又称 HT-40,high through) 。(*)802.11n 的 MIMO(多输入输出)特性
5、,使得两对天线可以在同时同 Channel 上传输数据,而两者却能够不相互干扰(采用了 OFDM 特殊的调制技术) 3、术语讲述之前,我们需要对无线网络中一些常用的术语有所了解。这里先列出一些,后面描述中出现的新的术语,将会在描述中解释。(*)LAN:即局域网,是路由和主机组成的内部局域网,一般为有线网络。(*)WAN:即广域网,是外部一个更大的局域网。(*)WLAN(Wireless LAN,即无线局域网):前面我们说过 LAN 是局域网,其实大多数指的是有线网络中的局域网,无线网络中的局域网,一般用 WLAN。(*)AP(Access point 的简称,即访问点,接入点):是一个无线网络
6、中的特殊节点,通过这个节点,无线网络中的其它类型节点可以和无线网络外部以及内部进行通信。这里,AP 和无线路由都在一台设备上(即 Cisco E3000) 。(*)Station(工作站):表示连接到无线网络中的设备,这些设备通过 AP,可以和内部其它设备或者无线网络外部通信。(*)Assosiate:连接。如果一个 Station 想要加入到无线网络中,需要和这个无线网络中的 AP 关联(即 Assosiate) 。(*)SSID:用来标识一个无线网络,后面会详细介绍,我们这里只需了解,每个无线网络都有它自己的 SSID。(*)BSSID:用来标识一个 BSS,其格式和 MAC 地址一样,是
7、 48 位的地址格式。一般来说,它就是所处的无线接入点的 MAC 地址。某种程度来说,它的作用和 SSID类似,但是 SSID 是网络的名字,是给人看的, BSSID 是给机器看的,BSSID 类似MAC 地址。(*)BSS(Basic Service Set):由一组相互通信的工作站组成,是 802.11 无线网络的基本组件。主要有两种类型的 IBSS 和基础结构型网络。 IBSS 又叫 ADHOC,组网是临时的,通信方式为 StationStation,这里不关注这种组网方式;我们关注的基础结构形网络,其通信方式是 StationAPStation,也就是所有无线网络中的设备要想通信,都得
8、经过 AP。在无线网络的基础形网络中,最重要的两类设备:AP和 Station。(*)DS(Distributed System):即分布式系统。分布式系统属于 802.11 逻辑组件,负责将帧转发至目的地址,802.11 并未规定其技术细节,大多数商业产品以桥接引擎合分步式系统媒介共同构成分布式系统。分步式系统是接入点之间转发帧的骨干网络,一般是以太网。其实,骨干网络并不是分步系统的全部,而是其媒介。主要有三点:骨干网(例如以太网) 、桥接器(具有有线无线两个网络接口的接入点包含它) 、属于骨干网上的接入点所管辖的基础性网络的 station 通信(和外界或者 BSS 内部的station)
9、必须经过 DS、而外部路由只知道 station 的 mac 地址,所以也需要通过分布式系统才能知道 station 的具体位置并且正确送到。分步式系统中的接入点之间必须相互传递与之关联的工作站的信息,这样整个分步式系统才能知道哪个 station 和哪个ap 关联,保证分步式系统正常工作(即转达给正确的 station) 。分步式系统也可以是使用无线媒介(WDS),不一定一定是以太网。总之,分步式系统骨干网络(例如以太网)做为媒介,连接各个接入点,每个接入点与其内的 station 可构成 BSS,各个接入点中的桥接控制器有到达骨干网络和其内部 BSS 无线网的接口(类似两个 MAC 地址)
10、 ,station 通信需要通过分布式系统。二、实践基础1、一些参数(*)MACMAC(即 Medium/MediaAccess Control, 介质访问控制) ,是数据链路层的一部分。MAC 地址是烧录在 NetworkInterfaceCard(即网卡,简称 NIC)里的,它也叫硬件地址,是由 48 位(即 bit,一字节为 8 位,即 1byte=8bits)16 进制的数字组成。其中 0-23 位叫做组织唯一标志符(organizationally unique,简称 OUI) ,是识别 LAN(局域网)节点的标识(在有些抓包工具抓包的时候会将前三个字节映射成某种组织名称的字符,也可
11、以选择不显示这种映射) 。24-47 位是由厂家自己分配。(*)SSID表示一个子网的名字,无线路由通过这个名字可以为其它设备标识这个无线路由的子网。设备进行扫描的时候,就会将相应 SSID 扫描到,然后就能够选择相应的 SSID 连接到相应的无线网络(当然不扫描,理论上也可以直接指定自己事先已经知道的 ssid进行连接) 。SSID 可以和其它的重复,这样扫描的时候会看到两个同样 SSID 的无线网络,其实这一般用于将一个无线网络扩大的情况(毕竟无线路由器无线信号的覆盖范围是有线的):当想要扩大一个无线网络(即 SSID 固定)的范围的时候,可以给多个路由设置相同的 SSID 来达到这个目的
12、。 (这也是漫游的原理,漫游的时候,我们可以在远方或者本地都能够打电话,也就是访问移动通信网络) 。SSID 和 BSSID 不一定一一对应,一个 BSSID 在不同的 Channel 上面可能会对应到多个 SSID,但是它们在一个 Channel 是一一对应的;另外,漫游的时候,虽然 SSID不变,但是 BSSID 一定是会变化的。我们经常可以看到实际数据包中的 AP 的 MAC地址和 BSSID 只差几位,其实实际设备的 MAC 地址可能只有一个,和 BSSID 没什么对应关系。在一个包含了路由功能和 AP 功能的无线路由器(Fat AP)上面,很可能是:路由器有两个 MAC 地址,一个用
13、于外网(WAN) ,一个用于内网(WLAN 和 LAN),一般路由器上面或者配置路由器的网页上面只标注外网的 MAC 地址;内网的 MAC 地址和外网 MAC 地址一般只有几位不同(甚至连续,也有些相差很多的例外) 。(*)Band(频率范围)一般 ap 可以支持 5g 或 2.4g 两个频率范围段的无线信号。如果两者同时可以设置,而不是互斥那么,这个路由器还能够同时支持两种频段(频段即 Band) ,这相当于这个ap 可建立两个无线网络,它们采用不同的频段(这类似收音机在长波范围内收音和短波范围内收音) 。(*)Channel(信道)Channel 是对频段的进一步划分(将 5G 或者 2.
14、4G 的频段范围再划分为几个小的频段,每个频段称作一个 Channel) ,有”5.18GHZ“, “Auto(DFS)”等等,处于不同传输信道上面的数据,如果信道覆盖范围没有重叠,那么不会相互干扰。对于信道的使用,在国际上有所规定。其中有些信道是无需授权即可直接使用的(究竟是那个频段的那个信道,依照各个国家而不同) ,无需授权使用的意思是,传输数据的时候(无论以哪种无线方式) ,可以让设备收发的功率导致传输时的数据进入该信道的频率并在该信道所在频段宽度内进行传输;授权的使用的意思是,不允许传输时使用授权信道进行,否则会违反规定,并且干扰该信道上其他数据的传输。另外,除了 wifi,微波、红外
15、线、蓝牙(使用 802.15 协议)的工作频段也都有在 2.4gHZ 范围内的,所以,它们传输的时候会对 wifi 传输造成干扰,因为两者在不同的协议下进行通信,所以互相将对方传输的信号识别为噪声。有时候配置 AP 的时候,Channel 中有一个类似“Auto” 的选项值,这表示打开 AP 的时候,AP 自己 Scan 周围的环境,选择一个干扰最小的 Channel 来进行通信,当选择好了一个 Channel 的时候,一般就不会改变了。(*)Channel Width(信道宽度)这里的 Channel Width 是信道的带宽,有”20M HZ“、 ”40M HZ“等,它表示一个Channe
16、l 片段的宽度(假设 5g 的频段宽度总共为 100M,平均划分为互不干扰的 10个 Channel,那么每个 Channel 的 Channel Width 就为 100M/10=10M,实际Channel 并不一定是完全不重叠的) 。这个参数可能依赖于一些其它的选项,例如不是802.11N 的协议,就可能不会有 40M HZ 的 Channel Width(N 模式有一个特点就是可以把两个 Channel 合并,通过提高 ChannelWidth 来提高吞吐量) 。例如选择了“20M HZ“这个 Channel Width 之后,后面再选择一个 “5.18GHZ”的 Channel,则表示
17、以 5.18GHZ 为中心的前“10M HZ“以及其后面的“10M HZ“频带范围被占用。至此可知,配置无线 AP 的时候,如果屋子里面有很多的 AP(也就是无线路由接入点)的话,仔细设置它们的 Channel Width 和 Channel 可以保证它们相互之间的干扰(类似收音机里面的串台)尽可能小。当然,如果相互干扰了,那么 Net Mode 所指定的协议也会有相应的处理方式让他们之间进行协调(例如让谁先通信谁等一会再通信之类的) ,但是这样网络的性能就不如没有干扰的时候好了。(*)Wireless Security(无线网络的安全性)这里主要涉及 WEP、WPA、WPA2 和 RC4、T
18、KIP、AES 。IEEE 802.11 所制定的是技术性标准 ,Wi-Fi 联盟所制定的是商业化标准 , 而 Wi-Fi 所制定的商业化标准基本上也都符合 IEEE 所制定的技术性标准。WEP 是 1999 年9 月通过的 IEEE 802.11 标准的一部分;WPA(Wi-Fi Protected Access) 事实上就是由 Wi-Fi 联盟所制定的安全性标准 , 这个商业化标准存在的目的就是为了要支持 IEEE 802.11i 这个以技术为导向的安全性标准;而 WPA2 其实就是 WPA 的第二个版本。直观点说,WEP 是较老的认证方法它有好几个弱点,因此在 2003 年被 WPA淘汰
19、,WPA 又在 2004 年由完整的 IEEE 802.11i 标准(又称为 WPA2)所取代。WEP(Wired Equivalent Privacy) ,采用名为 RC4 的 RSA 加密技术;WPA(Wi-Fi Protected Access) ,采用新的 TKIP 算法,TKIP 算法保留了 RC4 所以也有其弱点,但是这个时候更好的 CCMP 还没完成,所以先在 WPA 上用 TKIP 技术;WPA2 是WPA 的第 2 个版本,采用 CCMP 加密协定(在有些路由器等设备上设定加密协定或者加密算法的时候,可能会用类似 AES 之类的字眼替代 CCMP) 。所以 WPA2+AES是
20、安全性最强的。另外,在有些无线网路设备的参数中会看到像 WPA-Enterprise / WPA2-Enterprise 以及 WPA-Personal / WPA2-Personal 的字眼 , 其实 WPA-Enterprise / WPA2-Enterprise 就是 WPA / WPA2 ; WPA-Personal / WPA2-Personal 其实就是 WPA-PSK / WPA2-PSK, 也就是以 ”pre-share key” 或 ” passphrase” 的验证 (authentication) 模式来代替 IEEE 802.1X/EAP 的验证模式 ,PSK 模式下不
21、须使用验证服务器 ( 例如 RADIUS Server), 所以特别适合家用或 SOHO 的使用者。还有,wep 是旧的加密方式,工作于 802.11B/G 模式下而 802.11N 草案并不支持此加密方式,所以如果 802.11N 的设备采用 wep 加密方式后,它也只会工作在 802.11b/g模式下,N 的性能发挥不出来。实际中,在有些路由器上面,设置的时候,可能不是严格按照这个规定来设置的(例如设定了采用 WPA 方式,还可以选择 AES) ,但是大体一样。(*)Region(区域)一般在无线网络中的 AP 上都有一个参数,表明它是处于哪个 Region(地区) 。Station 根据
22、 AP 中设置的 Region 调整其相应的发射功率以遵守该地区的规定。AP 的调整过程一般都是手动设定,设置好 AP 所处的 Region 之后,这些信息就会在 AP 发送的 Beacon 帧(后面会说到)中包含了;通过这个 AP 连接到无线网络上的Station,从 Beacon 帧中了解到这些 Region 信息,并且根据这些信息中的规定和 AP进行通信。如果 AP 开始设置错了,那么 Station 和 AP 通信的时候,采用的将会是不符合 Region 规定的频段,可能会对该 Region 中的其它传输网络造成干扰,这应当是“非法”的。(*)Transmission Rate设置传输
23、速率。这里采用不同的无线网络传输协议(802.11a,802.11b,802.11g 等) ,那么可以设置的速率范围有所不同,这里的速度是指理论的速度,实际中,由于各种干扰因素,传输的速率可能会比设置的小。一般而言,在无线网络中,对于某种协议的性能进行描述时,我们需要注意的是,描述时提到的传输速率(Datarate)和吞吐量( Throughput)是不同的。Datarate 是理论上面最大数据传输速率,而 Throughput 是数据的实际最大吞吐量。因为厂家以及传输时所使用的协议等各种因素造成的开销,会导致实际吞吐量比理论吞吐量要小,一般实际最大吞吐为理论最大的 50%左右(一个不太准确但
24、是相对直观的估计:在网络中,高清视频所需的 Throughput 也就 30mbps 左右,网络上一般的视频也就 4mbps左右) 。(*)Qos(质量保证)无线网络中的 QOS 是质量保证,大致的意思是,传输数据的时候,考虑各种因素(例如收费策略,所处地区等) ,以一定的优先级来保证传输的特定要求(一般就是速度) ,如果带宽足够的话,QOS 反而不需要了。(*)RTS Threshold / CTS Protection Mode:这里的 RTS 是 Request-To-Send 的简写,CTS 是 Clear-To-Send 的简写。设置好RTS 的阈值之后,如果超过这个阈值就会在发送信
25、息之前先发送 RTS,以减少干扰,相应的 CTS 会回应之前的 RTS。一般都是 AP 发送 CTS 数据,而 Station 发送 RTS数据。这里对 RTS 和 CTS 做一个简单解释:假设在同一个 AP 所覆盖的无线网络范围内的两个 Station A 和 B,它们之间可能会因为距离的原因互相不可见(例如它们在 AP 网络范围的两端,而这两端的距离大于两者的信号覆盖范围) ,但是 AP 却知道它们是在自己的范围内。当一个 A 想要在 AP 的网络中进行通信的时候,必定要经过 AP 转发它的信息,由于 A 不知道 B 的存在,所以如果同时 B 也通过 AP 进行网络通信,那么会出现 AP
26、同时收到 A、B 两个 Station 的通信请求,而这在无线网络中是不允许的(无线网络中,同一时刻不能有多个人传输数据) 。在这种情况下,B 和 A 互相干扰了对方的通信,但是却互相不可见(不可见的节点互相被称作隐藏节点) 。如果在一个网络中,这样的隐藏节点很多,那么势必会影响网络的性能(因为数据一旦发送失败,就要重传,隐藏节点会导致重传的机率增大) 。这个时候,可采用 RTS 和 CTS 机制。即:在 A 想要通信的时候,先广播发送 RTS 给 AP,告诉 AP“它想要通信”,同时接受到 RTS 的别的 Station(它们对发送 RTS 的 Station 而言可见)会知道 A 将要发送
27、数据,于是它们不会发送数据以免干扰 A;AP 收到 RTS 之后,会广播发送 CTS,告诉所有在 AP 范围内的 Station(包括对 A 而言的隐藏节点 B) ”A 将要通信(同时也相当于告诉 A,A 可以无干扰的发送信息了) ”,这样对 A 而言的隐藏节点 B 也知道有一个A 的存在并且要发送信息了,于是 B 就不会干扰 A 了。 这里,A 和 B 两者可以在不同的网络上,也就是说,不同网络的工作站之间也可以通过 RTS/CTS 来清除相互的干扰。(*)Beacon Interval:表示无线路由定期广播其 SSID 的时间间隔。这个一般不会特别设置,就采用默认值即可。如果不广播了,那么
28、 Station 端扫描的时候可能会发现不定期广播的 AP 对应的SSID 的网络不见了,所以可能会断开连接。这里定期广播,表示 AP 会定时向其范围内广播 SSID 的信息,以表示 AP 的存在,这样 Station 进入一个区域之后,就能够通过扫描知道这个区域是否有 AP 的存在。当然,除了 AP 广播 SSID 以告知其无线网络存在之外,Station 也可主动广播探寻包,在其能够覆盖的范围内询问是否有 AP 存在(即我们通常所说的扫描寻找接入点) 。(*)DTIM Interval:DTIM/TIM 表示告诉 Station,AP 在为 Station 做 package buffer
29、(例如 Station 睡眠的时候)的缓存时间。为了节省电池使用时间,处于无线网络中的 Station 可能会在一定时间之后自动进入休眠状态。这个时候,AP 会为这个 Station 缓存发送给它的数据,而处于休眠状态的 Station 只会在一定时间间隔内给 AP 发送一个数据帧,以确认是否有发送给自己的数据存在。例如,当我们在主机上 ping 另外一台睡眠的机器的时候,收到另外一台机器响应的时间,要比它不睡眠的时候响应的时间长很多。(*)Fragmentation Threshold:表示一个 package 的分片阈值。我们可以设置分片大小,当发送的数据包超过这个阈值之后,802.11
30、协议会自动对这个数据包进行分割。如果设置的这个分片值越小,那么整个数据包越容易传输成功(因为如果出错,那么只需要传送一个片段而不是整个包,无线 wifi 网络中数据传输时出错的概率比有线的以太网要大的多的多) ,当然开销也越大(因为需要额外的信息标记每个分片,以及各个分片传输成功之后涉及到的重组问题) 。2、抓包一般来说,我们的机器上面的软件抓取无线网卡上面的包的时候,其实这些包的目标地址都是这个机器的无线网卡,因为不是发给这个机器无线网卡的包都被网卡过滤了。所以如果我们想要抓取所处无线网络环境下所有的包的时候,需要给机器配备一种特殊的设备(sniffer 就是嗅探器) ,然后再通过抓包工具抓
31、取并分析。有一个硬件设备叫做 AirPcap,就是做这个用的,大有几百到上千美金,它可以同时做为嗅探器或者无线网卡使用,不过做为嗅探器的时候,会抓取所有经过它的包。这个工具目前只有Windows 上面的驱动,所以使用这个工具,只能在 Windows 上面,配合 Wireshark抓包软件进行抓包。这里假设采用 AirPcap 嗅探, Wireshark 软件抓包(其它抓包软件,例如 linux 下面的tcpdump 等分析类似) 。不用图形方式详细展示具体的抓包过程以及分析方法了,主要说一下抓包(这里的包实际主要指的是网络层以下的包,更常见的称呼应该是数据帧)时候需要注意的问题。(*)Wire
32、shark 展示包的时候,大致都是按照协议规定的字段展示,也些地方按照它自己特定的方式展示。因为这里着重讲述一些抓包时注意的基本原理上面的东西,所以不会对此进行过多阐述。大致就是:Wireshark 软件中,对包展示的时候,按照协议规定的字段分别用 Header 和 Body 两个部分展示;另外,在 Header 之前还有两个部分是 Wireshark 为方便用户而展示的包的大小、时间等全局信息(例如见过表示这个包在 B 和 G mode 中的 Channel 1 时,用“BG1“ 表示) 。所以,其实我们分析的时候,实际应该按照后面的 Header 和 Body 两个部分进行。 后面将基于以
33、上所述,进行进一步的讲解。(*)抓包的时候,需要首先确认这个包是否是完整、正确的包。只要是校验位(checksum)不对的,就是错误的包,也无法确定接收的时候那里出了差错,所以这个包是应该忽略的,几乎没有分析的价值。另外,抓包的时候,由于干扰等原因,抓取的内容可能不是在实际传输所处的 Channel 上的包(例如在 Channel 1 上面嗅探,却嗅探到了 Channel 2 上的包) 。(*)抓取授权阶段的包,需要注意实际的授权是在后面进行的。Authentication 的时候,开始阶段实际是 Open 的(即无授权) ,也就是说,开始实际已经建立好了连接,所以我们在抓包的时候,开始看到的
34、一般都是通过验证,但是在后面紧接着采用了类似 802.11x 等安全加强的协议,来进行再次鉴权认证,如果这里无法通过则立即将已经建立的 Association 断开。这样的机制,是因为原来的 802.11 没有充分考虑安全才会这样的,这样也兼容了以前的 802.11。(*)抓取的包的数据,要注意这个包是否是被加过密的。根据协议标准的描述,包中如果有 dataprotected 字段,则表示这个数据本身是被加了密的,不知道这个数据具体是什么,当然,如果有密码,wireshark 也有一个可以按照这个密码解密的工具,有时候不好用。这里所说的数据加密和网络的加密不一样,可能访问网络本身是需要密码(网
35、络是 security 的) ,而数据本身没有 crpted(加密) 。对于一个加了密的数据包,我们一般看不出来这个包到底是做什么用的或者什么类型的等等。(*)抓包的时候,要注意包中指示的源和目的地址以及包的序号。在无线网络中通信的时候,我们抓包的时候可能会看到被抓取的包对应 AP 的 MAC 地址是不存在的,其实抓包时 AP 的 MAC 是 BSSID,它和实际标注的 MAC 地址不一定一样(但是一般都差不多,也就是之后最后面的几位不一样) 。有时候,我们看到抓取的包中的 MAC 地址有许多只相差几位,那么可能它们都属于一个设备(因为虽然设备可能只标注了一个网卡的 MAC 地址,但是它却“虚
36、拟” 出或者实际有多个 MAC 地址) ,所以当我们看到包中对应两个 AP 的 MAC 地址几乎一样的时候,一般来说,这两个 MAC 地址很可能就是一个设备的。还有在抓包的时候,一个地址上面的包的 sequence(序号)是连续的,除非丢包了导致重复或者缺失。如果一个设备虚拟出来两个地址,那么也可能由于没有经过什么处理,导致这两个地址上面的包共同起来是连续的(如前所述,这两个地址和 MAC 很接近,应该是 BSSID) 。(*)抓取的数据帧如果是广播帧则不需要确认(ACK ) ,如果是单播帧,则一般需要确认(ACK) 。例如,Probe 帧是广播帧,所以它无对应的 ACK 确认帧,对 Prob
37、e 的回复则叫做 Probe Response;注意 ACK 帧本身用于确认,是单播的,但是它本身却不需要再被确认了。从包中的目的 MAC 地址中,可以看出这个包是广播多播帧还是单播帧。MAC 第一个字节的第一个位是 1,表示组播,前两位是 1 表示广播,第一个字节第一个位是 0 表示单播。这里注意,MAC 不是值,而是一个 Pattern,所以没有Endian 之说,也没有那个位高,那个 MAC 大之说。例如:“a8:27:26:.:b7” ,这里第一个字节就是 a8(10101000) ,其第一个字节的第一位就是 8 的最“右”位,即“0”,所以它的第一个字节的第一个位是 0,是一个单播地
38、址。其实,这里涉及到大端小端问题,后面也会讲到,总之,以太网线路上按“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(
39、berkerley package filter)这个比较通用的语言来描述(注意这不是 Wireshark 专用的 filter 语言,而是一个通用的语言) 。但是抓包期间的过滤,有时候不准,所以我们一般先将所有的包抓取下来,然后用WireShark 中显示的过滤器(即 view filter)来显示我们关注的包,这里我们可以用macro 来定义比较复杂的显示过滤条件。保存的时候,可以用按照显示过滤还是抓取过滤的方式保存内容。(*)尽量不要抓取 Channel Width 为 40MHZ 的 Channel 上的帧。我们还需要注意的是,使用 Sniffer 抓取无线网络包的时候, AirPca
40、p 无法正常抓取 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 芯片公司也不愿花过多的精力来
41、支持这个很少有人用的抓包工具的这个功能) 。另外,假设一个无线工作站是基于 Android 系统的(例如智能手机或者平板电子书)那么我们可以利用“wpa_cli status”命令来可以查看当前设备的连接的SSID,BSSID,MAC,IP 等信息, (这里“cli”=“command line interface”)。 还有更“ 复杂”的命令 “wc”和“wl”,其中 wc 是比较上层的命令,wl 是下层的命令(是基于芯片是否支持的,例如 wl 在 broadcom 芯片上支持,但是在 ti 上面就没有了) 。三、一些原理1、常见的帧在 802.11 中的帧有三种类型:管理帧(Managem
42、ent Frame,例如 Beacon 帧、Association 帧) 、控制帧(Control Frame,例如 RTS 帧、CTS 帧、ACK 帧) 、数据帧(Data Frame,承载数据的载体,其中的 DS 字段用来标识方向很重要) 。帧头部中的类型字段中会标识出该帧属于哪个字段。(*)ACK 帧单播(unicast)帧都需要用 ACK 来确认,ACK 本身不是广播帧, ACK 在 MAC 上是unicast 的,帧中有 receive 地址字段(用来标识是对谁的确认) ,但是它却不需要再确认了。ACK 只有接收地址(receive)而无源地址(src)和序号(sequence) ,
43、因为发送和接受是一个整体,发送之后,其他人(除了这个发送的接受者)都不会再发送数据了(无线协议中的冲突避免机制) ,所以接受者会发送一个没有 src 的 ack 帧给receiver,而接收 ACK 的一端会根据这个知道它收到了一个 ACK 帧(其实根据协议,应当把发送单播帧和收到它相应的 ACK 看作一个原子的不可分割的整体,表示一次成功的通信) 。(*)Beacon 帧Beacon 帧定时广播发送,主要用来通知网络 AP 的存在性。Station 和 AP 建立Association 的时候,也需要用到 Beacon。Station 可以通过 Scan 来扫描到Beacon,从而得知 AP
44、 的存在,也可以在扫描的时候通过主动发送 Probe 来探寻 AP是否存在。也就是说,建立 Association 的时候有主动的扫描或者被动的扫描两种方式。另外,Beacon 还包含了关于 Power Save、以及地区等信息。(*)Association 帧通常 Association 帧都有 Probe Request 和相应的 Probe Response。Association 的Request 中有其所需要的 Channel 以及 Data Rate 等状态,以便让 AP 决定是否让它与自己建立 Association。而关联是否成功,主要是看 Response 中的 Status
45、 code 是否为 Success。(*)Data 帧Data Frame 具有方向,这个方向用 DS(分布式系统)字段来标识,以区分不同类型帧中关于地址的解析方式;其它的类型 Frame 例如 Control Frame 或者管理帧中,这个字段是全零。这个字段用两位表示,这两个位的含义分别表示“To Ds”和“From Ds”,大致含义如下:(a)To DS:表示 Station-AP,一般也叫 Upload。(b)From DS 表示 AP-Station,一般也叫 Download。这里,我们可以大致将 DS 看做 AP,To/From 是从 AP 的角度来考虑的。To DS 就是让 A
46、P 干活。另外 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 的
47、情况,DS 虽然大致等于AP 但是它不是 AP,它其实是一个系统,从 Station 的角度来看,比较容易理解。并且 To DS 和 From DS 一定是无线网络上面数据侦才有的字段。2、帧和大端小端Ethernet 和 802.11 都是按照 Little Endian 的方式来传输数据,也就是说,而 MAC 层传输的时候,是采用 Little Endian 的方式,一个字节一个字节的传输的,前面的低位字节先传输,后面的高位字节后传输(传输单位不是按位而是字节) ;在协议标准上描述一个帧的时候,一般是先按照 Little Endian 的方式对其进行总体描述,然后具体细节说每个字段的值,这
48、时候这个字段值是 Big Endian 方式表示的,这一点应当注意。例如,协议标准中可能能对某个帧格式做如下的描述:|b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|.|.|这里,最低位 b0 在最前面,所以这里采用的就是小端的方式来描述帧的总体格式信息。传输的时候,就按照这里的方式,以字节为单位向物理层进行传输(先传 b0b7 然后b8b16 等等) 。 但是,在解释这个帧的各个域的时候却采用大端的方式进行描述。假设 b3=0,b2=1,b1=0,b0=0 四者共同组成一个名字为“FLAG”的域,那么会有类似如下的描述:FLAG=4(即 FLAG 为 0100):表示 XXX。所
49、以,协议标准中具体描述某个域的时候,一般直接用大端方式表示的数值(b3b2b1b0=0100)来描述;而传输数据帧或者在协议标准中描述整体帧的时候,中给出的却是小端的方式(b0b1b2b3=0010)。 这里的每个字段都是帧的一个部分,在管理帧(后面会说)中长度不固定的部分又叫 IE(information Element) 。另外注意,内存地址是用来标记每个字节的而不是位,所以内存里面大端小端也是以字节而不是位为单位的(前面描述“大端“ 、 ”小端”的时候却以位序而非字节序,这一点需要明辨,不要混淆) 。假设奔腾的机器,CPU 为 32 位,采用 Little Endian 方式,那么表示 1 这个 int 类型整数的时候,假设它在数值上是十六进制的“00000001“,那么存放在内存中却是由低位到高位依次存放的,由低到高地址依次为:“01“、“00“、“00“、“00“(也就是说小端方式存放在内存中的时候,是按照含有最低位的字节存放在低地址,注意是字节,在内存中“位” 没有地址,所以没有大端小端一说) 。在传递帧的时候,也是按照一个字节一个字节的传输,而一个字节内部在实际上其实没有什么端的分别,但是 wireshark 一律使用“b7b6b5b4b3b2b1b0”这样的方式来用大端的方式显示。总之,需要注意网络层下面的帧的大