3.3.1 OSI基本参考模型及相关基本概念
1.OSI/RM
ISO(International Organization for Standardization,国际标准化组织)和IEC(International Electrotechnical Commission,国际电工技术委员会)于1983年联合发布了ISO/IEC 7498标准。该标准定义了著名的OSI/RM[5](开放系统互联参考模型,Open Systems Interconnection Reference Model)。
在OSI/RM中,计算机网络体系结构被划分成七层,其名称和对应关系如图3-1所示。图中绘制了OSI/RM以及另外一个常用的网络体系TCP/IP的结构。先来看OSI/RM,它将网络划分成七层,由上到下分别如下[6]。
·应用层(Application Layer):应用层能与应用程序界面沟通以达到向用户展示的目的。常见的协议有HTTP、HTTPS、FTP、SMTP等。其数据单位为APDU(Application Protocol Data UNIT)。
·表示层(Presentation Layer):表示层能为不同客户端提供数据和信息的语法转换,使系统能解读成正确的数据,同时它还能提供压缩解压、加密解密等服务。例如不同格式图像(如GIF、JPEG、TIFF等)的显示就是由位于表示层的协议来支持的。其数据单位为PPDU(Presentation Protocol Data UNIT)。
图3-1 OSI RM及TCP/IP结构
·会话层(Session Layer):会话层用于为通信双方制定通信方式,创建和注销会话(双方通信)等。常见的协议有ZIP、AppleTalk、SCP等。其数据单位为SPDU(Session Protocol Data UNIT)。
·传输层(Transport Layer):传输层用于控制数据流量,同时能进行调试及错误处理,以确保通信顺利。发送端的传输层会为数据分组加上序号,以方便接收端把分组重组为有用的数据或文件。传输层的常见协议有TCP、UDP等。其数据单位为TPDU(Transport Protocol Data Unit)。
·网络层(Network Layer):网络层为数据传送的目的地寻址,然后再选择一个传送数据的最佳路线。网络层数据的单位为Packet或Datagram。常见的设备有路由器等。常见协议有IP、IPv6。
·数据链路层(Data Link Layer):在物理层提供比特流服务的基础上,建立相邻节点之间的数据链路。通过差错控制提供数据帧(Frame)在信道上无差错的传输。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。数据链路层数据的单位为Frame(帧)。常见的设备有二层交换机、网桥等。
·物理层(Physical Layer):物理层定义了通信设备机械、电气、功能和过程等方面的特性,用以建立、维护和拆除物理链路连接。物理层数据的单位为bit。
图3-1中左边所示为另外一个常用的网络体系,即TCP/IP模型。对比图3-1中的两个模型,我们可简单认为TCP/IP Model是OSI/RM的一个简化版本。
提示 关于OSI/RM的详细信息,请读者阅读本章参考资料[5]。
2.LLC和MAC子层
虽然ISO/IEC 7498标准所定义的OSI/RM只将网络划分为七层。但实际上每一层还可划分为多个子层(Sub Layer)。所有这些子层中,最为人熟知的就是ISO/IEC 8802[7]规范划分Data Link Layer而得到的LLC(Logic Link Control Sub Layer)和MAC(Medium Access Control Sub Layer)。它们的信息如图3-2所示。
图3-2 MAC和LLC子层
ISO/IEC 8802将Data Link Layer划分成了两个子层。
·媒介访问控制子层(MAC Sub Layer):该子层的目的是解决局域网(Local Area Network,LAN)中共用信道的使用产生竞争时,如何分配信道的使用权问题。目前LAN中常用的媒介访问控制方法是CSMA/CD(争用型介质访问控制)。由于无线网络的特殊性,MAC的控制方法略有不同。将在下文介绍相关内容。
·逻辑链路控制子层(LLC Sub Layer):该子层实现了两个站点之间帧的交换,实现端到端(源到目的),无差错的帧传输和应答功能及流量控制功能。
在Data Link层划分的这两个子层中,802.11只涉及MAC层。由于物理介质的不同,无线和有线网络使用的MAC方法有较大差别,主要区别如下[8]。
·有线网络最常使用的方法(此处仅考虑以太网)是CSMA/CD(Carrier Sense Multiple Access/Collision Detect,载波监听多路访问/冲突检测机制)。其主要工作原理是:工作站发送数据前先监听信道是否空闲,若空闲则立即发送数据。并且工作站在发送数据时,边发送边继续监听。若监听到冲突,则立即停止发送数据并等待一段随机时间,然后再重新尝试发送。
·无线网络主要采用CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance,载波监听多路访问/冲突避免机制)方法。无线网络没有采用冲突检测方法的原因是:如果要支持冲突检测,必须要求无线设备能一边接收数据信号一边传送数据信号,而这种设计对无线网络设备来说性价比太低。另外,冲突检测要求边发送数据包边监听,一旦有冲突则停止发送。很显然,这些因发送冲突而被中断的数据发送将会浪费不少的传输资源。所以,802.11在CSMA/CD基础上进行了一些调整,从而得到了CSMA/CA方法。其主要工作原理见下节内容。
注意 CSMA/CA协议信道利用率低于CSMA/CD协议信道利用率。信道利用率受传输距离和空旷程度的影响,当距离远或者有障碍物影响时会存在隐藏终端问题,降低信道利用率。在802.11b WLAN中,在1Mbps速率时最高信道利用率可达到90%,而在11Mbps时最高信道利用率只有65%。
3.CSMA/CA[8]
CSMA/CA主要使用两种方法来避免碰撞。
·设备发送数据前,先监听无线链路状态是否空闲。为了避免发生冲突,当无线链路被其他设备占用时,设备会随机为每一帧选择一段退避(backoff)时间,这样就能减少冲突的发生。
·RTS-CTS握手。设备发送帧前,先发送一个很小的RTS(Request To Send)帧给目标端,等待目标端回应CTS(Clear To Send)帧后才开始传送。此方式可以确保接下来传送数据时,其他设备不会使用信道以避免冲突。由于RTS帧与CTS帧长度很小,使得整体开销也较小。
我们通过图3-3来介绍RTS和CTS的作用。
图3-3 RTS/CTS原理
如图3-3所示,以站A和站B之间传输数据为例,站B、站C、站E在站A的无线信号覆盖的范围内,而站D不在其内。站A、站E、站D在站B的无线信号覆盖的范围内,但站C不在其内。
如果站A要向站B发送数据,站A在发送数据帧之前,要先向站B发送一个请求发送帧RTS。在RTS帧中会说明将要发送的数据帧的长度。站B收到RTS帧后就向站A回应一个允许发送帧CTS。在CTS帧中也附上站A欲发送的数据帧的长度(从RTS帧中将此数据复制到CTS帧中)。站A收到CTS帧后就可发送其数据帧了。
怎么保证其他站不会干扰站A和站B之间的数据传输呢?
·对于站C,站C处于站A的无线传输范围内,但不在站B的无线传输范围内。因此站C能够收听到站A发送的RTS帧,但经过一小段时间后,站C收听不到站B发送的CTS帧。这样,在站A向站B发送数据的同时,站C也可以发送自己的数据而不会干扰站B接收数据(注意,站C收听不到站B的信号表明,站B也收不听到站C的信号)。
·对于站D,站D收听不到站A发送的RTS帧,但能收听到站B发送的CTS帧。因此,站D在收到站B发送的CTS帧后,应在站B随后接收数据帧的时间内关闭数据发送操作,以避免干扰站B接收自A站发来的数据。
·对于站E,它能收到RTS帧和CTS帧,因此,站E在站A发送数据帧的整个过程中不能发送数据。
总体而言,使用RTS和CTS帧会使整个网络的效率下降。但由于这两种控制帧都很短(它们的长度分别为20和14字节)。而802.11数据帧则最长可达2346字节,相比之下的开销并不算大。相反,若不使用这种控制帧,则一旦发生冲突而导致数据帧重发,则浪费的时间就更大。
另外,802.11提供了三种情况供用户选择以处理。
·使用RTS和CTS帧。
·当数据帧的长度超过某一数值时才使用RTS和CTS帧。
·不使用RTS和CTS帧。
尽管协议经过了精心设计,但冲突仍然会发生。例如,站B和站C同时向站A发送RTS帧。这两个RTS帧发生冲突后,使得站A收不到正确的RTS帧因而站A就不会发送后续的CTS帧。这时,站B和站C像以太网发生冲突那样,各自随机地推迟一段时间后重新发送其RTS帧。
提示 根据802.11协议,CSMA/CA具体运作时由协调功能(Coordination Function,CF)来控制。协议规定有四种不同的协调功能,分别是DCF(Distributed CF,分布式协调功能)、基于DCF之上的PCF(Point CF)、HCF(Hybrid CF,混合型协调功能)以及用于Mesh网络的MCF(Mesh CF)。由于无线网络是共享介质,所以协调功能的目的就是用于控制各个无线网络设备使用无线媒介的时机以避免冲突发生。形象点说,这就好比在一个会议室里,所有人都可以发言,但如果多个人同时发言又不知道谁和谁在说话。所以,每个打算发言的人都需要检查当前发言的情况。本章不详细介绍802.11中CF相关的内容。感兴趣的读者可阅读802.11协议第9节"MAC sublayer functional description"。
另外,规范还定义了基于竞争的服务(contention-based service,使用DCF进行数据交换)和基于无竞争的服务(contention-free service,使用PCF进行数据交换),本章也不讨论它们。
4.MAC层Service及其他概念[5][9]
ISO/IEC 7498及相关的一些标准文档除了对网络体系进行层次划分外,还定义了层和层之间交互方式及其他一些基本组件。它们可用图3-4来表示。
图3-4 MAC Entity、Service和Clients
图3-4绘制了MAC层相关的组件及交互方式。
·协议规定了每一层所提供的功能,这些功能统一用Service来表示。MAC层为上层提供MAC Service。从Java编程角度来看,就好比定义了一个名为MAC Service的Java Package。
·每一层内部有数个Entity。Entity代表封装了一组功能的模块。上面提到的Service就是由Entity提供的。根据OSI/RM的层次关系,第N层为第N+1层提供服务。所以,MAC Entity对上一层提供MAC Service。从Java编程角度来看,MAC Entity就好比MAC Service Package中定义的类,不同的Entity代表该Package中实现不同的功能类。一个Package中的Entity可以相互调用以完成某个功能。
·第N+1层要使用第N层服务时,必须经由Service Access Point来完成。MAC的Service必须借由MSAP(MAC Service Access Point)来访问。
根据上面的介绍,Entity定义了一个类,其中是否定义了相应的功能函数呢?在标准文档中,和功能函数对应的术语是primitives(原语)及它们的parameters(参数)。图3-4列举了MAC Service的两个重要函数,分别是如下。
·M_UNITDATA.request:Client调用该原语发送数据。该原语的参数是destination_address(目标地址)、source_address(源地址)、MSDU(MAC Service Data Unit,即数据)、priority(优先级)。
·M_UNITDATA.indication:当位于远端机器的MAC层收到上面发送的数据后,将通过indication原语通知上一层以处理该数据。
提示 关于MAC层的服务详细定义,请读者阅读3.3.5节MAC服务定义内容。
值得指出的是,规范只是从逻辑上定义了上述内容,它并没有指定具体的实现。关于MAC Service的详细定义,读者可阅读本章参考资料[10],即ISO/IEC 15802-1。
协议还定义了SDU和PDU两个概念。当上一层调用MAC的request原语时,会把要发送的数据传给MAC层。这个数据被称为MSDU。对MAC层来说,MSDU其实就是MAC要发送的数据,即载荷(Payload)。MAC层处理Payload时还会封装MAC层自己的一些头信息。这些信息和MSDU共同构成了MAC层的Protocol Data Unit(简写为MPDU)。从OSI/RM角度来看,经过N+1层封装后的数据是(N+1)-PDU。该数据传递给N层去处理时,对N层来说就是(N)-SDU。N层封装这个SDU后就变成自己的(N)-PDU了。
5.MIB[11]
在阅读802.11相关规范时,经常会碰到MIB(Management Information Base,管理信息库)。MIB是一个虚拟的数据库,里边存储了一些设备信息供查询和修改。MIB常见的使用之处是网管利用SNMP协议管理远程主机、路由器等。
MIB内部采用树形结构来管理其数据。内部的每一个管理条目(Entry)通过OID(Object IDentifier)来访问。MIB定义了Entry的属性和可取的值。由于属性及其可取值的定义采用了与具体编程语言无关的方式,所以一个MIB库可以很轻松地通过编译器(compiler)将其转换成对应的编程语言源码文件。
提示 MIB的定义比较烦琐,可阅读参考资料[11]中的资料列表以学习完整的MIB知识。
从笔者角度来看,对802.11来说,MIB就是定义的一组属性。802.11定义的MIB属性在http://www.ieee802.org/11/802.11mib.txt中。下载后将得到一个802.11mib.txt文件。可通过JMIBBrowser[①](part0039.html#serz)工具加载并查看其内容,如图3-5所示。
图3-5 802.11 MIB内容
首先点击图3-5所示左下角的"Load MIB"按钮以加载802.11mib.txt文件,然后查看802.11mib定义的一些属性。如图3-5所示,左侧显示当前查看的dot11MACAddress的条目。右侧显示该条目的信息,Access中的"read-only"表示只读,Description表示该条目的意义。
802.11mib定义了一个较全的属性集合,一般而言,设备可能只支持其中一部分属性。图3-6所示为Note 2上wlan0设备的MIB信息截图(由于篇幅问题只包含部分Note 2 wlan0设备的MIB属性)。
以第一条属性dot11RSNAOptionImplemented为例,其在802.11mib.txt的定义如图3-7所示。
相比直接浏览802.11mib.txt文本文件而言,利用JMIBBrowser工具查看属性会更加方便和直观一些。
图3-6 Note 2 wlan0设备的MIB属性
图3-7 dot11RSNAOptionImplemented属性内容
提示 以后分析wpa_supplicant源码时,会碰到802.11mib定义的属性,建议在阅读本节时下载相关文件和工具程序。另外,以上内容涉及的知识点是读者以后阅读802.11协议时必然会碰到的。由于802.11协议引用的参考资料非常多,故本节整理了其中最基础的知识点,请读者务必认真阅读本节内容。
① 用Java语言编写的小工具,可利用SNMP协议查看和设置指定设备MIB,下载地址为http://sourceforge.net/projects/jmibbrowser/。