admin 管理员组

文章数量: 887021

在第一章中知道TCP/IP协议族中设计链路层的目的是为IP模块发送和接收IP数据报。它可用于携带一些支持IP的辅助性协议;例如ARP。TCP/IP支持多种不同的链路层,它依赖于使用的网络硬件类型:有线局域网,例如以太网;城域网等等……大多数链路层技术都有一个相关的协议,描述由网络硬件传输的相应PDU格式。描述链路层的PDU时,通常使用术语帧,用以区分那些更高层的PDU格式,例如描述网络层和传输层PDU的分组和段。帧格式通常支持可变的帧长度范围从几字节到几千字节。这个范围的上限称为最大传输单元(MTU)。有些网络技术(例如调制解调器和串行线路)不强制规定最大的帧,因此它们可以由用户来配置。

  一、以太网和IEEE 802局域网/城域网标准

  第一个常见格式的以太网目前被称为“10Mb/s以太网”或“共享以太网”,该网络结构如下图所示;

基本的共享以太网包含一个或多个站(例如工作站、超级计算机),它们都被连接到一个共享的电缆段上。当介质被确定为空闲状态时,链路层的PDU(帧)可以从一个站发送到一个或更多其他站。如果多个站同时发送数据,可能因信号传播延迟而发生碰撞。碰撞可以被检测到,它会导致发送站等待一个随机时间,然后重新发送数据。这种常见的方法称为“带冲突检测的 载波侦听多路访问”。

正是因为这种模式多个站共享同一网络,该标准需要在每个以太网接口实现一种分布式算法,用来控制一个站发送自己的数据。这种特定的方法称为“带冲突(或称碰撞)检测的载波侦听多路访问(CSMA/CD)”,它用于协调哪些计算机可访问共享的介质也就是图中显示的中间那根共享的线路,同时不需要其他特殊协议或同步。

  采用CSMA/CD,一个站(例如计算机)首先会检测目前网络上正在发送的信号,并在其空闲的时候发送自己的帧。这就是协议中的“载波侦听”部分。如果其他站恰好也在这个时候一起同时发送各自的帧,那么,它们发生重叠的电信号被检测为一次碰撞。在这种情况下,每个站等待一个随机时间,然后再次尝试发送各自的帧。这个时间量的选择会依据统一的概率分布,随后每个碰撞检测到的时间长度加倍。最终,每个站会得到机会发送,或者尝试一定次数(传统以太网为16)后超时。采用CSMA/CD,在任何给定的时间里,在网络中只能有一个帧传输。如CSMA/CD这样的访问方法被正式更名为“介质访问控制(MAC)协议”。

  现在以太网除了原有的10Mb/s以太网,还有100Mb/s(快速以太网)、1000Mb/s、10Gb/s甚至更高。在大型数据中心和大型企业中10Gb/s以太网是很普遍的,且可以达到100Gb/s的速度。随着快速以太网的发展,基于竞争的MAC协议以及不太流行。在局域网中每个站之间的线路通常不共享,而是采用一个专用的星形拓扑结构。通过以太网交换机来实现,如下图所示:

一个交换式以太网包含一个或多个站,每个站使用一条专用的线路连接到一个交换机端口。在大多数情况下,交换式以太网以全双工方式(一根介质可以输入与输出数据)运行,并且不需要使用CSMA/CD算法。交换机可以通过交换机端口级联形成更大的以太网,该端口有时也称为“上行”端口。

  目前,交换机为以太网中的每个站提供同时发送和接收数据的能力(称为“全双工以太网”)。1000Mb/s以太网任支持半双工(同时只能接收或输出数据)操作,但很少使用。

  无线网络时现在连接Internet最流行的技术之一。常见的无线局域网(WLAN)IEEE标准称为无线保真或WIFI,有时也称为“无线以太网”或802.11.

二、IEEE802局域网/城域网标准

  原始的以太网帧格式被称为DIX格式或Ethernet Ⅱ格式。对这种类型的以太网稍加修改后,由IEEE标准化为一种CSMA/CD网络,称为802.3。带802前缀的标准定义了局域网和城域网的工作过程。当前最流行的802标准包括802.3(以太网)和802.11(WLAN/Wi-Fi)。下图则为一个相对完整点的列表;

有关TCP/IP协议的局域网和城域网IEEE802标准(2011年版)

802.1ak

多注册协议(MRP)

802.1AE

MAC安全(MACSec)

802.1AX

链路聚合(以前的802.3ad)

802.1d

MAC网桥

802.1p

流量类/优先级/QoS

802.1q

虚拟网桥的局域网/MRP的更正

802.1s

多生成树协议(MSTP)

802.1w

快速生成树协议(RSTP)

802.1X

基于端口的网络访问控制(PNAC)

802.2

逻辑链路控制(LLC)

802.3

基于以太网和10Mb/s以太网

802.3u

100Mb/s以太网(“快速以太网”)

802.3x

全双工运行和流量控制

802.3z/802.3ab

1000Mb/s以太网(“千兆以太网“)

802.3ae

10Gb/s以太网(“万兆以太网”)

802.ad

链路聚合

802.3af

以太网供电(PoE,15.4W)

802.3ah

以太网接入(第一公里以太网)

802.3as

帧格式扩展(2000字节)

802.3at

以太网供电增强(“PoE+”,30W)

802.3ba

40/100Gb/s以太网

802.11a

运行在5GHz的54Mb/s的无线局域网

802.11b

运行在2.4GHz的11Mb/s的无线局域网

802.11e

针对802.11的QoS增强

802.11g

运行在2.4GHz的54Mb/s的无线局域网

802.11h

频谱/电源管理扩展

802.11i

安全增强/代替WEP

802.11j

运行在4.9~5.0GHz(日本)

802.11n

运行在2.4GHz和5GHz的6.5~600Mb/s的无线局域网,使用可选的MIMO和40MHz信道

802.11s(草案)

网状网,拥塞控制

802.11y

运行在3.7GHz的54Mb/s的无线局域网(许可的)

802.16

微波存取全球互通技术(WiMAX)

802.16d

固定的无线城域网标准(WiMAX)

802.16e

固定/移动的无线城域网标准(WiMAX)

802.16h

改进的共存机制

802.16j

802.16中的多条中继

802.16k

802.16网桥

802.21

介质无关切换介质无关切换

  除了802.3、802.11、802.16标准定义的特定类型的局域网之外,还有一些相关标准适用于所有IEEE标准的局域网技术。最常见的是定义逻辑链路控制(LLC)的802.2标准,其帧头部在802网格的帧格式中常见。在IEEE的术语中,LLC和MAC是链路层的“子层”,LLC(对多数帧格式)对每种网络都是通用的,而MAC层可能有所不同。虽然最初的以太网使用CSMA/CD,但无线局域网常使用CSMA/CD,但无线局域网常使用CSMA/CA(CA是“冲突避免”)。802.2和802.3共同定义了与EthernetⅡ不同的帧格式,直到802.3x才最终纠正。

三、以太网帧格式

  所有的以太网(802.3)帧都基于一个共同的格式。在原有规范的基础上,帧格式已被改进以支持额外功能。如下图所示:

以太网(IEEE 802.3)帧格式包含一个源地址和一个目的地址、一个重载的长度/类型字段、一个数据字段和一个帧校验序列(CRC32)。另外,基本帧格式中的一个标签包含了一个VLAN ID和优先级信息(802.1p/q),以及一个可扩展标签。前导和SFD被用于接收器同步。当以太网以半双工模式运行在100 Mb/s或以上速率时,其他位可能被作为载体扩展添加到短帧中,以确保冲突检测电路的正常运行。

  图中所示的帧格式包括48位(6字节)的目的地址(DST)和源地址(SRC)字段。源地址后紧跟着一个类型字段或长度字段。在多数情况下用于确定头部后面的数据类型。“注:最初的IEEE(802.3)规范将长度/类型字段作为长度字段而不是类型字段使用。因此这个字段可以用于多个目的(重载)。目前,如果字段值大于或等于1536,则表示类型,若是小于或等于1500,则用于表示长度。当前的【802.3-2008】标准采用修改后的802.3帧格式,提供最大482字节的标签,被携带在每个以太网帧中。这些较大的帧称为信封帧,长度最大可达2000字节。包含802.1p/q标签的帧称为Q标签帧,也就是信封帧。并非所有信封帧都是Q标签帧”

四、帧校验序列/循环冗余校验

   在以太网帧格式中,有效载荷区域之后的最后字段提供对帧完整性的检查。循环冗余校验(CRC)字段位于尾部,有32位,有时也被称为IEEE/ANSI标准的CRC32。如果要使用一个n位CRC检查数据传输错误,被检查的消息需要先追加n位0形成一个扩展消息。然后,扩展消息使用模2除法除以一个(n+1)位的值,这个作为除数的值称为生成多项式。放在CRC字段中的值为这除法计算中的余数的二进制反码(商被丢弃)。

例如以太网使用n=32,CRC32的生成多项式是33位的二进制数100000100110000010001110110110111.。如果我们发送16位的消息1001111000101111就要进行该16位消息除以10011的模2除法运算,其中10011是国际电信联盟(ITU)将CRC4的生成多项式的值标准化为10011的。最后得出余数为1111其反码为0000放置在帧的CRC或帧校验序列(FCS)字段中,商为0101(丢弃),结果为100001100000.在接收方执行相同得除法得出余数,并判断该值与FCS字段得值是否匹配。如果两者不匹配,帧可能在传输过程中受损,通常被丢弃。所以CRC功能可用于提示信息受损。

五、帧大小

  在以太网帧中,最小的帧为64字节,要求数据区(有效载荷)长度(无标签)最小为48字节。当有效载荷较小时,填充字节(值为0)被添加到有效载荷尾部,以确保达到最小长度。最小尺寸的帧能在电缆中传输约11000m.

  传统以太网的最大帧长度为1518字节(包括4字节CRC和14字节头部)。最大帧长度为1518值是因为如果一个帧中包括一个错误(接收到不正确得CRC校验),只需重发1.5kb以修复这种问题。另一个是因为MTU大小限制为1500字节。为了发送一个更大的而消息,则需要更多的帧(例如,对于TCP/IP网络中常用的较大尺寸为64kb,需要至少发送44个帧)。

   多个以太网帧构成一个更大的上层PDU的后果是,每个帧都贡献一个固定开销(14字节的头部和4字节的CRC)。为了允许以太网硬件接收电路正确恢复来自网络中的数据,并为其他站提供将自己的流量与已有流量区分开的机会,以太网帧在网络中不能无缝的压缩在一起。EthernetⅡ规范了除在帧开始处定义了7字节前导和1字节的SFD之外,还指定了12字节的包间距(IPG)时间(10Mb/s为9.6us,100Mb/s为960ns,1000Mb/s为96ns,10000Mb/s为9.6ns)。因此EthernetⅡ的每帧效率为1500/(12+8+14+1500+4)=0.975293约为98%。一种提高效率的方法为,在以太网中传输大量数据时,尽量使帧尺寸更大一些。这可以采用以太网巨型帧(JF)来实现,这是一种非标准的以太网扩展(主要在1000Mb/s以太网交换机中使用),通常允许帧尺寸高达9000字节。有些环境使用的帧称为超级巨型帧,通常超过9000字节。在使用巨型帧时,这些较大的帧无法与较小的1518字节的帧互操作,因为它们无法由大多数传统以太网设备处理。

六、802.1p/q:虚拟局域网和QoS标签

    为了解决大型多用途交换网络运行中的问题,IEEE采用一种称为虚拟局域网(VLAN)的功能扩展802LAN标准,他被定义在802.1q【802.1Q-2005】标准中。兼容以太网交换机将主机之间的流量分隔为常见的VLAN。正是由于这种分隔,连在同一交换机但在不同VLAN中的两台主机,它们之间的流量需要一台路由器来传递。

  工作站到VLAN的映射有几种方法。通过端口分配VLAN,交换机端口所连接的站被分配在一个特定VLAN中,这样连接到任意站都成为VLAN中的成员。其他选择包括基于MAC地址的VLAN,以太网交换机使用表将一个站的MAC地址映射到一个VLAN。如果有些站改变它们的MAC地址(由于某些用户行为,有时需要这样做),它们可能变得难以管理。有些IP地址也可用作分配VLAN的基础。当不同VLAN中的站连接到同一台交换机时交换机用以确保流量不在两个不同的VLAN之间泄露。当多个VLAN跨越多个交换机(中继)时,在以太网帧发送到另一台交换机之前,需要使用VLAN来标记该帧的归属。这使用一个称为VLAN标签(头部)的标记,其中包括12位VLAN标识符(提供4096个VLAN,但保留VLAN 0 和VLAN 4095)。它还包含支持QoS的3位优先级。在很多情况下,管理员必须配置交换机端口(在做VLAN实验的时候基本上都是在端口配置),以便发送802.1p/q帧能中继到适当的端口。

  802.1p规定了在帧中表示QoS标识符的机制。802.1p头部包括一个3位优先级字段,用于表明一个QoS级别。该标准是802.1qVLAN标准的扩展。这两个标准可以一起工作,并在同一头部中共享某些位。它用3个有效位定义了8个服务级别。0级为最低优先级,用于传统的尽力而为的流量。7级位最高优先级,可用于关键路由或网管功能。这个标准规定了优先级如何被编码在分组中,但没指定如何控制哪些分组采用哪些级别,以及实现优先级服务的底层机制,这些可由具体的实现者来定义。因此,一个优先级流量相对于另一个的处理方式是由实现或供应商定义的。

如果802.1p/q头部中的VLAN ID字段被设置为0,802.1p可以独立于VLAN使用。

   控制802.1p/q信息的Linux命令是vconfig。它可用来添加和删除虚拟接口,即与物理接口相关联的VLAN ID。它可用来设置802.1p优先级,更改虚拟接口确定方式,改变由特定VLAN ID标记的分组之间的映射,以及协议在操作系统中处理时如何划分优先级

七、802.1AX:链路聚合(以前的802.3ad)

  有些系统配备多个网络接口,具有绑定或链路聚合能力。通过链路聚合,可以将两个及更多接口看作一个接口,通过冗余或将数据分割到多个接口,提高性能并获得更好的可靠性。IEEE修订的802.1AX【802.1AX-2008】定义了最常用的链路聚合方法,以及可管理这些链路的链路聚合控制协议(LACP)。LACP使用一种特定格式的IEEE802帧(称为LACPDU)。

  以太网交换机支持的链路聚合是一种替代方案,它比支持更高速网络接口的性价比高。如果多个端口聚合能提供足够的带宽,则可能并不需要高速接口。链路聚合不仅可以被网络交换机支持,而且可在一台主机上跨越多个网络接口卡(NIC)。通常情况下,聚合的端口必须是同一类型,并工作在同一模式(半双工或全双工)下。

  Linux可用以下命令来实现跨越不同类设备的链路聚合(绑定):

        modprobe bonding

        ifconfig bond0 10.0.0.111 netmask 255.255.255.128

        ifenslave bond0 eth0 wlan0

以上命令中第一个用于加载驱动,它是一个支持链路聚合的特殊设备驱动程序。第二个命令使用ipv4地址来创建bond0接口。虽然IP相关信息对创建聚合接口不是必需的,但它是典型的。在ifenslave命令执行后,绑定设备bond0用MASTER标志来标记,而设备eth0和wlan0用SLAVE标志来标记。

  LACP协议旨在通过避免手工配置,以简化链路聚合的建立工作。在LACP“主角”(客户端)和“参与者”(服务器)启用后,它们通常每秒都会发送LACPDU。LACP自动确定哪些成员链路可被聚合成一个链路聚合组(LAG),并将它们聚合起来。这个过程的实现需要通过一些其他链路发送一系列信息(MAC地址、端口优先级、端口号和密钥)。

八、全双工、省电、自动协商和802.1X流量控制

  在以太网最开始的时候,仅工作在半双工模式,并使用一条电缆(即一次只能像一个方向发送数据)。后面改为了全双工操作,这样可以有效禁用冲突检测电路。也可以增加以太网的物理长度(因为半双工操作和冲突检测的相关事件约束被取消)。

  在Linux里可以使用ethtool程序来查询是否支持全双工,以及是否正在执行全双工操作。还可以显示和设置以太网接口的很多属性。例如查询th0接口就可以使用 ethtool eth0命令来查询。

九、双工不匹配

  自动协商曾有一些互操作性问题,特别是一台计算机及其相关的交换机端口使用不同的双工配置时,或者当自动协商只在链路的一端被禁用时。在这种情况下,可能会发生双工不匹配。只是在这种情况下,连接不会完全失败,但可能带来显著的性能下降。当网络中出现中等程度的双向流量繁忙时(例如在大数据传输期间),一个半双工接口会将输入的流量检测为冲突,这可能需要更高层协议(例如TCP)重传。因此性能下降可能只在半双工接口发送数据,同时又有大量流量需要接受时才是最明显的,当站处于轻负载时通常不会发生这种情况。

十、局域网唤醒(WoL)、省电和魔术分组

   在Windows和Linux中,Windows唤醒功能和Linux唤醒选项用于使网络接口或主机脱离低功耗(睡眠)状态,这是基于某类分组的传输来实现的。这种分组用来触发可配置的功率状态改变。在Linux中,用于唤醒的值可以是零,或者是多个用于低功耗状态唤醒的位,它们可以被以下几种帧所触发:任何物理层(PHY)活动(p)、发往站的单播帧(u)、组播帧(m)、广播帧(b)、ARP帧(a)、魔术分组帧(g),以及包括密码的魔术分组帧。这些都可用上面提到的ethtool的选项来配置。例如命令 ethtool -s eth0 wo1 umgb  

    当接收到任何u、m、g或b类型的帧时,这个命令将eth0设备配置为发送一个唤醒信号。Windows也提供类似的功能,但标准的用户接口只支持魔术分组帧,以及一个预定义的u、m、b和a类型帧的子集。魔术分组包含一个字节值0xFF的特定重复模式。通常情况这种帧采用UDP分组形式封装在以太网广播帧中发送。有几个工具可以生成它们,例如 wol MAC地址  这个命令的结果是构造一个魔术分组。

十一、链路层流量控制

   以全双工模式运行扩展的以太网和跨越不同速率的网段时,可能需要由交换机将帧缓存一段时间。例如,当多个站发送到同一个目的地(称为输出端口争用),这种情况可能发生。如果一个站聚合的流量速率超过该站的链路速率,那么帧就开始存储在中间交换机中。如果这种情况持续一段时间,这些帧可能被丢弃。

  缓解这种情况的一种方法是在发送方采取流量控制(使它慢下来)。一些以太网交换机(和接口)通过在交换机和网卡之间发送特殊信号帧来实现流量控制。流量控制信号被发送到发送方,通知它必须放慢传输速率,以太网使用PAUSE消息(也称为PAUSE帧)实现流量控制,这由802.3x【802.3-2008】定义。

  PAUSE消息包含在MAC控制帧中,通过将以太网长度/类型字段值设为0x8808。以及使用MAC控制操作码0x0001来标识。如果一个站接收到这种帧,表示建议它减缓发送速度。PAUSE帧总是被发送到MAC地址01:80:C2:00:00:01,并且只能在全双工链路上使用。它包含一个保持关闭(hold-off)时间值(指定量为512比特的时间),表明发送方在继续发送之前需要暂停多长时间。

   MAC控制帧采用上面的图所示的常规封装的帧格式(如下所示)

但紧跟在长度/类型字段后的是一个2字节的操作码与上图又有些细小的差别。PAUSE帧实际上是唯一一种使用MAC控制帧的帧类型。它包括一个2字节的保持关闭时间。“整个”MAC控制层(基本只是802.3x流量控制)的实现是可选的。

  以太网层次的流量控制可能有重大负面影响,因此通常并不使用它。当多个站通过一台过载的交换机发送时,该交换机通常向所有主机发送PAUSE帧。但是,交换机的内存使用可能对发送主机不均衡,因此有些主机可能被惩罚(即流量控制),即使它们对交换机流量过载没有什么关系。

十二、网桥和交换机 

  IEEE 802.1d标准规定了网桥的操作,交换机本质上是高性能的网桥。网桥或交换机用于连接多个物理的链路层网络(例如一对物理的以太网段)或成组的站。最基本的设置涉及连接两个交换机来形成一个扩展的局域网。如下图所示:

图中所示的交换机A和B互连形成一个扩展的局域网。在这个例子中,客户端系统都连接到A,服务器都连接到B,端口编号仅供参考。注:每个网络单元(包括每个交换机)有自己的MAC地址。每个网桥经过一段时间对域外MAC地址的“学习”后,最终每个交换机会知道每个站可由哪个端口到达。每个交换机基于每个端口(也可能是每个VLAN)的列表被存储在一张表(称为过滤数据库)中。下图显示了每个交换机了解每个站的位置后,形成的包含这些信息的数据库例子:

当第一次打开一个交换机(网桥)时,它的数据库是空的,因此它不知道除自己之外的任何站的位置。当它每次接收到一个目的地不是自己的帧时,它为除该帧到达的端口之外的所有端口做一个备份,并向所有端口发送这个帧的备份。如果交换机(网桥)未学习到站的位置,每个帧将会被交付到每个网段,这样会导致不必要的开销。学习能力可以显著降低开销,他是交换机和网桥的一个基本功能。目前多数操作系统支持网络接口之间的网桥功能,这意味着具有多个接口的计算机可用作网桥。例如,在Windows中的“网络连接”中的(突出显示)可以选择“网桥链接”。

下图所示为一个简单的拓扑例子

在该简单的拓扑中,一台基于Linux的PC被配置为网桥,它在两个以太网之间实现互联。作为一个处于学习中的网桥,它不断积累并建立一些表,其中包含有关哪个端口可到达扩展局域网中的其他系统的信息

  在上图中,这个简单的网络使用一台基于Linux、带两个端口的PC作为网桥。只有一个站连接到端口2,网络其他部分都连接到端口1.以下命令可以启用网桥:

brct1 addbr br0

brct1 addif br0 eth1

brct1 addif br0 eth1

ifconfig eth0 up

ifconfig eth1 up

ifconfig br0 up

以下几条命令可以创建一个网桥设备br0,并为网桥增加接口eth0和eth1。brct1 delif命令可用于删除接口。在建立接口之后,brctl showmacs命令可用于检查过滤数据库(称为转发数据库,用Linux的术语称为fdbs):

brctl show

brct1 showmacs br0

由于站可能出现移动、网卡更换、MAC地址改变或其他情况,所以就算网桥曾发现一个MAC地址可通过某个端口访问,这个信息也不能假设永远是正确的。为了解决这个问题,在每次学习一个地址后,网桥启动一个计时器(通常默认为5分钟)。在Linux每个学习条没有使用一个与网桥相关的固定时间。如果在指定的“有效期”内,没有再次看到该条目中的地址,则将这个条目删除。

  当一个条目因有效期满而被删除时,后续的帧将被发送到接收端口之外的所有端口(称为洪泛),并更新过滤数据库中的所有条目。实际上,过滤数据库的使用和学习有利于优化性能,如果表是空的,网络将花费更多开销,但仍能履行职责。在两个以上的网桥通过冗余链路互联的情况下,帧的洪泛可能导致帧永远循环的洪泛灾难。为了解决该问题便运用了以下的一种方法生成树。

十三、生成树协议

  网桥可能单独或与其他网桥共同运行。当两个以上的网桥使用(或交换机端口交叉连接时),由于存在级联的可能性,因此可能形成很多组的循环帧。例如如下图所示的网络。

假设图中的多个交换机刚被打开,并且他们的过滤数据库为空。当站S发送一个帧时,交换机B在端口7、8和9复制该帧。这时,最初的帧已被“放大”3倍。这些帧被交换机A、D和C接收。交换机A在端口2和3生成的该帧的副本。交换机D和C分别在端口20、22和13、14生成更多的副本。当这些副本在交换机A、C和D之间双向传输,这些放大倍数已增大为6.当这些帧到达时,转发数据库开始出现震荡,这是由于网桥反复尝试查找通过哪些端口可到达站S,这种情况显然不能够允许发生。如果允许发生这种情况,采用这种配置的网桥将会无法使用。但是生成树协议(STP)可以避免这种情况发生。在当前的标准【802.1D-2004】中,传统的STP被快速生成树协议(RSTP)代替。

   STP通过在每个网桥禁用某些端口来工作,这样可以避免拓扑环路(即两个网桥之间不允许出现重复路径),但如果拓扑结构未分区,则仍可以到达所有节点。在数学上,一个生成树是一张图中所有节点和一些线的集合,从任何节点到其他节点(跨越图)有一条路径或路由,但是没有环路(这些线的结婚构成一棵树)。一张图中可能存在多个生成树,STP用于找出这张图中的其中一颗生成树,该图将网桥作为节点并将链路作为线(或称为“边”)。以上图为基本,来说明该想法,如下所示:

  在该图中,红线表示网络中被STP选择用于转发帧的链路。其他链路没有被使用,端口8、9、12、21、22和3被阻塞。通过使用STP,早期没有各种问题的出现,这些帧只是作为另一个抵达帧的副本而被创建。这里没有出现放大的问题。由于任意两个站之间只有一条路径,因此可以避免循环。生成树的形成和维护由多个网桥完成,在每个网桥上运行一个分布式算法。

    用于转发数据库时,STP必须处理以下情况,例如网桥启动和关闭、接口卡更换或MAC地址改变。这种变化明显会影响生成树运行,因此STP必须适应这些变化。这种适应通过交换一种称为网桥协议数据单元(BPDU)的帧来实现。这些帧用来形成和维护生成树。这颗树“生长”自一个网桥---该网桥由其他网桥选举为“根网桥”。

 综合上面所述,一个网络中可能存在多个生成树,但是确定哪个生成树是最优的最适合转发帧,这基于每条链路和网桥位置的相关成本。这个成本与一个链路速度称反比的整数、例如,一条10Mb/s链路的成本为100,100Mb/和1000Mb/s链路的成本分别为19和4.STP计算到根网桥的成本最小的路径。如果必须遍历多条链路,那么相关成本是这些链路成本之和。

十四、端口状态和角色

  网桥端口可能有5个状态:阻塞、侦听、学习、转发和禁用。下图所示为状态转换以及它们之间的关系:

上图中,在正常的STP操作中,端口在4个主要状态之间转换。在阻塞状态下,帧不被转发,但一次拓扑变化或超时可能导致向侦听状态转换。转发状态是活跃的交换机端口承载数据流量的正常状态。括号中的状态名用于表示RSTP相关的端口状态

 在图中所示显示的生成树中,实线表示端口的正常转换,细的实线表示由管理配置引起的变化。在初始化后,一个端口进入阻塞状态。在这种状态下,它不进行地质学系,数据转发或BPDU,并在它需要被包含在将到达的根网桥的路径中的情况下,使端口转换到侦听状态。在侦听状态下,该端口允许发送和接收BPDU,但不进行地址学习或数据转发。经过一个典型的15秒的转发延迟,端口进入学习状态。这时,它被允许执行数据转发之外的所有操作。在进入转发状态并开始转发数据之前,需要等待另一个转发延迟。

   相对于端口状态机,每个端口都扮演一定的角色。由于RSTP的出现,这个术语变得越来越重要。端口可能扮演根端口、指定端口、备用端口或备份端口等角色。根端口是生成树中位于指向根的线段终点的那些端口。指定端口是指处于转发状态,并与根相连线段中路径成本最小的端口。备份端口是与根相连线段中成本更高的端口。它们不处于转发状态。备份端口是指连接到同一线段中作为同一网桥指定端口使用的端口。因此,备份端口可轻易接管一个失效的指定端口,而不影响生成树拓扑的其余部分,但是它不能在全部网桥失效的情况下提供一条到根的备用路径。

十五、BPDU结构

    为了确定生成树中的链路,STP使用了下图所示的BPDU:

如图所示,BPDU被放置在802帧的有效载荷区,并在网桥之间交换以建立生成树。重要的字段包括源、根节点、到根的成本和拓扑变化提示。在802.1w和【802.1D-2004】中(包括快速STP或RSTP),附加字段显示端口状态。

 上图所示的格式适用于最初的STP,以及新的STP。BPDU总被发现到组的地址01:80:C2:00:00:00,并且不会通过一个未修改的网桥转发。在该图中,DST、SRC和L/T(长度/类型)字段是携带BPDU的传统以太网(802.3)帧头部的一部分。3字节的LLC/SNAP头部由802.1定义,并针对BPDU被设置为常数0x424203。并非所有BPDU都是用LLC/SNAP封装,但这是以常见的一个选项。

  协议(Port)字段给出协议ID号,它被设置为0,版本(vers)字段设置为0或2,取决于使用STP还是RSTP。类型(Type)字段的分配与版本类似。标志(Flags)字段包含拓扑变化(TC)和拓扑变化确认(TCA)位,它们由最初的802.1d标准定义。附加位被定义为建议(P)、端口角色(00为未知,01为备用,10为根,11为指定)、学习(L)、转发(F)和协议(A)。根ID字段给出发送方使用的根网桥标识符,即从网桥ID字段中获得的MAC地址。这些ID字段都用一种特殊方式编码,包括MAC地址之前的一个2字节的优先级字段。优先级的值可通过管理软件来设置,以强制要求生成树采用某个特定网桥作为根(例如思科在自己的Catalyst交换机中使用默认值0x8000).

  根路径成本是在根ID字段中指定的计算出的到达某个网桥的成本。PID字段是端口标识符和由发送帧给出的端口号,它被附加在一个可配置的1字节的优先级字段(默认0x80)之后。消息有效期(MsgA)字段指出消息有效期。最大有效期(MaxA)字段指出超时(默认为20秒)的最大期限。欢迎时间(Hello Time)字段指出配置帧的传输周期。转发延迟字段指出处于学习和侦听状态的时间。所有的有效期和时间字段可在1/256秒内获得。

  消息有效期字段不像其他的时间字段那样是固定值。当根网桥发送一个BPDU时,它将该字段设置为0。网桥转发接收到的不是根端口的帧,并将消息有效期字段加1。本质上来讲,该字段是一个跳步计数器,用于记录BPDU经过的网桥数量。当一个BPDU被一个端口接收时,其包含的信息在内存和STP算法参与者中被保存至超时(超时发生在(MaxA-MsgA)时刻)。如果超过这个时间,根端口没有接收到另一个BPDU,根网桥被宣布“死亡”,并且重新开始根网桥的选举。

十六、建立生成树

   STP的第一个工作就是选举根网桥。根网桥是在网络(或VLAN)中标识符最小(优先级与MAC地址结合)的网桥。当一个网桥初始化时,它假设自己是根网桥,并用自己的网桥ID作为根ID字段的值发送配置BPDU消息,如果它检测到一个ID更小的网桥,则停止发送自己的帧,并基于接收到的ID更小的帧构造下一步发送的BPDU。发出根ID更小的BPDU的端口被标记为根端口(即端口在到根网桥的路径上)。剩余端口被设置为阻塞或转发状态。

十七、拓扑变化

   STP的另一个重要工作是处理拓扑变化。数据库有效期机制适应拓扑变化也可以,但这种是比较差的方法,因为其有效期计时器需要花费的时间较长(5分钟)来删除错误条目。但是,STP采用的方法检测到拓扑变化,可以快速通知它们所在的网络。在STP中,当一个端口进入阻塞或转发状态时,这意味着发生了拓扑变化。当网桥检测到一个连接变化(例如一条链路故障),它向根端口之外的端口发送拓扑变化通知(TCN)BPDU,通知自己在树中的父网桥,直到根为止。树中通向根的下一个网桥发送通知的网桥确认TCN BPDU,并将它们转发到根。当接收到拓扑变化通知时,根网桥在后续的周期性配置消息中设置TC位。这种消息被网络中的每个网桥转发,并被处在阻塞或转发状态的端口接收。设置这个位允许网桥减小转发延时计时器的有效期,将有效期以秒代替推荐的5分钟。这样,数据库中已有的错误条目可被快速清除和重新学习,同时允许访问那些被删除的条目。

  在Linux中,网桥功能是默认禁用STP的。在多数简单的拓扑中,一台普通的计算机可被用作网桥。“brct1 stp br0 on” 这条命令可以位当前使用的网桥启用STP(命令为Linux中的命令)。

十八、快速生成树协议(以前的802.1w)

  传统的STP在拓扑变化之后,其中一个问题在于其只能通过一定时间内未接收到BPDU来检测。如果这个超时很大,那么收敛时间(沿着生成树重新建立数据流的时间)可能比预期大。IEEE 802.1w标准(【802.1D-2004】的一部分)改进了传统STP,它定义了采用新名称的快速生成树协议(Rapid Spanning Tree Protocol,RSTP)。在RSTP中, 对于STP的主要改进是监视每个端口的状态,并在故障时立即发送一个拓扑变化通知。另外,RSTP使用BPDU的标志字段中的全部6位来支持网桥之间的协议,以避免由计时器开始启动协议操作。它将正常的STP端口状态由5个减少到3个(丢弃、学习和转发)。RSTP的丢弃状态代替了传统STP的禁止、阻塞和侦听状态。RSTP创建了一个称为备用端口的新角色,作用是在根端口停止运行时立即代替他。

   由于RSTP只使用一种类型的BPDU,因此没有专门的拓扑BPDU。所以,RSTP使用的版本和类型号2不是0。在RSTP中,检测到一次拓扑变化的交换机会发送一个标识拓扑变化的BPDU,任何接收到它的交换机立即清除自己的过滤数据库。这个改变可以显著影响协议的收敛时间。这时,不用等待拓扑变化传递到根网桥再经过转发延迟后返回,而是立即清除相关条目。再大多数情况下,收敛时间可以从几十秒减少到几分之一秒,大大减少了收敛时间。

  BPDU使得边缘端口(只连接到端站的端口)和正常的生成树端口之间,以及点到点链路和共享链路之间都有区别。边缘端口和点到点链路上的端口通常不会形成循环,因此允许它们跳过侦听和学习状态,直接进入转发状态。如果一个边缘端口被入侵(例如两个端口交叉连接),它们可携带任何形式的BPDU(简单的端站通常不处理BPDU),这时它们会被重新分类为生成树端口。点到点链路可根据接口操作模式来识别。如果这个接口运行在全双工模式下,则这条链路是点到点链路。

  常识:RSTP的很多功能由思科和其他公司开发,它们有时需要在自己的产品中为普通STP做专门的扩展。IEEE委员会将这些扩展纳入802.1d标准的更新中,该标准涵盖所有类型的STP,因此扩展局域网可在某些网段中运行传统STP,同时在其他部分中运行RSTP(虽然RSTP的优势将丧失)。RSTP已被扩展到VLAN【802.1Q-2005】中,它采用一种称为生成树协议(MSTP)的协议。这个协议保留了RSTP(和STP)报文格式,因此它有可能做到向后兼容,也支持形成多个生成树(每个VLAN一个生成树)。

  十九、802.1ak:多注册协议

   多注册协议(Multiple Registration Protocol MRP)提供了在桥接局域网环境中的站之间注册属性的通用方法。【802.1ak-2007】定义了两个特殊的MRP“应用程序”,称为MVRP(用于注册VLAN)和MMRP(用于注册组MAC地址)。MRP代替了早期的GARP框架;MVRP和MMRP分别代替了旧的GVRP和GMRP协议。这些协议最初都由802.1q定义。

  在使用MVRP时,当一个站被配置为一个VLAN成员时,该信息被传输到它所连接到的交换机,并由该交换机将站加入VLAN通知其他交换机。这允许交换机根据站的VLAN ID添加自己的过滤表,也允许VLAN拓扑变化不必通过STP而重新计算现有生成树。避免重新计算STP是从GVRP向MVRP迁移的原因之一。

  MMRP是一个站注册其感兴趣的组MAC地址(组播地址)的方法。这个信息可能被用于交换机建立端口,组播流量必须通过该端口来交付。如果没有这样的功能,交换机将不得不广播所有的组播流量,这样可能导致不必要的开销。MMRP是一个第二层协议,它与第三层协议IGMP和MLD相似,并在很多交换机中支持“IGMP/MLD探听”能力。

二十、无线局域网--IEEE 802.11(Wi-Fi)

  无线保真(Wi-Fi)是当前访问Internet的最流行技术之一,其从所周知的IEEE标准为802.11,它是一种常用的无线以太网标准。Wi-Fi已发展成为一种廉价、高效、便捷的方式,为大多数应用提供了可接受的连通性和性能。Wi-Fi网络很容易建立。当前多数的便携式电脑和智能手机包含接入Wi-Fi基础设施的必要硬件。很多公共设施提供了Wi-Fi“热点”,Wi-Fi在那些可能难以提供其他基础设施的发展中国家发展甚至更快。下图显示了IEEE 802.11网络体系结构:

 一个无线局域网的802.11术语。接入点可采用一种分布式服务(一个无线或有线的主干)来连接,以形成一个扩展的无线局域网(称为一个ESS)。站(包括AP和移动设备)之间构成一个基本服务集。通常情况下,每个ESS有一个指定的ESSID,它的功能是作为一个网络的名称。

     如图所示的网络包含多个站(STA)。通常情况下,站和接入点(AP)组成一个操作子集。一个AP和相关的站被称为一个基本服务集(BSS)。AP之间通常使用一种有线的分布式服务(称为DS,基本是“主干”)连接,形成一个扩展服务集(ESS)。这种方式通常被称为基础设施模式。802.11标准也提供了一种Ad hos(自组织)模式。在这种配置中没有AP或DS,而是直接采用站到站(对等)的通信。在IEEE的术语中,加入一个Ad hoc网络的STA形成一个独立基本服务集(IBSS)。由BSS或IBSS的集合形成的无线局域网称为服务集,它由一个服务集标识符(SSID)来标识。扩展服务集标识符(ESSID)是由SSID命名的一个BSS集合,它实际上是一个最长32字符的局域网名称。在WLAN第一次建立时,该名称通常分配给AP。

二十一、802.11帧

  802.11网络有一个常见的总体框架,但包括多种类型的帧格式。每种类型的帧不一定包含所有字段。下图显示了常见帧格式和(最大尺寸的)数据帧:

如图所示的帧包括一个用于同步的前导码,它取决于正在使用的802.11协议类型。物理层汇聚程序(PLCP)头部以独立于物理层的方式提供特定的物理层信息。帧的PLCP部分的传输速率通常比其余部分低。这样做有两个目的:1,提高正确交付的概率(较低速度通常具有更好的容错性能),提供对传统设备的兼容性和防止慢速操作的干扰。帧的MAC PDU(MPDU)与以太网相似,但是有一些额外字段。

          MPDU以帧控制字开始,其中包括2位的类型字段,用于识别该帧的类型。这里有三种类型的帧:管理帧、控制帧和数据帧。每种类型有不同的子类型。【802.11n-2009】给出了有关类型和子类型的完整列表。剩余字段由帧类型(如果有的话)来决定。

二十二、管理帧

  管理帧用于创建、维持、终止站和接入点之间的连接。它们也被用于确定是否采用加密,传输网络名称(SSID或ESSID),支持哪种速率,以及采用的时间数据库等。当一个Wi-Fi接口“扫描”临近的接入点时,这些帧被用于提供必要的信息。

   扫描是一个站发现可用的网络及相关配置信息的过程。这涉及每个可用频率和流量的侦听过程,以确定可用的接入点。一个站可以主动探测网络,在扫描时传输一个特殊的管理帧(“探测请求”)。这些探测请求有一定的限制,以保证802.11流量不在非802.11(例如医疗服务)频率上传输。在Linux中使用iwlist wlan0 scan即可手工启动扫描。信号质量和强度决定执行扫描的站从AP接收信号的好坏,但相应值的含义可能因设备生产商而不同。WPA加密被用于这种链路,传输速率从1Mb/s到54Mb/s不等。tsf(时间、同步、功能)的值表示AP的时间概念,它被用于需要同步的各种功能,例如省电模式。

   当一个AP广播它的SSID时,任何站可尝试与AP建立连接。当一个连接建议时,大多数Wi-Fi网络会提供必要的配置信息,以便为站提供Internet接入。但是,AP的运营商可能希望控制使用网络的站。有些运营商故意使连接变得更困难,AP不广播其SSID被作为一项安全措施。这种方法提供了有限的安全性,这时由于SSID可以被猜测。链路加密和密码可提供更可靠的安全性。

  二十三、控制帧:RTS/CTS和ACK

  控制帧与帧确认被用于一种流量控制方式。流量控制有助于接收方使一个过快的发送方降低发送速度。帧确认有助于发送方知道哪些帧已正确接收。这些概念也适用于传输层的TCP协议。802.11网络支持可选的请求发送/明确发送(RTS/CTS),通过放缓传输来进行流量控制。当RTS/CTS启用时,一个站在发送数据帧之前发送一个RTS帧,当接收方愿意接收额外的流量时,它会响应一个CTS帧。在RTS/CTS交换之后,这个站开启一个时间窗口(在CTS帧中标识),用于向确认接收的站发送数据帧。这种协同传输方法在无线网络中很常见,模拟流量控制信号多年前就被用于有限的串行链路(有时称为硬件流量控制)。

  RTS/CTS交换有助于避免隐藏终端问题,通过在允许发送时对每个站加以指导,以便发现对方站同时进行的传输。由于RTS和CTS帧比较短,因此它们不会长期使用信道。如果一个分组的大小足够大,AP通常为每个分组启动一次RTS/CTS交换。在通常情况下,AP提供一个称为分组大小的阈值(或类似)的配置选项。超过阈值的帧将会导致一个RTS帧优先于数据帧发送。如果需要执行RTS/CTS交换,大多数设备生产商设置的默认值为500字节。Linux中设置RTS/CTS阈值可以通过iwconfig wlan0 rts 250 来设置。

  iwconfig命令可用于设置多种变量,包括RTS和分片阈值。它也可用于确定统计数据。例如错误的网络ID(ESSID)或加密密钥而导致的帧出错数量。它也可用于给出过多的重试次数(即重传次数),这是一个用于衡量链路可靠性的粗略指标,在无线网络中常用于指导路由决策【ETX】。在覆盖范围有限的WLAN中,隐藏终端问题通常很少发生,可将站的RTS阈值设置为很大(1500或更大)来禁用RTS/CTS。这可以避免每个分组执行RTS/CTS交换带来的开销。

  在有线以太网中,冲突较少代表正确接收帧的概率较高。在无线网络中,更多的因素导致帧交付可能出错,例如信号不够强或受到干扰。为了帮助解决这些潜在问题,802.11采用一种重传/确认(ACK)方法来扩展802.3重传机制。确认是对预期在一定时间内接收的一个单播帧(802.11a/b/g)或一组帧(802.11n或带“块确认”的802.11e)的响应。组播或广播帧没有相关的确认,以避免出现“ACK爆炸”问题。在指定时间内没有接收到对应的ACK会导致帧的重传。

  重传可能在网络中形成重复的帧。当任何帧是某个帧的一次重传时,帧控制字中的重试(Retry)位需要设置为相应的值。接收站可通过它删除重复的帧。每个站需要保持一个小的缓存条目,以说明最近查看的地址和序列号/分片号。当一个接收帧与一个条目匹配时,则丢弃该帧。

   发送一个帧和接收一个ACK所需时间与链路距离和时隙(802.11 MAC协议的一个基本时间单位)相关。在大多数系统中,可配置等待的ACK时间(以及时隙),这可采用不同方法完成配置。大多数情况下,例如家庭、办公室中使用,默认值是足够的,在长距离的Wi-Fi中,这些值可能需要调整。

二十四、数据帧、分片和聚合

   在一个繁忙的网络中看到的帧大多数是数据帧。通常情况下,802.11帧和链路层(LLC)帧之间存在一对一关系,它们保证更高层协议(例如IP)是可用的。但是,802.11支持帧分片,可将一个帧分为多个分片。根据802.11n的规定,他也支持帧聚合,可将多个帧合并发送以减少开销。

  在使用帧分片时,每个分片有自己的MAC头部和尾部CRC,并且它们独立于其他分片处理。例如,到不同目的地的分片可以交错。当信道有明显的干扰时,分片有助于提高性能。除非使用块确认功能,否则每个分片将被单独发送,并由接收方为每个分片产生一个ACK。由于分片小于全尺寸的帧,如果需要启动一次重传,则只需重传少量数据。

   分片仅用于目的地址为单播(非广播和组播)的帧。为了具备这种能力,顺序控制字段包含一个分片号(4位)和一个序列号(12位)。如果一个帧经过分片,所有分片包含相同的序列号值,而每个相邻的分片的分片号只差为1.由于分片号字段长度为4位,同一帧最多可能有15个分片。帧控制字中的更多字段表示更多分片还没有到达。最后一个分片将这个位置设置为0.接收方将接收到的同一序列号的分片根据分片号重组为原始帧。当所有包含同一序列号的分片被接收,并且最后一个分片将更多字段标志字段设为0时,这个帧被重组并交给更高层协议来处理。

  分片并不常使用,因为它需要经过调整。如果不调整就使用,可能导致性能下降。当帧大小更小的情况下,出现位差错的概率更小。分片大小通常设为256字节至2048字节,并作为一个阈值(只有那些超过阈值的帧才会被分片)。很多AP通常设置更高的阈值(例如Linksys品牌AP的2437字节),这样默认不使用分片。

    分片有用的原因在于其出错的概率。如果误码率(Bit Error Rate,BER)为P,1位数据成功交付的概率为(1-P),N位成功交付的概率为(1-P)^N。随着N的增长,这个值逐渐减小。因此,如果我们减小一个帧的大小,理论商可以改善错误交付的概率。如果将一个N位大小的帧分为K个字节,那么至少可发送【N/K】个分片。(例如:假设P=10的-4次方“一个相对较高的误码率”,不分片时的成功交付概率为(1-10^-4)^12000=0.301,那么只有约30%可能性将这个帧成功交付,即平均发送三或四次可使它成功接收,若是将分片阈值设置为500,这将产生3个4000位的分片。每个分片成功交付概率为(1-10^-4)^4000=0.670。故每个分片有约67%的概率交付成功。在每个分片都成功交付后重组该帧。3个分片、2个分片、1个分片和0个分片成功交付的概率为(0.67^3)=0.30、3(0.67^2)*(0.33)=0.44、3(0.67)*(0.33^2)=0.22、(0.33^3)=0.04。所以所有分片未重传而被成功交付的概率与未分片被成功交付的概率相同,但是两个或三个分片被成功交付的概率相对较大。如果发生这种情况,顶多是一个分片需要重传,比发送1500字节未分片帧显然节省时间(大约三分之一))。每个分片都需要花费一些开销,如果误码率为0,分片你只会因创建更多帧而降低性能。

  802.11n提供的增强功能之一是支持两种形式的帧聚合。一种形式是称为聚合的MAC服务数据单元(A-MSDU),它可将多个完整的802.3(以太网)帧聚合在一个802.11帧中。另一种形式称为聚合的MAC协议数据单元(A-MPDU),它可将多个具有相同的源、目的和QoS的MPDU聚合为短帧。下图描述了两种类型的聚合:

  对于一次单一的聚合,A-MSDU方法在技术上更有效率。每个802.3头部通常为14字节,相对36字节的802.11MAC头部更短。因此,仅一个802.11MAC头部对应于多个802.3帧,每聚合一个帧最多可节约22字节。一个A-MSDU可能高达7935字节,可容纳100多个小的分组(例如50字节),但只能容纳少数(5个)较大(1500字节)的数据分组。A-MSDU仅对应一个FCS。更大的A-MSDU帧会增大交付出错的概率,由于整个聚合只是针对一个FCS,因此出错时将不得不重传整个帧。

   A-MPDU聚合是另一种形式的聚合,多个(最多64个)802.11帧可聚合起来,每个帧有自己的802.11 MAC头部和FCS,每个帧最多4095字节。A-MPDU可携带最多64kb的数据,足够包含1000多个小的分组和大约40个较大(1.5kb)的分组。由于每个子帧都携带自己的FCS,因此可有选择地重传那些出错的子帧。这使得802.11n(最初在802.11e)中的块确认功能称为可能,它是一种扩展的确认形式,以发送方提供哪个A-MPDU子帧交付成功的反馈信息。这种功能在目的上类似,但在细节上不同。因此,A-MSDU提供的聚合类型在无差错网络中传输大量小的分组时可能更有效率,但在实际运行中可能不如A-MPDU聚合好。

二十五、省电模式和时间同步功能

   802,11规范提供了一种使站进入有限电源状态的方式,称为省电模式(PSM)。PSM的设计目标是为了节省电源,STA可在某些时间关闭无线电收发器电路。在不使用PSM时,收发器电路将始终运行,并消耗能量。在使用PSM时,STA的输出帧在帧控制字中设置1位。当AP发现某些帧的该位被设置时,它会缓冲该帧直到该站需要为止。AP发送信标帧(一种管理帧)提供不同信息,例如SSID、信道和认证信息。当某个站使用PSM时,AP可向该站提示存在缓冲的帧,只需在发送帧的帧控制字中设置一个标识。在某个站执行PSM后,它会一直保持这样,直到接收到下一个AP信标帧,这时它将苏醒过来,并确定AP中是否有为它缓存的帧。

   虽然可能延长电池寿命,但是在大多数无线设备中,NIC不是唯一可节约电源的模块。系统其他部分(例如屏幕和硬盘驱动器)也是电源的主要消耗者,因此总的电池寿命可能不会延长太多。另外,PSM可能显著影响在帧传输之间空闲期间的吞吐量,时间被过多花费在模式切换上。

  在正确的时间(即一个AP打算发送一个信标帧时)唤醒STA检查等候帧的能力,取决于这个AP和它所服务的站对时间的感知。WIi-Fi采用时间同步功能(TSF)。每个站保持一个64位计数器的参考时间(微秒),这个时间与网络中的其他站保持同步。同步保持在4us加PHY(速率为1Mb/s或以上)最大传播延迟之内。这时通过多个站接收一个TSF更新(另一个站发送的64位计数器副本),并检查其中的值是否比自己的值更大来实现。如果是,接收站将自己的时间更新为更大的值。这样可以保证时钟总是向前走,但也会带来一些问题,如果不同站的时钟速率稍有差异,较慢的站就会被最快的站的时钟同步。

  802.11e(QoS)功能纳入802.11中,802.11的PSM扩展为提供定期批处理缓冲帧功能。这个频率用信标帧的数量来表示。这个功能被称为自动省电交付模式(APSD),它使用QoS控制字中的一些字段。APSD对电源有限的设备可能很有用,因为不像传统802.11PSM那样,并不需要在每个信标间隔都被唤醒。反而它们可以选择在自己所选的较长时间内关闭无线电收发器电路。802.11n也扩展了PSM基本功能,允许一个STA装备的多个射频电路共同工作,关闭所有而不是其中一个电路,直到准备好一个帧为止。这被称为空间复用省电模式。这个规范还包括称为省电多重轮询的增强型APSD,它能提供同时(例如,到达AP和来自AP的)双向传输帧的方法

二十六、802.11介质访问控制

  与有线网络(例如802.3局域网相比),在无线网络中检测“冲突”具有更大挑战性。实际上,介质是相对单一的,无论是集中方式还是分布方式,都需要协同传输,避免多个站同时发送。802.11标准采用三种方法控制共享的无线介质,它们分别称为点协调功能(PCF)、分布式协调功能(DCF)和混合协调功能(HCF)。HCF被纳入802.11规范【802.11-2007】,在802.11e中增加支持QoS,它也被用于802.11n。某些类型的站或AP强制实现DCF,也可选择实现PCF,但PCF使用得并不广泛。相对较新的支持QoS的Wi-Fi设备通常会实现HCF,例如802.11n的AP和更早的802.11e的AP。

  DCF是一种CSMA/CA类型,是基于竞争的介质访问方法。它可用于基础设施和Adhoc网络。通过CSMA/CA,一个站可查看介质是否空闲,如果空闲,他将有机会传输。如果不空闲,它在一段随机的时间内避免发送,直到它再次查看介质是否空闲为止。这个行为与有线局域网中使用的CSMA/CD检测方法相似。802.11信道仲裁是对CSMA/CA的改进,提供优先访问某些站或帧的功能。

  802.11载波侦听能以物理和虚拟方式实现。一个站在准备发送时,通常需要等待一段时间(称为分布式帧间间隔(DIFS)),以允许更高优先级的站访问信道。如果信道在DIFS期间变得繁忙,该站再次开始一个等待时间。当介质出现空闲时,希望发送数据的站将启动冲突避免/退避过程。这个过程在一次成功(失败)的传输后,通过一个ACK知道数据被接收(或没有接收)后启动。在传输不成功时,经过不同时间(称为扩展帧间间隔(EIFS))启动退避过程。

二十七、虚拟载波侦听、RTS/CTS和网络分配向量

   在802.11MAC协议中,虚拟载波侦听机制会检查每个MAC帧中的持续时间字段。这通过站的侦听而非引导流量来实现。RTS和CTS帧中都有一个持续时间字段,它们像普通帧那样传输之前可以选择是否交换,并估计介质将处于繁忙状态时间。

   发送方基于帧长度、传输速率和PYH特性(例如速率等)设置持续时间字段。每个站保持一个称为网络分配向量(NAV)的本地计数器,它被用于估计介质传输当前帧所需的时间以及尝试下一次传输之前需等待的时间。当一个站侦听到一个持续时间大于自己的NAV时,他将自己的NAV更新为这个值。由于RTS和CTS帧中都有持续时间字段,如果使用NAV,在其范围内的任何站(无论发送方还是接收方)都能看到持续时间字段值。NAV采用单位时间来维护,并基于本地时钟递减。当本地NAV不为0时,介质被认为时繁忙的。在接收到一个ACK后,本地NAV将复位为0。

二十八、物理载波侦听(CCA)

   每个802.11PHY规范(例如对于不同的频率和无线电技术)需提供一种评估信道是否空闲的功能,它基于能量和波形识别(通常是一个完好的PLCP)。这个功能称为空闲信道评估(Clear Channel Assessment,CCA),它的实现依赖于PHY。CCA功能是针对802.11MAC的物理载波侦听功能,用于了解介质当前是否繁忙。通常与NAV结合使用,以确定一个站在传输之前是否需要推迟(等待)。

二十九、DCF冲突避免/退避过程

   在确定某个信道可能空闲时(已到达NAV持续时间,并且CCA没有提示信道繁忙),一个站在传输之前需推迟访问该信道。由于很多站可能在等待信道变空闲,每个站在发送之前需计算和等待一个退避时间。退避时间等于一个随机数和时隙的乘积(除非该站已有一个非零的退避时间尝试传输,在这种情况下无需重新计算)。时隙依赖于PHY,通常是几十微秒。随机数是在一个区间[0,CW]中均匀分布的数值,竞争窗口(CW)是一个整数,其中包含许多等待时隙,且aCWmin≤CW≤aCWmax(该限制由PHY定义)。CW值的集合从PHY指定的常数aCWmin开始,以2的幂(减1)增加,直到每个连续传输尝试次数的常数aCWmax为止。这样做与以太网中由冲突检测事件引发的退避过程相似。

   在无线环境中,冲突检测是不实际的(无线环境中是一个三维的环境,信号波与信号波之间的传送几乎很难相撞)。由于很难发现发送方和接收方同时发送,也难以监听自己之外的传输,因此采用冲突避免来代替冲突检测。另外,ACK是针对单播帧的响应,以确定一个帧是否成功传递。当一个站正确接收一个帧时,在等待一小段时间(称为短帧间间隔(SIFS))后开始传输ACK,并且不考虑介质的忙碌/空闲状态。这样做不会导致问题,由于SIFS的值始终比DIFS小,因此该站产生的ACK可优先访问信道,以完成接收确认。源站在一定的时间内没有接收到ACK,则意味着一次传输失败。在失败后,源站启动退避过程,并重新尝试发送帧。如果在一定时间(CTStimeout常数)内没有接收到较早RTS响应的CTS,则启动同样的过程。

三十、HCF和802.11e/n的QoS

  802.11标准【802.11-2007】中的条款5、6、7和9都基于IEEE 802.11e工作组的部分工作,常用的术语有802.11e、Wi-Fi QoS和WMM(基于Wi-Fi的多媒体)。它们涉及QoS功能:修改802.11 MAC层和系统接口以支持多媒体应用,例如IP语音(VoIP)和流媒体。QoS功能实际是否必要,取决于网络层拥塞和应用类型。如果网络利用率低,可能不必要支持QoS的MAC,虽然其他802.11e功能可能有用(例如块确认和APSD)。在网络利用率和拥塞较高的情况下,需要为VoIP等服务提供低抖动交付能力,这时支持QoS可能是可取的。(注:支持QoS的Wi-Fi设备通常比不支持QoS的设备更贵和更复杂)。

   QoS功能引入了新的术语,例如QoS站(QSTA)、QoS接入点(QAP)、和QoS BSS(QBSS,支持QoS的BSS)。在一般情况下,支持QoS功能的设备也支持传统的非QoS操作。802.11n“高吞吐量”站(又称为HT STA)也是QSTA。混合协调功能(HCF)是一种新的协调功能,支持基于竞争的可控制的信道访问,尽管可控制的信道访问技术很少使用。在HCF中,有两种专门的信道访问方法可协调工作:HFCA控制信道访问(HCCA)和更流行的增强型DCF信道访问(EDCA),它们分别对应于基于预约和基于竞争的访问。也有一些对准入控制的支持,它们可在高负载下完全拒绝访问。

  EDCA建立在基本的DCF访问之上。通过EDCA,8个用户优先级(UP)被映射为4个访问类型(AC)。用户优先级使用与802.1d优先级标记相同的结构,并被编号为1至7(2和3之间还有一个优先级0),其中7为最高优先级。4个访问类别分别为背景、尽力而为,视频和音频流量。优先级1和2用于背景AC,优先级0和3用于尽力而为AC,优先级4和5用于视频AC,优先级6和7用于音频AC。对于每个AC,DCF的一个变种竞争信道访问许可,称为传输机会(TXOP),为较高优先级的流量使用可选的MAC参数。在EDCA中,很多来自DCF的MAC参数(例如 DIFS、aCWmin、aCWmax)作为配置参数是可调整的,这些值可通过管理帧传输给QSTA。

  HCCA松散地建立在PCF之上,并使用轮询来控制信道访问。它术语同步方式的访问控制,并优先于基于竞争的EDCA访问。混合协调(HC)位于一个AP中,并优先于信道访问分配。在一次传输之前,一个站可为其流量发布一个流量规范(TSPEC),并使用8和15之间的UP值。HC可为这种请求分配保留的TXOP,它被用于基于EDCA的帧传输之前的短期控制访问阶段的帧交换。HC可拒绝TXOP的基于网络管理员设置的管理控制策略的TSPEC。HCF利用虚拟载波侦听机制和DCF,以避免基于竞争的站被不基于竞争的访问所干扰。注:在包括QSTA和常规站的网路中,可同时允许HCF和DCF,在两者之间切换,但Ad hoc网络不支持HC,因此它不处理TSPEC和不执行管理控制。这种网路可能仍允许HCF,但TXOP通过基于EDCA的竞争来获得。

三十一、物理层的细节:速率、信道和频率

  

标准(条款)

速率(Mb/s)

频率范围:调制

信道设置

802.11a(第17条)

6,9,12,18,24,36,48,54

5.16GHz~5.35 GHz和5.725~5.825 GHz;OFDM

37~165(根据国家不同),20MHz/10MHz/5MHz信道宽度选项

802.11b(第18条)

1,2,5.5,11

2.401GHz~2.495GHz;DSSS

1~14(根据国家不同)

802.11g(第19条)

1,2,5.5,6,9,11,12,18,24,36,48,54(加22,23)

2.401GHz~2.495GHz;OFDM

1~14(根据国家不同)

802.11n

6.5~600,很多选项(最多4个MIMO流)

2.4GHz和5GHz模式,信道宽度20MHz和40MHz;OFDM

1~13(2.4GHz频段);36~196(5GHz频段)(根据国家不同)

802.11y

(与802.11~2007相同)

3.650GHz~3.700GHz(需要许可);OFDM

1~25、36~64、100~161(根据国家不同)

上表是802.11标准中描述的部分物理层部分。该表中注意的是,802.11b/g工作在2.4GHz的工业、科学和医疗(ISM)频段,802.11仅工作在更高的5GHz的无须许可的国家信息基础设施(U-NII)频段,而802.11n可工作在这两个频段。802.11y修订版在美国工作在需要许可的3.65~3.70GHz频段。802.11b/g设备与802.11a设备不会互操作或干扰,但是不认真进行部署,802.11n设备可能被任何设备干扰。

三十二、信道和频率

  监管机构(例如美国联邦通信委员会)将电磁波谱划分为不同频率范围,并分配个全球各地的不同应用。对于每个频率范围及其用途,根据本地政策可能需要或不需要申请许可证。在802.11中,多个信道可能以不同方式,不同功率水平工作,这取决于所在地区或国家的监管。Wi-Fi信道在某个基本中心频率的基础上以5MHz为单位进行编号。例如,信道36的基本中心频率为5.00GHz,则信道36的中心频率为5000+36*5=5180MHz。虽然信道的中心频率之间以5MHz为间隔,但信道宽度可能超过5MHz(802.11n高达40MHz)。所以,信道集中的某些频段内的信道经常重叠。意味着一个信道上的传输可能干扰附近信道上的传输。

  802.11b和802.11g标准使用2.4GHz和2.5GHz之间的频段。这个频段被划分为14个22MHz宽的重叠信道,其中一些自己能否合法使用取决于所在国家。一种可取的做法是在同一地区运行多个基站,分配非重叠的信道。例如,美国的1、6和11只有一个40MHz的802.11n信道可用于此频段而不会发生重叠。

  在可使用多个接入点的环境中,选择使用哪条信道很重要。20MHz信道中的一些可用的802.11信道号和中心频率。最常见的无须许可使用的频率范围包括U-NII频段,它们均在5GHz之上。较低频段被批准用于大多数国家。“欧洲”频段(5490~5710GHz)被用于大多数欧洲国家,高频段(5720~5800GHz以上)被批准用于美国和中国。802.11a/y信道的典型宽度为20MHz,但802.11n的信道宽度可能为40MHz。

40MHz信道宽度是802.11n的一个选项,可将几个不同所有者的Wi-Fi系统聚合为2个20MHz信道(这称为信道绑定)

  对于典型的Wi-Fi网络,在AP安装过程中需要指定其运行信道,并由用户所在的站修改信道以便连接到AP。当运行在Ad hoc模式时,没有起控制作用的AP,因此一个站通常要为AP手工配置信道。可用的信道和运行功率可能受限于监管环境、硬件功能,以及所支持的驱动程序软件。

三十三、更高吞吐量的802.11/802.11n

  【802.11n-2009】对802.11做了一些改变。为了支持更高吞吐量,它采用多输入多输出(MIMO)管理空间流(Spatial Stream),即由多个天线同时传输的多个数据流。一个给定信道上最多支持4个这种空间流。802.11n信道宽度可以是40MHz(使用两个相邻的20MHz信道),这时传统802.11a/b/g/y信道宽度的两倍。它可将802.11a/g的最大传输速率(54Mb/s)提高8倍。802.11n也提高了单个流的性能,使用一种高效的调制方案(MIMO-正交频分复用(OFDM),每个20MHz信道最多承载52个数据载波,每个40MHz信道最多承载108个数据载波,代替802.11a/g中的48个),以及一种更高效转发纠错编码(以编码率5/6代替3/4),将每个流性能提升到65Mb/s(20MHz信道)或135Mb/s(40MHz信道)。通过将保护间隔(GI,一个强制的符号之间的空闲时间)从传统的800ns减少到400ns,每个流的最大性能可提高到72.2Mb/s(20MHz信道)和150Mb/s(40MHz信道)。通过4个空间流的完美协作,可提供最高至600Mb/s的传输速率。

   802.1n标准支持大约77中调制和编码选项组合,其中包括8种对应单个流的选项,24种可在所有流中使用的平等调制(EQM)选项,以及43种可在多个流上使用的不平等调制(UEQM)选项,下表给出了调制和编码方案的一些组合,对应于调制和编码方案(MCS)的前33个值……MCS值32是一个特殊组合,即40MHz信道的两路信号包含相同信息。每行给出了2个数据传输速率。

802.11n的MCS值包括平等和不平等调制,不同的FEC编码率,使用20MHz或40MHz信道宽度的4个空间流,以及800ns或400ns GI的组合。77种组合提供从6Mb/s到600Mb/s的数据传输速率。

MAC值

调制类型

FEC编码率

空间流

速率(Mb/s)

(20MHz)【800/400ns】

速率(Mb/s)

(40MHz)[800/400ns]

0

BPSK

1/2

1

6.5/7.2

13.5/15

1

QPSK

1/2

1

13/14/4

27/30

2

QPSK

3/4

1

19.5/21.7

40.5/45

3

16-QAM

1/2

1

26/28.9

54/60

4

16-QAM

3/4

1

39/43.3

81/90

5

64-QAM

2/3

1

52/57.8

108/120

6

64-QAM

3/4

1

58.5/65

121.5/135

7

64-QAM

5/6

1

65/72.2

135/150

8

BPSK

1/2

2

13/14.4

27/30

……

……

……

……

……

……

15

64-QAM

5/6

2

130/144.4

270/300

16

BPSK

1/2

3

19.5/21.7

40.5/45

……

……

……

……

……

……

31

64-QAM

5/6

4

260/288.9

540/600

32

BPSK

1/2

1

N/A

6/6.7

……

……

……

……

……

……

76

64x3/16x1-QAM

3/4

4

214.5/238.3

445.5/495

  上表显示了可用于802.11n的各种编码组合,包括二进制相移键控(BPSK)、正交相移键控(QPSK),以及各种正交幅度调制(16-QAM和64-QAM).这些调制方案能为给定的信道提供更大的传输速率。但是,性能更高和更复杂的调制方案,通常更容易受到噪声干扰。转发纠错(FEC)包括一套方法,在发送方引入一些冗余位,用于检测和修改传输过程中的错误。对于FEC,编码率是可用传输速率与底层信道规定速率之比。

  802.11n可工作在3种模式下。在802.11n环境种,可选择所谓的”绿地模式“,PLCP包含特殊位序列(”训练序列“),它仅被802.11n设备获得,不与传统设备进行互操作。为保持兼容性,还提供2种互操作模式。这些模式对纯802.11n设备会带来性能损失。一种为非HT模式,禁止所有802.11n功能,但仍与原有设备兼容。另一种是HT混合模式,支持802.11n和传统操作,这取决于与哪个站进行通信。

  在部署一个802.11n AP时,应考虑分配适当的信道。在使用40MHz通道时,802.11n AP应运行在5GHz以上的U-NII频段,2.4GHz的ISM频段种根本没有足够的可用频段提供这么宽的信道。一种可选的BSS功能称为分阶段共存操作(PCO),允许一个AP定期在20MHz和40MHz信道宽度之间切换,更好地提供802.11n AP之间的共存,以一些额外流量为代价为附近的传统设备提供服务。802.11n AP通常比传统AP消耗更多能力,这种比基本的15W更高的电源功率,可由802.3af以太网供电(PoE)系统提供,这需要使用PoE+(802.3at能提供30W),除非能有其他形式电源,例如一个外接电源。

三十四、Wi-Fi安全

  802.11早期采用一种称为有线等效保密(WEP)的加密方法,后来被证明安全性薄弱,并出现需要替换它的需要。工业界通过Wi-Fi保护访问(WPA)来回应,其使用加密块代替密钥方式。在WPA中,采用一种称为临时密钥完整性协议(TKIP)的方案,确保每个帧都用不同密钥加密。它还包括一种称为Michael的消息完整性检查,用来弥补WEP中的主要弱点之一。WPA被创建为一个占位符,可通过硬件升级方式使设备支持WEP功能。IEEE 802.11i工作组指定了一个功能更强的标准,被吸收到【802.11-2007】的第八条,并被工业界称为“WPA2”。WEP和WPA都使用RC4加密算法,WPA2使用高级加密标准(AES)算法。这些加密技术被用于站和AP之间提供隐私保护。在使用WEP、WPA或WPA2的小规模环境中,授权通常通过预先设置一个共享密钥或密码实现,它在每个站和AP的配置过程中生成,知道这个密钥的用户拥有访问网络的合法授权。这些密钥通常用来保护隐私的加密密钥的初始化。这种与共享密钥(PSK)具有局限性(在很多用户的环境中很麻烦,多一个新用户就得更新一次PSK)。基于此WPA和后期标准支持基于端口的网络访问控制标准,称为802.1X.它提供了一种在IEEE 802 局域网中使用扩展身份验证协议(EAP)的方式。

   随着IEEE 802.11i工作组的工作完成,WPA和RC4/TKIP组合扩展为一个称为CCMP的新方案,它被作为WPA2的一部分。CCMP是基于计数器模式(CCM的AES,以确保用于认证和完整性的密码块链接消息认证码(CBC-MAC)的安全。AES采用128位的块和128位的密钥。CCMP和TKIP形成了Wi-Fi安全体系结构的基础,称为强健安全网络(RSN),并支持强健安全网络访问(RSNA)。早期的一些方法(如WEP)称为预RSNA方法。RSNA要求支持CCMP(TKIP可选),而802.11n标准完全不使用TKIP。)下表显示了Wi-Fi安全已从不安全的WEP演变到WPA,再到当前标准的WPA2方案:

名称/标准

密码

密码流管理

认证

WEP(预RSNA)

RC4

(WEP)

PSK,(802.1X/EAP)

WPA

RC4

TKIP

PSK,802.1X/EAP

WPA2/802.11(i)

CCMP

CCMP,(TKIP)

PSK,802.1X/EAP

  在所有的情况下,预共享密钥和802.1X可用于认证和初始化密钥。802.1X/EAP主要吸引力在于其可管理的认证服务器,它基于AP为每个用户提供访问控制决策。出于此原因,使用802.1X的认证有时称为“企业”(例如WPA企业)。EAP本身也可以封装各种认证协议。

三十五、Wi-Fi网状网(802.11s)

  802.11s标准中包含了Wi-Fi的网状网(Mesh)操作。通过Mesh操作,无线站点可用作数据转发代理(像AP那样)。Mesh站(Mesh STA)是一种QoS站,它可能参与HWRP或其他协议,但兼容节点必须包括HWRP实现和相关通话时间链路度量。Mesh节点使用EDCA来协同工作,或使用一种可选的称为Mesh确定性访问的协同功能。Mesh点(MP)是与邻居形成Mesh连接的那些节点。那些包含AP功能的Mesh点称为Mesh AP(MAP)。常规802.11站可使用AP或MAP访问无线局域网的其他部分。

三十六、点到点协议

  PPP表示点到点协议。这时一种在串行链路上传输IP数据报的流行方法,从低俗的拨号调制解调器到高速的光链路。它被一些DSL服务供应商广泛部署,也可分配Internet系统的参数。

  PPP实际上是一个协议集合,而不是一个单一的协议。它支持建立链接的基本方法——称为链路控制协议(Link Control Protocol,LCP),以及一系列NCP协议,在LCP建立了基本链路之后用于为各种协议(IPV4,IPV6,非IP协议)建立网络层链路。

三十七、链路控制协议

   PPP的LCP用于在点到点链路上建立和维护低层的双方通信路径。所以,PPP操作只需要关注一条链路的两端,不需要像以太网和Wi-Fi的MAC层协议那样处理共享资源访问的问题。

  PPP通常对底层的点到点链路有最低要求,LCP更是如此。链路必须支持双向操作(LCP使用的确认),以及异步或同步操作。通常LCP使用简单的位级别帧格式,基于高级数据链路(HDLC)建立链路协议。IBM将HDLC修改为同步数据链路控制(SDLC),在其专用的系统网络体系结构(SNA)协议族中用作链路层协议。HDLC协议还用作802.3中LLC标准的基础,并最终被用于PPP。下图显示了HDLC的帧格式:

PPP基本格式借用了HDLC的格式。它包括一个协议标识符、有效载荷区,以及2或4字节的FCS。其他字段是否存在取决于压缩选项

    通常情况,PPP帧格式类似于上图所示的HDLC帧,由2个1字节的包含固定值0x7E的标志字段“包围”,点到点链路的两个端点使用这些字段来发现一个帧的开始和结束。如果0x7E出现在帧内部,这会带来一个小问题。它可通过两种方式来处理,这取决于PPP工作在异步还是同步链路上。对于异步链路,PPP使用字符填充(字节填充)替换。如果转义字符本身出现在帧中,则用2字节序列0x7D5E替换。因此接收方用0x7E替换接受的0x7D5E,并用0x7D替换接收的0x7D5D。在同步链路(例如T1线路,T3链路)上,PPP使用位填充。标志字符的位模式为01111110(连续6个1的位序列),在除了标志字符之外的任何地方,位填充在5个连续1之后填充一个0。这样做意味着发送的字节可能超过8位,这通常是正常的,因为低层串行处理硬件能去掉填充的比特流,并将其恢复成未填充时的样子。

  在第一个标志字段之后,PPP采用HDLC的地址(Addr)和控制字段。在HDLC中,地址字段用于指定哪个站正在处理,但是由于PPP只关心一个目的地,这个字段总是被设置为0xFF(所有站)。HDLC控制字段用于指示帧序列和重传行为。由于这些链路层的可靠性功能通常不是由PPP实现,所以控制字段设置为0x03.由于地址和控制字段在PPP中都是固定的常数,所以在传输过程中经常通过一个称为地址和控制字段压缩(ACFC)的选项来省略它们,该选项实质上是消除了这两个字段。

PPP帧的协议字段表明携带的数据类型。在一个PPP帧中,可以携带多种不同类型的协议。PPP帧的最后部分包含一个16位的FCS可将CRC从16位扩展到32位。

三十八、LCP操作

LCP在基本PPP分组之上进行了简单的封装,如下图所示:

   

LCP分组采用很普通的格式,能识别封装数据的类型和长度。LCP帧主要用于建立PPP链路,这种格式已称为很多网络控制协议的基础。

  LCP的PPP协议字段值始终是0xC021,它不能用PFC删除,以免产生歧义。标识字段是由LCP请求帧的发送方提供的序列号,并随着每个后续消息进行递增。在生成一个回复时,这个字段通过复制响应分组请求中包含的值来构造。采用这种方式,请求方可通过匹配标识符来识别相应请求的应答。代码字段给出了请求或响应的操作类型:配置请求(0x01)、配置ACK(0x02)、配置NACK(0x03)、配置REJECT(0x04)、终止请求(0x05)、终止ACK(0x06)、代码REJECT(0x07)、协议REJECT(0x08)、回送请求(0x09)、回送应答(0x0A)、放弃请求(0x0B)、标识(0x0C)和剩余时间(0x0D)。ACK消息通常表明接收一组选项,NACK消息用建议选项表明部分拒绝。REJECT消息完全拒绝一个或多个选项。拒绝代码表明前一个分组包含的某些字段值未知。长度字段给出了LCP分组的字节长度,它不能超过链路的最大接收单元(MRU)。注:长度字段时LCP协议的一部分;PPP协议通常不提供这个字段。

  LCP的主要工作是使一条点到点链路达到最低要求。配置消息使链路两端开始基本配置过程,并建立商定的选项。终止消息用于在完成后清除一条链路。LCP也提供了前面所提到的一些附加功能。回送请求/应答消息可由LCP在一条活跃链路上随时交换,以验证对方的操作。放弃请求消息可用于性能测试,只是对方丢弃没有响应的分组。标识和剩余时间消息用于管理目的:了解对方的系统类型,指出链路保持建立的时间。

下图显示了简化的分组交换时间表和一个简化的状态机(在链路两端实现)

  

LCP用于建立PPP链路和各方商定选项。典型的交换过程包括一对包括一对包含选项列表的配置请求和配置确认、一个认证交换、数据交换(未画出)和一个终止交换。因为PPP是一个包括很多部分的通用协议,所以在一条链路建立和终止之间可能发生很多其他类型的操作。  

一个底层协议表明一个关联变为活跃(例如调制解调器检测到载波),则认为这个链路已被建立。链路质量测试包含链路质量报告和确认交换,它也可以在此期间完成。

三十九、LCP选项

   当LCP建立一条由一个或多个NCP使用的链路时,可以对一些选项进行协商。异步控制字符映射(ACCM)或简称“asyncmap”选项定义哪些控制字符(即0x00~0x1F范围内的ASCII字符)需要被“转义”为PPP操作。转义一个字符表示不发送这个字符的真实值,而将PPP转义字符(0x7D)放在控制字符原始值和0x20异或形成的值之前。例如,XOFF字符(0x13)将转换为(0x7D33)发送。ACXM用于控制字符可能影响底层硬件操作的情况。如果软件流控制能够使用XON/XOFF字符,而XOFD字符未经转义就通过链路传输,则硬件直到看到一个XON字符才停止数据传输。asyncmap选项通常是一个32位的十六进制数,其中第n个最低有效位被设置为1,表示值为n的控制字符被转义。所以,asyncmap为0xffffffff表示转义所有控制字符,为0x00000000则表示不转义任何控制字符,为0x000A0000表示转义XON(0x11)和XOFF(0x13)。其中0xffffffff是默认值但是很多链路在asyncmap设置为0x00000000时安全运行。

   由于PPP缺少一个长度字段,并且串行线路通常不提供帧封装,理论上对一个PPP帧的长度没有硬性限制。实际上,最大帧大小通常由MRU指定。当主机指定一个MRU选项时,它要求对方不发送比MRU选项提供的值更长的帧。MRU值是数据字段的字节长度,它不计算其他PPP开销字段(即协议,FCS,标志字段)。其典型值是1500和1492,但也有可能多达65535。IPv6操作需要的长度最小为1280。PPP标准要求具体实现能接收最大1500字节的帧,MRU更多的是建议对方选择帧大小,而不是硬性限制帧大小。当小分组和大分组在同一条PPP链路上交错传输时,大分组可能占用一条低带宽链路的大部分带宽,并影响小分组的正常传输。这可能导致抖动(延迟变化),对交互式应用产生负面影响。可以配置较小的MRU或MTU来缓解这个问题,但是会产生更大的开销。

   PPP支持一种交换链路质量报告信息的机制。在选项协商期间,可能包括一个包含请求的特定质量协议的配置信息。大多PPP实现支持一种回叫功能。LCP选项针对用于协商回叫的协议,该选项值为0x0D。如果许可,回叫控制协议(CBCP)完成协商。

   PPP使用的一些压缩和加密算法在处理时需要一定的最小字节数,称为块大小。在数据不够长的情况下,通过填充增加数据长度,达到一个甚至多个块的大小。如果有填充,通常位于数据区后面,并位于PPP FCS字段之前。一种填充方法称为自描述填充,它将填充值变为非0值。由于基本PPP帧缺少一个明确的长度字段,所以一个接收方可使用自描述填充,以确定应从接收的数据区删除多少填充字节。

   为了减小每个帧包含一个头部的固定开销,提出了一种将多个不同协议的有效载荷聚合成PPP帧的方法,称为PPPMux方法。主要PPP头部的协议字段被设置为聚合帧(0x0059),然后每个有效载荷块被插入帧中。通过在每个有效载荷块之前插入1~4字节的子帧头部来实现。在子帧头部中,1位(称为PFF)说明子帧头部中是否包含协议字段,1位(称为LXT)说明后面的长度字段是1字节还是2字节。1或2字节的协议ID使用与外部的PPP头部相同的值和压缩方法。在子帧与默认PID(该PID在配置阶段通过PPPMux控制协议建立)匹配时,PFF可以为0(意味着不存在PID字段)。普通PPP/HDLC的FCS可以是16或32位。默认的FCS为16位,但32位的FCS值可通过32位的FCS选项来启用。其他的LCP选项包括使用PFC和ACFC,以及认证算法的选择。

四十、多链路PPP

   PPP的一个特殊版本称为多链路PPP(MP),可用于将多条点到点链路聚合为一条链路。MP包含一个特殊的LCP选项,表示支持多链路,以及一个用于多链路上PPP帧分片与重组的协商协议。一条聚合链路(称为一个捆绑)可作为一条完整的虚拟链路来操作,并包含自己的配置信息。链路捆绑由大量成员链路组成。每个成员链路可能有自己的选项集。

   实现MP的典型方法是使分组轮流经过各个成员链路传输。这种方法称为银行柜员算法,它可能导致分组重新排序,也可能为其他协议带来不良的性能影响。MP在每个分组中添加一个2~4字节的序列头部,而远程MP接收方的任务是重建正确的顺序。下图显示了这种数据帧:

如图所示,一个MP分片的开始分片(B)、结束分片(E)位字段和序列号字段。需要注意长格式(4字节用于分片信息)和短格式(2字节用于分片信息)。在选项协商阶段,LCP的短序列号选项(类型18)用于选择使用的格式。MP使用一个称为多链路最大接收重构单元(MRRU,18)的LCP选项,它可将一系列更大的MRU应用于捆绑中。大于成员链路MRU的帧仍被允许通过这个MP链路,直到达到这个值的上限为止。为确定成员链路属于同一捆绑,同一捆绑中的成员链路由LCP端点鉴别(类型19)选项识别。端点鉴别可使用电话号码、从IP或MAC地址中提取的数字,以及其他可管理的字符串。除了每个成员链路的常见内容,对这个选项的格式没有多少限制。

   建立MP的基本方法定义在【RFC1990】中,希望各个成员链路可对称使用,相近数量的分片被分配到号码固定的每条链路上。为实现更复杂的分配,【RFC2125】中规定了带宽分配协议(BAP)和带宽分配控制协议(BACP)。BAP用于为一个捆绑动态添加或删除链路,BACP用于交换如何使用BAP添加或删除链路的信息。这种功能有助于实现按需带宽(BOD)。在一些需要分配固定资源以满足应用对带宽需要的网络中,BOD通常需要检测流量,在应用需求高时创建新的连接,以及在应用需求低时删除连接。

  BAP/BACP使用一种新的链路鉴别LCP选项(LCP选项类型为23).这个选项包含一个16位的数字值,一个捆绑中的每条成员链路有不同的值。它被BAP用于确定需要添加或删除哪些链路。在一条PPP链路的网络阶段,每个捆绑都需要使用BACP协商。它的主要目的是找出首选对端(如果在多个对端之间同时建立多个捆绑时,将会优先为首选对端分配成员链路)。

   BAP包括三种分组类型:请求、响应和标识。请求用于向一个捆绑添加一条链路,或从一个捆绑中删除一条链路。标识用于为原始或被确认的请求返回结果。响应是对这些请求的ACK或NACK。

四十一、压缩控制协议

  LCP可协商一个使压缩控制协议(CCP)生效的选项。CCP的作用就像NCP,只不过在LCP链路建立交换阶段指明压缩选项时才开始处理配置压缩细节。

  CCP在行为上很像NCP,仅在链路进入网络状态时协商。它使用与LCP相同的分组交换过程和格式(除协议字段被设置为0x80FD之外),另外还有一些特殊选项,并对常见的代码字段值(1~7)定义了2个新的操作:复位请求(0x0e)和复位确认(0x0f)。

  一个或多个压缩帧可作为一个PPP帧的一部分(即包括LCP数据和可能的填充部分)。压缩帧携带的协议字段值为0x00FD。当CCP与MP结合使用时,既可用于一个捆绑,也可用于多条成员链路的某些组合。如果只用于成员链路,协议字段设置为0x00FB(单个的链路压缩数据报)。

  CCP可使用十几个压缩算法之一。大多数算法不是官方标准的IETF文档,。如果使用压缩,PPP帧在进一步处理之前需要重构,因此高层的PPP操作通常不关心压缩帧的细节。

四十二、PPP认证

  在一条PPP链路处于网络状态之前,通常有必要使用某种认证(身份验证)机制,以识别建立链路的对方身份。基本的PPP规范默认不提供认证,但是某种形式的认证在多数时候是需要的。与不提供认证相比,最简单、安全性最低的认证方案是密码认证协议(PAP)。这种协议非常简单,一方请求另一方发送一个密码。由于该密码在PPP链路上未加密传输,窃听者在线路上可轻易捕获密码并使用它。所以不建议使用PAP进行认证。PAP分组像LCP分组那样编码,协议字段值设置为0xC023.

  查询-握手认证协议(CHAP)提供了一种更安全的认证方法。在使用CHAP时,一个随机值从一方(称为认证方)发送到另一方。响应通过一种特殊的单向(即不可逆)功能,将一个随机值和一个共享密钥(通常由密码生成)结合形成响应中的一个数字。在接收到这个响应之后,认证方能更可靠地验证对方密钥是否正确。这个协议在链路上不会以明文(未加密)形式发送密钥和密码。由于每次使用不同的随机值,每个查询/响应的结果会改变,即使窃听者可能捕获到这个值,也无法通过重新使用(回放)来欺骗对方。

   EAP是一个可用于各种网络的认证框架。它支持很多(约40个)不同的认证方法,从简单密码(例如PAP和CHAP)到更可靠的认证类型(例如智能卡、生物识别)。EAP定义了一种可携带各种认证的消息格式,但需要额外的规范定义EAP消息如何在特定的链路上传输。

  当EAP被用于PPP时,基本认证方法不变。EAP不是在链路建立(LCP建立)阶段协商一种认证方法,认证操作将被推迟到认证状态(网络状态的前一个状态)。这允许更多信息类型用于影响远程访问服务器(RAS)的访问能控制决策。当某种标准的协议用于执行各种认证机制,网络访问服务器可能无须处理EAP消息内容,但可依靠其他基础设施的认证服务器确定访问控制决策。(这是当前的企业网和ISP设计中的首选方案)

四十三、网络控制协议

  对于IPv4,NCP被称为IP控制协议(IPCP)。对于IPv6,NCP被称为IPV6CP。在LCP完成链路建立和认证之后,该链路每端都进入网络状态,并使用一个或多个NCP进行网络层的相关协商。

  IPCP(针对IPv4的标准NCP)可用于在一条链路上建立IPv4连接,以及配置VanJacobson头部压缩(VJ压缩)。IPCP分组在PPP状态机进入网络状态之后交换。IPCP分组使用与LCP相同的分组交换机制和分组格式,除非协议字段被设置为0x8021,并且代码字段被限制在范围0~7.代码字段的值对应于消息类型:特定供应商、配置请求、配置ACK、配置REJECT、终止请求、终止ACK和代码REJECT。IPCP可协商一系列选项,包括IP压缩协议(2)、IPv4地址(3)和移动IPv4(4).其他选项可用于获得主要和次要的域名服务器。

  IPV6CP使用与LCP相同的分组交换机制和分组格式,但它有两种不同的选择:接口标识符和IPv6压缩协议。接口标识符选项用于传输一个64位的IID值,它作为形成一个链路本地IPv6地址的基础。由于其仅在本地链路上使用,因此不需要具有全球唯一性。这通过在IPv6地址的高位使用标准链路本地前缀,在低位设置某种功能的接口标识符来实现。

四十四、头部压缩

  PPP拨号线路的速率一直较慢(54000b/s或更少),很多小的分组通常使用TCP/IP。这些分组大部分包含TCP和IP头部,同一TCP连接上的分组之间变化不大。其他高层协议的行为相似。所以,压缩(或消除)高层协议头部是一种有用的方法,这样就可以在相对较慢的点到点链路上传输更少字节。

  在VJ压缩中,部分高层头部被1字节的连接标识符代替。它最初来源于一种旧的、称为CSLIP(压缩串行线路IP)的点到点协议。一个常见的TCP/IPv4头部组合式40字节,因为一个典型的IPv4头部的长度与一个没有选项的TCP头部的长度都为20字节。并且很多字段在分组间没有变化。很多字段在分组间只有很小或有限的变化。如果不变的值通过一条链路(或一段时间内)传输并保存在一张表中,则后续分组可用一个小的索引代替该值。变化有限的值可以仅编码差异部分(即发送变化的部分)。因此,整个40字节头部通常可有效压缩到3到4字节。这样可以提高在低俗链路上的TCP/IP性能。

  头部压缩的进一步演化称为IP头部压缩。它提供了一共压缩多个分组头部的方式,使用TCP或UDP传输层协议,以及IPv4或IPv6网络层协议。这种技术是VJ压缩技术的一种逻辑上的扩展,可用于多种协议以及PPP链路之外的其他链路。当头部压缩用于链路上时,可能不会像PPP的FCS计算那样强大。

   头部压缩的最新改进方案称为鲁棒性头部压缩。它进一步改进了IP头部压缩以涵盖更多的传输协议,并允许同时处理多种头部压缩方式。IP头部压缩可适用于不同类型的链路,包括PPP。

四十五、环回

   为了实现客户机使用Internet协议与同一计算机上的服务器通信,大多数实现支持一种工作在网络层的环回(或称“回送”)能力——通常使用一个虚拟的环回网络接口来实现。它就像一个真正的网络接口,实际上这是一个由操作系统提供的专用软件,可通过TCP/IP与同一主机的其他部分通信。以127开始的IPv4地址就是为这个目的而保留的127.0.0.1,IPv6为::1。其名称为localhost。发送环回接口的IP数据包不会出现在任何网络中。

四十六、MTU和路径MTU

  在很多链路层网络中,携带高层协议PDU的帧大小是有限制的。以太网有效载荷的字节数通常被限制为1500,PPP通常采用相同大小以保持与以太网兼容,链路层的这种特征被称为最大传输单元(MTU)。大多数的分组网络都有固定的上限。而大多数的流类型网络提供可设置的上限,它可被帧协议所使用。

  在同一网络中的两台主机之间通信时,本地链路的MTU在会话期间对数据包大小有直接影响。当两台主机之间跨越多个网络通信时,每条链路可能由不同大小的MTU。在包含所有链路的整个网络路径上,最小的MTU称为路径MTU。

  注:任何两台主机之间的路径不会永远不变,取决于当前使用的路径。如果网络中的路由器或链路故障,则MTU可能改变。且A到B的路径与B到A的路径可能不是同一条路径。路径MTU发现(PMTUD)用于确定某个时间的路径MTU,这在IPv6实现中是需要的。

四十七、隧道基础

   虚拟专用网络(VPN)提供两台计算机通过Internet或其他网络建立一条虚拟链路的服务。实现这类服务的最常用方法称为隧道。一般来说,隧道是在高层(或同等层分组中携带低层数据)。

  为某个协议层的分组或另一层的分组建立隧道有多种方法。用于建立隧道的3个常用协议包括:通用路由封装(GRE)、Microsoft专用的点对点隧道协议(PPTP)和第2层隧道协议(L2TP)。PPTP是个人用户的常用协议,即使不是一个IETF标准。L2TP本身不提供安全保障,常用于IP层安全(IPSec)。由于GRE和PPTP有密切关系,下图为GRE头部的原来标准和修订后的标准:

  从上图可以看出,基本GRE规范【RFC2784】是相当简单的,只提供了对其他分组的最简化的封装。第一个位字段(C)指出是否存在校验和。如果是,校验和字段中包含相同类型的校验和,它在很多Internet相关协议中可看到。如果校验和字段存在,保留1字段也存在,并被设置为0。【RFC2890】扩展了基本格式,包括可选的密钥和序列号字段,如果有这两个字段的话,图中的K、S位字段分别被设置为1。密钥字段在多个分组中被分配了一个同样的值,表示它们是属于同一流中的分组。如果分组顺序被打乱,可利用序列号字段对分组重新排序。

  GRE是PPTP的基础,并被PPTP使用,但这两个协议的目的不同。GRE隧道常用于网络基础设施内的流量传输(例如LSP之间或企业内部网与分支机构之间,虽然GRE隧道可与IPSec结合,但这个流量通常没必要加密)。PPTP常用于用户和ISP或企业内部网之间,并需要加密(例如MPPE)。PPTP本质上是GRE与PPP的结合,所以GRE可基于PPP提供虚拟的点到点链路。GRE使用IPv4或IPv6携带流量,因此更像是一种第三层隧道技术。PPTP常用于携带第2层帧(例如以太网),因此需要模拟一条直接的局域网(链路层)连接。例如它可用于对企业网络的远程访问。PPTP采用的是对标准的GRE头部的改进方案,如下图所示:

图中所示的于标准GRE头部有一些差异,包括额外的R、S和A位字段,以及标志字段和回溯字段。它们中的多数设置为0,并且没有使用。K、S和A位字段分别代表密钥、序列号和确认号字段是否存在。如果存在,序列号字段保存对方可看到的最大分组数。

四十八、单向链路

  在一个方向工作的链路称为单向链路(UDL),由于它们需要交换信息,上文提到的很多协议在这种情况下不能正常运行。为了解决这种问题提出了一种标准,可在辅助Internet接口上创建隧道,它可与UDL操作相结合。典型情况是由卫星提供下行流量(流向用户)而形成一条Internet连接,或者是调制解调器提供上行流量而形成一条拨号链路。这在卫星连接的洪湖主要是下载不是上传的情况下有用,且通常用于早期的卫星Internet连接。它使用GRE将链路层的上行流量封装在IP分组中。

   为了在接收方自动建立和维护隧道,【RFC3077】规定了一种动态隧道配置协议(DTCP)。DTCP涉及在下行链路中发送组播hello消息,所以任何有兴趣的接收方都可知道已有UDL及其MAC和IP地址。另外,hello消息标识网路中一个隧道端点的接口,它可通过用户端的辅助接口到达。在用户选择隧道端点之后DTCP在GRE隧道将同一MAC作为UDL封装返回流量。服务提供商接收由GRE封装的这些第2层帧(通常是以太网),将它们从隧道中提取并适当转发。因此,上游(提供商)UDL需要手工配置隧道,下游(用户)自动配置隧道。注意:这种UDL处理方法实际上是为上层协议不对称的“隐藏”链路。所以这条链路“两个”方向上的性能(延迟、带宽)可能非常不对称,并可能对高层协议产生不利影响。为协助自动配置或使用隧道,一种从IPv4向IPv6的过度方法称为6to4。在6to4中,IPv6分组在一个IPv4网络中通过隧道传输。

四十九、与链路层相关的攻击

   对TCP/IP以下的层进行攻击以影响TCP/IP网络运行一直是常见的做法,这是由于大部分链路层信息不被高层共享,而难以检测。

  在传统的有限以太网中,接口可被设置为混杂模式,这允许它接收目的地不是自己的流量。在早期的以太网中,当介质时名副其实的共享电缆时,该功能允许任何一台连接以太网电缆的计算机“嗅探”别人的帧并检查其内容。当时很多高层协议包含密码等敏感信息,仅通过查看一个分组并解码就能轻易获得密码。两个因素对这种方法的影响很大:交换机部署地也是其他站(或其他桥接的站),以及广播/组播流量。这种流量很少包含敏感信息,可在很大程度上阻止攻击。但在更高层使用加密更有效,这种情况下,嗅探分组难以获得多少好处,因为基本无法直接获取内容。

  另一种攻击的目标是交换机。交换机中有一个基本每个端口的站列表。如果这种表能被快速填充,交换机可能被迫放弃合法条目,从而导致中断对合法站的服务。一个相关但可能更严重的攻击是使用STP,这种情况下,一个站可伪装成一个到根网桥拥有低成本路径的站,从而吸引流量直接导向它。

   随着WiFi网络的使用,有线以太网中存在的一些窃听和伪装问题变得更严重,这是由于任何站都可进入监控模式并嗅探分组。一些早期攻击涉及扫描中的简单漫游,寻找提供Internet连接的接入点。虽然很多接入点使用加密来限制授权用户的访问。通过观察站注册以及冒充合法注册用户来“劫持”连接,捕获门户系统已被破坏。

   一种更先进的WiFi攻击涉及对加密保护的攻击,尤其是很多早期接入点使用的WEP加密,针对WEP的攻击有显著的破坏性,它促使IEEE修订了自己的标准。新的WPA2(和WPA)加密体系明显更强,因此不再推荐使用WEP。

  如果攻击者可访问两个端点之间的信道,它可采用很多方式来攻击PPP链路。对于很简单的认证机制(例如PAP),嗅探可用于捕获密码,以便后续的非法访问。通过PPP链路上的更高层流量,可导致系统的不可用。

  从攻击的角度看,隧道经常是目标,有时也是攻击攻击。作为目标,隧道穿过一个网络,它是被截获和分析的目标。隧道端点配置被攻破,可能打开一个未授权的隧道端点。到这点上,隧道变为工具而不是目标,有些协议(例如L2TP)提供一种与协议无关的简便方法。以在链路层访问私有的内部网络。在一种GRE相关的攻击中,例如将流量简单地插入一个非加密隧道,它到达隧道端点并被注入“私有”网络,虽然它本来只应被送往端点本地。

本文标签: 第三章 概要 详解 卷一 链路层