数据链路层
文章目录
1. 数据链路层概述
在研究数据链路层时,我们可忽略网络体系中的其他层只关注与数据链路层本身。
链路
链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
数据链路
数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
帧
帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU
2. 数据链路层的三个问题
封装成帧和透明传输
封装成帧
所谓分装成帧,就是给网络层交付下来的分组添加一个1首部和尾部,这样就构成了一个帧。
帧的首部和尾部中包含有一些重要的控制信息。例如,帧首部中往往包含帧开始符、帧的源地址和目的地址,而帧尾部中往往包含帧校验序列和帧结束符。接收方的数据链路层在收到物理层交付上来的比特流后,根据帧首部中的帧开始符和帧尾部中的帧结束符,从收到的比特流中识别出帧的开始和结束,也就是进行帧定界。
各种数据链路层协议都对帧首部和尾部的格式有明确的定义。为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU),例如以太网的MTU为1500个字节。
透明传输
如果在帧的数据载荷部分恰好也出现了帧定界符(帧开始符或帧结束符),就会造成接收方数据链路层出现帧定界的错误。如果这个问题,则数据链路层就会对上层交付的协议数据单元(PDU)的内容有所限制,即PDU中不能包含帧定界符。显然,这样的数据链路层没有什么应用价值。如果能够采取措施,使得数据链路层对上层交付的PDU的内容没有任何限制,就好像数据链路层不存在一样,就称其为透明传输。
实现透明传输的方法一般有两种:
1)字节填充
当使用面向字节的物理链路时,使用字节填充的方法实现透明传输。
发送方的数据链路层在数据载荷中出现帧定界符的前面,插入一个转义字符“ESC”(其十六进制编码是1B)。如果转义字符自身也出现在数据载荷中,则在转义字符的前面也插入一个转义字符。
接收方的数据链路层在把数据载荷向上交付网络层之前,删除先前发送方数据链路层插入的转义字符
2)比特填充
当使用面向比特的物理链路时,使用比特填充的方法实现透明传输。
假设某数据链路层协议采用8个比特构成的特定位串01111110作为帧定界符。发送方的数据链路层扫描数据载荷,只要出现5个连续的比特1,就在其后填入一个比特0。经过这种比特0填充后的数据载荷,就可以确保其不会包含帧定界符。接收方的数据链路层在把数据载荷向上交付网络层之前,对数据载荷进行扫描,每当发现5个连续的比特1时,就把其后的一个比特0删除,这样就可以还原出原始的数据载荷。
字符填充法和比特填充法只是实现透明传输的一般原理性方法。各种数据链路层协议都有其实现透明传输的具体方法,其中有的是基于字符填充法或比特填充法的,而有的并未采用这两种方法。
以太网的数据链路层协议没有采用字符填充法或比特填充法来实现透明传输。这是因为在以太网帧的首部和尾部中,并没有包含帧定界符,因此并不存在透明传输的问题。然而没有帧定界符的情况下,接收方的数据链路层又是如何从物理层交付的比特流中提取出一个个以太网帧的呢?
实际上,以太网的数据链路层封装好以太网帧后,将其交付给物理层。物理层还会在以太网帧前添加8字节的前导码。前导码中的前7个字节为前同步码,作用是使接收方的时钟同步,之后的1字节为帧开始符,表明其后面紧跟着的就是以太网帧。另外,以太网还规定了帧间间隔时间为96比特的发送时间(对于带宽为10Mb/s的传统以太网,96比特的发送时间为9.6μs)。因此,以太网帧并不需要帧结束符。
差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错)。
在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate,BER)。
提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零。
使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
奇偶校验
奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。
偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。
在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码。
在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,无法检测出误码(漏检)。
循环冗余校验
数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Rdundancy Check,CRC)检错技术。
循环冗余校验CRC的基本思想:
- 收发双方约定好一个生成多项式G(X)。
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送
数据的后面一起传输。 - 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。
可靠检测
使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否
产生了误码(比特差错)。
数据链路层向其上层提供的服务类型:
不可靠传输服务: 仅仅丢弃有误码的帧,其他什么也不做;
可靠传输服务 : 通过某种机制实现发送方发送什么,接收方最终就能收到什么。
一般情况下,有线链路的误码率比较低。为了减小开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向其上层提供可靠传输服务。
误码(比特差错)只是传输差错中的一种。从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序和分组重复。分组丢失、分组失序和分组重复一般不会出现在数据链路层,而是在其上层出现。因此,可靠传输服务并不局限于数据链路层,其上各层均可选择实现可靠传输服务。
停止-等待协议
所谓停止-等待。就是指发送方发送完一个数据分组后必须停下来,等待接收对方发来的曲儿或否认分组。
数据链路层接收方收到发送方的数据分组后,通过差错检测技术可检测出数据分组是否存在误码。
如果没有误码,就接受该数据分组,并给发送方发送ACK分组。发送方收到ACK分组后就可以发送下一个数据分组。
如果存在误码,就丢弃该数据分组,并给发送方发送NAK分组,发送方收到NAK分组后就会重传之前出现误码的这个数据分组。
超时重传:
有了确认、否认和重传机制的停止一等待协议,似乎已经可以实现可靠传输了。然而,如果出现数据分组、确认分组或否认分组丢失的情况,仅有确认、否认和重传机制的停止等待协议就无法实现可靠传输。
如果发送方发送的数据分组在传输过程中丢失了。接收方不可能收到该数据分组,因此也就不会给发送方发送确认分组或否认分组。发送方将永久等待接收方的确认分组或否认分组。为了解决该问题,发送方可在
每发送完一个数据分组时就启动一个超时计时器(Timeout Timer)。若到了超时计时器所设置的超时重传时间(Retransmission Time-Out,RTO),但发送方仍未收到接收方的确认分组或否认分组,就重传之前已发送过的这个数据分组,这称为超时重传。
超时重传时间(RTO)应当仔细选择:
若RTO太短,则会造成正常情况下确认分组还未到达发送方时,发送方就出现了不必要的超时重传。
若RTO太长,则发送方会白白等待过长的时间,降低信道利用率。
一般可将RTO设置为略大于收发双方的平均往返时间RTT。
确认分组
有了确认、否认、重传和超时重传机制的停止一等待协议仍然不能完全实现可靠传输。当确认分组丢失时,发送方会产生超时重传。接收方会收到两个相同的数据分组。如果接收方不能识别出所接收的数据分组与前一次接收的数据分组是重复的,则会导致分组重复这种传输差错。为了解决该问题,发送方必须给每个数据分组带上不同的序号,每发送一个新的数据分组就把它的序号加1。接收方连续收到序号相同的数据分组时,就可识别出分组重复这种传输差错。这时接收方应当丢弃重复的数据分组,并且还必须向发送方再发送一个确认分组。
- 停止一等待协议的编号系统所使用的比特数量为1,可用序号有0和1这两个。
- 可以不对确认分组编序号。
- 发送方发送完一个数据分组后,必须暂时保留已发送的数据分组的副本,以便在超时重传时使用,只有在收到相应的确认分组后才能从缓存中删除该数据分组。
使用上述具有确认、否认、重传、超时重传和分组编号机制的停止-等待协议,就可以在不可靠的信道上实现可靠传输。停止一等待协议属于自动请求重传(Automatic Repeat reQuest,ARQ)协议。所谓“自动请求重传”,就是指重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。
停止-等待协议的信道利用率
信道利用率:
当往返时间RTT远大于数据分组的发送时延T,时,信道利用率U会非常低。另外,如果出现超时重传,则信道利用率还要降低。因此,停止-等待协议的适用情况如下:
- 对于数据分组发送时延T,较小、但往返时间RTT很大(例如卫星链路)的应用,就不适于使用停止一等待协议来实现可靠传输。
- 对于往返时间RTT远小于数据分组发送时延T,的应用(例如无线局域网),使用停止-等待协议的信道利用率还是比较高的。
回退N帧协议
发送窗口与接收窗口
- 发送方需要维护一个发送窗口,在未收到接收方确认分组的情况下,发送方可将序号落入发送窗口内的所有数据分组连续发送出去。
- 接收方需要维护一个接收窗口,只有正确到达接收方且序号落入接收窗口内的数据分组才被接收方接收。
发送窗口和接收窗口的滑动情况如下:
- 接收方每正确收到一个序号落入接收窗口的数据分组,就将接收窗口向前滑动一个位置,这样就有一个新的序号落入接收窗口。与此同时,接收方还要给发送方发送针对该数据分组的确认分组。
- 发送方每收到一个按序确认的确认分组,就将发送窗口向前滑动一个位置,这样就有一个新的序号落入发送窗口,序号落入发送窗口内的数据分组可继续被发送。
- 在回退N帧协议的工作过程中,发送方的发送窗口和接收方的接收窗口按上述规则不断向前滑动。因此,这类协议又称为滑动窗口协议。
存在的问题:
一个数据分组的差错就可能引起大量数据分组的重传。在信道质量较差(容易出现误码)的情况下,回退N帧协议的信道利用率并不比停止-等待协议的信道利用率高。
选择重传协议
为了进一步提高信道利用率,可以设法只重传出现差错的数据分组,这就需要接收窗口的尺寸大于1,以便先收下失序但正确到达接收方且序号落入接收窗口内的数据分组,等到所缺数据分组收齐后再一并送交上层,这就是选择重传(Selective Repeat,SR)协议。
为了使发送方仅重传出现差错的数据分组,接收方不能再采用累积确认,而需要对每一个正确接收的数据分组进行逐一确认。显然,选择重传协议比回退N帧协议复杂,并且接收方需要有足够的缓存空间,来暂存失序但正确到达接收方且序号落入接收窗口内的数据分组。
3. 点对点协议
点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。
点对点协议PPP是因特网工程任务组(Internet Engineering Task Force,IETF)于1992年制定的。经过多次修订,目前PPP已成为因特网的正式标准[RFC1661,RFC1662]
PPP协议主要有两种应用:
- 因特网用户的计算机通过点对点链路连接到某个ISP进而接入因特网,用户计算机与ISP通信时所采用的数据链路层协议一般就是PPP协议。
- 广泛应用于广域网路由器之间的专用线路。
PPP协议的组成
PP协议由3部分组成:一个链路控制协议LCP,一个网络层PDU封装到串行链路的方法,一套网络控制协议NCP:
1)链路控制协议(Link Control Protocol,LCP):用来建立、配置、测试数据链路的连接以及协商一些选项。
2)网络层PDU封装到串行链路的方法:网络层PDU作为PPP帧的数据载荷被封装在PPP帧中传输。网络层PDU的长度受PPP协议的最大传送单元MTU的限制。PPP协议既支持面向字节的异步链路,也支持面向比特的同步链路。
3)网络控制协议(Network Control Protocol,NCP):包含多个协议,其中的每一个协议分别用来支持不同的网络层协议。例如,TCP/IP中的IP、Novell NetWare网络操作系统中的IPX以及Apple公司的AppleTalk等。
PPP协议的帧格式
各字段的含义
- 标志(Flag)字段:PPP帧的定界符,取值为0x7E。
- 地址(Address)字段:取值为0xFF,预留(目前没有什么作用)。
- 控制(Control)字段:取值为0x03,预留(目前没有什么作用)。
- 协议(Protocol)字段:其值用来指明帧的数据载荷应向上交付给哪个协议处理。
- 帧检验序列(Frame Check Sequence,FCS)字段:其值是使用循环冗余校验CRC计算出的检错码。
透明传输
当数据载荷中出现了与标志字段相同的内容就要采用相应措施来实现透明传输
字节填充
面向字节的异步链路使用字节填充来实现透明传输[RFC1662]
发送方的处理:
1)将数据载荷中出现的每一个0x7E减去0x20(相当于异或0x20),然后在其前面插入转义字符0x7D。
2)若数据载荷中原来就含有0x7D,则把每一个0x7D减去0x20,然后在其前面插入转义字符0x7D。
3)将数据载荷中出现的每一个ASCII码控制字符(即数值小于0x20的字符),加上0x20(相当于异或0x20, 将其转换成非控制字符),然后在其前面插入转义字符0x7D。
接收方的处理:
进行与发送方相反的变换,就可以正确地恢复出未经过字节填充的原始数据载荷。
零比特填
面向比特的同步链路使用零比特填充来实现透明传输
发送方的处理:
对帧的数据载荷进行扫描(一般由硬件完成),每出现5个连续的比特1,则在其后填充一个比特0。
接收方的处理:
对帧的数据载荷进行扫描,每出现5个连续的比特1时,就把其后的一个比特0删除。
PPP协议的工作状态
下面以用户PC拨号接入ISP的拨号服务器过程为例,简要介绍PPP协议的工作状态:
1)PPP链路的开始和结束状态都是“静止”状态,这时用户PC与ISP的拨号服务器之间并不存在物理层的连接。
2)当检测到调制解调器的载波信号并建立物理层连接后,PPP就进入链路的“建立”状态。
3)在“建立”状态下,链路控制协议LCP开始协商一些配置选项。若协商成功,则进入“鉴别”状态;若协商失败,则退回到“静止”状态。所协商的配置选项包括最大帧长、鉴别协议等。可以不使用鉴别,也可以使用口令鉴别协议(Password Authentication Protocol,PAP)或挑战握手鉴别协议(Challenge-Handshake Authentication Protocol,CHAP)。
4)若通信双方无须鉴别或鉴别身份成功,则进入“网络”状态。若鉴别失败,则进入“终止”状态。
5)进入“网络”状态后,PPP链路的两端通过互相交换网络层特定的NCP分组来进行NCP配置。如果PPP链路的上层使用的是IP协议,则使用IP控制协议(IP Control Protocol,IPCP)来对PPP链路的每一端配置IP模块,例如分配IP地址。NCP配置完成后,就进入“打开”状态。
6)只要链路处于“打开”状态,双方就可以进行数据通信。
7)当出现故障或链路的一端发出终止请求时,就进入“终止”状态。当载波停止后就回到“静止”状态。
4. 共享式以太网
以太网是以曾经被假想的电磁波传播介质——以太(Ether)来命名的,它是一种用无源电缆作为总线来传输帧的基带总线局域网,传输速率为2.94Mb/s。
以太网目前已经从传统的共享式以太网发展到交换式以太网,传输速率已经从10Mb/s提高到100Mb/s、1Gb/s甚至10Gb/s。
网络适配器和MAC地址
网络适配器
要将计算机连接到以太网,需要使用相应的网络适配器(Adapter),网络适配器一般简称为“网卡”。
- 在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I/O总线以并行传输方式进行。
- 网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以串行方式进行的。
- 网卡除要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。
- 由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。
- 在确保网卡硬件正确的情况下,为了使网卡正常工作,还必须要在计算机的操作系统中为网卡安装相应的设备驱动程序。驱动程序负责驱动网卡发送和接收帧。
MAC地址
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。
在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。由于这类地址是用于媒体接入控制(Medium Access Control,MAC)的,因此被称为MAC地址。
-
一般情况下,普通用户计算机中往往会包含两块网卡,一块是用于接入有线局域网的以太网卡,另一块是用于接入无线局域网的Wi-Fi网卡。
-
每块网卡都有一个全球唯一的MAC地址。
-
交换机和路由器往往具有更多的网络接口,所以会拥有更多的MAC地址。
综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IEEE 802局域网的MAC地址格式
IEEE802标准为局域网规定了一种由48比特构成的MAC地址,由IEEE的注册管理机构(RegistrationAuthority,RA)负责管理。
一个MAC地址由六个字节组成。前三个字节是组织唯一标识符(Organizationally Unique Identifier,OUI),生产网络设备的厂商需要向IEEE的注册管理机构申请一个或多个OUI。后三个字节是获得OUI的厂商可自行随意分配的网络接口标识符,只要保证生产出的网络设备没有重复地址即可。
-
标准表示方法为将每4个比特写成1个十六进制的字符(共12个字符),将每两个字符分为一组(共6组),各组之间用短线连接。
-
除标准表示方法外,还可将短线改为冒号,或将每四个字符分为一组(共3组)且各组之间用点连接。
-
例如,某个MAC地址在Windows系统中表示为00-0C-CF-93-8C-92;在Linux系统、苹果系统和安卓系统中表示为00:0C:CF:93:8C:92;在Packet Tracer仿真软件中表示为000C.CF93.8C92。
IEEE规定MAC地址的第一字节的b0,位为I/G(Individual/Group)位。
- 当I/G位为0时,表示MAC地址是单播地址。
- 当I/G位为1时,表示MAC地址是组播地址,现在称为多播地址。
MIEEE还考虑到不愿向IEEE的注册管理机构RA购买OUI的情况。为此,IEEE规定MAC地址的第一字节的b1,位为G/L(Global/Local)位。
- 当G/L位为0时,MAC地址是全球管理(可确保在全球没有相同的MAC地址),
网络设备厂商向IEEE购买的OUI都属于全球管理。 - 当G/L位为1时,MAC地址是本地管理,用户可任意分配MAC地址。
由于I/G位和G/L位的取值共有四种组合,因此可将48比特的MAC地址划分为全球单播、全球多播、本地单播以及本地多播四个类型。
- 全球单播地址是由厂商生产网络设备时固化在设备中的。
- 全球多播地址是交换机和路由器等标准网络设备所支持的多播地址,用于特定
功能。 - 本地单播地址由网络管理员分配,可以覆盖网络接口的全球单播地址。
- 本地多播地址可由用户对网卡编程实现,以表明其属于哪些多播组。
- 48比特为“全1”的MAC地址是本地多播地址的一个特例,即广播地址FF-FF-FF-FF-FF-FF。
网卡从网络上每收到一个帧,就检查帧首部中的目的MAC地址,按以下情况处理:
1)如果目的MAC地址是广播地址,则接受该帧。
2)如果目的MAC地址与网卡上固化的全球单播地址相同,则接受该帧。
3)如果目的MAC地址是网卡支持的多播地址,则接受该帧。
4)除上述(1)、(2)和(3)的情况外,丢弃该帧。这样就不会浪费主机的CPU
网卡还可被设置为一种特殊的工作方式:混杂方式(Promiscuous Mode)。工作在混杂方式的网卡只要收到共享媒体上传来的帧就会收下,而不管帧的目的MAC地址是什么。
- 对于网络维护和管理人员,这种方式可以监视和分析局域网上的流量,以便找出提高网络性能的具体措施。
- 嗅探器(Sniffer)就是一种工作在混杂方式的网卡,再配合相应的工具软件(WireShark),就可以作为一种非常有用的网络工具来学习和分析网络。
- 混杂方式就像一把“双刃剑”,黑客常利用这种方式非法获取网络用户的口令。
- 全球单播MAC地址就如同身份证上的身份证号码,具有唯一性,它往往与用户个人信息绑定在一起。因此,用户应尽量确保自己拥有的全球单播MAC地址不被泄露。
- 为了避免用户设备连接Wi-Fi热点时MAC地址泄露的安全问题,目前大多数移动设备都已经采用了随机MAC地址技术。
CSMA/CD协议
在以太网的发展初期,人们普遍认为“无源的电缆线比有源器件可靠”,因此将多个站点连接在一条总线上来构建共享总线以太网。
共享总线以太网具有天然的广播特性,即使总线上某个站点给另一个站点发送单播帧,表示帧的信号也会沿着总线传播到总线上的其他各站点。
当某个站点在总线上发送帧时,总线资源会被该站点独占。此时,如果总线上的其他站点也要在总线上发送帧,就会产生信号碰撞。当两个或多个站点同时使用总线发送帧时,就会产生信号碰撞。
为了解决各站点争用总线的问题,共享总线以太网使用了一种专用协议CSMA/CD,它是载波监听多址接入/碰撞检测(Carrier Sense Multiple Access Collision Detection)的英文缩写词。
基本原理
CSMA/CD协议的要点如下:
1)多址接入:多个站点连接在一条总线上,它们竞争使用总线。
2)载波监听:每一个站点在发送帧之前,先要检测一下总线上是否有其他站点在发送帧。若检测到总线空闲96比特时间(即发送96比特所耗费的时间),则发送帧;若检测到总线“忙”,则继续检测并等待总线转为空闲96比特时间后发送帧。因此,可将载波监听比喻为“先听后说”。
3)碰撞检测:每一个正在发送帧的站点必须“边发送帧边检测碰撞”。一旦发现总线上出现碰撞,就立即停止发送,退避一段随机时间后再次从载波监听开始进行发送。因此,可将碰撞检测比喻为“边说边听,一旦冲突,立即停说,等待时机,重新再说”。
综上所述,使用CSMA/CD协议的共享总线以太网上的各站点,只是尽量避免碰撞并在出现碰撞时做出退避后重发的处理,但不能完全避免碰撞。
在使用CSMA/CD协议时,由于正在发送帧的站点必须“边发送帧边检测碰撞”,因此站点不可能同时进行发送和接收,也就是不可能进行全双工通信,而只能进行半双工通信(双向交替通信)。
争用期
共享总线以太网的端到端往返时间2t被称为争用期(Contention Period)或碰撞窗口(Collision Window)。共享总线以太网上的某个站点在开始发送帧后经过争用期2t这段时间还没有检测到碰撞,就可以肯定这次发送不会产生碰撞。
- 从争用期的概念可以看出,共享总线以太网上的每一个站点从开始发送帧算起到之后的一小段时间内,都有可能遭遇碰撞。而这一小段时间的长短是不确定的,它取决于另一个发送帧的站点与本站点的距离。
- 显然,总线的长度越长(单程端到端传播时延越大),网络中站点数量越多,发生碰撞的概率就越大。因此,共享总线以太网的总线长度不能太长,接入的站点数量也不能太多。
- 10Mb/s共享总线以太网规定争用期2t的值为512比特发送时间,即51.2μs。这不仅考虑了共享总线以太网端到端时延,还考虑到了其他一些因素,如网络中可能存在的转发器所带来的时延,以及发送帧的站点一旦检测到产生了碰撞时,除了立即停止发送帧,还要再继续发送32比特或48比特人为干扰信号(Jamming Signal)所持续的时间等。
- 发送人为干扰信号是一种强化碰撞的措施,目的在于有足够多的碰撞信号使总线上所有站点都能检测出碰撞。因此,共享总线以太网的端到端时延实际上是小于其争用期51.2μs的一半,即小于25.6μs。假设信号的传播速率为2×10sm/s,在不考虑其他因素的情况下,总线长度为5120m(2×10°m/s×25.6μs)。但在实际应用中,需要考虑到转发器带来的时延、人为干扰信号的持续时间等因素,所以共享总线以太网规定总线长度不能超过2500m。
最小帧与最大帧
最小帧
为了确保共享总线以太网上的每一个站点在发送完一个完整的帧之前,能够检测出是否产生了碰撞,帧的发送时延就不能少于共享总线以太网端到端的往返时间,即一个争用期2t。对于10Mb/s的共享总线以太网,其争用期2t的值规定为51.2μs,因此其最小帧长为512b(10Mb/s×51.2μs),即64字节。
当某个站点在发送帧时,如果帧的前64个字节没有遭遇碰撞,那么帧的后续部分也就不会遭遇碰撞。
也就是说,如果遭遇碰撞,就一定是在帧的前64字节之内。由于发送站点一旦检测到碰撞就立即中止帧的发送,此时已发送的数据量一定小于64字节。
因此,接收站点收到长度小于64字节的帧,就可判定这是一个遭遇了碰撞而异常中止的无效帧,将其丢弃即可。
最大帧
一般来说,帧的数据载荷的长度应远大于帧首部和尾部的总长度,这样可以提高帧的传输效率。然而,如果不限制数据载荷的长度上限,就可能使得帧的长度太长,这会带来一些问题。
例如过长的帧在传输过程中会长时间占用总线,使得其他主机拿不到“使用权”,并且可能导致接收主机缓冲区无法装下该帧而导致溢出。
因此,以太网的帧长应该有其上限。以太网V2的MAC帧最大长度规定为1518字节,其中数据载荷的最大长度为1500字节,首部和尾部共18字节。
退避算法
共享总线以太网中的各站点采用截断二进制指数退避(Truncated BinaryExponential Backoff)算法来选择退避的随机时间,具体如下:
1)基本退避时间:将争用期2t作为基本退避时间,即512比特时间。对于10Mb/s共享总线以太网就是51.2μs。
2)随机数r的选择:随机数r是从离散的整数集合{0,1,…,(2^-1)}中随机取出的一个数。其中,k从重传数 和10中取小者,即k=Min(重传次数,10),这也是该算法名称中“截断”二字的含义。
3)得到退避时间:将基本退避时间2t乘以随机数r就可得到退避时间。
- 如果连续多次产生碰撞,就表明可能有较多的站点参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数增多而增大(即动态退避),因而减小产生碰撞的概率。
- 当重传达16次仍不能成功时,就表明同时打算发送帧的站点太多,以至于连续产生碰撞,此时应放弃重传并向高层报告。
信道利用率
发送一帧所需的平均时间由多个争用期、帧的发送时延以及单程端到端的传播时延这三部分构成。
考虑以下这种理想情况:
- 总线一旦空闲就有某个站点立即发送帧。
- 各站点发送帧都不会产生碰撞。
因此以上图中多个争用期就不存在了。发送一帧所占用总线的时间为T0+t,而帧本身的发送时间为T0,这样就可以得到极限信道利用率S的表达式:
- 为了提高信道利用率,参数a的值应尽量小。
- 要使参数a的值尽量小,则t的值应当尽量小,这意味着共享总线以太网端到端的距离不应太长,而T的值应当尽量大,这意味着帧的长度应尽量大。
通过对共享总线以太网信道利用率的分析可知,总线长度越长(端到端时延越大),信道极限利用率越低,网络性能就越差。再考虑到可能产生碰撞这个因素,总线长度越长或连接的站点越多,产生碰撞的概率就越大,网络性能还会进一步降低。因此,共享总线以太网只能作为一种局域网技术而非广域网技术。
使用集线器的共享式以太网
早期的传统以太网是使用粗同轴电缆的共享总线以太网,后来发展到使用价格相对便宜的细同轴电缆。当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可靠,而无源的电缆线才是最可靠的。然而,实践证明这种使用无源电缆线和大量机械接口的总线型以太网并不像人们想象的那么可靠。
上图所示的是使用细同轴电缆的共享总线以太网。每一台要接入到总线的主机,都必须要配套使用一块带有BNC接口的网卡和一个BNCT型接口。为了避免信号的反射,在总线的两端还需要各连接一个终端匹配电阻。因此,这样的网络中就会有大量的机械连接点。若总线上的某个机械连接点接触不良或断开,则整个网络通信就不稳定或彻底断网。
后来,以太网发展出来了一种使用大规模集成电路来替代总线、并且可靠性非常高的设备,叫作集线器(HIub)。主机连接到集线器的传输媒体也转而使用更便宜、更灵活的双绞线电缆。每台主机需要使用两对无屏蔽双绞线(封装在一根电缆内),分别用于发送和接收。
实践证明,使用集线器和双绞线比使用具有大量机械接头的无源电缆线要可靠得多,并且价格便宜、使用方便。因此,使用粗同轴电缆和细同轴电缆的共享总线以太网早已成为了历史,从市场上消失了。
- IEEE于1990年制定了10BASE-T星型以太网的标准802.3i,这种以太网是局域网发展史上的一座非常重要的里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。
- 10BASE-T传输速率为10Mb/s采用基带信号进行传输采用双绞线作为传输媒体10BASE-T以太网的通信距离较短,每个站点到集线器的距离不能超过100m。
- IEEE 802.3以太网还可使用光纤作为传输媒体,相应的标准为10BASE-F,“F”表示光纤。光纤主要用作集线器之间的远程连接。
集线器的一些主要特点如下:
- 使用集线器的以太网虽然物理拓扑是星型的,但在 逻辑上仍然是一个总线网。总线上的各站点共享总线资源,使用的还是CSMA/CD协议。
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,并不进行碰撞检测。碰撞检测的任务由各站点中的网卡负责。
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个站点的网卡出现了故障而不停地发送帧,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网能正常工作。
在物理层扩展以太网
扩展站点与集线器之间的距离
共享总线以太网中两站点之间的距离不能太远,否则它们之间所传输的信号就会衰减到使CSMA/CD协议 无法正常工作。
在早期广泛使用粗同轴电缆或细同轴电缆共享总线以太网时,为了提高网络的地理覆盖范围,常用的是工作在物理层的转发器。IEEE 802.3标准规定,两个网段可用一个转发器连接起来,任意两个站点之间最多可以经过三个网段。
随着使用双绞线和集线器的10BASE-T星型以太网成为以太网的主流类型,扩展网络覆盖范围就很少使用转发器了。10BASE-T星型以太网中每个站点到集线器的距离不能超过100m,因此两站点间的通信距离最大不能超过
200m。
在10BASE-T星型以太网中,可使用光纤和一对光纤调制解调器来扩展站点与集线器之间的距离。集线器Hub信号在光纤中的衰减和失真很小,因此使用这种方法可以很简单地将站点与集线器之间的距离扩展到1000以上。
扩展共享式以太网的覆盖范围和站点数量
以太网集线器一般具有8~32个接口,如果要连接的站点数量超过了单个集线器能够提供的接口数量,就需要使用多个集线器,这样就可以连接成覆盖更大范围、连接更多站点的多级星型以太网。
采用多个集线器连接而成的多级星型以太网,在扩展了网络覆盖范围和站点数量的同时,也带来了一些负面因素。
在上图所示的例子中,在部门A和B各自的10BASE-T以太网互连起来之前,每个部门的10BASE-T以太网是一个独立的碰撞域(Collision Domain)。在任何时刻,每个碰撞域中只能有一个站点发送帧。每个部门的10BASE-T以太网的最大吞吐量为10Mb/s,因此两个部门总的最大吞吐量共有20Mb/s。
当把两个部门各自的10BASE-T以太网通过一台主干集线器互连起来后,就把原来两个独立的碰撞域合并成了一个更大的碰撞域,即形成了一个覆盖范围更大、站点数量更多的共享式以太网。这个更大碰撞域的最大吞吐量仍然是10Mb/s,其中的每个站点相较于它们原先所在的独立碰撞域所遭遇碰撞的可能性会明显增加。
综上所述,在物理层扩展的共享式以太网仍然是一个碰撞域,不能连接太多的站点,否则可能会出现大量的碰撞,导致平均吞吐量太低。
不管是采用转发器、光纤还是集线器在物理层扩展以太网,都仅仅相当于扩展了共享传输媒体的长度。由于共享式以太网有争用期对端到端时延的限制,因此不能无限扩大网络的覆盖范围。
在数据链路层扩展以太网
使用网桥在数据链路层扩展以太网
使用集线器在物理层扩展共享式以太网会形成更大的碰撞域。在扩展共享式以太网时,为了避免形成更大的碰撞域,可以使用网桥(Bridge)在数据链路层扩展共享式以太网。
- 网桥(bridge)工作在数据链路层(包含其下的物理层),因此网桥具备属于数据链路层范畴的相关能力。
- 网桥可以识别帧的结构。
- 网桥可以根据帧首部中的目的MAC地址和网桥自身的帧转发表来转发或丢弃所收到的帧
网桥的主要结构和基本工作原理
网桥一般具有两个接口,用于连接两个不同的以太网,这样就可形成一个覆盖范围更大、站点数量更多的以太网,而原来的每个以太网就称为网段(Segment)。下图所示的网桥的接口1和接口2分别连接了一个网段。
网桥收到帧后,会在自身的转发表中查找帧的目的MAC地址,根据查找结果来转发或丢弃帧。网桥转发或丢弃帧的情况:
1)若网桥从接口1收到主机B给主机D发送的帧,则在转发表中查找主机D的目的MAC地址D,根据查找结果可知,应从接口2转发该帧,于是就把该帧从接口2转发给另一个网段,使主机D能够收到该帧。
2)若网桥从接口1收到主机C发给主机A的帧,根据查表结果可知,应从接口1转发该帧给主机A,然而网桥正是从接口1收到该帧的,这表明主机C和主机A在同一网段中,主机A能够直接收到这个帧而不需要依靠网桥的转发,因此网桥会丢弃该帧。
3)当网桥收到一个广播帧时(目的MAC地址为FF-FF-FF-FF-FF-FF),不用查找转发表,而是会通过除接收该帧的接口的其他接口转发该广播帧。
透明网桥的自学习和转发帧的流程
网桥中的转发表对于帧的转发起着决定性的作用。那么,转发表又是如何建立的呢?实际上,透明网桥通过自学习算法建立转发表。
透明网桥(Transparent Bridge)中的“透明”,是指以太网中的各站点并不知道自己所发送的帧将会经过哪些网桥的转发,最终到达目的站点。也就是说,以太网中的各网桥对于各站点而言是看不见的。使用透明网桥将原本独立的各以太网连接起来,即可形成覆盖范围更大、站点数量更多的以太网,而并不需要给各透明网桥配置转发表。
显然,透明网桥是一种即插即用设备。透明网桥的标准是IEEE 802.1D,它通过一种自学习算法基于以太网中各站点间的相互通信逐步建立起自己的转发表。
在上图中,使用网桥将原本独立的两个使用集线器的共享式以太网连接起来,就可形成一个覆盖范围更大、站点数量更多的以太网。网桥上电启动后,其转发表是空的。假设网络中依次进行了以下各主机间的通信:A→B、D→A、C→A,并且帧在传输过程中没有误码。
- 主机A给主机B发送帧:
(1) 与主机A处于同一网段中的主机B、主机C以及网桥的接口1都会收到该单播帧。
(2)主机B中的网卡根据该单播帧的目的MAC地址B可知,这是发送给自己的帧而接受该帧。
(3)主机C中的网卡根据该单播帧的目的MAC地址B可知,这不是发送给自己的帧而将其丢弃。
(4)网桥首先将该帧的源MAC地址A与进入网桥的接口号1作为一条记录登记到自己的转发表中,也就是网桥自 学习到了自己的接口1与主机A的MAC地址A的对应关系。之后,网桥在自己的转发表中查找该单播帧的目的 MAC地址B,但没有找到,网桥只能通过除接收该帧的接口1以外的其他接口转发该单播帧(对于本例,其他 接口只有接口2),因此该单播帧会从网桥的接口2转发到另一个网段,可比喻为**“盲目地转发”**。
(5)另一个网段中的主机D、E和F收到该单播帧后将其丢弃。
-
主机D给主机A发送帧:
(1)与主机D处于同一网段中的主机E、主机F以及网桥的接口2都会收到该单播帧。(2)主机E和F中的网卡根据该单播帧的目的MAC地址A可知,这不是发送给自己的帧而将其丢弃。
(3)网桥首先将该帧的源MAC地址D与进入网桥的接口号2作为一条记录登记到自己的转发表中,也就是网桥 自学习到了自己的接口2与主机D的MAC地址D的对应关系。之后,网桥在自己的转发表中查找该单播帧 的目的MAC地址A,可以找到相应的记录,从记录的接口号部分可知,应从接口1转发该帧,因此该单播 帧会从网桥的接口1转发到另一个网段,可比喻为**“明确地转发”**。
(4)另一个网段中的主机A收到并接受该单播帧,而主机B和C收到该单播帧后将其丢弃。
注意:
- 如果网桥收到有误码的帧则直接丢弃。
- 如果网桥收到一个无误码的广播帧,则不用进行查表,而是直接从除接收该广播帧的接口的其他接
口转发该广播帧。 - 转发表中的每条记录都有其有效时间,到期自动删除!这是因为各站点的MAC地址与网桥接口的对
应关系并不是永久性的,例如某个站点更换了网卡,其MAC地址就会改变
透明网桥的生成树协议STP
为了提高以太网的可靠性,有时需要在两个以太网之间使用多个透明网桥来提供冗系链路。
例如在下图中,使用透明网桥B1将共享总线型以太网E1和E2连接形成了一个更水的以太网。
为了提高该以太网的可靠性,还使用了一个冗余的透明网桥B2将E1和E2进行了连接。显然,添加了冗余的透明网桥B2后,以太网中将出现环路。
如果以太网E1或E2中的某个主机发送了一个广播帧,则该广播帧就会在网桥B1和B2构成的环路中按顺时针和逆时针两个方向永久兜圈。
另外,如果以太网E1或E2中的某个主机发送了一个单播帧,而网桥B1和B2的转发表中都没有该单播帧目的MAC地址的相关记录,则该单播帧也会在网桥B1和B2构成的环路中按顺时针和逆时针两个方向永久兜圈。
上述两种情况会造成广播帧或单播帧充斥整个网络,网络资源被白白浪费,而网络中的主机之间无法正常通信。
为了避免帧在网络中永久兜圈,透明网桥使用生成树协议(Spanning Tree Protocol.STP),可以在增加冗余链路来提高网络可靠性的同时,又避免环路带来的各种问题。
不论网桥之间连接成了怎样复杂的带环拓扑,网桥之间通过交互STP相关数据包(即网桥协议数据单元,Bridge Protocol Data Uint,BPDU),都能找出原网络拓扑的一个连通子集(即生成树),在这个子集里整个连通的网络中不存在环路。
一旦找出了生成树,相关网桥就会关闭自己的相关接口,这些接口不再接收和转发帧,以确保不存在环路。
5. 交换式以太网
网桥的接口数量很少,通常只有2~4个,一般只用来连接不同的网段。1990年面世的交换式集线器(Switching Hub),实质上是具有多个接口的网桥。
交换式集线器常称为以太网交换机(Switch)或二层交换机。“二层”是指以太网交换机工作在数据链路层。仅使用交换机(而不使用集线器)的以太网就是交换式以太网。
以太网交换机
以太网交换机(以下简称交换机)的每个接口可以直接连接计算机,也可以连接集线器或另一个交换机。
当交换机的接口直接与计算机或交换机连接时,可以工作在全双工方式,并能在自身内部同时连通多对接口,使每一对相互通信的计算机都能像独占传输媒体那样,无碰撞地传输数据,这样就不需要使用CSMA/CD协议了。
当交换机的接口连接共享媒体的集线器时,就只能使用CSMA/CD协议并只能工作在半双工方式下。
当前的交换机和计算机中的网卡都能自动识别上述两种情况,并自动切换到相应的工作方式。以太网交换机一般都具有多种速率的接口,例如10Mb/s、100Mb/s、1Gb/s甚至10Gb/s的接口,以及多速率自适应接口。
交换机本质上就是一个多接口的网桥,因此交换机也是一种即插即用设备,其内部的转发表也是通过自学习算法,基于网络中各主机间的通信,自动地逐步建立起来的。另外,交换机也使用生成树协议,来产生能够连通全网但不产生环路的通信路径。
一般的交换机都采用“存储转发”方式,为了减小交换机的转发时延,某些交换机采用了直通(Cut-Through)交换方式。采用直通交换方式的交换机,在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理。
直通交换的优点是交换时延非常小,但直通交换也有其缺点:不检查差错就直接将帧转发出去,因此有可能会将一些无效帧转发给其他主机。
共享式以太网与交换式以太网的对比
主机发送单播帧的情况
对于使用集线器的共享式以太网,单播帧会通过集线器传播到网络中的其他各主机。其他各主机中的网卡会根据单播帧的目的MAC地址决定接受或丢弃该帧。
对于使用交换机的交换式以太网,交换机收到单播帧后,根据帧的目的MAC地址和自身的转发表将帧明确地转发给目的主机,而不是网络中的其他各主机。
主机发送广播帧的情况
对于使用集线器的共享式以太网,广播帧会通过集线器传播到网络中 的其他各主机,其他各主机中的网卡检测到帧的目的MAC地址是广播地址,就接受该帧。
对于使用交换机的交换式以太网,交换机收到广播帧后,检测到帧的目的MAC地址是广播地址,于是从除该帧进入交换机的接口的其他所有接口转发该帧,网络中除了源主机的其他各主机收到该广播帧后,接受该广播帧。
使用集线器的共享式以太网中的各主机属于同一个广播域,而使用交换机的交换式以太网中的各主机也属于同一个广播域。集线器和交换机对广播帧的转发情况从效果上看是相同的,但它们的基本原理并不相同。
多对主机间同时通信的情况
对于使用集线器的共享式以太网,当多对主机同时通信时,必然会产生碰撞,遭遇碰撞的帧会传播到网络中的各主机。
对于使用交换机的交换式以太网,由于交换机对收到的帧进行“存储转发”,并且能实现多对接口的高速并行交换,因此不会产生碰撞。
通过上述各例子中的对比情况,可以得出使用集线器和交换机扩展共享式以太网的区别:
- 两个独立的共享式以太网,它们各自既是一个独立的广播域,也是一个独立的碰撞域。若用集线器将这两个独立的共享式以太网连接起来,则会形成一个具有更大广播域和碰撞域的共享式以太网。
- 若用交换机将这两个独立的共享式以太网连接起来,则会形成一个具有更大广播域、但原本独立的两个碰撞域仍被交换机隔离的以太网。
由于交换机使用了专用的交换结构芯片,并能实现多对接口的高速并行交换,可以大大提高网络性能。随着交换机成本的降低,使用交换机的交换式以太网已经取代了传统的使用集线器的共享式以太网。只要全部使用交换机(而不使用集线器)来构建以太网,就可以构建出工作在无碰撞的全双工方式的交换式以太网。
6. 以太网的MAC帧格式
以太网的MAC帧格式有DIXEthernet V2(即以太网V2)和IEEE802.3两种标准。这两种标准的MAC帧格式的差别很小(仅在类型字段有差别),因此很多人并没有严格区分这两种标准。现在市场上流行的都是以太网V2的MAC帧,因此这里只介绍以太网V2的MAC帧格式。
以太网V2的MAC帧由目的地址、源地址、类型、数据以及FCS这五个字段组成,如图所示。
- 目的地址和源地址字段分别为6字节长,用来填入帧的目的MAC地址和源MAC地址。
- 类型字段为2字节长,其值用来指明数据字段中的内容是由上一层的哪个协议封装的,以便将收到的MAC帧的数据字段中的内容上交给上一层的这个协议。例如,当类型字段的值为0x0800时,则表明数据字段中的内容是TCPIIP网际层I协议封装的IP数据报。当类型字段的值为0x8137时,则表明数据字段中的内容是由Novell网络层IPX协议封装的。
- 数据字段的长度范围是46~1500字节,用来装载上层协议所封装的协议数据单元(PDU)。由于以太网规定最小帧长为64字节,因此除去首部和尾部共18字节,数据字段的最小长度应为46字节。当数据字段的长度小于46字节时,数据链路层就会在数据字段的后面插入相应个填充字节,以确保MAC帧的长度不小于64字节。显然,有效的MAC帧长度为64~1518字节之间。
- FCS字段的长度为4字节,它的内容是使用CRC生成的帧检验序列。接收方的网卡通过FCS的内容就可检测出帧在传输过程中是否产生了误码。
物理层前导码
以太网V2的数据链路层将封装好的MAC帧交付给物理层进行发送。物理层在发送MAC帧之前还要在其前面添加8字节的前导码。前导码中的前7个字节为前同步码,作用是使接收方的时钟同步,之后的1字节为帧开始符,表明其后面紧跟着的就是以太网帧。
无效的MAC帧
接收方可能收到的无效MAC帧包括以下几种:
- MAC帧的长度不是整数个字节。
- 通过MAC帧的FCS字段的值检测出帧有误码。
- MAC帧的长度不在64~1518字节范围内。
接收方收到无效的MAC帧时,就简单将其丢弃,以太网的数据链路层没有重传机制。
7. 虚拟局域网
将多个站点通过一个或多个以太网交换机连接起来就构建出了交换式以太网。交换式以太网中的所有站点都属于同一个广播域。随着交换式以太网规模的扩大,广播域也相应扩大。巨大的广播域会带来广播风暴和潜在的安全问题,并且难以管理和维护。使用虚拟局域网技术,网络管理员可将巨大的广播域分隔成若干个较小的广播域。
虚拟局域网VLAN概述
虚拟局域网(Virtual Local Area Network,VLAN)是一种将局域网内的站点划分成与物理位置无关的逻辑组的技术,一个逻辑组就是一个VLAN,VLAN中的各站点具有某些共同的应用需求。属于同一VLAN的站点之间可以直接进行通信,而不属于同一VLAN的站点之间不能直接通信。
网络管理员可对局域网中的各交换机进行配置来建立多个逻辑上独立的VLAN。连接在同一交换机上的多个站点可以属于不同的VLAN,而属于同一VLAN的多个站点可以连接在不同的交换机上。虚拟局域网并不是一种新型网络,它只是局域网能够提供给用户的一种服务。
划分VLAN有以下好处:
- 控制广播风暴:局域网的规模越大,引发“广播风暴”的可能性就越大。广播风暴是指网络中出现大量广播帧而引起性能恶化。划分VLAN可将庞大的局域网(广播域)分隔成若干个独立的广播域,这样可有效控制广播风暴,提高网络性能。
- 方便网络管理:当局域网中某个VLAN中的主机要逻辑迁移到另一个VLAN时,无须改变网络布线或将该主机物理移动到新的位置,而只需要网络管理员在相关交换机上调整VLAN配置即可。这是因为主机的物理位置与VLAN的划分是无关的。
- 增强网络安全:网络管理员可以根据用户的安全需求来隔离VLAN间的通信。
虚拟局域网VLAN的实现机制
虚拟局域网有多种实现技术,最常见的就是基于以太网交换机的接口来实现。这就需要以太网交换机能够实现以下两个功能:
能够处理带有VLAN标记的帧,也就是IEEE802.1Q帧。
交换机的各接口可以支持不同的接口类型,不同接口类型的接口对帧的处理方式有所不同。
IEEE 802.1Q帧
IEEE 802.1Q帧也称为Dot One Q帧,它对以太网V2的MAC帧格式进行了扩展。IEEE 802.1Q帧在以太网V2的MAC帧的源地址字段和类型字段之间,插入了4字节的VLAN标签(tag)字段。VLAN标签字段由标签协议标识符(Tag Protocol Identifier,TPID)、优先级(Priority,PRI)、规范格式指示符(Canonical Format Indicator,CFI)以及虚拟局域网标识符(VLANID,VID)四部分构成。
- 标签协议标识符的长度为16比特,其值固定为0x8100,表示该帧是IEEE 802.1Q帧。当数据链路层检测到帧的源地址字段后面的两个字节的值为0x8100时,就知道这是插入了4字节VLAN标签的IEEE802.1Q帧。
- 优先级的长度为3比特,取值范围是0~7,值越大优先级越高。当网络阻塞时,设备优先发送优先级高的IEEE802.1Q帧。
- 规范格式指示符的长度为1比特,取值为0表示MAC地址以规范格式封装,取值为1表示MAC地址以非规范格式封装。对于以太网,CFI的取值为0。“规范格式”是指在地址的十六进制表示中,每一个字节的最低位代表规范格式地址中相应字节的最低位。“非规范格式”是指在地址的十六进制表示中,每一个字节的最高位代表规范格式地址中相应字节的最低位。
- 虚拟局域网标识符的长度为12比特,取值范围是0~4095。其中0和4095保留不使用,因此有效取值范围是1~4094。VID是帧所属VLAN的编号。设备利用VLAN标记中的VID来识别帧所属的VLAN,广播帧只在同一VLAN内转发,这就将广播域限制在了一个VLAN内。
IEEE 802.1Q帧一般不由用户主机处理,而是由以太网交换机来处理:
- 当交换机收到普通的以太网帧时,会给其插入4字节的VLAN标签使之成为IEEE 802.1Q帧,该处理简称为“打标签”。
- 当交换机转发IEEE802.1Q帧时,可能会删除其4字节的VLAN标签使之成为普通以太网帧,该处理简称为“去标签”。交换机转发IEEE 802.1Q帧时也有可能不进行“去标签”处理,是否进行“去标签”处理取决于交换机的接口类型。
以太网交换机的接口类型
根据接口在接收帧和发送帧时对帧的处理方式的不同,以及接口连接对象的不同,以太网交换机的接口类型一般分为Access和Trunk两种。
Access接口
Access接口一般用于连接用户计算机,由于其只能属于一个VLAN。因此Access接口的PVID值与其所属VLAN的ID相同,其默认值为1。
Access接口对帧的处理方法如下:
-
接收帧:Access接口一般只接受“未打标签”的普通以太网MAC帧,根据接收帧的接口的PVID给帧“打标签”,即插入4字节的VLAN标签字段,VLAN标签中的VID取值就是接口的PVID值。
-
转发帧:若帧中的VID值与接口的PVID值相等,则给帧“去标签”后再进行转发,否则不转发帧。
综上所述,从Access接口转发出的帧,是不带VLAN标签的普通以太网MAC帧。
在一个交换机上不进行VLAN划分,交换机各接口默认属于VLAN1且类型为Access的情况下。则交换机对该广播帧的处理过程如下:
1)该广播帧从交换机的接口1进入交换机
2)由于接口1的类型是Acccss,因此它会对接收到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入4字节的VLAN标签,VLAN标签中的VID值等于接口1的PVID值1
3)交换机对打了标签的该广播帧进行转发。由于该广播帧中的VID值与交换机接口2、3和4的PVID值都等于1,因此交换机会从这三个接口对该广播帧进行“去标签”转发
当应用需求是将主机A和B划归到VLAN2,而将主机C和D划归到VLAN3。可以在交换机上创建VLAN2和VLAN3,然后将交换机的接口1和2划归到VLAN2,接口3和4划归到VLAN3。因此,接口1和2的PVID值等于2,而接口3和4的PVID值等于3。假设主机A发送了一个广播帧,则交换机对该广播帧的处理过程如下:
1)该广播帧从交换机的接口1进入交换机。
2)由于接口1的类型是Access,因此它会对接收到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入4字节的VLAN标签,VLAN标签中的VID值等于接口1的PVID值2。
3)交换机对打了标签的该广播帧进行转发。由于广播帧中的VID值与交换机接口2的PVID值都等于2,因此交换机会从接口2对该广播帧进行“去标签”转发。
Trunk接口
Trunk接口一般用于交换机之间或交换机与路由器之间的互连。Trunk接口可以属于多个VLAN,即Trunk接口可以通过不同VLAN的帧。默认情况下,Trunk接口的PVID值为1,一般不建议用户修改,若互连的Trunk接口的PVID值不相等,则可能出现转发错误。
Trunk接口对帧的处理方法如下:
-
接收帧:Trunk接口既可以接收“未打标签”的普通以太网MAC帧,也可以接收“已打标签”的IEEE802.1Q帧。当Trunk接口接收到“未打标签”的普通以太网MAC帧时,根据接收帧的接口的PVID给帧“打标签”,即插入4字节的VLAN标签字段,VLAN标签中的VID取值就是接口的PVID值。
-
转发帧:对于帧的VID值等于交换机接口的PVID值的802.1Q帧,将其“去标签”转换成普通以太网MAC帧后再转发;对于帧的VID值不等于交换机接口的PVID值的IEEE802.1Q帧,将其直接转发。
综上所述,从Trunk接口转发出的帧可能是普通以太网MAC帧,也可能是IEE802.1Q帧。
假设主机A发送了一个广播帧,则各交换机对该广播帧的处理过程如下:
1)该广播帧从交换机1的接口1进入交换机1。
2)交换机1对收到的帧进行处理。由于接口1的类型是Access,因此它会对接收到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入4字节的VLAN标签,VLAN标签中的VID值等于接口1的PVID值1。
3)交换机1对打了标签的该广播帧进行转发。由于该广播帧中的VID值与交换机1的接口2的PVID值都等于1,因此交换机1会从接口2对该广播帧进行“去标签”转发。另外,因为交换机1的接口5是Trunk类型,所以该广播帧还会从交换机1的接口5转发出去。由于接口5的PIVD值与该广播帧中的VID值都等于1,因此交换机1会从接口5对该广播帧进行**“去标签”转发**。显然,交换机1将该广播帧以普通以太网MAC帧的形式转发给了交换机2。
4)该广播帧从交换机2的接口5进入交换机2。
5)交换机2对收到的帧进行处理。由于接口5的类型是Trunk,因此它会对接收到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入4字节的VLAN标签,VLAN标签中的VID值等于接口5的PVID值1。
6)交换机2对打了标签的该广播帧进行转发。由于该广播帧中的VID值与交换机2的接口1和2的PVID值都等于1,因此交换机2会从接口1和2对该广播帧进行“去标签”转发
假设主机C发送了一个广播帧,则各交换机对该广播帧的处理过程如下:
1)主机C发送的广播帧从交换机1的接口3进入交换机1。
2)交换机1对收到的帧进行处理。由于接口3的类型是Access,因此它会对接收到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入4字节的VLAN标签,VLAN标签中的VID值等于接口3的PVID值2。
3)交换机1对打了标签的该广播帧进行转发。由于该广播帧中的VID值与交换机1的接口4的PVID值都等于2,因此交换机1会从接口4对该广播帧进行“去标签”转发。另外,因为交换机1的接口5是Trunk类型,所以该广播帧还会从交换机1的接口5转发出去。由于接口5的PIVD值为1,这与该广播帧中的VID值2不相同,因此交换机1会从接口5对该广播帧直接转发。显然,交换机1将该广播帧以IEEE802.1Q帧的形式转发给了交换机2。
4)该广播帧从交换机2的接口5进入交换机2。
5)交换机2对该广播帧进行转发。由于该广播帧中的VID值与交换机2的接口3和4的PVID值都等于2,因此交换机2会从接口3和4对该广播帧进行“去标签”转发。
由上述例子可以看出,在由多个交换机互连而成的交换式以太网中划分VLAN时,连接主机的交换机的接口应设置为Access类型,而交换机之间互连的接口应设置为Trunk类型。
除了Access和Trunk接口类型,华为交换机还有其私有的Hybrid接口类型。Hybrid接口既可用于交换机之间或交换机与路由器之间的互连(与Trunk接口类型相同),也可用于交换机与用户计算机之间的互连(与Access接口类型相同)。除此之外,Hybrid接口的绝大部分功能与Trunk接口相同。不同点在于Hybrid接口的发送处理方法:Hybrid接口会查看帧的VID值是否在接口的“去标签”列表中,若存在则“去标签”后再转发,若不存在则直接转发。
8. 以太网的发展
随着电子技术的发展,以太网已从最初的速率为10Mb/s的标准以太网或称传统以太网)发展到每秒百兆比特、吉比特、10吉比特,甚至是100吉比特的高速以太网。尽管速率达到或超过100Mb/s的以太网被称为高速以太网,但100Mb/s的速率现在已经不能满足大多数用户对速率的需求,目前常用的速率为1Gb/s甚至更快。
100BASE-T以太网
100BASE-T以太网是指在双绞线上传输基带信号的速率为100 Mb/s的以太网。100BASE-T中的“100”是指速率为100Mb/s,“BASE”是指基带信号,“T”是指双绞线。
100BASE-T以太网又称为快速以太网(Fast Ethernet),与10Mb/s标准以太网一样,100BASE-T以太网仍然使用IEEE 802.3的帧格式和CSMA/CD协议。因此,用户只要更换主机中的网卡并配上一个100Mb/s的集线器,就可以在不改变网络拓扑结构的情况下,很方便地从10BASE-T以太网直接升级到100BASE-T以太网。
以太网的最小帧长与链路长度和带宽有关。100BASE-T以太网的速率是10BASE-T以太网速率的10倍,因为100BASE-T以太网要与10BASE-T以太网保持兼容,所以就需要100BASE-T以太网的最小帧长仍保持与10BASE-T以太网的最小帧长相同,即64字节。这就需要把一个网段的最大电缆长度从1000m减短到100m。
由于100BASE-T以太网的速率为100Mb/s,而最小帧长仍为64字节,即512比特,因此100BASE-T以太网的争用期为5.12μs,帧间最小间隔是0.96μs,都是10BASE-T以太网的十分之一。
100BASE-T以太网还可以使用以太网交换机来提供比集线器更好的服务质量,即在全双工方式下无碰撞工作。因此,使用交换机的100BASE-T以太网,工作在全双工方式下,并不使用CSMA/CD协议。
吉比特以太网
吉比特以太网也称为千兆以太网(Gigabit Ethernet)。早在1996年,市场上就出现了千兆以太网产品。IEEE的802委员会于1997年通过了千兆以太网的标准802.3z,该标准于1998年成为了正式标准。近几年来,千兆以太网已迅速占领了市场,成为了以太网的主流产品。
IEEE 802.3z千兆以太网的主要特点有:
- 速率为1000Mb/s(1Gb/s)。
- 使用IEEE 802.3的帧格式(与10Mb/s和100Mb/s以太网相同)。
- 支持半双工方式(使用CSMA/CD协议)和全双工方式(不使用CAMA/CD协议)。
- 兼容10BASE-T和100BASE-T技术。
当千兆以太网工作在半双工方式下时,需要使用CSMA/CD协议。由于速率已经提高到了1000Mb/s,因此就需要减小网段最大长度或增大最小帧长。
- 若将千兆以太网的网段最大长度减小到10m,则网络基本失去了应用价值。
- 若将最小帧长增大到640字节,则当上层交付的待封装的协议数据单元PDU很短
时,开销就会太大。
因此,千兆以太网的网段最大长度仍保持为100m,最小帧长仍为64字节(与10BASE-T和100BASE-T兼容)。这就需要使用载波延伸(Carrier Extension)的办法,将争用期增大为512字节的发送时间而保持最小帧长仍为64字节。
也就是说,当发送的MAC帧长度不足512字节时,就在MAC帧尾部填充一些特殊字符,使MAC帧的长度增大到512字节。接收方的数据链路层在收到以太网MAC帧后,会把所填充的特殊字符删除后才向高层交付。
在使用载波延伸的机制下,如果原本发送的是大量的64字节长的短帧,则每一个短帧都会被填充448字节的特殊字符,这样会造成很大的开销。
因此,千兆以太网还使用了分组突发(Packet Bursting)功能。也就是当有很多短帧要连续发送时,只将第一个短帧用载波延伸的方法进行填充,而其后面的一系列短帧不用填充就可一个接一个地发送,它们之间只需空开必要的帧间最小间隔即可。这样就形成了一连串分组的突发,直到累积发送1500字节或稍多一些为止。
10吉比特以太网
10Gb也就是10吉比特以太网,又称为万兆以太网,它并不是将千兆以太网的速率简单地提高了10倍。10Gb的目标是将以太网从局域网范围(校园网或企业网)扩展到城域网与广域网,成为城域网和广域网的主干网的主流技术之一。
IEEE 802.3ae万兆以太网的主要特点有:
- 速率为10Gb/s。
- 使用IEEE802.3的帧格式(与10Mb/s、100Mb/s和1Gb/s以太网相同)。
- 保留IEEE 802.3标准对以太网最小帧长和最大帧长的规定。这是为了用户升级以太网时,仍能和较低速率的以太网方便地通信。
- 只工作在全双工方式下而不存在争用媒体的问题,因此不需要使用CSMA/CD协议,这样传输距离就不再受碰撞检测的限制。
- 增加了支持城域网和广域网的物理层标准。
万兆以太网交换机常作为千兆以太网的汇聚层交换机,与千兆以太网交换机相连,还
可以连接对传输速率要求极高的视频服务器、文件服务器等设备。
40吉比特/100吉比特以太网
40GE/100GE也称为四万兆/十万兆以太网。为了使以太网能够更高效、更经济地满足局域网、城域网和广域网的不同应用需求,IEEE802.3ba标准定义了两种速率类型:40Gb/s主要用于计算应用,而100Gb/s主要用于汇聚应用。
- IEEE 802.3ba标准只工作在全双工方式下(不使用CSMA/CD),但仍使用IEEE 802.3的帧格式并遵守其最小帧长和最大帧长的规定。
- 100Gb在使用单模光纤作为传输媒体时,最大传输距离可达40km以上,但这需要通过波分复用技术将4个波长复用一根光纤,每个波长的有效传输速率为25Gb/s,4个波长的总传输速率就可达到100Gb/s。
- 40GE/100GE除使用光纤作为传输媒体,也可以使用铜缆作为传输媒体,但传输距离很短,不超过1m或7m。
9. 802.11无线局域网
随着移动通信技术的发展,无线局域网(Wireless Local Area Network,WLAN)自20世纪80年代末以来逐步进入市场。IEEE于1997年制定出了无线局域网的协议标准802.11,802.11无线局域网是目前应用最广泛的无线局域网之一,人们更多地将其简称为Wi-Fi(Wireless Fidelity,无线保真度)
802.11无线局域网的组成
802.11无线局域网可分为“有固定基础设施的”和“无固定基础设施的”两大类。所谓“固定基础设施”,是指预先建立的、能够覆盖一定地理范围的、多个固定的通信基站。802.11无线局域网使用最多的是它的有固定基础设施的组网方式。
有固定基础设施的802.11无线局域网
有固定基础设施的802.11无线局域网采用星型网络拓扑,位于其中心的基站被称为接入点(Access Point,AP)。
802.11无线局域网的最小构件称为基本服务集(Base Service Set, BSS)。在一个基本服务集中包含一个接入点和若干个移动站。本BSS内各站点之间的通信以及与本BSS之外的站点之间的通信,都必须经过本BSS内的AP进行转发。
当网络管理员配置BSS内的AP时,需要为其分配一个最大32字节的服务集标识符(Service Set Identifier,SSID)和一个无线通信信道,SSID实际上就是使用该AP的802.11无线局域网的名字。
一个BSS所覆盖的地理范围称为基本服务区(Base Service Area,BSA),一个基本服务区的直径不超过100m。
一个BSS可以是孤立的,也可以通过一个分配系统(Distribution System,DS)与其他BSS连接,这样就构成了一个扩展的服务集(Extended Service Set,ESS)。
DS最常用的是以太网,也可使用点对点链路或其他无线网络。DS的作用是使ESS对上层的表现就像一个BSS一样。也就是说,ESS对上层所呈现的仍然是一个局域网。另外,ESS还可为无线用户提供到其他非802.11无线局域网的接入,例如到有线连接的因特网。
在上图中,BSS1中的移动站A如果要给BSS2中的移动站B发送数据,其通信路径为A→AP1→DS→AP2→B,也就是必须经过接入点AP1和AP2以及它们之间作为DS的以太网。注意,在一个ESS内的几个不同的BSS的信号覆盖范围也可能会有重叠。
上图还展示了移动站A从BSS1漫游到BSS2的情况。在漫游过程中,移动站A的接入点从BSS1中的AP1改为了BSS2中的AP2,但移动站A仍然可保持与移动站B的通信。
802.11标准并没有定义实现漫游的具体方法,仅定义了以下一些基本服务。
1)关联(Association)服务
一个移动站如果要加入到某个BSS,它首先必须选择一个AP并与该AP建立关联。若建立关联成功,这个移动站就加入了该AP所属的无线局域网。之后,这个移动站就可通过该AP发送和接收数据。
移动站与AP建立关联的方法有以下两种:
- 被动扫描:AP会周期性地发出信标帧(Beacon Frame)。信标帧中包含服务集标识符(SSID)、AP的MAC地址和所支持的速率、加密算法和安全配置等若干参数,而移动站被动等待接收信标帧。
- 主动扫描:移动站主动发出探测请求帧(Probe Request Frame),然后等待来自AP
的探测响应帧(Probe Response Frame)。
2)重建关联(Reassociation)服务和分离(Dissociation)服务
如果一个移动站要把与某个AP的关联转移到另一个AP,就可以使用重建关联服务。若要终止关联服务,就应使用分离服务。
无固定基础设施的802.11无线局域网
无固定基础设施的无线局域网也称为自组织网络(ad hoc Network)。自组织网络并没有预先建立的固定基础设施(基站或AP),它是由一些对等的移动站点构成的临时网络。数据在自组织网络中被**“多跳”存储转发**。如下图所示,移动站A和E通信时,需要经过移动站B、C和D的存储转发,因此B、C和D需要具备路由功能。
自组织网络组网方便(不需要基站)并且有非常好的生存性,这使得自组织网络在军用和民用领域都有很好的应用前景:
- 在民用领域,当出现自然灾害时,原有的固定基础设施(基站)很可能已经遭到破坏,而快速组建自组织网络进行及时的通信就显得尤为重要。
- 在军用领域,由于战场上往往没有预先建立好的基站,装备有便携移动站的士兵之间可以临时组建移动自组织网络,这种组网方式还可应用到地面战车群、海上舰艇群以及空中的战机群。
802.11无线局域网的物理层
802.11无线局域网的物理层非常复杂,依据工作频段、调制方式、传输速率等,可将其分为多种物理层标准。
802.11无线网卡一般会被做成多模的,以便能适应多种不同的物理层标准,例如支持802.11b、802.11g、802.11n。
2010年之后,802.11无线局域网又有一些新的物理层标准陆续推出:
802.11无线局域网的数据链路层
使用CSMA/CA协议(而不使用CSMA/CD协议)
共享式以太网使用CSMA/CD协议来协调总线上各站点争用总线。对于802.11无线局域网,其使用无线信道传输数据,这与共享式以太网使用有线传输介质不同。
因此,802.11无线局域网不能简单照搬共享式以太网使用的CSMA/CD协议。802.11无线局域网采用了另一种称为CSMA/CA的协议,也就是载波监听多址接入/碰撞避免(Carrier Sense Multiple Access/Collision Avoidance,CSMA/CA)协议。
CSMA/CA协议仍然采用CSMA/CD协议中的CSMA,以“先听后说”的方式来减少碰撞的发生,但是将“碰撞检测CD”改为了“碰撞避免CA”。
需要说明的是,尽管CSMA/CA中的CA表示碰撞避免,但并不能避免所有的碰撞,而是尽量减少碰撞发生的概率。
另外,由于无线信道误码率较高,因此802.11局域网在使用CSMA/CA的同时,还使用停止、等待协议来实现可靠传输,确保数据被正确接收。
802.11无线局域网不采用“碰撞检测”的原因:
1)“碰撞检测”是指每一个正在发送帧的站点必须“边发送帧边检测碰撞”,一旦检测到碰撞就立即停止发送。在有线传输介质上实现碰撞检测功能是比较容易实现的。但对于无线信道,其传输环境复杂且信号强度的动态范围非常大,在802.11无线网卡上接收到的信号强度一般都远远小于发送信号的强度,信号强度甚至相差百万倍。因此,如果要在802.11无线网卡上实现碰撞检测,对硬件的要求非常高。
2)即使能够在硬件上实现碰撞检测功能,但由于无线电波传播的特殊性(下面将要讨论的隐蔽站问题),还会出现无法检测到碰撞的情况,因此实现碰撞检测并没有意义。无线电波能够向所有方向传播,其信号强度随传播距离的增大而急剧衰减,当无线电波在传播过程中遇到障碍物时,其传播还会受到阻碍。
上图给出了无线局域网的隐蔽站问题。
在理想情况下,无线电波的传播范围是以发送站为圆心的一个圆形面积。假设无线移动站A和B同时向AP发送数据,A的无线信号无法到达B,B的无线信号也无法到达A。因此A和B都无法检测到对方的无线信号,也就误认为当前无线信道是空闲的,于是都向AP发送数据,这必然会造成AP收到的信号是A和B产生的碰撞信号。这种问题称为隐蔽站问题(Hidden Station Problcm)。图中A和B互为隐蔽站,它们彼此都检测不到对方发送的信号。
即使A和B相距很近,若它们之间有障碍物,也有可能出现隐蔽站问题。
综上所述,无线局域网不能简单照搬共享式以太网(有线局域网)使用的CSMA/CD协议,而是在CSMA的基础上增加碰撞避免CA功能,不再实现碰撞检测功能,即CSMA/CA。
CSMA/CA协议的基本工作原理
两种不同的媒体接入控制方式
802.11无线局域网的MAC层定义了以下两种不同的媒体接入控制方式:
- 分布式协调功能(Distributed Coordination Function,DCF)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权。因此DCF向上提供争用服务。DCF方式是802.11定义的默认方式(必须实现)。
- 点协调功能(Point Coordination Function,PCF)。PCF方式使用集中控制的接入算法(一般在AP实现集中控制),用类似于探询的方法把发送数据权轮流交给各个站,从而避免了碰撞的产生。因此PCF向上提供无争用服务。PCF方式是802.11定义的可选方式,在实际中很少使用。
确认机制
尽管802.11无线局域网中的各站点使用CSMA/CA协议来争用信道(其中CA的意思是碰撞避免),但并不能完全避免碰撞,而是尽量减少碰撞发生的概率。另外,由于无线信道的误码率较高,CSMA/CA还需使用停止一等待的确认机制来实现可靠传输,这与使用CSMA/CD的共享式以太网不同。使用CSMA/CD的共享式以太网实现的是不可靠传输,发送方把数据发送出去就不管了(若检测到碰撞还是必须要重传的),而可靠传输由高层负责。
帧间间隔
802.11无线局域网规定,每个站点必须在持续检测到信道空闲一段指定的时间后才能发送帧,这段时间称为帧间间隔(Interframe Space,IFS)。
IFS的长短取决于站点要发送的帧的类型。低优先级的帧需要等待较长的时间,而高优先级的帧需要等待的时间较短,因此高优先级的帧可优先获得发送权。若低优先级的帧还没来得及发送,而其他站的高优先级的帧已发送到信道上,则信道变为忙态,因而低优先级的帧就只能再推迟发送了,这样就可减少发生碰撞的概率。
各种帧间间隔的具体长度,取决于所使用的物理层特性。最常用的两种帧间间隔如下:
- 短帧间间隔SIFS(Short IFS)。SIFS的长度为28μs,它是最短的帧间间隔,用来分隔开属于一次对话的各帧。
- DCF帧间间隔DIFS (DCF IFS)。DIFS的长度为128μs,它比SIFS要长很多。在DCF方式中,DIFS用来发送数据帧和管理帧。
虚拟载波监听
802.11无线局域网还采用了虚拟载波监听(Virtual Carrier Sense)机制,目的就是让源站把它要占用信道的时间(包括目的站发回确认帧所需的时间)及时通知给所有其他站,以便使其他所有站在这一段时间都停止发送帧,这样就大大减少了碰撞概率。
当某个站检测到正在信道中传送的帧首部中的“持续时间”字段时,就调整自己的网络分配向量(Network Allocation Vector,NAV)。NAV指出了必须经过多长时间才能完成帧的这次传输、才能使信道转入空闲状态。因此,某个站认为信道处于忙态就有以下两种可能:
- 由于其物理层的载波监听检测到信道忙。
- 由于MAC层的虚拟载波监听机制指出了信道忙。
退避算法
1)与CSMA/CD不同的退避机制
为了尽量避免碰撞,CSMA/CA采用了一种不同于CSMA/CD的退避机制。
- 对于CSMA/CA,当某个要发送帧的站检测到信道从忙态变为空闲时,除了要等待一个DIFS的间隔,还要退避一段随机的时间以后再次重新试图接入到信道。
- 对于CSMA/CD,当某个要发送帧的站监听到信道变为空闲且持续96个比特时间后,就立即发送帧,同时进行碰撞检测。如果检测到碰撞,才执行退避算法。
当某个站点在发送帧时,很可能有多个站都在监听信道并等待发送帧,一旦信道空闲,这些站几乎同时发送帧而产生碰撞。
- CSMA/CD通过碰撞检测能及时停止发送遭遇碰撞的无效帧,这样就可立即使信道恢复到空闲状态,被浪费的网络资源很少。
- CSMA/CA并没有像CSMA/CD这样的碰撞检测机制,因此在信道从忙态转为空闲时,为了避免多个站同时发送帧,所有要发送帧的站就都要执行退避算法。这样做不仅可以大大减少发生碰撞的概率,而且还可避免某个站长时间占用无线信道。
2)退避算法的执行
在CSMA/CA协议中,当要发送帧的站检测到信道从忙态转为空闲时,就要执行退避算法。
在执行退避算法时,各站都会给自己的退避计时器(Backoff Timer)设置一个随机的退避时间,当退避时间减小到零时,就开始发送帧。
当退避时间还未减小到零而信道又转变为忙态时,就冻结退避计时器的退避时间,重新等待信道变为空闲,再经过DIFS的间隔后,继续启动退避计时器,退避计时器从剩余时间开始继续倒计时。
当某个站要发送数据帧时,仅有一种情况下不使用退避算法,即检测到信道空闲,并且该数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧。除此之外的以下情况,都必须使用退避算法:
- 在发送帧之前检测到信道处于忙态时。
- 在每一次重传一个帧时。
- 在每一次成功发送后要连续发送下一个帧时。
CSMA/CA协议的基本工作原理
1)当源站要发送它的第1个数据帧时,若检测到信道空闲,则在等待DIFS间隔后就可发送。等待DIFS间隔是考虑到可能有其他的站有高优先级的帧要发送。现在假设没有其他高优先级帧要发送,因而源站就发送了自己的数据帧。
2)目的站若正确收到该帧,则经过SIFS间隔后,向源站发送确认帧(ACK)。若源站在重传计时器设置的超时时间内没有收到ACK,就必须重传之前已发送的数据帧,直到收到ACK为止,或者经过若干次的重传失败后放弃发送。
3)其他站通过虚拟载波监听调整自己的网络分配向量(NAV,即信道被占用时长)的情况。在NAV这段时间内,若其他站也有帧要发送,就必须推迟发送。在NAV这段时间结束后,再经过一个DIFS间隔,然后还要退避一段随机时间后才能发送帧。
信道预约
为了进一步降低发生碰撞的概率,802.11无线局域网允许源站对信道进行预约。
1)源站在发送数据帧之前先发送一个短的控制帧,称为请求发送(Request To Send,RTS)。RTS帧包括源地址、目的地址和本次通信(包括目的站发回确认帧所需的时间)所需的持续时间。请注意,源站在发送RTS帧之前,必须先检测信道。若信道空闲,则等待DIFS间隔后,就能够发送RTS帧了。
2)若目的站正确收到源站发来的RTS帧,且媒体空闲,等待SIFS间隔后就发送一个响应控制帧,称为允许发送(Clear To Send,CTS)。CTS帧也包括本次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。
3)源站收到CTS帧后,再等待SIFS间隔后,就可发送数据帧。
4)若目的站正确收到了源站发来的数据帧,则等待SIFS间隔后,就向源站发送确认帧ACK。
5)除源站和目的站的其他各站,在收到CTS帧或数据帧后就推迟访问信道。这样就确保了源站和目的站之间的通信不会受到其他站的干扰。若RTS帧发生碰撞,源站就不可能收到CTS帧,源站会执行退避算法重传RTS帧。
很显然,使用RTS帧和CTS帧进行信道预约会带来额外的开销。但由于RTS帧和CTS帧都很短,所以发生碰撞的概率、碰撞产生的开销以及本身的开销都很小。
对于一般的数据帧,其发送时延往往远大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的。
尽管如此,802.11无线局域网仍为用户提供了以下三种选择:
- 使用RTS帧和CTS帧。
- 只有当数据帧的长度超过某个数值时才使用RTS帧和CTS帧(很显然,若数据帧本身很短,再使用RTS帧和CTS帧的意义就不大了)
- 不使用RTS帧和CTS帧。
由于RTS帧和CTS帧都会携带通信需要持续的时间,这与之前介绍过的数据帧可以携带通信所需持续时间的虚拟载波监听机制是一样的,因此使用RTS帧和CTS帧进行信道预约,也属于虚拟载波监听机制。
利用虚拟载波监听机制,站点只要监听到数据帧、RTS帧或CTS帧中的任何一个,就能知道信道将被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
802.11无线局域网的MAC帧
802.11无线局域网的MAC帧分为以下三种类型:
- 数据帧:用来在站点间传输数据。
- 控制帧:通常与数据帧搭配使用,负责区域的清空、虚拟载波监听的维护以及信道的接入,并于收到数据帧时予以确认。之前介绍过的ACK帧、RTS帧以及CTS帧等都属于控制帧。
- 管理帧:主要用于加入或退出无线网络,以及处理AP之间连接的转移事宜。信标帧、关联请求帧以及身份认证帧等都属于管理帧。
802.11无线局域网的数据帧格式,由以下三部分组成:
- 帧头:共30字节,包含相关控制信息和地址信息。
- 数据:0~2312字节,这是帧的数据部分,主要用来存放上层交付下来的待传送的协议数据单元。尽管数据载荷的最大长度为2312字节,但通常802.11无线局域网的数据帧的长度都不超过1500字节。
- 帧尾:共4字节,用于存放帧检验序列,采用CRC检验码。
地址字段
在802.11无线局域网的数据帧首部中包含地址1~地址4共4个地址字段。这4个地址字段的内容和使用情况取决于帧控制字段中的“去往DS”(到分配系统)和“来自DS”(来自分配系统)这两个字段的值,如下表所示,最常用的是中间两行所示的情况。
在有固定基础设施(即AP)的基本服务集中,不管站点要与本BSS内的站点通信,还是要与本BSS外的站点通信,都必须通过本BSS的AP进行转发,而源站点并不知道目的站点是否与自己在同一个BSS内。
若站点A要向B数据帧:
1)A需要把数据帧发送给AP1,数据帧首部中的帧控制字段中的“去往DS”和“来自DS”位的值分别设置为1和0,并且地址1字段的值设置为AP1的MAC地址(AP的MAC地址在802.11标准中称为基本服务集标识符BSSID),地址2字段的值设置为A的MAC地址,地址3字段的值设置为B的MAC地址,而地址4字段未被使用。
2)AP1收到来自A的数据帧后,会将数据帧转发给B。数据帧首部中的帧控制字段中的“去往DS”和“来自DS”位的值分别设置为0和1,并且地址1字段的值设置为B的MAC地址,地址2字段的值设置为AP1的MAC地址,地址3字段的值设置为A的MAC地址,而地址4字段也未被使用。
若站点A要向位于DS的路由器R发送数据帧,这与站点A向B发送数据帧的情况类似:
1)A需要把数据帧发送给AP1,由于DS是以太网,因此AP1会将802.11帧转换为以太网帧转发给R。这时以太网帧中的源地址和目的地址分别是A和R的MAC地址。
2)当R给A发回响应帧时,以太网帧中的源地址和目的地址分别是R和A的MAC地址(注意没有AP1的MAC地址),AP1收到该以太网帧后会将其转换成802.11帧转发给A。可见,AP具有网桥功能。
802.11帧中必须要携带AP的MAC地址,而以太网帧中却不需要携带AP的MAC地址。在以太网中,AP与透明网桥一样,对各站点是透明的,因此以太网帧中就不需要指出AP的MAC地址。然而在802.11无线局域网中,在站点的信号覆盖范围内可能会有多个AP共享同一个物理信道,但站点只能与其中的一个AP建立关联,因此802.11帧中就必须携带AP的MAC地址(即站点所在BSS的BSSID)来明确指出转发该帧的AP。
-
帧控制字段中的“去往DS”和“来自DS”位的值都为0的情况,被用于802.11的自主网络模式。当通信的两个站点位于同一个独立的BSS时,它们之间可以直接通信而不需要AP的转发。数据帧首部中的地址1字段的值设置为目的站的MAC地址,地址2字段的值设置为源站的MAC地址,地址3字段的值设置为这些站点所属同一个BSS的I,即BSSID。
-
帧控制字段中的“去往DS”和“来自DS”位的值都为1的情况,被用于连接多个BSS的分配系统(DS)也是一个802.11无线局域网的情况。例如,在上图中,若DS也是802.11无线局域网,位于BSS1的站点A发送数据帧给位于BSS2的站点C,当AP1通过无线DS将数据帧转发给AP2时,帧控制字段中的“去往DS”和“来自DS”位的值都被设置为1,并且地址1字段的值设置为AP2的MAC地址,地址2字段的值设置为AP1的MAC地址,地址3字段的值设置为站点C的MAC地址,地址4字段的值设置为站点A的MAC地址。但是,若DS是以太网,则AP1转发给AP2的就是以太网帧,帧中仅携带站点A和C的MAC地址,而不携带AP1和AP2的MAC地址。
序号控制字段
序号控制字段用来实现802.11的可靠传输。由于无线信道误码率较高,因此802.11无线局域网使用停止-等待协议来实现可靠传输,确保数据被正确接收。该协议规定必须对数据帧进行编号,当接收方发送的确认帧丢失时,发送方会重传超时的数据帧,接收方可以用序号来区分重复接收到的数据帧。
持续期字段
持续期字段用于实现之前介绍过的CSMA/CA的虚拟载波监听和信道预约机制。在数据帧、RTS帧或CTS帧中用该字段指出将要持续占用信道的时长。
帧控制字段
帧控制字段是最复杂的字段,其中比较重要的内容如下:
- “去往DS”和“来自DS”位。
- 类型和子类型位,用于区分不同类型的帧。802.11共有数据帧、控制帧和管理帧三种类型,而每种类型又分为若干种子类型。
- 有线等效保密(Wired Equivalent Privacy, WEP)位,用于指示是否使用了WEP加密算法。WEP表明使用在无线信道的这种加密算法在效果上可以和有线信道上通信一样保密。