3.5.5 Wi-Fi安全

早期使用802.11采用一种称为 有线等效保密(WEP) 的加密方法,但后来被证明安全向薄弱,并出现了替换它的需求。工业界通过 Wi-Fi 保护访问(WPA) 来回应,它使用加密块代替密钥方式。在WPA中,采用一种名称为Michael的消息完整性检查,以弥补WEP中的主要弱点之一。IEEE 802.11i 工作组制定了一个更强的标准,最终被采用至今,称为WPA2。同时WEP与WPA都采用RC4加密算法。WPA2使用AES加密算法。当然这些技术都用于站和AP之间提供隐私保护。 在使用WEP、WPA以及WPA2的小规模环境中,授权通常通过预先预留一个共享密钥来实现,它在每个站和AP的配置过程中生成。知道这个密钥的用户拥有访问网络的合法权限。这些密钥通常用于保护隐私的加密密钥的初始化。这种 预共享密钥(PSK) 具有局限性。因此,WPA和后期标准支持 基于端口的网络访问控制 标准,它提供了一种在IEEE 802局域网中使用 扩展身份协议(EAP) 的方式。 随着 IEEE 802.11i 工作组的工作完成,WPA和RC4/TKIP组合扩展为一个称为CCMP的新方案,它被作为WPA2的一部分。ccMP是基于计数器模式的 AES,以确保用于认证和完整性的密码块链接消息认证码的安全。AES采用128位的块和128位的密钥。CCMP和TKIP形成了Wi-Fi安全体系结构的基础,称为 强健安全网络(RSN),并支持强健安全网络访问(RSNA)。早期的一些方法(如WEP)称为 预RSNA方法。RSNA要求支持CCMP ,而802.11n 标准完全不使用TKIP。

3.5.6 Wi-Fi 网状网 (802.11s)

802.11s 草案定义了 混合无线路由协议(HWRP),它基于Ad hoc 按需距离向量(AODV)路由和 优化链路状态路由协议(OLSR)等IETF标准。 Mesh站是一种QoS站,它可能参与HWRP或其他路由协议,但兼容节点必须包括HWRP实现和相关 通话时间链路质量。Mesh节点使用EDCA来协同工作,或使用一种可选的称为Mesh确定性访问的协调功能。Mesh点(MP)是与另据形成Mesh连接的那些节点。那些包含AP功能的Mesh节点策划归纳为 Mesh AP。常规802.11站可使用AP或MAP 访问无线局域网的其他部分。 802.11s草案为RSNA制定了一种可选的新安全方案,称为基于对等同时认证(SAE)的 认证。

3.6 点到点协议

PPP 用来表示 点到点协议。这是一种在 串行链路传输IP数据报 的分流方法,从低速的拨号调制解调器到高速的光链路。它被一些DSL服务商广泛运用部署,也可以分配Internet系统的参数。 注意的是 PPP 其实是一个协议集合,而不是一个单一的协议。它 支持建立连接的基本方法称为 链路控制协议(Link Control Protocol | LCP) ,以及一系列NCP协议,在LCP建立了基本链路之后,用于各种协议(包括IPv4、IPv6和非IP协议)建立网络层链路。 [successbox title=”3.6.1 链路控制协议“] PPP 的 LCP 用于在点到点链路上建立和维护低层的双方通信路径。因此,PPP操作只需关注一条链路的两端,他不需要像以太网和Wi-Fi和MAC底层协议那样处理共享资源访问的问题。(Q:不理解) PPP 通常对底层的点到点链路具有最低要求,LCP更是这样。链路必须支持双向操作(LCP 使用的确认)以及异步或者同步操作。通常LCP使用简单的位级别帧格式,基于 高级数据链路控制(HDLC) 建立链路协议。在PPP设计时,HDLC就已经连理了一种良好的帧格式。IBM将它修改为同步数据链路控制(SDLC),在其专用的系统网络体系结构协议组中用作链路层协议。 HDLC 协议还用作802.2中LCC标准的基础,并最终被用于PPP。协议格式如下图所示。 通常情况下,PPP帧格式类似上图所示的HDLC所示的 HDCL帧,由2个1字节的包含固定的值0x7E的 标志 字段包含”范围”。点到点链路的两个端点使用这些字段来发现一个帧的开始和结束。如果0x7E值出现在帧内部,这时会带来一个小问题。它可以通过两种方式来处理,这取决于 PPP 工作在异步还是同步链路上。 对于异步链路,PPP使用字符填充(也称为字节填充),如果标志字符出现在帧中的其他地方,则用2字节序列0x7D5D替换。因此,接收 方用Ox7E替换接收的Ox7D5E,并用Ox7D替换接收的Ox7D5D。 在同步链路上,PPP使用位填充。注意的是,标志字符的位模式位 01111110,在除了标志字符之外的任何地方,位填充在5个连续1之后填充一个0。 在第一个标志字段之后,PPP采用HDLC的地址(Addr)和控制字段。在HDLC中,地址字段用于指定哪个站正在处理,但是由于PPP只关心一个目的地,这个字段总是被设置为 OxFF (所有站)。HDLC控制字段用于指示帧序列和重传行为。由于这些链路层的可靠性功 能通常不是由PPP实现,所以控制字段设置为固定值OxO30 由于地址和控制字段在PPP中都是固定的常数,所以在传输过程中经常通过一个称为地址和控制字段压缩(ACFC)的选项 来省略它们,该选项实质上是消除了这两个字段。 PPP帧的协议字段表明携带的数据类型。在一个PPP帧中,可携带多种不同类型的协议。正式列表和用于协议字段的分配号显示在”点到点协议字段分配”文档中。根据 HDLC规范,协议号的分配方式为:高位字节的最低有效位为0,低位字节的最低有效位为100xOOOO - Ox3FFF (十六进制)范围内的值表示网络层协议,Ox8000 - OxBFFF范围内的值表示NCP的相关数据0 0x4000 - Ox7FFF范围内的值用于NCP不相关的”很少使用的”协议00xCOOO - OxEFFF范围内的值表示控制协议,例如LCP。在某些情况下,如果协议字段压缩(PFC)选项在链路建立时协商成功,协议字段可被压缩为1字节00xOOOO - OxOOFF 范围内的协议号适用于包括大多数流行的网络层协议在内的协议。注意,LCP分组总是使用 2字节的未压缩格式。 [/successbox] [successbox title=”3.6.1.1 链路控制协议“] LCP 在基本的PPP分组之上进行了简单的封装。如下图所示。 LCP的PPP协议字段值始终是OxCO21,它不能用PFC删除,以免产生歧义。标识字段是由LCP请求帧的发送方提供的序列号,并随着每个后续消息进行递增。在生成一个回复(ACK、 NACK或REJECT响应)时,这个字段通过复制响应分组请求中包含的值来构造。采用这种方式,请求方可通过匹配标识符来识别相应请求的应答。代码字段给出了请求或响应的操作类型:配置请求(OxOl )、配置ACK (OxO2)、配置NACK (OxO3)、配置REJECT(OxO4)、终止请求(OxO5 )、终止ACK(OxO6)、代码REJECT(OxO7)、协议REJECT(OxO8 )、回送请求(OxO9)、回送应答(OxOA)、放弃请求(OxOB)、标识(OxOC)和剩余时间(OxOD)。 ACK消息通常表明接受一组选项,NACK消息用建议选项表明部分拒绝。REJECT消息完全拒绝一个或多个选项。拒绝代码表明前一个分组包含的某些字段值未知。长度字段给出了LCP分组的字节长度,它不能超过链路的最大接收单元(MRU),我们稍后讨论一种建议的最大帧限制。 注意,长度字段是LCP协议的一部分; PPP协议通常不提供这种字段LCP的主要工作是使一条点到点链路达到最低要求。配置消息使链路两端开始基本配置过程,并建立商定的选项。终止消息用于在完成后清除一条链路。 LCP也提供了前面提到的一些 附加功能。回送请求/应答消息可由LCP在一条活跃链路上随时交换,以验证对方的操作。放弃请求消息可用于性能测试,指示对方丢弃没有响应的分组。标识和剩余时间消息用于管理目的:了解对方的系统类型,指出链路保持建立的时间(例如出于管理或安全原因)。 从历史上来看,如果一个远程工作站处于环回模式(或者说”回路”),这时点到点链路会出现一个常见问题。 电话公司的广域数据线路有时会为了测试而设置成环回模式,由一方发送的数据直接由另一方返回。虽然这可能对线路测试有用,但它对数据通信完全没有帮助,所以LCP包括一种发送魔术数字(由发送方选择的任意数字)的方式,并查看是否立即返回相同类型的消息。如果是的话,该线路被检测为处于回路,并可能需要进行维护。为了对PPP链路建立和选项协商有一个更好的认识,下图显示了一个简化的分组交换时间表和一个简化的状态机(在链路两端实现)。 一旦底层协议表明一个关联变为活跃(例如调制解调器检测到载波),则认为这个链路已被建立。链路质量测试包含链路质量报告和确认交换,它也可以在此期间完成。 如果链接需要认证(这是常见的),例如当拨号到一个ISP时,可能需要一些额外的信息交换,以认证链路上的一方或双方的身份。当底层协议或硬件表明一个关联已停止(例如载波消失),或发送一个链路终止请求,并从对方接收到一个终止响应,则认为这个链路已被终止。 [/successbox] [successbox title=”3.6.1.2 LCP选项“] 当LCP建立一条由一个或多个NCP使用的链路时,可以对一些选项进行协商。我们将讨论两种或更多的常见情况。异步控制字符映射(ACCM)或简称“ asyncmap”选项定义哪些控制字符(即OxOO - OxIF范围内的ASCⅡ字符)需要被“转义”为PPP操作。转义一 个字符表示不发送这个字符的真实值,而将PPP转义字符(Ox7D)放在控制字符原始值和Ox20异或形成的值之前。 例如, XOFF字符(Ox13)将转换为(Ox7D33)发送o ACCM用于 控制字符可能影响底层硬件操作的情况。例如,如果软件流控制能够使用XON/XOFF字符, 而XOFF字符未经转义就通过链路传输,则硬件直到看到一个XON字符才停止数据传输。asyncmap选项通常是一个32位的十六进制数,其中第77个最低有效位被设置为1 ,表示值为n的控制字符应被转义。因此, aSynCmaP为Ox雕甜瞄表示转义所有控制字符,为OxOOOOOOOO表示不转义任何控制字符,为OxOOOAOOOO表示转义XON (Ox11 )和XOFF (Ox13)。虽然Oxff雕瞄是默认值,但当前很多链路可在asyncmap被设置为OxOOOOOOOO时安全运行。 由于PPP缺少一个长度字段,并且串行线路通常不提供帧封装,所以在理论上对一个 PPP帧的长度没有硬性限制。 实际上,最大帧大小通常由MRU指定。当一台主机指定一个 MRU选项(类型OxOl )时,它要求对方不发送比MRU选项提供的值更长的帧o MRU值是 数据字段的字节长度,它不计算其他PPP开销字段(即协议、 FCS、标志字段)。 它的典型值是1500或1492,但也可能多达655350 1Pv6操作需要的长度最小为12800 PPP标准要求 具体实现能接收最大1500字节的帧, MRU更多的是建议对方选择帧大小,而不是硬性限制 帧大小。当小分组和大分组在同一条PPP链路上交错传输时,较大分组可能占用一条低带宽链路的大部分带宽,并影响小分组的正常传输。这可能导致抖动(延迟变化),对交互式应用 (例如远程登录和VbIP)产生负面影响。配置较小的MRU (或MTU)有助于缓解这个问题, 但会产生更大的开销。 PPP支持一种交换链路质量报告信息的机制。在选项协商期间,可能包括一个包含所请 求的特定质量协议的配置信息。选项中的第16位被保留给特定协议,但最常见的是一个包括链路质量报告(LQR)的PPP标准[RFC1989],它在PPP协议字段中使用值OxCO250如 果启用该选项,则要求对方按某个周期间隔提供LQRo LQR请求之间的最大周期间隔被编 码为一个32位数字,它被保存在配置选项中,并以1/100秒为单位表示。 对方可能比这个要求更频繁地生成LQR。LQR包括以下信息:一个魔术数字、发送和接收的分组数和字节数、 出错的输人分组数和丢弃的分组数,以及交换的LQR总数。在一个典型的实现中,允许用户设置对方发送LQR的频繁程度。如果链路质量无法满足某些配置阑值,有些实现也提供 了终止链路的方法。LQR可在PPP链路进人建立状态后请求。每个LQR被赋予一个序列号, 因此它能确定一段时间内的趋势,甚至在LQR重新排序时也能确定。 很多PPP实现支持一种回叫功能。在一次典型的回叫建立过程中, PPP拨号回叫客户端呼叫PPP回叫服务器,并提供认证信息,而服务器断开连接并回叫客户端。在呼叫费用不对称或对于某些安全级别的情况下,这种做法可能是有用的。LCP选项针对用于协商回叫的协议,该选项值为OxOD [RFC1570]。 如果许可,回叫控制协议(CBCP)完成协商。PPP使用的一些压缩和加密算法在处理时需要一定的最小字节数,称为块大小。在数据 不够长的情况下,通过填充增加数据长度,达到一个甚至多个块的大小。 如果存在填充,它通常位于数据区后面,并位于PPP FCS字段之前。一种填充方法称为自描述填充[RFC1570], 它将填充值变为非零值。这时,每个字节获得填充区域的偏移量值。因此,填充的第一个字 节值为Oxol,最后一个字节包含填充字节数。最多支持255字节的填充。自描述填充选项 (类型10)用于让对方了解填充类型和最大填充值(MPv),它是这个关联允许的最大填充 值。由于基本PPP帧缺少一个明确的长度字段,因此一个接收方可使用自描述填充,以确定 应从接收的数据区删除多少填充字节。为了减小每个帧包含一个头部的固定开销,提出了一种将多个不同协议的有效载荷聚合成PPP帧的方法,称为PPPMux [RFC3153]方法。主要PPP头部的协议字段被设置为聚合 帧(OxoO59),然后每个有效载荷块被插人帧中。通过在每个有效载荷块之前插人1 - 4字 节的子帧头部来实现。在子帧头部中, 1位(称为PFF)说明子帧头部中是否包含协议字段, 1位(称为LxT)说明后面的长度字段是1字节还是2字节。除此之外, 1或2字节的协议 ID使用与外部的PPP头部相同的值和压缩方法。在子帧与默认PID (该PID在配置阶段通过PPPMux控制协议(PPPMuxCP)建立)匹配时, PFF可以为0(意味着不存在PID字段)。 PPP帧格式如图3-19所示,普通PPP/HDLC的FCS可以是16或32位。默认的FCS为16位,但32位的FCS值可通过32位的FCS选项来启用。其他的LCP选项包括使用PFC 和ACFC,以及认证算法的选择。 国际化[RFC2484]提供了一种使用语言和字符集的表示方式。字符集是一个来自“字符集注册表” [IANA-CHARSET]的标准值,并从[RFC5646] [RFC4647]的列表中选择语言。 [/successbox] [successbox title=”3.6.2 多链路PPP“] PPP 的一个特殊版本为 多链路PPP(MP),可用于将多条点到点链路聚合为一条链路。这种想法与前面讨论过的 链路聚合 相似,并被用于多个电路交换信道的聚合。MP包含一个特殊的LCP选项,表示支持多电路,以及一个用于多链路上PPP帧分片与重组的协商协议。一条链路聚合可作为一条完整的虚拟链路来操作,并包含自己的配置信息。链路捆绑由大量 成员链路 组成。 实现MP的典型方法是使用分组轮流经过各个成员链路传输。这种方法被称为 银行柜员算法,它可能导致分组被重新排序,可能为其他协议带来不良影响。MP在每个分组中添加一个2-4字节的序列头部,而远程MP接收方的任务是重建正确的顺序。图3-25显示了这种数据帧 在图3-25中,我们看到一个MP分片的开始分片(B)、结束分片(E)位字段和序列号字段。如果一个帧没有被分片,但是使用这种格式传输,则B和E位都被置位,表明该分片是第一个和最有一个。 否则,第一个分片的B、 E位组合被设置为10,最后一个分片的B、 E位组合被 设置为01 ,它们之间的所有分片被设置为00。序列号给出相对第一个分片的分组号偏移量。 MP使用一个称为 多链路最大接收重构单元 (MRRU,类型18)的LCP选项,它可将一系列更大的MRU应用于捆绑中。大于成员链路MRU的帧仍被允许通过这个MP链路,直到达到这个值的上限为止。 由于一个MP捆绑可能跨越多条成员链路,因此需要一种方法来确定成员链路属于同一捆绑。同一捆绑中的成员链路由 LCP端点鉴别选项 识别。端点鉴别可使用电话号码、从IP或者MAC地址中欧冠提取数字,以及其他可以管理的字符串。 建立MP的基本方法定义在RFC[1990]中,希望各个成员链路可以对称使用,相近数量的分片被分配到号码固定的每条链路上。为了实现更复杂的分配,规定了 宽分配协议(BAP)带宽分配控制协议(BACP)。BAP用于为一个捆绑动态添加或删除链路,而BACP用于交换如何使用BAP添加或删除链路的信息。这种功能有助于实现 按需带宽 (BOD)。 BAP/BACP使用一种新的链路鉴别LCP选项(LCP选项类型为23)。这个选项包含一个16位的数字值,一个捆绑中的每条成员链路有不同的值。它被BAP用于确定需要添加或删除哪些链路。在一条PPP链路的网络阶段,每个捆绑都需要使用BACP协商。它的主要目的是找出首选对端。也就是说,如果在多个对端之间同时建立多个捆绑时,将会优先为首选对端分配成员链路。BAP包括3种分组类型:请求、响应和标识。请求用于向一个捆绑添加一条链路,或从一个捆绑中删除一条链路。标识用于为原始或被确认的请求返回结果。响应是对这些请求的ACK或NACK。更多细节见[RFC2125]。 [/successbox]   [successbox title=”3.6.3 压缩控制协议“] PPP是相对较慢的拨号调制解调器使用的协议。因此,针对PPP链路上压缩后发送数据已提出一些方法。压缩类型是不同的,无论是调制解调器硬件支持的压缩类型,还是我们以后讨论的协议 头部压缩 。可在一条PPP链路的两个方向做出选择,LCP可协商一个使一个 压缩控制协议 生效的选项。CCP的作用就像NCP,只不过在LCP链路建立交换阶段指明压缩选项时才开始处理配置压缩细节。 CCP在行为上很像NCP,仅在链路进人网络状态时协商。它使用与LCP相同的分组交圃换过程和格式(除协议字段被设置为Ox80FD之外),另外还有一些特殊选项,并对常见的代 码字段值(1‥7)定义了2个新的操作:复位请求(Oxoe)和复位确认(Oxof)。 如果在一个压缩帧中检测到一个错误,复位请求可用于要求对方复位压缩状态(例如字典、状态变量、状态机等)。在复位后,对方响应一个复位确认。一个或多个压缩帧可作为一个PPP帧的一部分(即包括LCP数据和可能的填充部分)。压缩帧携带的协议字段值为OxooFD,但是如何指明存在多个压缩帧,这依赖于使用的特定压缩算法(见3.6.6节)。当CCP与MP结合使用时,既可用于一个捆绑,也可用于多条成员链路的某些组合。如果只用于成员链路,协议字段设置为OxooFB(单个的链路压缩数据报)。 CCP可使用十几个压缩算法之一[PPPn]。大多数算洼不是官方标准的IETF文档,虽然它们可能已在RFC中加以描述(例如,[RFC1977]描述了BSD压缩方案,[RFC2118]描述 了Microsoft点对点压缩协议(MPPC))。如果使用压缩,PPP帧在进一步处理之前需要重构,因此高层的PPP操作通常不关心压缩帧的细节。 [/successbox]   <施工中>