第3章 数据链路层

数据链路层属于计算机网络的低层。数据链路层使用的信道主要有以下两种类型。

(1)点对点信道。这种信道使用一对一的点对点通信方式。
(2)广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上可以连接多个计算机,因此必须使用专用的共享信道协议来协调这些计算机的数据发送。

在这一章,我们首先介绍点对点信道所要讨论的基本问题,以及在这种信道上最常用的点对点协议PPP。然后讨论信道共享技术和共享式以太网,以及数据链路层的分组交换设备网桥和以太网交换机。最后讨论了无线局域网。

本章最重要的内容如下。

(1)数据链路层的三个重要问题:封装成帧、差错检测和可靠传输。
(2)因特网点对点协议实例PPP协议。
(3)广播信道的特点和媒体接入控制的概念,以及以太网的媒体接入控制协议CSMA/CD。
(4)适配器、转发器、集线器、网桥、以太网交换机的作用及使用场合,特别是网桥和以太网交换机的工作原理。
(5)无线局域网的组成和CSMA/CA协议的要点。

3.1 使用点对点信道的数据链路层

本节讨论使用点对点信道的数据链路层。其中的某些概念是数据链路层中最基本的问题,对广播信道也是适用的。

3.1.1 数据链路层所处的地位

下面看一下两个主机通过互联网进行通信时数据链路层所处的地位(见图3-1)。

图3-1(a)表示用户主机H1通过电话线上网,中间经过3个路由器(R1,R2和R3)连接到远程主机H2。所经过的网络可以有多种,如电话网、局域网和广域网。当主机H1向H2发送数据时,从协议的层次上看,数据的流动如图3-1(b)所示。主机H1和H2都有完整的5层协议栈,但路由器在转发分组时使用的协议栈只用到下面的3层。数据进入路由器后要先从物理层上到网络层,在转发表中找到下一跳的地址后,再下到物理层转发出去。因此,数据从主机H1传送到主机H2需要在路径中的各结点的协议栈向上和向下流动多次,如图中的浅灰色粗箭头所示。

图像说明文字

然而当我们专门研究数据链路层的问题时,在许多情况下我们可以只关心在协议栈中水平方向的各数据链路层。于是,当主机H1向主机H2发送数据时,我们可以想象数据就是在数据链路层从左向右沿水平方向传送,如图3-2中从左到右的粗箭头所示,即通过以下这样的链路:

H1的链路层→R1的链路层→R2的链路层→R3的链路层→H2的链路层

图像说明文字

图3-2指出,从数据链路层来看,H1到H2的通信可以看成是由4段不同的链路层通信组成,即H1→R1,R1→R2,R2→R3和R3→H2。这4段不同的链路层可能采用不同的数据链路层协议。

3.1.2 数据链路和帧

我们在这里要明确一下,“链路”和“数据链路”并不是一回事。

所谓链路(link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。在进行数据通信时,两个计算机之间的通信路径往往要经过许多段这样的链路。可见链路只是一条路径的组成部分。

数据链路(data link)则是另一个概念。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输(这将在后面几节讨论)。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。这样的数据链路就不再是简单的物理链路而是个逻辑链路了。现在最常用的方法是使用网络适配器(如拨号上网使用拨号适配器,以及通过以太网上网使用局域网适配器)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。

早期的数据通信协议曾叫作通信规程(procedure)。因此在数据链路层,规程和协议是同义语。

下面再介绍数据链路层的协议数据单元——帧(frame)。

数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报、分组或包)。

为了把主要精力放在点对点信道的数据链路层协议上,可以采用如图3-3(a)所示的三层模型。在这种三层模型中,不管在哪一段链路上的通信(主机和路由器之间或两个路由器之间),我们都看成是结点和结点的通信(如图中的结点A和B),而每个结点只考虑下三层——网络层、数据链路层和物理层。

点对点信道的数据链路层在进行通信时的主要步骤如下。

(1)结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
(2)结点A把封装好的帧发送给结点B的数据链路层。
(3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层,否则丢弃这个帧。

数据链路层不必考虑物理层如何实现比特传输的细节。我们甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方,如图3-3(b)所示。

图像说明文字

3.1.3 封装成帧

数据链路层以帧为单位传输和处理数据。网络层的IP数据报必须向下传送到数据链路层,成为帧的数据部分,同时它的前面和后面分别添加上首部和尾部,封装成一个完整的帧。帧的长度等于帧的数据部分长度加上帧首部和帧尾部的长度。数据链路层必须使用物理层提供的服务来传输一个一个的帧。物理层将数据链路层交给的数据以比特流的形式在物理链路上传输。因此,数据链路层的接收方为了能以帧为单位处理接收的数据,必须正确识别每个帧的开始和结束,即进行帧定界。

首部和尾部的作用之一就是进行帧定界,同时也包括其他必要的控制信息。在发送帧时,是从帧首部开始发送的。各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。虽然,为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些,但考虑到差错控制等多种因素,每一种链路层协议都规定了帧的数据部分长度的上限,即最大传送单元(Maximum Transfer Unit,MTU)。图3-4所示为帧的数据部分不能超过规定的MTU数值。

图像说明文字

实现帧定界有多种方法。一种简单的方法就是在传输的帧和帧之间插入时间间隔,就好像在英文单词间插入空格一样。例如,我们后面将要讨论的以太网就采用了这种方法。不过并不是所有的物理层传输服务都会保证数据链路层发送帧的时间间隙,某些物理层链路会将传输数据间的间隔给“挤掉”,也有可能在一个帧的中间被插入时间间隙。因此该方法不一定能适用所有场合。例如,物理链路采用面向字节的异步传输方式时,字节之间的时间间隔就不是固定的。除此之外,还可以在帧的首部设一个帧长度字段来定位一个帧的结束和下一个帧的开始。但如果帧长度字段在传输中出现差错,会导致后面一系列帧无法正确定界,因此在数据链路层较少使用。 一种常用的方法是在每个帧的开始和结束添加一个特殊的帧定界标志,标记一个帧的开始或结束。帧开始标志和帧结束标志可以不同也可以相同,如图3-5所示。

图像说明文字

当物理链路提供的是面向字符的传输服务时(物理链路以字符为单位传输数据),帧定界标志可以使用某个特殊的不可打印的控制字符作为帧定界符。我们知道,ASCII码是7位编码,一共可组合成128个不同的ASCII码,其中可打印的有95个,而不可打印的控制字符有33个。

由于帧的开始标志和结束标志使用专门的控制字符,所传输的数据中不能出现和用作帧定界的控制字符的比特编码一样的字节,否则就会出现帧定界的错误。当传送的是文本文件中的数据时(文本文件中的字符都是从键盘上输入的),帧的数据部分显然不会出现不可打印的帧定界控制字符。但当数据部分是非ASCII码文本的文件数据时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和帧定界符一样(见图3-6),数据链路层就会错误地“找到帧的边界”,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符“Flag”)。

图像说明文字

我们希望数据链路层提供的是一种“透明传输”的服务,即对上层交给的传输数据没有任何限制,就好像数据链路层不存在一样。像图3-6所示的帧的传输显然就不是“透明传输”,因为要发送的数据中不能出现帧定界字符。

为了解决透明传输问题,对于面向字符的物理链路,可以使用一种称为字节填充(byte stuffing)或字符填充(character stuffing)的方法。该方法的基本原理如图3-7所示,发送端的数据链路层在数据中出现的标记字符前面插入一个转义字符(例如,也用一种特殊的控制字符“ESC”),而在接收端的数据链路层对转义字符后面出现的标记字符不再被解释为帧定界符,并且在将数据送往网络层之前删除这个插入的转义字符。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。

图像说明文字

当物理链路提供的是面向比特的传输服务时(物理链路传送连续的比特流),帧定界标志可以使用某个特殊的比特组合,例如,后面将要介绍的PPP协议所使用的“01111110”。由于帧的长度不再要求必须是整数个字节,可以采用开销更小的比特填充(bit stuffing)来实现透明传输。

图3-8以PPP协议采用的零比特填充法来说明比特填充是如何实现透明传输的。在发送端,先扫描整个信息字段(通常是用硬件实现,但也可用软件实现,只是会慢些)。只要发现有5个连续1,则立即填入一个0。因此经过这种零比特填充后的数据,就可以保证在信息字段中不会出现6个连续1。接收端在收到一个帧时,先找到帧定界标志“Flag”以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的数据比特流(见图3-8)。这样就保证了透明传输:在所传送的数据比特流中可以包含任意组合的比特模式,而不会引起对帧边界的判断错误。

图像说明文字

3.1.4 差错检测

现实的通信链路都不会是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这就叫作比特差错。比特差错是传输差错中的一种。本小节所说的“差错”,如无特殊说明,就是指“比特差错”。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率(Bit Error Rate,BER)。例如,误码率为10-10时,表示平均每传送1010个比特就会出现一个比特的差错。误码率与信噪比有很大的关系。如果设法提高信噪比,就可以使误码率减小。实际的通信链路并非理想的,它不可能使误码率下降到零。因此,为了保证接收到的数据是正确的,在计算机网络传输数据时,必须采用某种差错检测措施。虽然各种差错检测技术的具体方法差别很大,但它们最基本的原理是一样的。图3-9所示为利用差错检测码(Error-Dectecting Code,EDC)实现差错检测的基本原理。为了使接收方能检测出接收的数据是否出现了差错,发送方需要采用某种差错检测算法f,用发送的数据D计算出差错检测码 ,并将 随数据一起发送给接收方。接收方通过同样的算法计算接收数据 的差错检测码 ,如果 ,则可以判断传输的数据中出现了差错,即检测出差错 。要注意的是,接收方未检测出差错并不代表传输的数据中一定没有出现差错,但出现差错的概率非常小。一般而言,为了提高差错检测的检错率,可以使用更长的差错检测码和更复杂的算法,当然也会导致更大的开销。

图像说明文字

在数据链路层,为了便于硬件检测差错,通常在帧的尾部设置一个差错检验字段存放整个帧(包含首部和数据)的差错检测码,这个差错检验字段常称为帧检验序列(Frame Check Sequence,FCS)。因此,要在数据链路层进行差错检验,就必须把数据划分为帧,每一帧都加上差错检测码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。

在数据链路层通常使用循环冗余检验(Cyclic Redundancy Check,CRC)技术进行差错检测。CRC编码的基本原理如图3-10所示。发送方和接收方首先必须协商一个 比特的生成式 。算法要求 的最高位和最低位的比特为1。考虑比特的数据 ,发送方要选择一个合适的 比特冗余码 (即检错码),并将它附加到 上,使得得到的 比特模式用模2算术恰好能被 整除。接收方进行差错检测时,用 去除接收到的 比特,如果余数非零则检测出差错,否则认为数据正确。

下面我们通过一个简单的例子来说明循环冗余检验的计算过程。现假定待传送的数据D = 101001(d = 6),G = 1101(即r = 3)。经模2除法运算后的结果是:商Q = 110101(这个商并没有什么用处),而余数R = 001。这个余数R就作为冗余码拼接在数据D的后面发送出去。因此加上冗余码后发送的帧是101001001,共有 比特。

在接收端把接收到的数据除以同样的除数生成式 (模2运算),然后检查得到的余数 。如果在传输过程中无差错,那么经过CRC检验后得出的余数 肯定是0(读者可以自己验算一下。被除数现在是101001001,而除数是 = 1101,看余数 是否为0)。

但如果出现误码,那么余数 仍等于零的概率是非常非常小的。

总之,在接收端对收到的每一帧经过CRC检验后:

(1)若得出的余数R = 0,则判定这个帧没有差错,就接受;
(2)若余数R  0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差错),就丢弃。

CRC编码也称为多项式编码,因为该编码能够将要发送的比特串看作是系数为0和1的一个多项式,对比特串的模2算术被解释为多项式算术。在上面的例子中,可以用多项式G(X)= X3 + X2 + 1表示上面的生成式G = 1101(最高位对应于X3,最低位对应于X0)。多项式G(X)称为生成多项式。现在广泛使用的生成多项式G(X)有以下几种:

CRC-16 = X16 +X15 + X2 + 1
CRC-CCITT = X16 +X12 + X5 + 1
CRC-32 = X32 +X26 + X23 + X22 + X16 +X12 + X11 +X10 + X8 +X7+ X5 +X4 + X2 + X + 1

CRC有很好的检错能力,虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于现代计算机网络的数据链路层。在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC检验完全用硬件完成,处理很快,对数据传输的延误非常小。 最后需要强调的是,使用CRC这样的差错检测技术,只能检测出帧在传输中出现了差错,并不能纠正错误。虽然任何差错检测技术都无法做到检测出所有差错,但通常我们认为:“凡是接收端数据链路层通过差错检测并接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。以上所述的可以近似地表述为(通常都是这样认为):“凡是接收端数据链路层接受的帧均无差错”。

要想纠正传输中的差错可以使用冗余信息更多的纠错码(error-correcting code)进行前向纠错(Forward Error Correction,FEC)。通过纠错码能检测数据中出现差错的具体位置,从而纠正错误。由于纠错码要发送更多的冗余信息,开销非常大,在计算机网络中较少使用。在计算机网络中通常采用马上将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,由上层协议去解决数据丢失的问题。

3.1.5 可靠传输

在有些情况下,我们需要数据链路层向上面的网络层提供“可靠传输”的服务。所谓“可靠传输”就是要做到:发送端发送什么,在对应的接收端就收到什么。事实上,如何保证数据传输的可靠性是计算机网络中的一个非常重要的问题,也是各层协议均可选择的一个重要功能。本节所讨论的可靠传输基本原理并不仅局限于数据链路层,可以应用到计算机网络体系结构中各层协议之中。我们本章要讨论的无线局域网和第5章要讨论的TCP都用到了这些原理和方法来实现它们的可靠传输服务。 图3-11所示为可靠传输的一个基本模型。可靠传输协议为上层的对等实体间提供一条可靠信道(这里指的是广义的信道),即发送方上层实体通过该信道发送的分组都会正确地到达接收方上层实体,不会出现比特差错、分组丢失、分组重复,也不会出现分组失序。在可靠传输协议实体间的底层信道却是不可靠的,即分组可能出现差错、丢失、重复和失序。可靠传输协议就是要在不可靠的信道上实现可靠的数据传输服务。为了简单起见,这里仅讨论单向的可靠传输,读者可以很容易地将其扩展到双向可靠传输。要注意的是,为实现可靠的单向数据传输,可靠传输协议需要进行双向通信,因此底层的不可靠信道必须是双向的。

图像说明文字

1.停止等待协议

在计算机网络中实现可靠传输的基本方法就是:如果发现错误就重传。因此,首先要解决的问题就是如何知道分组在传输过程中出现了差错。对于分组中的比特差错,接收方使用我们上节讨论的差错检测技术识别接收的分组中是否存在比特差错。为了让发送方知道是否出现了差错,接收方必须将是否正确接收分组的信息反馈给发送方。如图3-12(a)所示(DATA表示数据分组),当正确接收到一个分组时,向发送方发送一个确认分组ACK (Acknowledgment),当接收到的分组出现比特差错时,丢弃该分组并发送一个否认分组NAK (Negative Acknowledgment)。发送方收到ACK则可以发送下一个分组,而收到NAK则要重传原来的分组,直到收到ACK为止。由于发送方每发送完一个分组必须停下来等接收到确认后才能发送下一个分组,该协议被称为停止等待协议。

如果底层的信道会丢失分组,当数据分组或确认分组丢失时,发送方将会一直等待接收方的确认分组。为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器(timeout timer)。若到了超时计时器所设置的重传时间tout而发送方仍收不到接收方的任何确认分组,则重传原来的分组(见图3-12(b))。这就叫作超时重传。显然,超时计时器设置的重传时间应仔细选择。若重传时间太短,则在正常情况下也会在对方的确认信息到达发送方之前就过早地重传数据。若重传时间太长,则往往要白白等待很长时间。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。在数据链路层点对点的往返时间比较确定,重传时间比较好设定,然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易,在学习TCP时我们将会仔细讨论该问题。

为了使协议实现起来更加简单,可以用超时重传来解决比特差错问题而完全不需要NAK。当接收方收到有比特差错的分组时,仅仅将其丢弃,而发送方无需通过接收NAK而是通过超时来进行重传。不过使用NAK可以使发送方重传更加及时。

然而问题并没有完全解决。当确认分组丢失时,接收方会收到两个同样的数据分组,即重复分组。若接收方不能识别重复分组,则会导致另一种差错——数据重复,这也是一种不允许出现的差错。为了解决该问题,必须使每个数据分组带上不同的发送序号。每发送一个新的数据分组就把它的发送序号加1。若接收方连续收到发送序号相同的数据分组,就表明出现了重复分组。这时应当丢弃重复的分组。但应注意,此时接收方还必须向发送方再补发一个确认分组ACK(见图3-12(c))。

我们知道,任何一个编号系统的序号所占用的比特数一定是有限的。因此,经过一段时间后,发送序号就会被重复使用。例如,当发送序号占用3bit时,就有8个不同的发送序号。因此,要进行编号就要考虑序号到底要占用多少个比特。序号占用的比特数越少,数据传输的额外开销就越少。若不考虑失序情况(后发送的分组比先发送的分组先到达),对于停止等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的分组的序号不同就可以了,因此用一个比特来编号就够了。

那么确认分组需不需要编号呢?图3-12(d)所示,由于往返时间的不确定性,有可能一个迟到的确认导致发送方过早超时。过早超时会使接收方收到重复的确认分组,发送方应该丢弃重复的确认分组,针对这种情况确认分组也应该使用序号。由于数据链路层点对点的往返时间比较确定,不太会出现过早超时情况,在数据链路层实现停止等待协议也可以不对确认分组进行编号。

图像说明文字

使用上述的确认和重传机制,我们就可以在不可靠的信道上实现可靠的数据传输。像上述的这类通过确认和超时重传机制实现的可靠传输协议,常称为自动请求重传(Automatic Repeat reQuest,ARQ)协议。意思是重传的请求是自动进行的。因为不需要接收方显式地请求发送方重传某个出错的分组。这里要注意的是,发送方发送完一个分组后,必须暂时保留已发送的分组的副本(为重传时使用)。只有在收到相应的确认后才能清除该分组副本。保留复本、重传、确认和编号都是可靠传输协议实体自己的行为,而上层实体完全感觉不到这些。

2.停止等待协议的算法描述

为了对上面所述的停止等待协议有一个完整而准确的理解,下面给出此协议的算法,读者应弄清算法中的每一个步骤。

在发送方:

(1)从主机取一个数据帧;
(2)V(S)←0, {发送状态变量初始化};
(3)N(S)←V(S), {将发送状态变量的数值写入发送序号N(S)},将数据帧送交发送缓存;
(4)将发送缓存中的数据帧发送出去;
(5)设置超时计时器, {选择适当的超时重传时间tout};
(6)等待, {等待以下(7)~ (9)这三个事件中最先出现的一个};
(7)若收到确认帧ACK,且确认序号A(R)= V(S),则
从主机取一个新的数据帧,
V(S)←[V(S)+ 1] mod 2N, {更新发送状态变量,N为序号字段位数},
转到 (3);
(8)若收到确认帧ACK,且确认序号A(R) V(S),则
转到(6), {重复确认,忽略};
(9)若超时计时器时间到,则转到(4), {重传数据帧}。

在接收方:

(1)V(R)←0, {接收状态变量初始化,其数值等于欲接收的数据帧序号};
(2)等待;
(3)当收到一个数据帧,就检查有无产生传输差错(如用CRC),
若检查结果正确无误,则执行后续算法,
否则丢弃此数据帧,然后转到(2);
(4)若N(S)= V(R),则执行后续算法, {收到发送序号正确的数据帧},
否则丢弃此数据帧,然后转到(8), {收到重复数据帧,重发确认帧};
(5)将收到的数据帧中的数据部分送交主机;
(6)V(R)←[V(R)+ 1] mod 2N, {更新接收状态变量,准备接收下一个数据帧};
(7)生成新的确认帧ACK,
A(R)←V(R), {将接收状态变量的数值写入确认序号A(R)};
(8)发送已生成的确认帧ACK,并转到(2)。

从以上算法可知,停止等待协议中需要特别注意的地方,就是在收发两端各设置一个本地状态变量记录当前的发送序号或接收序号。状态变量的概念很重要,一定要弄清以下几点。

(1)每发送一个数据帧,都必须将发送状态变量V(S)的值写到数据帧的发送序号N(S)上。但只有收到一个序号正确的确认帧ACK后,才更新发送状态变量V(S)一次并发送新的数据帧。
(2)在接收端,每接收到一个数据帧,就要将发方在数据帧上设置的发送序号N(S)与本地的接收状态变量V(R)相比较。若二者相等就表明是新的数据帧(更新状态变量,生成并发送确认帧ACK),否则为重复帧。
(3)在接收端,若收到一个重复帧,则丢弃它(即不做任何处理),且接收状态变量不变,但此时需向发送端重发上次的确认帧ACK(序号不变)。
(4)发送方在发送完数据帧时,必须在其发送缓存中保留此数据帧的副本。这样才能在出差错时进行重传。只有在收到对方发来的确认帧ACK时,方可清除此副本。
(5)这里为了协议的简单性没有使用NAK,但对于误码率比较高的点对点链路,使用NAK可以使发送方能更加及时地进行重传而不需要等待超时。

3.停止等待协议的信道利用率

停止等待协议的优点是简单,但缺点是信道利用率太低。我们可以用图3-13来说明这个问题。为了简单起见,就假定在A和B之间有一条直通的信道来传送分组。

图像说明文字

从图3-13可看出,当RTT远大于分组发送时间TD时,信道的利用率就会非常低。还应注意的是,这里还没有考虑出现差错后的分组重传。若出现重传,则对传送有用的数据信息来说,信道的利用率就还要降低。但是,当RTT远小于分组发送时间TD时,信道的利用率还是非常高的,因此停止等待协议应用于后面将要讨论的无线局域网。 在RTT相对较大的情况下,为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输方式(见图3-14)。流水线传输方式就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地在传送。显然,这种传输方式可以获得很高的信道利用率。

图像说明文字

4.回退N步协议

当使用流水线传输方式时,发送方不间断地发送分组可能会使接收方或网络来不及处理这些分组,从而导致分组的丢失。发送方发送的分组在接收方或网络中被丢弃,实际上是对通信资源的严重浪费。因此发送发不能无限制地一直发送分组,必须采取措施限制发送方连续发送分组的个数。回退N步(Go-back-N,GBN)协议在流水线传输的基础上利用发送窗口来限制发送方连续发送分组的个数,是一种连续ARQ协议。为此,在发送方要维持一个发送窗口。发送窗口是允许发送方已发送但还没有收到确认的分组序号的范围,窗口大小就是发送方已发送但还没有收到确认的最大分组数。实际上,发送窗口为1的GBN协议就是我们刚刚讨论过的停止等待协议。

以图3-15(a)为例,发送窗口大小为5,位于发送窗口内的5个分组都可连续发送出去,而不需要等待对方的确认。GBN协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。图3-15(b)表示发送方收到了对第1个分组的确认,于是把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,那么现在就可以发送窗口内的第6个分组了。在协议的工作过程中发送窗口不断向前滑动,因此这类协议又称为滑动窗口协议。

图像说明文字

图3-16所示为当发送窗口大小为4时GBN协议的工作过程。

图像说明文字

这里要注意以下3点。

(1)接收方只按序接收分组。如图3-16(b)所示,虽然在出现差错的数据分组DATA2之后收到了正确的分组DATA3、DATA4和DATA5,但都必须将它们丢弃,因为在没有正确接收DATA2之前,这些分组都是失序到达的分组。当收到序号不对的分组,接收方除了将它们丢弃外,还要对最近按序接收的分组进行确认。如果将接收方允许接收的分组序号的范围定义为接收窗口的话,GBN协议的接收窗口的大小为1。接收方只接收序号落在接收窗口内的分组并向前滑动接收窗口。
(2)在发送方,依然采用超时机制来重传出现差错或丢失的分组。由于接收方只接收按序到达的分组,一旦某个分组出现差错(超时),其后连续发送的所有分组都要被重传(见图3-16(b)),最多会重传窗口大小个分组。这就是GBN协议名称的由来,即一旦出错需要退回去重传已发送过的N个分组。
(3)接收方采用累积确认的方式。接收方对分组n的确认,表明接收方已正确接收到分组n及以前的所有分组。因此,接收方不一定要对收到的分组逐个发送确认,而是可以在收到几个分组后(由具体实现决定),对按序到达的最后一个分组发送确认。累积确认有优点也有缺点。优点是容易实现,即使确认丢失也可能不必重传(见习题3-10)。但缺点是不能向发送方准确反映出接收方已经正确收到的所有分组的信息。

5.选择重传协议

GBN协议存在一个缺点:一个分组的差错可能引起大量分组的重传,这些分组可能已经被接收方正确接收了,但由于未按序到达而被丢弃。显然对这些分组的重传是对通信资源的极大浪费。为进一步提高性能,可设法只重传出现差错的分组,但这时接收窗口不再为1,以便先收下失序到达但仍然处在接收窗口中的那些分组,等到所缺分组收齐后再一并送交上层。这就是选择重传(Selective Repeat,SR)协议。注意,为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的分组进行逐一确认。显然,SR协议比GBN协议要复杂,并且接收方需要有足够的缓存来暂存失序到达的分组。图3-17所示为当发送窗口和接收窗口大小均为4时的SR协议的工作过程。

图像说明文字

由图3-17中可以看出,当接收方正确收到失序的分组时,只要落在接收窗口内就先缓存起来并发回确认,如DATA3、DATA4和DATA5,但是这些分组不能交付给上层。发送方在收到ACK2之前,发送窗口一直保持为2 ~ 5,因此在发送完DATA5后只能暂停发送分组。发送方收到失序的ACK3、ACK4和ACK5后并不改变发送窗口,但要记录DATA3、DATA4和DATA5已被确认,因此只有DATA2被超时重传。注意,在SR中,ACKn仅表示对分组DATAn的确认。接收方收到重传的DATA2后,将其和已缓存的DATA3、DATA4和DATA5一起交付给上层,并将接收窗口改为6~9。发送方接收到盼望已久的ACK2后,将发送窗口改为6~9,并又可以继续发送分组DATA6~DATA9了。将图3-16与图3-17进行比较,很容易发现,后者只重传了DATA2一个分组,而前者重传了DATA2~DATA5的4个分组。

6.数据链路层的可靠传输

从以上的讨论可以看出,不可靠的链路加上适当的协议(例如,停止等待协议)就可以使链路层向上提供可靠传输服务。但我们付出的代价是数据的传输效率降低了。因此,应当根据链路的具体情况来决定是否需要让链路层向上提供可靠传输服务。

在过去,由于通信链路质量不好(表现为误码率高),在数据链路层曾广泛使用可靠传输协议,但随着技术的发展,现在的有线通信链路的质量已经非常好了。由于通信链路质量不好引起差错的概率已大大降低,因此,现在因特网广泛使用的数据链路层协议都尽量不使用确认和重传机制,即不要求数据链路层向上提供可靠传输服务。若数据链路层传输数据偶尔出现了差错,并且需要进行改正,则改正差错的任务就由上层协议(例如,运输层的TCP协议)来完成。实践证明,这样做可以提高通信效率,降低设备成本。但是在使用无线信道传输数据时,由于无线信道误码率较高,往往需要在数据链路层实现可靠传输服务以尽快恢复差错,为上层提供较好的传输服务。

3.2 点对点协议PPP

在通信线路质量较差的年代,能实现可靠传输的高级数据链路控制(High-level Data Link Control,HDLC)成为了当时比较流行的数据链路层协议。HDLC是一个比较复杂的协议,实现了滑动窗口协议,并可支持点对点和点对多点两种连接方式。对于现在误码率已非常低的点对点有线链路,HDLC已很少使用了,而简单得多的点对点协议(Point-to-Point Protocol,PPP)则是目前使用最广泛的点对点数据链路层协议。

我们知道,因特网用户通常都要连接到某个ISP才能接入到因特网。用户计算机和ISP进行通信时,所使用的数据链路层协议通常就是PPP协议(见图3-18)。PPP协议是IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC 1661, RFC 1662]。

图像说明文字

3.2.1 PPP的特点

PPP的主要特点如下。

(1)简单。数据链路层的PPP非常简单:接收方每收到一个帧,就进行CRC检验。如CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务。如需要可靠传输,则由运输层来完成。
(2)封装成帧。PPP规定了特殊的字符作为帧定界符(即标志一个帧的开始和结束的字符),以便使接收端从收到的比特流中能准确地找出帧的开始和结束位置。
(3)透明性。PPP能够保证数据传输的透明性。
(4)多种网络层协议和多种类型链路。PPP能够在同一条物理链路上同时支持多种网络层协议(如IP和IPX等)的运行,以及能够在多种类型的点对点链路上运行。例如,一条拨号电话线路,一条SONET/SDH链路,一条X.25连接或者一条ISDN电路,这些链路可能是串行的或并行的,同步的或异步的,低速的或高速的,电的或光的等。PPP可以用于用户PC到ISP接入服务器间的点对点接入链路,也可以用于路由器之间的专用线路。
这里特别要提到的是,在1999年公布的在以太网上运行的PPP,即PPP over Ethernet,简称为PPPoE。这就是PPP能够适应多种类型链路的一个典型例子。PPPoE使ISP可以通过DSL、电路调制解调器、以太网等宽带接入技术以以太网接口的形式为用户(一个或多个用户)提供接入服务。我们将在3.4节讨论以太网。
(5)差错检测。PPP能够对接收端收到的帧进行差错检测(但不进行纠错),并立即丢弃有差错的帧。若在数据链路层不进行差错检测,那么已出现差错的无用帧,就还要在网络中继续向前转发,因而会白白浪费许多的网络资源。
(6)检测连接状态,PPP具有一种机制,能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要有这种及时检测功能。
(7)最大传送单元。PPP对每一种类型的点对点链路设置最大传送单元MTU的标准默认值 。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。
(8)网络层地址协商。PPP提供了一种机制使通信的两个网络层(例如,两个IP层)实体能够通过协商知道或能够配置彼此的网络层地址。这对拨号连接的链路特别重要,因为在链路层建立了连接后,用户需要配置一个网络层地址,才能在网络层传送分组。

3.2.2 PPP的组成

PPP有3个组成部分。

(1)一个将IP数据报封装到串行链路的方法。PPP既支持面向字符的异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中作为信息部分被传输。这个信息部分的长度受最大传送单元MTU的限制。
(2)一个用来建立、配置和测试数据链路连接的链路控制协议(Link Control Protocol,LCP)。通信的双方可协商一些选项。在RFC 1661中定义了11种类型的LCP分组。
(3)一套网络控制协议(Network Control Protocol,NCP) ,其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet,以及AppleTalk等。

3.2.3 PPP的帧格式

1.各字段的意义

PPP的帧格式如图3-19所示。PPP帧的首部和尾部分别为四个字段和两个字段。

图像说明文字

首部的第一个字段和尾部的第二个字段都是标志字段F (Flag),规定为0x7E(符号“0x”表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110)。标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。

首部中的地址字段A规定为0xFF(即11111111),控制字段C规定为0x03(即00000011)。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出。可见这两个字段实际上并没有携带PPP帧的信息。

PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的分组,而0x8021表示这是网络控制协议NCP的分组 。

信息字段的长度是可变的,不超过1500字节。

尾部中的第一个字段(2字节)是使用CRC的帧检验序列FCS。

2.透明传输

当信息字段中出现和标志字段一样的比特组合(0x7E)时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

当PPP采用异步传输时,它把转义符定义为0x7D,并使用字节填充。RFC 1662规定了如下所述的填充方法。

(1)把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D, 0x5E)。
(2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D, 0x5D)。
(3)若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列(0x7D, 0x23)。

由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。

PPP用在SONET/SDH链路时,使用面向比特的同步传输(一连串的比特连续传送)而不是面向字符的异步传输(逐个字符地传送)。在这种情况下,PPP采用前面介绍的零比特填充方法来实现透明传输。

3.2.4 PPP的工作状态

上一节我们通过PPP帧格式讨论了PPP帧是怎样组成的。但PPP链路一开始是怎样被初始化的?这里以拨号接入为例简要介绍其过程。当用户拨号接通ISP拨号服务器后,就建立了一条从用户PC到ISP的物理连接。这时,用户PC向ISP发送一系列的LCP分组(封装成多个PPP帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,NCP给新接入的用户PC分配一个临时的IP地址。这样,用户PC就成为因特网上的一个有IP地址的主机了。

当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接。

上述过程可用图3-20的状态图来描述。

图像说明文字

PPP链路的起始和终止状态永远是图3-20中的“静止”状态,这时并不存在物理层的连接。当检测到调制解调器的载波信号,并建立物理层连接后,PPP就进入链路的“建立” 状态。这时LCP开始协商一些配置选项,即发送LCP的配置请求帧(configure-request)。这是个PPP帧,其协议字段配置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应。

(1)配置确认帧(configure-ack):所有选项都接受。
(2)配置否认帧(configure-nak):所有选项都理解但不能接受。 (3)配置拒绝帧(configure-reject):有的选项无法识别或不能接受,需要协商。

LCP配置选项包括链路上的最大帧长、所使用的鉴别协议(authentication protocol)的规约(如果有的话),以及不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部中省略这两个字节)。

协商结束后就进入“鉴别”状态。若通信的双方鉴别身份成功,则进入“网络”状态。这就是PPP链路的两端互相交换网络层特定的网络控制分组。如果在PPP链路上运行的是IP,则使用IP控制协议IPCP (IP Control Protocol)来对PPP链路的每一端配置IP模块(如分配IP地址)。和LCP分组封装成PPP帧一样,IPCP分组也封装成PPP帧(其中的协议字段为0x8021)在PPP链路上传送。当网络层配置完毕后,链路就进入可进行数据通信的“打开”状态。两个PPP端点还可发送回送请求LCP分组(echo-request)和回送回答LCP分组(echo-reply)以检查链路的状态。数据传输结束后,链路的一端发出终止请求LCP分组(terminate-request)请求终止链路连接,而当收到对方发来的终止确认LCP分组(terminate-ack)后,就转到“终止”状态。当载波停止后则回到“静止”状态。

3.3 使用广播信道的数据链路层

广播信道可以进行一对多的通信,能很方便且廉价地连接多个邻近的计算机,因此曾经被广泛应用于局域网之中。由于用广播信道连接的计算机共享同一传输媒体,因此使用广播信道的局域网被称为共享式局域网。虽然随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。实际上共享媒体技术最初就用于无线通信领域。

3.3.1 媒体接入控制

用广播信道连接多个站点(可以是主机或下一章要讨论的路由器),一个站点可以方便地给任何其他站点发送数据,但必须解决如果同时有两个以上的站点在发送数据时共享信道上信号冲突的问题。因此共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制(medium access control)或多址接入(multiple access) 问题。

媒体接入控制技术主要可以分为以下两大类方法。

(1)静态划分信道。典型技术主要有频分多址、时分多址和码分多址。这些技术利用在2.4节中已经介绍过的频分复用、时分复用和码分复用方法将共享信道划分为N个独立的子信道,每个站点分配一个专用的信道用于发送数据,并可在所有的信道上接收数据,从而保证站点无冲突地发送数据。显然这种固定划分信道的方法非常不灵活,对于突发性数据传输信道利用率会很低,通常在无线网络的物理层中使用,而不是在数据链路层中使用。

(2)动态接入控制。其特点是各站点动态占用信道发送数据,而不是使用预先固定分配好的信道。这里又分为以下两类。

  • 随机接入。随机接入的特点是所有站点通过竞争,随机地在信道上发送数据。如果恰巧有两个或更多的站点在同一时刻发送数据,那么信号在共享媒体上就要产生碰撞(即发生了冲突),使得这些站点的发送都失败。因此,这类协议要解决的关键问题是如何尽量避免冲突及在发生冲突后如何尽快恢复通信。著名的共享式以太网采用的就是随机接入。
  • 受控接入。受控接入的特点是结点不能随机地发送信息而必须服从一定的控制。这类协议的典型代表有集中控制的多点轮询协议和分散控制的令牌传递协议。在集中控制的多点轮询协议中有一个主站以循环方式轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据。集中控制的最大缺点在于存在单点故障问题。而在分散控制的令牌传递协议中各站点是平等的,并连接成一个环形网络。令牌(一个特殊的控制帧)沿环逐站传递,接收到令牌的站点才有权发送数据,并且在发送完数据后将令牌传递给下一个站点。采用令牌传递协议的典型网络有令牌环网(IEEE 802.5)、令牌总线网(IEEE 802.4)和光纤分布式数据接口(Fiber Distributed Data Interface,FDDI)。不过这些网络由于市场竞争已逐步退出了历史舞台。

3.3.2 局域网

局域网是在20世纪70年代末发展起来的。局域网技术在计算机网络中占有非常重要的地位。局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。在局域网刚刚出现时,局域网比广域网具有较高的数据率、较低的时延和较小的误码率。但随着光纤技术在广域网中普遍使用,现在广域网也具有很高的数据率和很低的误码率。

最初,局域网主要用来连接一个单位内部的计算机,使它们能够方便地共享所有连接在局域网上的各种硬件、软件和数据资源。现在,局域网将各种企业、机构、校园中的大量用户接入到互联网中,并且网络中大部分的信息资源都集中在这些局域网中,而广域网往往只是充当连接众多局域网的远程链路。

1.局域网拓扑

局域网可按网络拓扑进行分类。图3-21(a)所示为星形网。由于集线器(hub)的出现和双绞线大量用于局域网中,星形以太网及多级星形结构的以太网获得了非常广泛的应用。图3-21(b)所示为环形网,如前面介绍的令牌环网。图3-21(c)所示为总线网,各站点直接连在总线上,总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射。总线网以传统以太网最为著名。局域网经过了三十多年的发展,尤其是在快速以太网(100 Mbit/s)、吉比特以太网(1 Gbit/s)和10吉比特以太网(10 Gbit/s)相继进入市场后,以太网已经在局域网市场中占据了绝对优势。现在以太网几乎成为了局域网的同义词,因此本书主要以以太网技术为例来讨论局域网。

图像说明文字

局域网可使用多种传输媒体。双绞线最便宜,现在10 Mbit/s甚至100 Mbit/s乃至1Gbit/s的局域网都可使用双绞线。双绞线已成为局域网中的主流传输媒体。当数据率很高时,往往需要使用光纤作为传输媒体。

必须指出,局域网工作的层次跨越了数据链路层和物理层。由于局域网技术中有关数据链路层的内容比较丰富,因此我们就把局域网的内容放在数据链路层这一章中讨论,但这并不表示局域网仅仅和数据链路层有关。

2.局域网体系结构

在局域网发展的初期,各种类型的网络相继出现,并且各自采用不同的网络拓扑和媒体接入控制技术。出于有关厂商在商业上的激烈竞争,IEEE 802委员会 未能形成一个统一的、“最佳的”局域网标准,而是被迫制定了几个不同的局域网标准。为了使数据链路层能更好地适应多种局域网标准,IEEE 802委员会就把局域网的数据链路层拆成两个子层,即逻辑链路控制(Logical Link Control,LLC)子层和媒体接入控制(Medium Access Control,MAC)子层。与接入到传输媒体有关的内容都放在MAC子层,而LLC子层则与传输媒体无关,不管采用何种传输媒体和MAC子层的局域网,对LLC子层来说都是透明的(见图3-22)。LLC子层可以为不同类型的网络层协议提供不同类型的数据传输服务,例如,无确认无连接服务、面向连接的可靠传输服务或带确认的无连接服务。

图像说明文字

然而到了20世纪90年代后,以太网在局域网市场中已取得了垄断地位,并且几乎成为了局域网的代名词,TCP/IP体系经常使用的局域网只剩下DIX Ethernet V2而不是IEEE 802.3标准中的局域网,因此现在IEEE 802委员会制定的逻辑链路控制子层LLC(即IEEE 802.2标准)的作用已经基本消失,很多厂商生产的适配器上就仅装有MAC协议而没有LLC协议。本章在介绍以太网时就不再考虑LLC子层。

3.网络适配器

首先我们从一般的概念上讨论一下计算机是怎样连接到局域网上的。

计算机与外界局域网的连接是通过通信适配器(adapter)。适配器本来是在主机箱内插入的一块网络接口板(或者是在笔记本电脑中插入的一块PCMCIA卡)。这种接口板又称为网络接口卡(Network Interface Card,NIC)或简称为“网卡”。由于目前多数计算机主板上都已经嵌入了这种适配器,不再使用单独的网卡了,因此本书使用适配器这个更准确的术语。适配器有自己的处理器和存储器(包括RAM和ROM),是一个半自治的设备。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。要想使适配器能正常工作,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后就会告诉适配器,应当从存储器的什么位置上把多长的数据块发送到局域网,或者应当在存储器的什么位置上把局域网传送过来的数据块存储下来。适配器还要能够实现局域网数据链路层和物理层的协议。

适配器接收和发送各种帧时不使用计算机的CPU,这时CPU可以处理其他任务。当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。当计算机要发送IP数据报时,就由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。图3-23表示适配器的作用。我们特别要注意,计算机的硬件地址(在后面讨论)就在适配器的ROM中,而计算机的软件地址——IP地址(在4.2.2小节讨论),则在计算机的存储器中。

图像说明文字

4.MAC地址

前面我们讨论过的使用点对点信道的数据链路层不需要使用地址,因为连接在信道上的只有两个站点,但当多个站点连接在同一个广播信道上要想实现两个站点的通信,则每个站点都必须有一个唯一的标识,即一个数据链路层地址。在每个发送的帧中必须携带标识接收站点和发送站点的地址。由于该地址用于媒体接入控制,因此被称为MAC地址。

802标准为局域网规定了一种48位的全球地址(一般都简称为“地址”),是指局域网上的每一台计算机中固化在适配器ROM中的地址。实际上这个地址仅仅是一个适配器的标识符,它并不能告诉我们这个计算机所在的位置。因此,有以下两种情况。

(1)假定连接在局域网上的一台计算机的适配器坏了而我们更换了一个新的适配器,那么这台计算机的局域网“地址”也就改变了,虽然这台计算机的地理位置一点也没有变化,所接入的局域网也没有任何改变。
(2)假定我们把位于南京的某局域网上的一台笔记本电脑携带到北京,并连接在北京的某局域网上。虽然这台计算机的地理位置改变了,但只要计算机中的适配器不变,那么该计算机在北京的局域网中的“地址”仍然和它在南京的局域网中的“地址”一样。

请注意,如果连接在局域网上的主机或路由器安装有多个适配器,那么这样的主机或路由器就有多个“地址”。更准确些说,这种48位“地址”应当是某个接口的标识符。

现在IEEE的注册管理机构(Registration Authority,RA)是局域网全球地址的法定管理机构,它负责分配地址字段的6个字节中的前三个字节(即高位24位)。世界上凡要生产局域网适配器的厂家都必须向IEEE购买由这三个字节构成的这个号(即地址块),这个号的正式名称是组织唯一标识符(Organizationally Unique Identifier,OUI),通常也叫作公司标识符(company_id)。例如,3Com公司生产的适配器的MAC地址的前三个字节是02-60-8C 。地址字段中的后三个字节(即低位24位)则是由厂家自行指派,称为扩展标识符(extended identifier),只要保证生产出的适配器没有重复地址即可。可见用一个地址块可以生成224个不同的地址。用这种方式得到的48位地址称为MAC-48,它的通用名称是EUI-48,这里EUI表示扩展的唯一标识符(Extended Unique Identifier)。EUI-48的使用范围并不局限于局域网的硬件地址,而是可以用于软件接口。但应注意,24位的OUI不能够单独使用来标志一个公司,因为一个公司可能有几个OUI,也可能有几个小公司合起来购买一个OUI。在生产适配器时,这种6字节的MAC地址已被固化在适配器的ROM中。因此,MAC地址也叫作硬件地址或物理地址,是一种平面结构的地址(即没有层次结构) ,不论适配器移动到哪里都不会改变。可见“MAC地址”实际上就是适配器地址或适配器标识符EUI-48。当这块适配器插入(或嵌入)到某台计算机后,适配器上的标识符EUI-48就成为这台计算机的MAC地址了。

IEEE规定地址字段的第一字节的最低位为I/G位。I/G表示Individual/Group。当I/G位为0时,地址字段表示一个单个站地址。当I/G位为1时表示组地址,用来进行多播(以前曾译为组播)。因此,IEEE只分配地址字段前三个字节中的23位。当I/G位分别为0和1时,一个地址块可分别生成224个单个站地址和224个组地址。需要指出,有的书把上述最低位写为“第一位”,但“第一”的定义是含糊不清的。这是因为在地址记法中有两种标准:第一种记法是把每一字节的最低位写在最左边(最左边的最低位是第一位),IEEE 802.3标准就采用这种记法;第二种记法是把每一字节的最高位写在最左边(最左边的最高位是第一位)。在发送数据时,两种记法都是按照字节的顺序发送,但每一个字节中先发送哪一位则不同:第一种记法先发送最低位,第二种记法先发送最高位。

IEEE还考虑到可能有人并不愿意向IEEE的RA购买OUI。为此,IEEE把地址字段第1字节的次低位规定为G/L位,表示Global/Local。当G/L位为0时是全球管理(保证在全球没有相同的地址),厂商向IEEE购买的OUI都属于全球管理。当地址字段的G/L位为1时是本地管理,这时用户可任意分配网络上的地址。采用2字节地址字段时全都是本地管理。但应当指出,以太网几乎不使用这个G/L位。

这样,在全球管理时,对每一个站点的地址可用46位的二进制数字来表示(最低位为0和最低第2位为1时)。剩下的46位组成的地址空间可以有246个地址,已经超过70万亿个,可保证世界上的每一个适配器都可有一个唯一的地址。

当路由器通过适配器连接到局域网时,适配器上的硬件地址就用来标志路由器的某个接口。路由器如果同时连接到两个网络上,那么它就需要两个适配器和两个硬件地址。

适配器有过滤功能。适配器从网络上每收到一个MAC帧就先用硬件检查MAC帧中的目的地址。如果是发往本站的帧则收下,然后再进行其他处理,否则就将此帧丢弃,不再进行其他处理。这样做就不浪费主机的处理机和内存资源。这里“发往本站的帧”包括以下3种帧:

(1)单播(unicast)帧(一对一),即收到的帧的MAC地址与本站的硬件地址相同;
(2)广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧(全1地址);
(3)多播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。

所有的适配器都至少应当能够识别前两种帧,即能够识别单播和广播地址。有的适配器可用编程方法识别多播地址。当操作系统启动时,它就把适配器初始化,使适配器能够识别某些多播地址。显然,只有目的地址才能使用广播地址和多播地址。

通常适配器还可设置为一种特殊的工作方式,即混杂方式(promiscuous mode)。工作在混杂方式的适配器只要“听到”有帧在共享媒体上传输就悄悄地接收下来,而不管这些帧是发往哪个站点的。请注意,这样做实际上是“窃听”其他站点的通信,而并不中断其他站点的通信。网络上的黑客(hacker或cracker)常利用这种方法非法获取网上用户的口令。

但混杂方式有时却非常有用。例如,网络维护和管理人员需要用这种方式来监视和分析局域网上的流量,以便找出提高网络性能的具体措施。有一种很有用的网络工具叫作嗅探器(Sniffer),就使用了设置为混杂方式的网络适配器。此外,这种嗅探器还可帮助学习网络的人员更好地理解各种网络协议的工作原理。因此,混杂方式就像一把双刃剑,是利是弊要看你怎样使用它。

3.4 共享式以太网

以太网是美国施乐(Xerox)公司的Palo Alto研究中心(简称为PARC)于1975年研制成功的。那时,以太网是一种基带总线局域网,当时的数据率为2.94 Mbit/s。以太网用无源电缆作为总线来传送数据帧,并以曾经在历史上表示传播电磁波的以太(Ether)来命名。1976年7月,Metcalfe和Boggs发表他们的以太网里程碑论文。1980年9月,DEC公司、英特尔(Intel)公司和施乐公司联合提出了10 Mbit/s以太网规约的第一个版本DIX V1(DIX是这三个公司名称的缩写)。1982年又修改为第二版规约(实际上也就是最后的版本),即DIX Ethernet V2,成为世界上第一个局域网产品的规约。

在此基础上,IEEE 802委员会的802.3工作组于1983年制定了第一个IEEE的以太网标准IEEE 802.3,数据率为10 Mbit/s。802.3局域网对以太网标准中的帧格式做了很小的一点改动,但允许基于这两种标准的硬件实现可以在同一个局域网上互操作。以太网的两个标准DIX Ethernet V2与IEEE的802.3标准只有很小的差别,因此很多人也常把802.3局域网简称为“以太网”。但由于在802.3标准公布之前,DIX Ethernet V2已被大量使用,因此最后802.3标准并没有被广泛应用。本书仅讨论DIX Ethernet V2。

以太网目前已从传统的共享式以太网发展到交换式以太网,数据率已演进到每秒百兆比特、吉比特或甚至10吉比特。本节先介绍最早流行的10 Mbit/s速率的共享式以太网。

3.4.1 CSMA/CD协议

本小节以10 Mbit/s总线型以太网为例讨论以太网的媒体接入控制协议CSMA/CD的基本原理。

最早的以太网是将许多站点都连接到一根总线上。当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为:“有源器件不可靠,而无源的电缆线才是最可靠的”。

总线的特点是:当一个站点发送数据时,总线上的所有站点都能检测并接收到这个数据。这种就是广播通信方式。但我们并不总是要在局域网上进行一对多的广播通信。为了在总线上实现一对一的通信,可以使每个站点的适配器拥有一个与其他适配器都不同的地址。在发送数据帧时,在帧的首部写明接收站的地址。现在的电子技术可以很容易做到:仅当数据帧中的目的地址与适配器ROM中存放的硬件地址一致时,该适配器才能接收这个数据帧。适配器对不是发送给自己的数据帧就丢弃。这样,具有广播特性的总线上就实现了一对一的通信。

为了通信的简便,以太网采取了以下两种措施。

第一,采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。适配器对发送的数据帧不进行编号,也不要求对方发回确认。这样做的理由是局域网信道的质量很好,因通信质量不好产生差错的概率是很小的。因此,以太网提供的服务是不可靠的交付,即尽最大努力的交付。当目的站收到有差错的数据帧时(例如,用CRC查出有差错),就把帧丢弃,其他什么也不做。对有差错帧是否需要重传则由高层来决定。但以太网并不知道这是重传帧,而是当作新的数据帧来发送。

第二,以太网采用基带传输,发送的数据都使用曼彻斯特(Manchester)编码的信号(见图2-2)。曼彻斯特编码在每一个比特信号的正中间有一次电平的跳变,接收端可以很容易地利用这个比特信号的电平跳变来提取信号时钟频率,并与发送方保持时钟同步。但是曼彻斯特编码的缺点就是它所占的频带宽度比原始的基带信号增加了一倍(因为每秒信号的电平变化次数加倍了)。

剩下的一个重要问题就是如何协调总线上各站点的工作。我们知道,总线上只要有一个站点在发送数据,总线的传输资源就被占用。因此,在同一时间只能允许一个站点发送数据,否则各站点之间就会互相干扰,结果大家都无法正常发送数据。

以太网采用的协调方法是使用一种特殊的协议CSMA/CD,它是载波监听多址接入/碰撞检测(Carrier Sense Multiple Access/Collision Detection)的缩写。下面是CSMA/CD协议的要点。

“多址接入”就是说明这是一种多址接入协议,许多站点以多址接入的方式连接在一根总线上。协议的实质是“载波监听”和“碰撞检测”。

“载波监听”就是“发送前先监听”,即每一个站点在发送数据之前先要检测一下总线上是否有其他站点在发送数据,如果有,则暂时不要发送数据,要等待信道变为空闲时再发送。其实总线上并没有什么“载波” ,“载波监听”就是用电子技术检测总线上有没有其他站点发送的数据信号。

“碰撞检测”就是“边发送边监听”,即适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加)。当适配器检测到的信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站点同时在发送数据,表明信号发生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。因此,每一个正在发送数据的站点,一旦发现总线上出现了碰撞,适配器就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。

可以把CSMA/CD协议的要点归纳如下。

(1)适配器从网络层获得一个分组,加上以太网的首部和尾部(见后面的3.4.4小节),组成以太网帧,放入适配器的缓存中,准备发送。
(2)若适配器检测到信道空闲96比特时间,就发送这个帧。若检测到信道忙,则继续检测并等待信道转为空闲96比特时间,然后发送这个帧。
(3)在发送过程中继续检测信道,若一直未检测到碰撞,就顺利把这个帧成功发送完毕。若检测到碰撞,则中止数据的发送,并发送人为干扰信号。

(4)在中止发送后,适配器就执行指数退避算法,随机等待r倍512比特时间后,返回到步骤(2)。

3.4.2 共享式以太网的信道利用率

当网络覆盖范围越大,即端到端时延越大,信道极限利用率越低,即网络性能越差。另外,端到端时延越大或连接的站点越多,都会导致发生冲突的概率变大,网络性能还会进一步降低。可见,共享式以太网只能作为一种局域网技术。

传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。这种以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫作集线器(hub),如图3-27所示。双绞线以太网总是和集线器配合使用的。每个站点需要用两对无屏蔽双绞线(做在一根电缆内),分别用于发送和接收。双绞线的两端使用RJ-45插头。由于集线器使用了大规模集成电路芯片,因此集线器的可靠性就大大提高了。1990年,IEEE制定出星形以太网10BASE-T的标准802.3i。“10”代表10 Mbit/s 的数据率,BASE表示连接线上的信号是基带信号,T代表双绞线(Twisted Pair)。实践证明,这比使用具有大量机械接头的无源电缆要可靠得多。由于使用双绞线电缆的以太网价格便宜和使用方便,因此粗缆和细缆以太网现在都已成为历史,并已从市场上消失了。

图像说明文字

但10BASE-T以太网的通信距离稍短,每个站点到集线器的距离不超过100 m。这种性价比很高的10BASE-T双绞线以太网的出现,是局域网发展史上的一座非常重要的里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。 使双绞线能够传送高速数据的主要措施是把双绞线的绞合度做得非常精确。这样不仅可使特性阻抗均匀以减少失真,而且大大减少了电磁波辐射和无线电频率的干扰。在多对双绞线的电缆中,还要使用更加复杂的绞合方法。 集线器的一些特点如下。

(1)从表面上看,使用集线器的局域网在物理上是一个星形网,但由于集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍像一个传统以太网那样运行。也就是说,使用集线器的以太网在逻辑上仍是一个总线网,各站点共享逻辑上的总线,使用的还是CSMA/CD协议(更具体些,是各站点中的适配器执行CSMA/CD协议)。网络中的各站点必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站点发送数据。因此这种10BASE-T以太网又称为星形总线(star-shaped bus)或盒中总线(bus in a box)。
(2)一个集线器有许多接口 ,例如,8~16个,每个接口通过RJ-45插头(与电话机使用的插头RJ-11相似,但略大一些)用两对双绞线与一个站点上的适配器相连(这种插座可连接4对双绞线,实际上只用2对,即发送和接收各使用一对双绞线)。因此,一个集线器很像一个多接口的转发器。
(3)集线器工作在物理层,它的每个接口仅仅简单地转发比特——收到1就转发1,收到0就转发0,不进行碰撞检测。若两个接口同时有信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。图3-28所示为具有三个接口的集线器的示意图。

图像说明文字

(4)集线器采用了专门的芯片进行自适应串音回波抵消。这样就可使接口转发出去的较强信号不致对该接口接收到的较弱信号产生干扰(这种干扰即近端串音)。每个比特在转发之前还要进行再生整形并重新定时。

集线器本身必须非常可靠,一般都有一定的容错能力。例如,假定在以太网中有一个适配器出了故障,不停地发送以太网帧。这时,集线器可以检测到这个问题,在内部断开与出故障的适配器的连线,使整个以太网仍然能够正常工作。集线器上的指示灯还可显示网络上的故障情况,给网络的管理带来了很大的方便。

IEEE 802.3标准还可使用光纤作为传输媒体,相应的标准是10BASE-F系列,F代表光纤。它主要用作集线器之间的远程连接。

3.4.4 以太网的帧格式

常用的以太网MAC帧格式有两种标准,一种是DIX Ethernet V2标准(即以太网V2标准),另一种是IEEE的802.3标准。这里只介绍使用得最多的以太网V2的MAC帧格式(见图3-29)。图中假定上层协议使用的是IP协议。实际上使用其他的协议也是可以的。

图像说明文字

以太网V2的MAC帧比较为简单,由5个字段组成。前两个字段分别为6字节长的目的地址和源地址字段。第三个字段是2字节的类型字段,用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。例如,当类型字段的值是0x0800时,就表示上层使用的是IP数据报。若类型字段的值为0x8137,则表示上层是Novell IPX协议(一种非TCP/IP网络协议)。第四个字段是数据字段,其长度在46~1500字节(46字节是这样得出的:最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。最后一个字段是4字节的帧检验序列FCS(使用CRC检验)。

当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧长不小于64字节。我们应当注意到,MAC帧的首部并没有指出数据字段的长度是多少。在有填充字段的情况下,接收端的MAC子层在剥去首部和尾部后就把数据字段和填充字段一起交给上层协议。现在的问题是:上层协议如何知道填充字段的长度呢(IP层要丢弃没有用处的填充字段)?可见,上层协议必须具有识别有效的数据字段长度的功能。我们在下一章将会知道,当上层使用IP协议时,其首部就有一个“总长度”字段。因此,“总长度”加上填充字段的长度,应当等于MAC帧数据字段的长度。例如,当IP数据报的总长度为42字节时,填充字段共有4字节。当MAC帧把46字节的数据上交给IP层后,IP层就把其中最后4字节的填充字段丢弃。

从图3-29可看出,在传输媒体上实际传送的要比MAC帧还多8个字节。这是因为当一个站点在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC帧的最前面的若干位就无法接收,结果使整个的MAC成为无用的帧。为了接收端迅速实现位同步,从MAC子层向下传到物理层时还要在帧的前面插入8字节(由硬件生成),它由两个字段构成。第一个字段是7个字节的前同步码(1和0交替码),它的作用是使接收端的适配器在接收MAC帧时能够迅速调整其时钟频率,使它和发送端的时钟同步,也就是“实现位同步”(位同步就是比特同步的意思)。第二个字段是帧开始定界符,定义为10101011。它的前六位的作用和前同步码一样,最后的两个连续的1就是告诉接收端适配器:“MAC帧的信息马上就要来了,请适配器注意接收”。MAC帧的FCS字段的检验范围不包括前同步码和帧开始定界符。顺便指出,在使用SONET/SDH进行同步传输时则不需要用前同步码,因为在同步传输时收发双方的位同步总是一直保持着的。

以太网上传送数据时是以帧为单位传送。以太网在传送帧时,各帧之间还必须有一定的间隙(96比特时间)。因此,接收端只要找到帧开始定界符,其后面的连续到达的比特流就都属于同一个MAC帧。可见以太网不需要使用帧结束定界符,也不需要使用字节填充或比特填充技术来保证透明传输。帧间间隔除了用于接收方检测一个帧的结束,同时也使得所有其他站点都能有机会平等竞争信道并发送数据。

IEEE 802.3标准规定凡出现下列情况之一的即为无效的MAC帧:

(1)帧的长度不是整数个字节;
(2)用收到的帧检验序列FCS查出有差错;
(3)收到的帧的MAC客户数据字段的长度不在46 ~ 1500字节,考虑到MAC帧首部和尾部的长度共有18字节,可以得出有效的MAC帧长度为64 ~ 1518字节。

对于检查出的无效MAC帧就简单地丢弃。以太网不负责重传丢弃的帧。

最后要提一下,IEEE 802.3标准规定的MAC帧格式与上面所讲的以太网V2 MAC帧格式的区别就是两个地方。

第一,IEEE 802.3规定的MAC帧的第三个字段是“长度/类型”。当这个字段值大于0x0600时(相当于十进制的1536),就表示“类型”。这样的帧和以太网V2 MAC帧完全一样。只有当这个字段值小于0x0600时才表示“长度”,即MAC帧的数据部分长度。

第二,当“长度/类型”字段值小于0x0600时,数据字段必须装入上面的LLC子层的LLC帧。 虽然现在市场上流行的都是以太网V2的MAC帧,但大家也常常不严格地称它为IEEE 802.3 MAC帧。

3.5 网桥和以太网交换机

在传统的共享式局域网中,所有站点共享一个公共的传输媒体。随着局域网规模的扩大,网络中站点数目的不断增加,网络通信负载加重时,网络效率将会急剧下降。随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的交换式局域网在有线领域已完全取代了传统的共享式局域网。本节,我们先从扩展局域网的角度,讨论在物理层扩展以太网存在的问题和在数据链路层扩展以太网的数据链路层分组交换设备网桥,然后讨论使用以太网交换机的全双工交换式以太网。

3.5.1 在物理层扩展以太网

以太网两站点之间的距离不能太远(例如,10BASE-T以太网的两个站点之间的距离不超过200m),否则站点发送的信号经过铜线的传输就会衰减到使CSMA/CD协议无法正常工作。在过去广泛使用粗缆或细缆以太网时,常使用工作在物理层的转发器来扩展以太网的地理覆盖范围。那时,两个网段可用一个转发器连接起来。IEEE 802.3标准还规定,任意两个站点之间最多可以经过三个电缆网段。但随着双绞线以太网成为以太网的主流类型,扩展以太网的覆盖范围已很少使用转发器了。

现在,扩展站点和集线器之间的距离的一种简单方法就是使用光纤(通常是一对光纤)和一对光纤调制解调器,如图3-30所示。

图像说明文字

光纤调制解调器的作用就是进行电信号和光信号的转换。由于信号在光纤中衰减和失真很小,使用这种方法可以很容易地使站点和几千米以外的集线器相连接。

一个集线器能连接的站点数非常有限,如果使用多个集线器,就可以连接成覆盖更大范围连接更多站点的多级星形结构的以太网。例如,一个学院的三个系各有一个10BASE-T以太网(见图3-31(a)),可通过一个主干集线器把各系的以太网连接起来,成为一个更大的以太网(见图3-31(b))。

图像说明文字

但这种多级结构的集线器以太网也带来了一些缺点。

(1)如图3-31(a)所示的例子,在三个系的以太网互连起来之前,每一个系的10BASE-T以太网是一个独立的碰撞域(collision domain,又称为冲突域),即在任一时刻,在每一个碰撞域中只能有一个站点在发送数据。每一个系的以太网的最大吞吐量是10 Mbit/s,因此三个系总的最大吞吐量共有30 Mbit/s。在三个系的以太网通过集线器互连起来后,就把三个碰撞域变成了一个碰撞域(范围扩大到三个系),如图3-31(b)所示,而这时的最大吞吐量仍然是一个系的吞吐量10 Mbit/s。这就是说,当某个系的两个站点在通信时所传送的数据会通过所有的集线器进行转发,使得其他系的内部在这时都不能通信(一发送数据就会碰撞)。
(2)如果不同的系使用不同的以太网技术(如数据率不同),那么就不可能用集线器将它们互连起来。如果在图3-31中,一个系使用10 Mbit/s的适配器,而另外两个系使用10/100 Mbit/s的适配器,那么用集线器连接起来后,大家都只能工作在10 Mbit/s的速率。集线器基本上是个多接口(即多端口)的转发器,它并不能把帧进行缓存。

总之,在物理层扩展的以太网仍然是一个碰撞域,不能连接过多的站点,否则平均吞吐量太低,且会导致大量的冲突。同时,不论是利用转发器、集线器还是光纤在物理层扩展以太网,都仅仅相当于延长了共享的传输媒体,由于以太网有争用期对端到端时延的限制,并不能无限扩大地理覆盖范围。

3.5.2 在数据链路层扩展以太网

用网桥可以在数据链路层扩展以太网。网桥工作在数据链路层,采用存储转发方式,它根据MAC帧的目的地址对收到的帧进行转发和过滤。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口,或者是把它丢弃(即过滤)。可见,网桥就是一种数据链路层的分组交换机。

1.网桥的内部结构

图3-32所示为一个网桥的内部结构要点。最简单的网桥有两个接口 。复杂些的网桥可以有更多的接口。两个以太网通过网桥连接起来后,就成为一个覆盖范围更大的以太网,而原来的每个以太网就可以称为一个网段(segment)。图3-32所示的网桥的接口1和接口2各连接到一个网段。

图像说明文字

网桥依靠转发表来转发帧。转发表也叫作转发数据库或路由目录。至于转发表如何得出,我们将在后面第2小点“透明网桥”中讨论。在图3-32中,若网桥从接口1收到A发给E的帧,则在查找转发表后,把这个帧送到接口2转发到另一个网段,使E能够收到这个帧。若网桥从接口1收到A发给B的帧,就丢弃这个帧,因为转发表指出,转发给B的帧应当从接口1转发出去,而现在正是从接口1收到这个帧,这说明B和A处在同一个网段上,B能够直接收到这个帧而不需要借助于网桥的转发。当网桥收到一个广播帧时(目的MAC地址为全1的广播地址),会向除了接收接口以外的其他接口转发。

需要注意的是,网桥的接口在向某个网段转发帧时,就像一个站点的适配器向这个网段发送帧一样,要执行相应的媒体接入控制协议,对于以太网就是CSMA/CD协议。

网桥是通过内部的接口管理软件和网桥协议实体来完成上述操作的。

使用网桥可以带来以下好处。

(1)过滤通信量,增大吞吐量。网桥工作在链路层的MAC子层,可以使以太网各网段成为隔离开的碰撞域。如果把网桥换成工作在物理层的转发器,那就没有这种过滤通信量的功能。图3-33说明了这一概念。网桥B1和B2把三个网段连接成一个以太网,但它具有三个隔离开的碰撞域。

图像说明文字

我们可以看到,不同网段上的通信不会相互干扰。例如,A和B正在通信,但其他网段上的C和D,以及E和F也都可以同时通信。但如果A要和另一个网段上的C通信,就必须经过网桥B1的转发,那么这两个网段上就不能再有其他的站点进行通信(但这时E和F仍然可以通信)。因此,若每一个网段的数据率都是10 Mbit/s,那么三个网段合起来的最大吞吐量就变成30 Mbit/s。如果把两个网桥换成集线器或转发器,那么整个网络仍然是一个碰撞域,当A和B通信时,所有其他站点都不能够通信。整个碰撞域的最大吞吐量只有10 Mbit/s。
(2)扩大了物理范围。由于隔离了碰撞域,网络覆盖范围不受争用期对端到端传播时延的限制,同时也增加了整个以太网可容纳的站点数目。
(3)提高了可靠性。当网络出现故障时,一般只影响个别网段,网桥不会转发无效的MAC帧。
(4)可互连不同物理层、不同MAC子层和不同速率(如10 Mbit/s和100 Mbit/s以太网)的以太网。

不过,用网桥扩展以太网也还存以下不足。

(1)由于网桥对接收的帧要先存储和查找转发表然后才转发,而转发之前,还必须执行CSMA/CD算法(发生碰撞时要退避),这就增加了时延。
(2)在MAC子层并没有流量控制功能。当网络上的负荷很重时,网桥中的缓存的存储空间可能不够而发生溢出,以致产生帧丢失的现象。
(3)由于网桥会转发所有广播帧,只适合于用户数不太多(不超过几百个)和通信量不太大的以太网,否则有时还会因传播过多的广播信息而产生网络拥塞。这就是所谓的广播风暴。

尽管如此,网桥仍获得了很广泛的应用,因为它的优点还是主要的。

有时在两个网桥之间,还可使用一段点对点链路。图3-34说明了这种情况。

图像说明文字

图中的以太网LAN1和LAN2通过网桥B1和B2,以及一段点对点链路相连。为了简单起见,我们把IP层以上看成是用户层,图中灰色粗线表示数据在各协议栈移动的情况。图3-34的下面部分,表示用户数据从站点A传到B经过各层次时,相应的数据单元首部的变化。这里只需要指出以下几点。

当A向B发送数据帧时,其MAC帧首部中的源地址和目的地址分别是A和B的硬件地址,相当于图中的和所对应的图。当网桥B1通过点对点链路转发数据帧时,若链路采用PPP协议,则要在数据帧的头尾分别加上首部PPP-H和尾部PPP-T。在数据帧离开B2时,还要剥去这个首部PPP-H和尾部PPP-T,然后经过以太网LAN2到达B。 请注意,网桥在转发帧时,不改变帧的源地址。

2.透明网桥

目前使用得最多的网桥是透明网桥(transparent bridge)。“透明”是指局域网上的站点并不知道所发送的帧将经过哪几个网桥,因为网桥对各站点来说是看不见的,站点不需要做任何配置和修改。使用透明网桥连接各局域网,不需人工配置转发表,只要将透明网桥连接到各局域网即可,因此透明网桥是一种即插即用设备,其标准是IEEE 802.1D。

透明网桥是通过一种自学习算法来逐步建立起自己的转发表的。其基本思想就是:如果网桥现在能够从接口x收到从站点A发来的帧,那么以后就可以从接口x将一个目的地址为A的帧转发到站点A。所以网桥只要每收到一个帧,就将其源地址和进入网桥的接口号作为目的地址和转发接口记录到转发表中。当下次网桥接收到以该源地址为目的地址的帧时,就从这个接口转发出去。但是,在网桥学习到转发表各项之前,网桥是如何完成转发工作的呢?当网桥接收到一个帧,如果该帧的目的地址不在转发表中,则网桥向所有其他接口转发该帧。

透明网桥处理该帧和建立转发表的算法具体如下。

(1)从接口x收到无差错的帧(如有差错即丢弃),在转发表中查找目的站MAC地址。
(2)如有,则查找出到此MAC地址应当走的接口d,然后进行步骤(3),否则转到步骤(5)。
(3)如到这个MAC地址去的接口d = x,则丢弃此帧(因为这表示不需要经过网桥进行转发)。否则从接口d转发此帧。
(4)转到步骤(6)。
(5)向除x以外的所有接口转发此帧(这样做可保证找到目的站)。
(6)如源站不在转发表中,则将源站MAC地址加入到转发表,登记该帧进入网桥的接口号和当前时间。然后转到步骤(8)。如源站在转发表中,则执行步骤(7)。
(7)更新转发表该项记录的时间。
(8)等待新的数据帧。转到步骤(1)。

这时,网桥就在转发表中登记以下三个信息。

(1)站地址:登记收到的帧的源MAC地址。
(2)端口:登记收到的帧进入该网桥的接口号。
(3)时间:登记收到的帧进入该网桥的时间(图3-32中的转发表省略了这一项)。

网桥在这样的转发过程中就可逐渐将其转发表建立起来。这里特别要注意的是,转发表中的MAC地址是根据源MAC地址写入的,但在进行转发时是将此MAC地址当作目的地址。

在上述算法中,为什么网桥要记录帧进入该网桥的时间呢?因为局域网的拓扑经常会发生变化,例如,一个站点从一个网段移至另一个网段,或站点更换网卡等。为了使转发表能反映出整个网络的最新拓扑,网桥将每个帧到达网桥的时间登记下来,每经过一段时间就将转发表中陈旧的记录删除,以便在转发表中保留网络拓扑的最新状态信息。

3.生成树协议

透明网桥即插即用,使用起来非常方便,但根据以上透明网桥学习转发表的工作原理,用透明网桥互连多个局域网时不能出现环路,否则有可能帧在环路中会不断地兜圈子。请看如图3-35所示的简单例子,这里用两个网桥将两个局域网LAN1和LAN2互连起来。设站A发送一个帧F,它经过网桥B1和B2。假定帧F的目的地址均不在这两个网桥的转发表中,因此B1和B2都转发帧F。我们将经B1和B2转发的帧F在到达LAN2以后,分别记为F1和F2。 接着F1传到网桥B2,而F2传到了网桥B1。网桥B2和网桥B1分别收到F1和F2后,又将其转发到LAN1。结果引起帧在网络中不停地兜圈子,从而使网络资源不断地白白消耗了。

图像说明文字

然而,当网络比较复杂时,很容易因为误配导致网络出现以上环路,更重要的是,有时需要在两个局域网之间使用多个网桥形成冗余链路以增强网络的可靠性。为了避免帧在网络中不断地兜圈子。透明网桥使用了一个生成树协议(spanning tree protocol,STP),通过互连在一起的网桥间彼此的通信,找出原来的网络拓扑的一个连通子集(生成树),在这个子集里整个连通的网络中不存在环路,即在任何两个站点之间有且只有一条路径。一旦生成树确定了,网桥就会关闭不在生成树链路上的那些接口(这些接口不再接收和转发帧),以确保不存在环路。

为了使生成树能够反映网络拓扑发生的最新变化,各网桥要定期检查所有链路的状态。一旦网络中某条链路出现了问题,网桥就会恢复关闭的接口,并重新开始生成树的构造过程,形成新的生成树,保证网络的连通。

可见,用透明网桥互连的网络中冗余链路可以增强网络的可靠性,但并不能充分利用这些冗余链路(为的是消除兜圈子现象),同时每一个帧也不一定都能沿最佳的路由传送(因为网络的逻辑拓扑被限定为一棵树)。当互连的局域网的数目非常大时,生成树的算法可能要花费很多时间,因此用透明网桥互连的网络规模不宜太大。

4.源路由网桥

透明网桥的最大优点就是容易安装,一接上就能工作。但是,网络资源的利用还不充分。因此,另一种由发送帧的源站负责路由选择的网桥就问世了,这就是源路由(source route)网桥。

源路由网桥是在发送帧时,把详细的路由信息放在帧的首部中。 这里的关键是源站用什么方法才能知道应当选择什么样的路由。

为了发现合适的路由,源站以广播方式向欲通信的目的站发送一个发现帧(discovery frame)作为探测之用。发现帧将在整个扩展的以太网中沿着所有可能的路由传送。在传送过程中,每个发现帧都记录所经过的路由。当这些发现帧到达目的站时,就沿着各自的路由返回源站。源站在得知这些路由后,从所有可能的路由中选择出一个最佳路由。以后,凡从这个源站向该目的站发送的帧的首部,都必须携带源站所确定的这一路由信息。

发现帧还有另一个作用,就是帮助源站确定整个网络可以通过的帧的最大长度。

源路由网桥对主机不是透明的,主机必须知道网桥的标识及连接到哪一个网段上。使用源路由网桥可以利用最佳路由。若在两个以太网之间使用并联的源路由网桥,则可使通信量较平均地分配给每一个网桥。用透明网桥则只能使用生成树,而使用生成树一般并不能保证所使用的路由是最佳的,也不能在不同的链路中进行负载均衡。

但是,源路由网桥对主机的不透明性也正是它的致命缺点。实践证明,即插即用的透明网桥最终取得了市场竞争的胜利,现在源路由网桥很少使用。

3.5.3 以太网交换机

1990年问世的交换式集线器(switching hub),可明显地提高以太网的性能。交换式集线器常称为以太网交换机(switch)或二层交换机或局域网交换机,表明这种交换机工作在数据链路层。

“交换机”并无准确的定义和明确的概念,而现在的很多交换机已混杂了网桥和路由器的功能。著名网络专家Perlman认为:“交换机”应当是一个市场名词,通常指用硬件实现转发功能的分组交换设备,其转发速度比用软件实现要更加快速。目前使用的有线局域网基本上就是以太网,在局域网上下文中人们通常所说的“交换机”是局域网交换机的简称,并且指的就是以太网交换机。在本书中如果不特别说明,“交换机”就是以太网交换机。下面简单地介绍其特点。

从技术上讲,网桥的接口数很少,一般只有2 ~ 4个,而交换机通常都有十几个接口。交换机实质上就是一个多接口的网桥,在数据链路层根据MAC地址转发帧,和工作在物理层的转发器和集线器有很大的差别。此外,交换机的每个接口可以直接连接计算机也可以连接一个集线器或另一个交换机。当交换机直接与计算机或交换机连接时可以工作在全双工方式,并能同时连通许多对的接口,使每一对相互通信的计算机都能像独占传输媒体那样,无碰撞地传输数据,这时已无需使用CSMA/CD协议了。当交换机的接口连接共享媒体的集线器时,仍需要工作在半双工方式并要使用CSMA/CD协议。现在的交换机接口和计算机适配器都能自动识别这两种情况并切换到相应的方式。交换机和透明网桥一样,也是一种即插即用设备,其内部的转发表也是通过自学习算法自动地逐渐建立起来的。交换机由于使用了专用的交换结构芯片,并能实现多对接口的高速并行交换,可以大大提高网络性能。在逻辑上,我们认为网桥和交换机是等价的。

对于普通10 Mbit/s的共享式以太网,若共有N个用户,则每个用户占有的平均带宽只有总带宽(10 Mbit/s)的N分之一。在使用交换机时,虽然在每个接口的带宽还是10 Mbit/s,但由于一个用户在通信时是独占而不是和其他网络用户共享传输媒体的带宽,因此对于拥有N对接口的交换机的总容量为Nx10 Mbit/s。这正是交换机的最大优点。

从共享式10BASE-T以太网转到交换式以太网(全部使用以太网交换机的网络)时,所有接入设备的软件和硬件、适配器等都不需要做任何改动。也就是说,所有接入的设备可以继续使用CSMA/CD协议。此外,只要增加交换机的容量,整个系统的容量是很容易扩充的。 以太网交换机一般都具有多种速率的接口,例如,可以具有10 Mbit/s,100 Mbit/s和1 Gbit/s的接口,以及多速率自适应接口,这就大大方便了各种不同情况的用户。 图3-36举出了一个简单的例子。图中的以太网交换机有三个10 Mbit/s接口分别和学院三个系的10BASE-T以太网相连,还有三个100 Mbit/s的接口分别和电子邮件服务器、万维网服务器及一个连接因特网的路由器相连。

图像说明文字

为了提高交换机的转发速度减小转发时延,一些交换机采用直通(cut-through)的交换方式。直通交换不必把整个帧先缓存后再进行处理,而是在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,因而提高了帧的转发速度。如果在这种交换机的内部采用基于硬件的交叉矩阵,交换时延就非常小。直通交换的一个缺点是它不检查差错就直接将帧转发出去,因此有可能会将一些无效帧转发给其他的站点。要注意的是,当交换机的输出接口有帧排队时,仍然要将帧先缓存起来等输出接口空闲时再进行转发,即仍然需要进行存储转发。因此,我们说一个交换机采用的是直通交换方式,并不表示它不会进行存储转发,而说一个交换机采用的是存储转发交换方式,是指该交换机仅采用存储转发方式进行交换。另外,还有一些情况仍需要采用基于软件的存储转发方式进行交换。例如,当需要进行线路速率匹配、协议转换或差错检测时,有的交换机能支持两种交换方式,用户可以设置其工作的方式,或根据情况自动切换交换方式。

随着交换机成本的降低,由于其性能上的明显优势,交换式以太网基本上已取代了传统的共享式以太网。由于不再使用集线器,全部使用交换机的交换式以太网工作在无碰撞的全双工方式。

3.5.4 虚拟局域网VLAN

由于不能隔离广播流量、不支持网状拓扑结构和平面寻址的低效性,仍然不能用交换机连接过多的计算机。路由器(在下一章具体讨论)能隔离局域网之间的广播流量,并提供最佳的转发路由,大规模网络通常需要使用路由器来互连多个独立的局域网。利用虚拟局域网(Virtual LAN,VLAN),技术管理员可以通过逻辑配置来建立多个逻辑上独立的虚拟网络,交换机就可以很方便地实现虚拟局域网。管理员可以将连接在交换机上的站点按需要划分为多个与物理位置无关的逻辑组,每个逻辑组就是一个VLAN。属于同一VLAN的站点之间可以直接进行通信,而不属于同一VLAN的站点之间不能直接通信,连接在同一交换机上的两个站点可以属于不同的VLAN,而属于VLAN中的两个站点可能连接在不同的交换机上。虚拟局域网其实只是局域网给用户提供的一种服务,而不是一种新型局域网。

图3-37所示为使用了4个交换机的网络拓扑。设有10个站点分布在三个楼层中,分别连接到各自所在楼层的交换机。但这10个站点根据工作需要被划分为三个工作组,也就是说划分为三个VLAN,每个VLAN成员分布在不同的楼层。即: VLAN1:(A1, A2, A3, A4),VLAN2:(B1, B2, B3),VLAN3:(C1, C2, C3)。

图像说明文字

每个VLAN在逻辑上就如同一个物理上独立的局域网一样,VLAN中的站点仅能与同一VLAN中的站点进行通信。例如,站点B1 ~ B3同属于虚拟局域网VLAN2。B1仅能接收到工作组内成员(B2和B3)发送的帧,虽然它们没有和B1连在同一个交换机上。相反,B1接收不到与B1连接在同一个交换机上的其他工作组成员(A1, A2和C1)发送的帧,即使这些帧的目的MAC地址是B1或广播地址。

虚拟局域网具有以下优点。

(1)简化网络管理。由于站点物理位置与逻辑分组无关,当站点从一个工作组迁移到另一个工作组时,网络管理员仅需调整VLAN配置即可,无需改变网络布线或将站点搬移到新的物理位置。
(2)控制广播风暴。当用交换机构建较大局域网时,大量的广播报文会导致网络性能下降,甚至会引发“广播风暴”(网络因传播过多的广播信息而引起性能恶化)。VLAN将广播报文限制在本VLAN之内,将大的局域网分隔成多个独立的广播域,可有效防止或控制广播风暴,提高网络整体性能。
(3)增强网络的安全性。便于管理员根据用户的安全需要隔离VLAN间的通信。

可以有多种技术来实现VLAN,一种最常用的技术就是基于交换机接口的VLAN。如图3-38所示,管理员可以将交换机的接口1, 3, 5配置为属于VLAN1,而将接口2, 4, 6配置为属于VLAN2。在逻辑上,交换机为每个VLAN维护一个转发表,并且仅在同一VLAN内的接口间才能转发帧,从而将一个物理的交换机划分成多个逻辑上独立的交换机。

如果某些VLAN要跨越多个交换机,最简单的方法是将两个交换机中属于同一VLAN的接口用网线连接起来即可。但这种简单的方法导致交换机之间需要多对接口用网线连接,即n个VLAN就需要n对接口连接。一种更好的互连VLAN交换机的方法是使用VLAN干道(Trunk)技术。如图3-39所示,管理员可以将交换机的某个接口配置为Trunk接口,将两个VLAN交换机用一对Trunk接口互连,由于Trunk接口可以同时属于多个VLAN,因此多个VLAN可以共享同一条干道来传输各自的帧。问题是交换机如何知道从一个Trunk接口上接收到的一个帧是属于哪个VLAN的呢?IEEE定义了802.1Q标准对以太网帧格式进行了扩展,允许交换机在以太网帧格式中插入一个4字节的标识符(见图3-39、图3-40),称为VLAN标记(tag),用来指明该帧来自于哪一个VLAN。当交换机需要将帧从Trunk接口转发出去时,将VLAN标记插入到帧中,当插入VLAN标记的帧要从非Trunk接口转发出去的时候,要将该VLAN标记删除。因此,802.1Q标准虽然修改了以太网的帧格式,但对所有用户站点是完全透明的,802.1Q标记帧仅在交换机间各VLAN复用的Trunk链路上使用。

图像说明文字

图像说明文字

要注意的是,当各站点被划分到不同的VLAN后,它们是不能直接进行通信的。因为每个VLAN在逻辑上都是独立的局域网。要想使这些站点能够互相通信就需要使用我们下一章要介绍的路由器将这些VLAN在第三层(即IP层)互连起来。这时,虽然位于不同VLAN的站点之间通过路由器的转发能够在IP层互相通信,但它们在数据链路层是不能直接通信的,并且处于不同的广播域之中。

3.6 以太网的演进

最初的以太网是由美国施乐(Xerox)公司的Palo Alto研究中心(简称为PARC)于1975年研制成功的。从标准以太网(10 Mbit/s,也称为传统以太网)开始逐步在有线局域网市场中占据了统治地位,数据率已演进到每秒百兆比特、吉比特、10吉比特,甚至100吉比特。由于历史原因,速率达到或超过100 Mbit/s的以太网被称为高速以太网,虽然现在100 Mbit/s对于大多数用户来说已不算是高速了。下面简单介绍高速以太网的发展。

3.6.1 100BASE-T以太网

在20世纪80年代,很少有人想到以太网还会升级。然而在1992年9月100 Mbit/s以太网的设想提出后仅过了13个月,100 Mbit/s以太网的产品就问世了。

100BASE-T是在双绞线上传送100 Mbit/s基带信号的星形拓扑以太网,仍使用IEEE 802.3的CSMA/CD协议,它又称为快速以太网(Fast Ethernet)。用户只要更换一台适配器,再配上一个100 Mbit/s的集线器,就可很方便地由10BASE-T以太网直接升级到100 Mbit/s,而不必改变网络的拓扑结构。所有在10BASE-T上的应用软件和网络软件都可保持不变。100BASE-T的适配器有很强的自适应性,能够自动识别10 Mbit/s和100 Mbit/s。

1995年IEEE已把100BASE-T的快速以太网定为正式标准,其代号为IEEE 802.3u,是对现行的IEEE 802.3标准的补充。快速以太网的标准得到了所有的主流网络厂商的支持。

100BASE-T可使用交换式集线器提供很好的服务质量,可在全双工方式下工作而无冲突发生。因此,CSMA/CD协议对全双工方式工作的快速以太网是不起作用的(但在半双工方式工作时则一定要使用CSMA/CD协议)。可能读者会问,不使用CSMA/CD协议为什么还能够叫作以太网呢?这是因为快速以太网使用的MAC帧格式仍然是IEEE 802.3标准规定的帧格式。

然而IEEE 802.3u的标准未包括对同轴电缆的支持。这意味着想从细缆以太网升级到快速以太网的用户必须重新布线。因此,现在10/100 Mbit/s以太网都是使用无屏蔽双绞线布线。

100 Mbit/s以太网的新标准改动了原10 Mbit/s以太网的某些规定。这里最主要的原因是要在数据发送速率提高时,使参数a仍保持不变(或保持为较小的数值)。

可以看出,当数据率C (Mbit/s)提高到10倍时,为了保持参数a不变,可以将帧长L (bit)也增大到10倍,也可以将网络电缆长度,减小到原有数值的十分之一。

在100 Mbit/s的以太网中采用的方法是保持最短帧长不变,但把一个网段的最大电缆长度减小到100 m。但最短帧长仍为64 字节,即512比特。因此100 Mbit/s以太网的争用期是5.12 s,帧间最小间隔现在是0.96 s,都是10 Mbit/s以太网的1/10。

100 Mbit/s以太网的新标准还规定了以下三种不同的物理层标准。

(1)100BASE-TX 使用两对UTP 5类线或屏蔽双绞线STP,其中一对用于发送,另一对用于接收。
(2)100BASE-FX 使用两根光纤,其中一根用于发送,另一根用于接收。 在标准中,把上述的100BASE-TX和100BASE-FX合在一起称为100BASE-X。
(3)100BASE-T4 使用4对UTP 3类线或5类线,这是为已使用UTP 3类线的大量用户而设计的。它使用3对线同时传送数据(每一对线以 Mbit/s的速率传送数据),用1对线作为碰撞检测的接收信道。

3.6.2 吉比特以太网

1996年夏季,吉比特以太网(又称为千兆以太网)的产品已经问市。IEEE在1997年通过了吉比特以太网的标准802.3z,它在1998年成为了正式标准。

吉比特以太网的标准IEEE 802.3z有以下几个特点。

(1)允许在1 Gbit/s下全双工和半双工两种方式工作。
(2)使用IEEE 802.3协议规定的帧格式。
(3)在半双工方式下使用CSMA/CD协议(全双工方式不需要使用CSMA/CD协议)。
(4)与10BASE-T和100BASE-T技术向后兼容。

吉比特以太网可用作现有网络的主干网,也可在高带宽(高速率)的应用场合中(如医疗图像或CAD的图形等)用来连接工作站和服务器。

吉比特以太网的物理层共有以下两个标准。

(1)1000BASE-X(IEEE 802.3z标准)。1000BASE-X标准使用的媒体有三种。

  • 1000BASE-SX:使用850 nm激光器和纤芯直径为62.5 m和50 m的多模光纤时,传输距离分别为275 m和550 m。
  • 1000BASE-LX:使用1300 nm激光器和纤芯直径为62.5 m和50 m的多模光纤时,传输距离为550 m。使用纤芯直径为10 m的单模光纤时,传输距离为5 km。
  • 1000BASE-CX:使用两对短距离的屏蔽双绞线电缆,传输距离为25 m。

(2)1000BASE-T(802.3ab标准)。1000BASE-T是使用4对UTP 5类线,传送距离为100 m。

吉比特以太网工作在半双工方式时,就必须进行碰撞检测。由于数据率提高了,因此只有减小最大电缆长度或增大帧的最小长度,才能使参数a保持为较小的数值。若将吉比特以太网最大电缆长度减小到10 m,那么网络的实际价值就大大减小。而若将最短帧长提高到640字节,则在发送短数据时开销又嫌太大。因此,吉比特以太网仍然保持一个网段的最大长度为100 m,但采用了载波延伸(carrier extension)的办法,使最短帧长仍为64字节(这样可以保持兼容性),同时将争用期增大为512字节。凡发送的MAC帧长不足512字节时,就用一些特殊字符填充在帧的后面,使MAC帧的发送长度增大到512字节,这对有效载荷并无影响。接收端在收到以太网的MAC帧后,要把所填充的特殊字符删除后才向高层交付。当原来仅64字节长的短帧填充到512字节时,所填充的448字节就造成了很大的开销。

为此,吉比特以太网还增加一种功能称为分组突发(packet bursting)。这就是当很多短帧要发送时,第一个短帧要采用上面所说的载波延伸的方法进行填充。但随后的一些短帧则可一个接一个地发送,它们之间只需留有必要的帧间最小间隔即可。这样就形成一串分组的突发,直到达到1500字节或稍多一些为止。当吉比特以太网工作在全双工方式时(即通信双方可同时进行发送和接收数据),不使用载波延伸和分组突发。

吉比特以太网交换机可以直接与多个图形工作站相连,也可用作百兆以太网的主干网,与百兆比特或吉比特集线器相连,然后再和大型服务器连接在一起。图3-41所示为吉比特以太网的一种配置举例。

图像说明文字

3.6.3 10吉比特和100吉比特以太网

10GE的标准由IEEE 802.3ae委员会进行制定,10GE的标准已在2002年6月完成。10GE也就是万兆以太网。10GE并非将吉比特以太网的速率简单地提高到10倍。这里有许多技术上的问题要解决。下面是10GE的主要特点。

10GE的帧格式与10 Mbit/s,100 Mbit/s和1 Gbit/s 以太网的帧格式完全相同。10GE还保留了802.3标准规定的以太网最小和最大帧长。这就使用户在将其已有的以太网进行升级时,仍能和较低速率的以太网很方便地通信。

10GE只工作在全双工方式,因此不存在争用问题,也不使用CSMA/CD协议。这就使得10GE的传输距离不再受进行碰撞检测的限制而大大提高了,也就是说10GE已不再仅仅是一种局域网技术了,也可以用于广域连接。

在2002年制定的标准中,10GE是使用光纤为传输媒体。一共有三种传输媒体:

  • 10GBASE-SR 使用850 nm激光器的多模光纤,传输距离不超过300 m;
  • 10GBASE-LR 使用1300 nm激光器的单模光纤,传输距离不超过10 km;
  • 10GBASE-ER 使用1500 nm激光器的单模光纤,传输距离不超过40 km。

2004年和2006年又分别制定了两个以铜线为传输媒体的标准802.3ak和802.3an。下面是这两种传输媒体的主要性能。

  • 10GBASE-CX4 使用4对双芯同轴电缆(twinax),传输距离不超过15 m。
  • 10GBASE-T 使用4对无屏蔽6A类双绞线,传输距离不超过100 m。

在10GE标准问世后不久,有关40GE/100GE(40吉比特以太网和100吉比特以太网)的标准IEEE 802.3ba在2010年6月公布了。每一种传输速率都有4种不同的传输媒体,这里就不一一介绍了。

需要指出的是,40GE/100GE只工作在全双工的传输方式(因而不使用CSMA/CD协议),并且仍然保持了以太网的帧格式及802.3标准规定的以太网最小和最大帧长。100GE在使用单模光纤传输时,仍然可以达到40 km的传输距离,但这是需要波分复用,即使用4个波长复用一根光纤,每一个波长的有效传输速率是25 Gbit/s,这样使得4个波长的总的传输速率达到100 Gbit/s。40GE/100GE可以用光纤进行传输,也可以使用铜缆进行传输(但传输距离很短,如1 m或不超过10 m)。

现在以太网的工作范围已经从局域网(校园网、企业网)扩大到城域网和广域网,从而实现了端到端的以太网传输。这种工作方式的好处如下所述。

(1)以太网是一种经过实践证明的成熟技术,无论是因特网服务提供者ISP还是端用户都很愿意使用以太网。

(2)以太网的互操作性也很好,不同厂商生产的以太网都能可靠地进行互操作。

(3)在广域网中使用以太网时,其价格大约只有SONET的五分之一和ATM的十分之一。以太网还能够适应多种的传输媒体,如铜缆、双绞线及各种光缆。这就使具有不同传输媒体的用户在进行通信时不必重新布线。

(4)端到端的以太网连接使帧的格式全都是以太网的格式,而不需要再进行帧的格式转换,这就简化了操作和管理。但是,以太网和现有的其他网络,如帧中继或ATM网络,仍然需要有相应的接口才能进行互连。

以太网从10 Mbit/s到10 Gbit/s甚至100Gbit/s的演进证明了以太网是:

(1)可扩展的;
(2)灵活的(多种媒体、全/半双工、共享/交换);
(3)易于安装;
(4)稳健性好。

3.6.4 使用以太网进行宽带接入

现在人们也在使用以太网进行宽带接入因特网。为此,IEEE在2001年初成立了802.3EFM工作组 ,专门研究以太网的宽带接入技术问题。

以太网接入的一个重要特点是它可以提供双向的宽带通信,并且可以根据用户对带宽的需求灵活地进行带宽升级(例如,把10 Mbit/s的以太网交换机更新为100 Mbit/s甚至1 Gbit/s的以太网交换机)。当城域网和广域网都采用吉比特以太网或10吉比特以太网时,采用以太网接入可以实现端到端的以太网传输,中间不需要再进行帧格式的转换。这就提高了数据的传输效率且降低了传输的成本。

然而以太网的帧格式标准中,只有源地址字段而没有用户名字段,也没有让用户键入密码来鉴别用户身份的过程。任何带有内置网络适配器的计算机,只要用网线接入到一个以太网中,就可以自由访问连接在这个以太网中的其他主机。这对要使用以太网接入需要收费的因特网来说,显然是不行的。

于是有人就想法子把数据链路层的两个成功的协议结合起来,即把PPP协议中的PPP帧再封装到以太网中来传输。这就是1999年公布的PPPoE (PPP over Ethernet),意思是在以太网上运行PPP。现在的光纤宽带接入FTTx都要使用PPPoE的方式进行接入。

例如,如果使用光纤到大楼FTTB的方案,就在每个大楼的楼口安装一个光网络单元ONU(实际上就是一个以太网交换机),然后根据用户所申请的带宽,用5类线(这已经变为铜线了)接到用户家中。如果上网的用户很多,那么还可以在每一个楼层再安装一个100 Mbit/s的以太网交换机。各大楼的以太网交换机通过光缆汇接到光结点汇接点。然后通过城域网连接到因特网的主干网。

使用这种方式接入到因特网时,在用户家中不再需要使用任何调制解调器。用户家中只有一个RJ-45的插口。用户把自己的PC通过5类网线连接到墙上的RJ-45插口中,然后在PPPoE弹出的窗口中键入在网络运营商购买的用户名(就是一串数字)和密码,就可以进行宽带上网了。请注意,使用这种以太网宽带接入时,从用户家中的PC到户外的第一个以太网交换机的带宽是能够得到保证的。因为这个带宽是用户独占的,没有和其他用户共享。但这个以太网交换机到上一级的交换机的带宽,是许多用户共享的。因此,如果过多的用户同时上网,则有可能使每一个用户分配到的带宽减少。这时,网络运营商就应当及时进行扩容,以保证用户的利益不受损伤。

顺便指出,当用户利用ADSL进行宽带上网时,从用户PC到家中的ADSL调制解调器之间,也是使用RJ-45和5类线(即以太网使用的网线)进行连接的,并且也是使用PPPoE弹出的窗口进行拨号连接的。但是用户PC发送的以太网帧到了ADSL调制解调器中,就转换成为ADSL使用的PPP帧。在用户家中墙上是通过RJ-11插口,用普通的电话线传送PPP帧。这已经和以太网没有关系了。因此这种上网方式不能称为以太网上网,而是利用电话线宽带接入到因特网。

3.7 无线局域网

在局域网刚刚问世后的一段时间,无线局域网的发展比较缓慢,其原因是价格贵、数据传输速率低、安全性较差,以及使用登记手续复杂(使用无线电频率必须得到有关部门的批准)。但自20世纪80年代末以来,由于人们工作和生活节奏的加快,以及移动通信技术的飞速发展,无线局域网也就逐步进入市场。无线局域网提供了移动接入的功能,这就给许多需要发送数据但又不能坐在办公室的工作人员提供了方便。当一个工厂跨越的面积很大时,若要将各个部门都用电缆连接成网,其费用可能很高。但若使用无线局域网,不仅节省了投资,而且建网的速度也会较快。另外,当大量持有便携式计算机的用户在一个地方同时要求上网时(如在图书馆或购买股票的大厅里),若用电缆连网,恐怕连铺设电缆的位置都很难找到,而用无线局域网则比较容易。无线局域网常简写为WLAN (Wireless Local Area Network)。

请读者注意,便携站(portable station)和移动站(mobile station)表示的意思并不一样。便携站当然是便于移动的,但便携站在工作时其位置是固定不变的。而移动站不仅能够移动,而且还可以在移动的过程中进行通信(正在进行的应用程序感觉不到计算机位置的变化,也不因计算机位置的移动而中断运行)。移动站一般都是使用电池供电。

3.7.1 无线局域网的组成

无线局域网可分为两大类。第一类是有固定基础设施的,第二类是无固定基础设施的。所谓“固定基础设施”是指预先建立起来的、能够覆盖一定地理范围的一批固定基站。大家经常使用的蜂窝移动电话就是利用电信公司预先建立的、覆盖全国的大量固定基站来接通用户手机拨打的电话。

1.IEEE 802.11

对于第一类有固定基础设施的无线局域网,最有名的就是IEEE 802.11无线局域网。实际上802.11既支持有固定基础设施的网络,也支持无固定基础设施的网络,但使用最多的是它的有固定基础设施的组网方式。

1997年IEEE制定出无线局域网的协议标准802.11,ISO/IEC也批准了这一标准,其编号为ISO/IEC 8802-11。802.11是个非常复杂的标准,在MAC层使用CSMA/CA协议(在后面的3.7.3小节讨论)。凡使用802.11系列协议的局域网又称为Wi-Fi(Wireless Fidelity,即无线保真度) 。由于802.11无线局域网的广泛应用,现在Wi-Fi几乎成为了无线局域网WLAN的同义词。

在有固定基础设施的组网方式中,802.11使用一种星形网络拓扑,其中心的基站被称为接入点(Access Point,AP)。802.11标准规定无线局域网的最小构件是基本服务集(Basic Service Set, BSS)。一个BSS包括一个基站和若干个移动站,本BSS内站点之间的通信及和本BSS以外的站点通信时,都必须通过本BSS的基站。在802.11标准中,基站(base station)就是基本服务集中的接入点AP。当网络管理员安装AP时,必须为该AP分配一个不超过32字节的服务集标识符(Service Set Identifier,SSID)和一个所使用的无线信道。SSID其实就是使用该AP的无线局域网的名字。一个基本服务集BSS所覆盖的地理范围叫作一个基本服务区(Basic Service Area,BSA)。基本服务区BSA和无线移动通信的蜂窝小区相似。在无线局域网中,一个基本服务区BSA的范围的直径不超过100 m。

一个基本服务集可以是孤立的,也可通过接入点连接到一个分配系统(Distribution System,DS),然后再连接到另一个基本服务集,这样就构成了一个扩展的服务集(Extended Service Set,ESS),如图3-42所示。分配系统的作用就是使扩展的服务集ESS对上层的表现就像一个基本服务集BSS一样,因此扩展服务集仍然是一个局域网。分配系统可以使用以太网(这是最常用的)、点对点链路或其他无线网络。扩展服务集还可为无线用户提供到非802.11无线局域网(例如,到有线连接的因特网)的接入。在一个扩展服务集内的几个不同的基本服务集也可能有相交的部分。在图3-42中的移动站A如果要和另一个基本服务集中的移动站B通信,就必须经过两个接入点AP1和AP2,即A→AP1→AP2→B。我们应当注意到,从AP1到AP2的通信是使用有线传输的。

图像说明文字

图3-42还给出了移动站A从一个基本服务集漫游到另一个基本服务集,而仍然可保持与另一个移动站B的通信,但A在不同的基本服务集所使用的接入点改变了。基本服务集的服务范围是由移动站所发射的电磁波的辐射范围确定的,在图3-42中用一个椭圆形来表示基本服务集的服务范围,当然实际上的服务范围可能是很不规则的几何形状。

802.11标准并没有定义如何实现漫游,但定义了一些基本的工具。例如,一个移动站若要加入到一个基本服务集BSS,就必须先选择一个接入点AP,并与此接入点建立关联(association)。此后,这个移动站就可以通过该接入点来发送和接收数据。若移动站使用重建关联(reassociation)服务,就可把这种关联转移到另一个接入点。若要终止这种关联服务,就应使用分离(dissociation)服务。移动站与接入点建立关联的方法有两种。一种是被动扫描,即移动站等待接收接入点周期性发出的信标帧(beacon frame)。信标帧中包含若干系统参数(如服务集标识符SSID、AP的MAC地址及所支持的速率等)。另一种是主动扫描,即移动站主动发出探测请求帧(probe request frame),然后等待从接入点发回的探测响应帧(probe response frame)。当你在Microsoft Windows XP中“查看可用网络时”,将显示所在区域内每个AP的SSID。用户可以选择其中的一个并与之建立关联。

由于无线信道的使用日益增多,现在出现了无线因特网服务提供者(Wireless Internet Service Provider,WISP)这一名词。用户可以通过无线信道接入到WISP,然后再经过有线信道接入到因特网。现在许多地方(如办公室、机场、快餐店、旅馆、购物中心等)都能够向公众提供有偿或无偿的因特网Wi-Fi接入服务,这样的地点就叫作热点(hot spot)。热点也就是因特网公众无线接入点。

由于无线局域网已非常普及,因此现在无论是笔记本计算机或台式计算机,其主板上都已经有了内置的无线局域网适配器(也就是无线网卡。但不要和第2章介绍的3G无线上网卡混淆),因而不需要再插入外置的无线网卡了。无线局域网的适配器能够实现802.11的物理层和MAC层的功能。只要在无线局域网信号覆盖的地方,用户就能够通过接入点AP连接到因特网。需要注意的是,在很多地方通过无线局域网接入到因特网是要付费的。但在一些特定环境(如一些机场、快餐店等),则有可能可免费通过无线局域网接入到因特网。北京目前在六大区域(西单、王府井、奥运中心区、金融街、燕莎及中关村大街)已开通了免费无线局域网,市民可在这些地区免费Wi-Fi上网(又称为WLAN上网,但不是3G上网)。以后北京将累计建设超过20万个这类无线局域网接入点。这属于公益性免费无线服务。

若无线局域网不提供免费接入,那么用户就必须在和附近的接入点AP建立关联时,键入已经在网络运营商注册登记的用户密码(这时的通信是加密了的)。如键入正确,才能和在该网络中的AP建立关联。在无线局域网发展初期,这种接入加密方案称为WEP (Wired Equivalent Privacy,意思是“有线等效保密”),它曾经是1999年通过的IEEE 802.11b的标准中的一部分。然而WEP的加密方案相对比较容易被破译,因此现在的无线局域网普遍采用了保密性更好的加密方案WPA(WiFi Protected Access,意思是“无线局域网受保护的接入”)或其第二个版本WPA2。现在WPA2是2004年颁布的标准802.11n中强制执行的加密方案,微软的Windows XP也支持WPA2。当我们在PC的Windows XP屏幕上点击“开始”→“设置”→“网络连接”→“无线网络连接”,就会看见在当前无线局域网信号覆盖范围中的一些网络名称。在有的网络名称下面会显示“启用安全的无线网络(WPA)/(WPA2)”,这就表明对这个网络,只有在弹出的密码窗口中键入正确密码后,才能与其AP建立关联。不过,WPA2方案也并非绝对可靠的,目前市上有非法的“蹭网卡”销售,但其中很多种只能破译WEP,要破译WPA2就困难得多。

2.移动自组网络

另一类无线局域网是无固定基础设施的无线局域网,它又叫做自组网络(ad hoc network) 。这种自组网络没有上述基本服务集中的接入点AP,而是由一些处于平等状态的移动站之间相互通信组成的临时网络。复杂的自组织网络支持结点间的多跳存储转发,如图3-43所示。图中移动站A和E通信时,是经过A→B,B→C,C→D和最后D→E这样一连串的存储转发过程。因此,在从源结点A到目的结点E的路径中的移动站B,C和D都是转发结点,这些结点都具有路由功能。由于自组网络没有预先建好的网络固定基础设施(基站),因此,自组网络的服务范围通常是受限的,而且自组网络一般也不和外界的其他网络相连接。移动自组网络也就是移动分组无线网络。802.11的ad hoc模式允许在通信范围内的各站点间直接进行通信,组成一个无中心不与外界网络连接的自组网络,支持站点间的单跳通信,但在标准中并没有包括多跳路由功能。

图像说明文字

自组网络通常是这样构成的:一些可移动的设备发现在它们附近还有其他的可移动设备,并且要求和其他移动设备进行通信。由于便携式计算机的大量普及,自组网络的组网方式已受到人们的广泛关注。

移动自组网络在军用和民用领域都有很好的应用前景。在军事领域中,由于战场上往往没有预先建好的固定接入点,但携带了移动站的战士就可以利用临时建立的移动自组网络进行通信。这种组网方式也能够应用到作战的地面车辆群和坦克群,以及海上的舰艇群、空中的机群。由于每一个移动设备都具有路由器的转发分组的功能,因此,分布式的移动自组网络的生存性非常好。在民用领域,开会时持有笔记本计算机的人可以利用这种移动自组网络方便地交换信息,而不受便携式计算机附近没有电话线插头的限制。当出现自然灾害时,在抢险救灾时利用移动自组网络进行及时的通信往往也是很有效的,因为这时事先已建好的固定网络基础设施(基站)可能已经都被破坏了。

顺便指出,移动自组网络和移动IP并不相同。移动IP技术使漫游的主机可以用多种方式连接到因特网。漫游的主机可以直接连接到或通过无线链路连接到固定网络上的另一个子网。支持这种形式的主机移动性需要地址管理且增加协议的互操作性,但移动IP的核心网络功能仍然是基于在固定互联网中一直在使用的各种路由选择协议。移动自组网络是将移动性扩展到无线领域中的自治系统,它具有自己特定的路由选择协议,并且可以不和因特网相连。即使在和因特网相连时,移动自组网络也是以残桩网络(stub network)方式工作的。所谓“残桩网络”就是通信量可以进入残桩网络,也可以从残桩网络发出,但不允许外部的通信量穿越残桩网络。

3.7.2 802.11局域网的物理层

802.11标准中物理层相当复杂,这里仅做简单介绍。根据物理层的不同(如工作频段、数据率、调制方式等),802.11无线局域网可再细分为不同的类型。现在最流行的无线局域网是802.11b。表3-1所示为4种常用的802.11无线局域网的物理层的简单比较。

图像说明文字

以上4种标准都使用共同的媒体接入控制协议,都可以用于有固定基础设施的或无固定基础设施的无线局域网。

对于最常用的802.11b无线局域网,所工作的2.4~2.485 GHz频率范围中有85 MHz的带宽可用。802.11b定义了11个部分重叠的信道,仅当两个信道号由4个或更多信道隔开时它们才无重叠。其中,信道1,6和11的集合是唯一的3个非重叠信道的集合。因此,在同一个区域上可以安装3个AP,并分别给它们分配信道1,6和11,然后用一个交换机把这3个AP连接成一个ESS,则可构成一个总的传输速率最大为33 Mbit/s的无线局域网(同时可以有3个站点发送速率)。但请注意,并不是在同一区域只能配置最多3个AP。多个AP可以共享同一信道或使用互相重叠的信道,并利用我们将要讨论的MAC协议竞争信道进行通信。

除IEEE的802.11委员会外,欧洲电信标准学会(European Telecommunications Standards Institute,ETSI)也为欧洲制定了无线局域网的标准,他们把这种局域网取名为HiperLAN。ETSI和IEEE的标准是可以互操作的。由于绝大多数人使用的无线局域网都是802.11无线局域网,若不特别指出,本书中“无线局域网”就指的是802.11无线局域网。

下面我们简要讨论802.11标准的MAC协议。

3.7.3 802.11局域网的MAC协议

1.使用CSMA/CA协议

既然CSMA/CD协议已成功地应用于有线局域网,无线局域网能不能也使用CSMA/CD协议呢?在无线局域网中,仍然可以用CSMA“先听后发”的方法避免碰撞,即在发送数据之前先对传输媒体进行载波监听。如发现有其他站在发送数据,就推迟发送以免发生碰撞。但在无线局域网中进行“碰撞检测”存在以下问题。

(1)“碰撞检测”要求一个站点在发送本站数据的同时还必须不间断地检测信道。一旦检测到碰撞,就立即停止发送。但由于无线信道的传输条件特殊,其信号强度的动态范围非常大,因此在802.11适配器上接收到的信号强度往往会远远小于发送信号的强度(信号强度可能相差百万倍)。如要在无线局域网的适配器上实现碰撞检测,对硬件的要求非常高。
(2)更重要的是,即使我们能够在硬件上实现无线局域网的碰撞检测功能,由于无线电波传播的特殊性(下面将要讨论的隐蔽站问题),仍然无法避免碰撞发生。也就是说实现了碰撞检测也意义不大。

我们知道,无线电波能够向所有的方向传播,信号衰减非常快,传播距离有限。当电磁波在传播过程中遇到障碍物时,其传播还会受到阻碍。3-44所示的例子表示了无线局域网的特殊问题。图中给出两个无线移动站A和B,以及接入点AP。我们假定无线电信号传播的范围是以发送站为圆心的一个圆形面积。

图像说明文字

图3-44表示站点A和B同时向接入点AP发送数据。但A和B相距较远或有物体遮挡,彼此都接收不到对方发送的信号。当A和B都检测不到对方的无线信号时,就认为现在无线信道是空闲的,因而都向AP发送数据。结果AP同时收到A和B发来的数据,发生了碰撞。可见,在无线局域网中,即使在发送数据前未检测到传输媒体上有信号,也不能保证数据能够发送成功。图3-44所示的问题叫作隐蔽站问题(hidden station problem)。图中A和B互为隐蔽站,因为彼此都检测不到对方发送的信号。

有时,虽然A和B相距很近,但它们之间有障碍物,也有可能出现上述问题。

因此,无线局域网不能简单照搬有线局域网使用的CSMA/CD,802.11标准使用一种称为CSMA/CA的协议,即载波监听多址接入/碰撞避免(Carrier Sense Multiple Access/Collision Avoidance),在CSMA的基础上增加了一个碰撞避免(Collision Avoidance)功能,而不再实现碰撞检测功能。由于不可能避免所有的碰撞,且无线信道误码率较高,802.11还使用了数据链路层确认机制来保证数据被正确接收。

实际上,802.11的MAC层标准定义了两种不同的媒体接入控制方式:分布式协调功能(Distributed Coordination Function,DCF)和点协调功能(Point Coordination Function,PCF)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。而PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中很少使用,这里不再进行介绍。

2.确认机制和帧间间隔

在考虑如何避免碰撞之前,我们先介绍802.11协议中的确认机制和帧间间隔。802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间通称为帧间间隔(InterFrame Space,IFS)。帧间间隔的长短取决于该站点要发送的帧的类型。高优先级帧需要等待的时间较短,因此可优先获得发送权,但低优先级帧就必须等待较长的时间。若低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。以下是常用的两种帧间间隔。

(1)SIFS,即短(Short)帧间间隔,是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧(在本节后面有介绍)、由过长的MAC帧分片后的数据帧 ,以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
(2)DIFS,即DCF帧间间隔,它比SIFS的帧间间隔要长得多,在DCF方式中用来发送数据帧和管理帧。

CSMA/CA协议的确认机制如图3-45所示。要发送数据的站点先检测信道,若检测到信道空闲,则在等待DIFS时间后发送。目的站点若正确收到此帧,则经过时间间隔SIFS后,向源站发送确认帧ACK。若源站在规定时间内没有收到确认帧ACK(由重传计时器控制这段时间),就必须重传此帧,直到收到确认为止,或者经过若干次的重传失败后放弃发送。CSMA/CA的确认机制可以认为是一种“间接碰撞检测”机制。

图像说明文字

为什么信道空闲还要再等待呢?就是考虑到可能其他站有高优先级的帧要发送。如有,就要让高优先级帧先发送。例如,这里的确认帧ACK就是一种高优先级帧,以确保确认不被其他站发送的数据帧打断。

可以看出,802.11无线局域网采用了停止等待协议来提供可靠传输服务。但802.3有线局域网的传输是不可靠的,发送方把数据发送出去就不管了(当然若检测到碰撞是必须重传的),至于可靠传输则由高层负责。

3.退避算法

为了尽可能避免各种可能的碰撞,CSMA/CA采用了一种不同于CSMA/CD的退避算法。图3-45指出,当信道从忙态变为空闲时,任何一个站要发送数据帧时,不仅都必须等待一个DIFS的间隔,而且还要退避一段随机的时间以后再次重新试图接入到信道。请读者注意,在以太网的CSMA/CD协议中,要发送数据的站点,在监听到信道变为空闲时就立即发送数据,同时进行碰撞检测。如果发生了碰撞,才执行退避算法。当一个站点在发送数据时,很可能有多个站点都在监听信道并等待发送数据,一旦信道空闲,如果不执行退避算法必然会导致再次碰撞。CSMA/CD通过碰撞检测能及时停止发送碰撞了的无效帧,而CSMA/CA并没有像以太网那样的碰撞检测机制。为减少发生碰撞的概率,在802.11标准的CSMA/CA协议中,当要发送帧的站点检测信道从忙态转为空闲时,就要执行退避算法。在执行退避算法时,站点为退避计时器(backoff timer),设置一个随机的退避时间,当退避计时器的时间减小到零时,就开始发送数据(图3-45中所画的情况)。当退避计时器的时间还未减小到零时而信道又转变为忙态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器(从剩下的时间开始,在图3-45中没有画出这种情况)。

当发送站点没有接收到确认,重传帧时,也要执行退避算法,并且802.11标准也使用了二进制指数退避算法,要将随机选择退避时间的范围扩大一倍。

为了避免一个站点独占信道,当一个站点在成功发送完一个数据帧后(收到确认后),要连续发送下一个数据帧时也要执行退避算法。

因此,当一个站要发送数据帧时,仅在下面的情况下才不使用退避算法:检测到信道是空闲的,并且这个数据帧是它想发送的第一个数据帧。除此以外的以下情况,都必须使用退避算法:

(1)在发送帧之前检测到信道处于忙态时;
(2)在每一次重传一个帧时;
(3)在每一次成功发送后要连续发送下一个帧时。

4.信道预约和虚拟载波监听

为尽可能减少碰撞的概率和降低碰撞的影响,802.11允许要发送数据的站点对信道进行预约。具体的做法是这样的。如图3-46所示,源站在发送数据帧之前先发送一个短的控制帧,叫作请求发送(Request To Send,RTS),它包括源地址、目的地址和这次通信(包括相应的确认帧)所需的持续时间。当然,源站在发送RTS帧之前,必须先监听信道。若信道空闲,则等待一段时间DIFS后,就能够发送RTS帧了。若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,叫作允许发送(Clear To Send,CTS),它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。源站收到CTS帧后,再等待一段时间SIFS后,就可发送其数据帧。若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK。

图像说明文字

在图3-46中,除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰。如果RTS帧发生碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧。

由于RTS帧和CTS帧很短,发生碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往远大于传播时延(注意是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的。虽然如此,802.11还是设置了3种情况供用户选择:
(1)使用RTS帧和CTS帧;
(2)只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧(显然,当数据帧本身就很短时,再使用RTS帧和CTS帧只能增加开销);
(3)不使用RTS帧和CTS帧。

实际上不仅RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这就是802.11的虚拟载波监听(Virtual Carrier Sense)机制。在802.11的帧中有一个持续时间字段,允许发送帧的站点把它要占用信道的时间(包括目的站发回确认帧所需的时间)及时通知给所有其他站点。当一个站点检测到正在信道中传送的MAC帧首部的“持续时间”字段时,就调整自己的网络分配向量(Network Allocation Vector,NAV)。NAV指出了信道将被占用的时间,即使站点(如隐蔽站)在这段时间内可能检测不到信道忙,也不能访问信道,就好像是监听到信道忙一样。由于利用虚拟载波监听机制站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。例如,图3-44中的隐蔽站B,虽然监听不到A发送给AP的RTS帧,但却能监听到AP应答给A的CTS帧,B根据CTS帧中的持续时间修改自己的NAV,在NAV指示的时间内虽然B监听不到A发送给AP帧也不会发送帧干扰A和AP的通信。

3.7.4 802.11局域网的MAC帧

802.11的MAC帧共有三种类型,即控制帧、数据帧和管理帧。802.11的帧格式比较复杂,我们这里仅讨论其数据帧的一些重要字段。

从图3-47可以看出,802.11数据帧由以下三大部分组成。

(1)MAC首部,共30字节。帧的复杂性都在帧的首部。
(2)有效载荷,也就是帧的数据部分,最大长度为2312字节。但通常802.11帧的长度都不超过1500字节。
(3)帧检验序列FCS,即帧的尾部,共4字节的CRC检验码。

图像说明文字

1.地址字段

802.11数据帧最特殊的地方就是有4个地址字段。这4个地址的内容取决于帧控制字段中的“到DS”(到分配系统)和“从DS”(从分配系统)这两个字段的值,如表3-2所示。

图像说明文字

最常用的是中间两种情况。我们以图3-48为例说明这两种情况。

图像说明文字

当AP1将数据帧转发给站点B时,帧控制字段中的“到DS = 0”而“从DS = 1”,并且帧中地址1是B的MAC地址,地址2是AP1的MAC地址,地址3是A的MAC地址,也不使用地址4。

如果站点要和本BSS以外的站点通信,例如,站点A向位于DS的路由器R发送数据帧时,与以上类似。A要把数据帧发送给AP1,如果分配系统DS是以太网,AP会将802.11的帧转换为以太网帧发送给R。这时以太网帧中的源地址和目的地址就是A和R的MAC地址。反之也是类似,当R发送响应给A时,以太网帧中的源地址和目的地址分别是R和A的MAC地址(注意没有AP1的MAC地址),AP1收到后会将该帧转换为802.11帧发送给A。因此,AP具有网桥的功能。

读者可能会产生这样一个问题:为什么802.11帧中要携带AP的MAC地址,而在以太网帧中没有AP的地址也能正常工作呢?在以太网中,AP与透明网桥一样,对各站点是透明的,在以太网帧中也不需要指出AP的MAC地址。在802.11局域网中,在站点的信号覆盖范围内可能会有多个AP共享同一物理信道,但站点只能与其中的一个AP建立关联,MAC帧中需要携带AP的地址(其实就是所在BSS的ID)明确指出转发该帧的AP(即接收AP或发送AP)。

帧控制字段中“到DS”和“从DS”都为0的情况用于802.11的自组网络模式。当通信的两个站点处于同一个独立BSS时,它们可以直接通信而不需要AP的转发,帧中的BSSID用于指出它们所在的BSS。

帧控制字段中“到DS”和“从DS”都为1的情况用于连接多个BSS的分配系统也是一个802.11无线局域网的情况。例如,在图3-48中,如果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地址。

2.序号控制字段、持续期字段和帧控制字段

序号控制字段用来实现802.11的可靠传输。在停止等待协议中,我们已经知道要对数据帧进行编号,当接收方的确认丢失时,发送方会进行超时重传,接收方可以用序号来区别重复接收到的帧。

持续期字段用于实现3.7.3小节介绍的信道预约和虚拟载波监听功能。在RTS帧、CTS帧或数据帧中用该字段指出将要占用信道的时间。

帧控制字段是最复杂的字段。其中“到DS”和“从DS”字段已经介绍了。类型和子类型字段用于区分不同类型的帧。802.11帧共有三种类型:控制帧、数据帧和管理帧,而每种类型又分为若干种子类型。例如,控制帧有RTS,CTS和ACK等几种不同的控制帧。控制帧和管理帧都有其特定的帧格式,这里从略。有线等效保密字段(Wired Equivalent Privacy,WEP)用于指示是否使用了WEP加密算法(将在7.6.2小节具体讨论802.11无线局域网的安全)。

3.7.5 其他无线计算机网络

最近几年还出现了几种无线计算机网络。这些计算机网络虽不是局域网,但制定这些网络标准的组织都是IEEE802委员会和ETSI。这些计算机网络的发展情况值得我们关注。

(1)无线个人区域网(或无线个域网)(Wireless Personal Area Network,WPAN)。WPAN就是在个人工作地方把属于个人使用的电子设备(如便携式计算机、掌上计算机及蜂窝电话等)用无线技术连接起来,整个网络的范围大约为10 m。WPAN可以是一个人使用,也可以是若干人共同使用(例如,一个外科手术小组的几位医生把几米范围内使用的一些电子设备组成一个无线个人区域网)。这些电子设备可以很方便地进行通信,就像用普通电缆连接一样。WPAN的IEEE标准都由IEEE的802.15工作组制定,而欧洲的ETSI标准则把无线个人区域网取名为HiperPAN。无线个人区域网实际上就是一个低功率、小范围、低速率的电缆替代技术,而前面所讲的802.11无线局域网则是一个大功率、中等范围、高速率的接入技术。蓝牙(Bluetooth)系统(802.15)就是早期WPAN的一个例子。蓝牙由爱立信公司于1994年推出,工作在2.4 GHz频段,数据传输速率可达1 Mbit/s,通信范围为10 m~30 m。现在几乎所有消费类电子设备都能支持蓝牙,从手机和笔记本计算机到耳机、打印机、键盘、鼠标、游戏机、音乐播放器、汽车导航仪等。蓝牙协议使这些设备能彼此发现并进行连接,使人们摆脱了传统电缆连接的繁琐。另一个重要标准是802.15.3,也称为超宽带(Ultra-Wide Band,UWB),可支持高达400 Mbit/s的数据传输速率,允许小范围内传送DVD质量的多媒体视频信号。

(2)无线城域网(Wireless Metropolitan Area Network,WMAN)。WMAN提供“最后一英里”的宽带无线接入(固定的、移动的和便携的),可用来代替现有的有线宽带接入(xDLC、HFC或FTTx)。WMAN的典型传输距离至少比802.11网络大10倍以上,因此,WMAN的基站要比802.11接入点要更强大,使用更大的功率和更好的天线,并要进行更多的差错处理。WMAN的标准有IEEE的802.16和ETSI的HiperMAN,可在10 GHz~66 GHz频段提供高达134 Mbit/s的数据传输速率,通信距离可达50 km左右。为了促进和认证符合IEEE802.16和ETSI HiperMAN标准的宽带无线接入设备的兼容性和互操作性,WiMAX论坛给通过一致性和互操作性测试的产品颁发“WiMAX论坛证书”。WiMAX是Worldwide Interoperability for Microwave Access的缩写(意思是“全球微波接入的互操作性”。按照发音,AX表示Access)。WiMAX论坛成立于2001年4月,现在已有超过150家著名IT行业的厂商参加了这个论坛。在许多文献中,我们可以见到WiMAX常用来表示无线城域网WMAN,这与Wi-Fi常用来表示无线局域网WLAN是类似的。

本章的重要概念

  • 链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)。
  • 数据链路层使用的信道主要有点对点信道和广播信道两种。
  • 数据链路层传送的协议数据单元是帧。数据链路层的三个重要问题是:封装成帧、差错检测和可靠传输。
  • 封装成帧要解决帧定界和透明传输问题。针对面向字符和面向比特的物理链路,可以分别采用字符填充法和比特填充法来解决透明传输问题。
  • 循环冗余检验CRC是一种差错检测方法,而帧检验序列FCS是添加在数据后面的冗余码。仅使用差错检测还不能实现可靠传输。
  • 实现可靠传输的基本机制包括差错检测、确认、超时重传、序号、发送窗口和接收窗口。
  • 停止等待协议能够在不可靠的传输网络上实现可靠的通信。每发送完一帧就停止发送,等待对方的确认。在收到确认后再发送下一帧。若超过了一段时间仍然没有收到确认,就重传前面发送过的帧(认为刚才发送的帧丢失了),这就是超时重传。这种自动重传方式常称为自动请求重传ARQ。为了区分重复帧,需要对帧进行编号。
  • 回退N步(Go-back-N,GBN)协议在流水线传输的基础上利用发送窗口来限制发送方连续发送分组的个数,是一种连续ARQ协议。为此,在发送方要维持一个发送窗口。发送窗口是允许发送方已发送但还没有收到确认的分组序号的范围,窗口大小就是发送方已发送但还没有收到确认的最大分组数。
  • GBN协议发送窗口为N,接收窗口为1,使用累积确认。由于接收方只接收按序到达的分组,一旦某个分组出现差错,其后连续发送的所有分组都要被重传。
  • 选择重传协议只重传出现差错的分组,因此其接收窗口不为1,以便先收下失序到达但仍然处在接收窗口中的那些分组,等到所缺分组收齐后再一并送交上层。为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的分组进行逐一确认。
  • 点对点协议PPP是因特网点对点数据链路层使用的最多的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议。
  • 共享通信媒体的方法有二:一是静态划分信道(各种复用技术),二是动态接入控制,包括随机接入和受控接入。共享通信媒体的问题又称为媒体接入控制或多址接入问题。
  • IEEE 802委员会把局域网的数据链路层拆成两个子层,即逻辑链路控制(LLC)子层(与传输媒体无关)和媒体接入控制(MAC)子层(与传输媒体有关)。但现在LLC子层已没有太大作用。
  • 计算机与外界局域网的通信要通过通信适配器,它又称为网络接口卡或网卡。计算机的硬件地址就在适配器的ROM中。
  • 以太网采用无连接的工作方式,对发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错帧就把它丢弃,其他什么也不做。
  • 以太网采用的媒体接入控制协议是具有碰撞检测的载波监听多址接入CSMA/CD。协议的要点是:发送前先监听,检测到信道空闲就发送数据,同时边发送边监听,一旦发现信道上出现了信号碰撞,就立即停止发送。然后按照退避算法等待一段随机时间后再次发送。每一个站点在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。以太网上各站点都平等地争用以太网信道。
  • 使用集线器的双绞线以太网在物理上是星形网,但在逻辑上则是总线形网。集线器工作在物理层,它的每个接口仅仅简单地转发比特,不进行载波监听和碰撞检测。
  • 以太网的硬件地址,即MAC地址,实际上就是适配器地址或适配器标识符,与主机所在的地点无关。源地址和目的地址都是48位长。以太网的适配器有过滤功能,它只接收单播帧,或广播帧,或多播帧。
  • 使用集线器、转发器可以在物理层扩展以太网(扩展后的以太网仍然是一个网络),在物理层扩展的以太网仍然是一个碰撞域,不能连接过多的站点,否则平均吞吐量太低,且会导致大量的冲突。同时,其地理覆盖范围受以太网有争用期对端到端时延的限制。
  • 使用网桥可以在数据链路层扩展以太网(扩展后的以太网仍然是一个网络)。网桥在转发帧时,不改变帧的源地址。网桥的优点是:对帧进行转发和过滤,增大吞吐量;扩大了网络物理范围;提高了可靠性;可互连不同物理层、不同MAC子层和不同速率的以太网。网桥的缺点是:增加了时延;可能会产生广播风暴。
  • 交换式集线器常称为以太网交换机、第二层交换机(工作在数据链路层)或简称为交换机。它就是一个多接口的网桥,当每个接口都直接与某台单主机或另一个交换机相连时,可工作在全双工方式。以太网交换机能同时连通许多对的接口,使每一对相互通信的主机都能像独占通信媒体那样,无碰撞地传输数据。
  • 高速以太网有100 Mbit/s的快速以太网,1 Gbit/s的吉比特以太网,10 Gbit/s的10吉比特以太网,以及40/100吉比特以太网。在宽带接入技术中,用高速以太网进行接入也是一种可供选择的方法。
  • IEEE的802.11是无线局域网的标准。使用802.11系列协议的局域网又称为Wi-Fi。802.11无线局域网支持有固定基础设施和无固定基础设施两种模式。在有固定基础设施模式中,使用星形拓扑,各站点需要通过叫作接入点AP的中心结点与外界或互相进行通信。在无固定基础设施模式(ad hoc模式)中,允许在通信范围内的各站点间直接进行单跳通信,组成一个无中心不与外界网络连接的自组网络。
  • 802.11无线局域网在MAC层使用CSMA/CA协议,以尽量减小碰撞发生的概率。不能使用CSMA/CD的原因是因为在无线局域网中无法实现碰撞检测。在使用CSMA/CA的同时,还使用停止等待协议。
  • 为了尽可能避免各种可能的碰撞,CSMA/CA采用了一种不同于CSMA/CD的退避算法。当要发送帧的站点检测到信道从忙态转为空闲时,都要执行退避算法。
  • 802.11标准规定,所有的站在完成发送后,必须再等待一段帧间间隔时间才能发送下一帧。帧间间隔的长短取决于该站要发送的帧的优先级。
  • 在802.11无线局域网的MAC帧首部中有一个持续期字段,用来填入在本帧结束后还要占用信道多少时间,其他站点通过该字段可实现虚拟载波监听。
  • 802.11标准允许要发送数据的站点对信道进行预约,即在发送数据帧之前先发送请求发送RTS帧。在收到响应允许发送CTS帧后,就可发送数据帧。

目录

推荐用户

同系列书

人邮微信
本地服务
教师服务
教师服务
读者服务
读者服务
返回顶部
返回顶部