计网复习——第三章 数据链路层

目录

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

1.1 数据链路和帧

1.2 三个基本问题

1.2.1 封装成帧

1.2.2 透明传输

1.2.3 差错检测

2. 点对点协议PPP

2.1 PPP协议的特点

2.1.1 PPP协议应满足的需求

2.1.2 PPP协议的组成

2.2 PPP协议的帧格式

2.2.1 各字段的意义

2.2.2 字节填充

2.2.3 零比特填充

2.3 PPP协议的工作状态

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

3.1 局域网的数据链路层

3.1.1 以太网的两个标准

3.1.2 适配器的作用

3.2 CSMA/CD协议

3.3 使用集线器的星形拓扑

3.4 以太网的信道利用率

3.5 以太网的MAC层

3.5.1 MAC的硬件地址

3.5.2 MAC帧的格式

4. 扩展的以太网

4.1 在物理层扩展以太网

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

4.2.1 以太网交换机的特点

4.2.2 以太网交换机的自学习能力

4.2.3 从总线以太网到星形以太网

4.3 虚拟局域网

5. 高速以太网

5.1 100BASE-T以太网

5.2 吉比特以太网

5.3 10吉比特以太网(10GE)和更快的以太网

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

本章的重要概念


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

  • 点对点信道。这种信道使用一对一的点对点通信方式。
  • 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

局域网虽然是个网络,但我们并不把局域网放在网络层中讨论。这是因为网络层要讨论的问题是多个网络互连的问题,是讨论分组怎样从一个网络通过路由器转发到另一个网络。在本章中我们研究的是同一个局域网中,分组怎样从一台主机传送到另一台主机,但不经过路由器转发。从整个互联网来看,局域网仍属于数据链路层的范围。

本章最重要的内容:

  1. 数据链路层的点对点信道和广播信道的特点,以及这两种信道所使用的协议(PPP协议以及CSMA/CD协议)的特点。
  2. 数据链路层的三个基本问题:封装成帧、透明传输、差错检测。
  3. 以太网MAC层的硬件地址。
  4. 适配器、转发器、集线器、网桥、以太网交换机的作用以及使用场合。

下图是两台主机通过互联网进行通信时数据链路层所处的地位。

计网复习——第三章 数据链路层_第1张图片

(a)表示用户主机H1通过电话线上网,中间经过R1,R2,R3三个路由器连接到远程主机H2。所经过的网络可以是多种的,如电话网、局域网和广域网。当主机H1向H2发送数据时,从协议的层次上看,数据的流动如图(b)所示。主机H1和主机H2都有完整的五层协议栈,但路由器在转发分组时使用的协议栈只有下面的三层。(注:当路由器之间在交换路由信息时,根据所使用的路由选择协议不同,也有可能需要用到运输层协议。见第四章的第5点。)数据进入路由器后,先从物理层上到网络层,在网络层的转发表中找到下一跳的地址后,再下到物理层转发出去。因此,数据从H1到H2需要在路径中的各结点的协议栈向上和向下流动多次,如上图中箭头所示。

当我们专门研究数据链路层时,许多情况下我们只关心在协议栈中水平方向的各数据链路层,于是当H1向H2发送数据时,我们可以想象数据就是在数据链路层从左向右沿水平方向传送的,即如下图所示:

计网复习——第三章 数据链路层_第2张图片

H1→R1→R2→R3→H2。这中间四段不同的链路层可能采用不同的数据链路层协议

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

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

1.1 数据链路和帧

首先要明确,“链路”和“数据链路”不是一回事儿:

  • 链路(link)是一个结点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他交换结点。在进行数据通信时,两台计算机之间的通信路径往往要经过许多段这样的链路。链路只是一条路径的组成部分。
  • 数据链路(data link)是另一个概念。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必须的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用网络适配器(既有硬件,也有软件)来实现这些协议。一般的适配器都包括了数据链路层和物理层这两层的功能。

也有另外的术语:把链路分为物理链路和逻辑链路。物理链路就是“链路”,逻辑链路就是“数据链路”,是物理链路加上必要的通信协议。

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

下面介绍点对点信道的数据链路层的协议数据单元——

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

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

计网复习——第三章 数据链路层_第3张图片

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

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

1.2 三个基本问题

数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:封装成帧透明传输差错检测

1.2.1 封装成帧

封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。下图表示用帧首部和帧尾部封装成帧的一般概念。分组交换的一个重要概念就是:所有在互联网上传送的数据都以分组(即IP数据报)为传送单位。网络层的IP数据报传送到数据链路层就成为帧的数据部分,在帧的数据部分的前面和后面分别添加上首部和尾部即构成了一个完整的帧。这样的帧就是数据链路层的数据传送单元。一个帧的帧长等于帧的数据部分——帧首部的长度+帧尾部的长度

计网复习——第三章 数据链路层_第4张图片

帧首部和尾部的一个重要作用就是进行帧定界(确定帧的界限)。此外,首部和尾部还包括许多必要的控制信息。在发送帧时,是从帧首部开始发送的。各种数据链路层协议都对帧首部和帧尾部的格式有明确的规定。显然,为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU(Maximun Transfer Unit)。上图给了帧的首部和尾部的位置,以及帧的数据部分与MTU的关系。

当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。ASCII编码是7为编码,一共可组成128个不同的ASCII码,其中可打印的(可以键入的)有95个,不可打印的有33个。下图说明了帧定界的概念。控制字符SOH(Start Of Header)表示帧的首部开始;控制字符EOH(End Of Header)表示帧的结束。它们的十六进制编码分别是01(二进制00000001)和04(二进制00000100)。

计网复习——第三章 数据链路层_第5张图片

当数据在传输中出现差错时,帧定界符的作用更加明显——假定发送端在尚未发送完一个帧时突然故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发完的帧。由于使用了帧定界符,接收端就知道前面收到的数据是个不完整的帧(只有SOH而没有EOH),必须丢弃。而后面收到的是完整的帧(有明确的帧界定符SOH和EOH),应该收下。

1.2.2 透明传输

由于帧的开始和结束的标记使用专门指明的控制字符,因此所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。

当传送的帧是用文本文件组成的帧时(文本文件中的字符都是键入的),其数据部分显然不会像SOH和EOH这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传过去,因此这样的传输就是透明传输

当传送帧的数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等),又恰好数据中的某个字节的二进制和SOH或EOH这种控制字符一样(如下图),数据链路层就会错误地“找到帧的边界”,把部分帧收下(误认为是一个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。

计网复习——第三章 数据链路层_第6张图片

像上图所示的帧的传输显然不是“透明传输”,因为当遇到数据中碰巧出现字符“EOH”时就传不出去了。数据中的“EOH”将被接收端错误地解释为“传输结束”的控制字符,而在其后面的数据因找不到"SOH"被接收端当作无效帧丢弃。但实际上在数据中出现的字符"EOH"并非控制字符而仅仅是二进制数据00000100。

前面提到的“透明”是一个很重要的术语。它表示:某一个实际存在的事物看起来却好像不存在一样。对传送的数据来说,这些数据看不见数据链路层有什么妨碍数据传输的东西。或者说,数据链路层对这些数据来说是透明的。

为了解决透明传输问题,就必须设法使数据中可能出现的控制字符"SOH"和"EOH"在接收端不被解释为控制字符具体方法是发送端的数据链路层在数据中出现控制字符"SOH"或"EOH"的前面插入一个转义字符"ESC"(其十六进制编码是1B,二进制是00011011)。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符前插入一个转义字符。因此。当接收端收到连续的两个转义字符时就删除其中前面的一个。下图表示用字节填充法解决透明传输的问题:

计网复习——第三章 数据链路层_第7张图片

1.2.3 差错检测

现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能变成0,0也可能变成1.这叫做比特差错。比特差错是传输差错中的一种。在一段时间内,传输错误的比特占传输总比特的比率称为误码率BER(Bit Error Rate)。例如,误码率为10^{-10}时,表示平均传送10^{10}个比特就会出现一个比特的差错。误码率与信噪比有很大的关系。如果设法提高信噪比,就可以使误码率减少。实际的通信链路并非是理想的,他不可能使误码率下降到0。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。

下面通过一个例子来说明循环冗余检验的原理

在发送端,先把数据划分为组,假定每组k个比特。先假定带传送的数据M=101001(k=6)。CRC运算就是在数据M后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,但却可以进行差错检测。当传输可能出现差错时,付出这种代价往往是很值得的。

这n位冗余码可以按照以下方法得出。用二进制的模2运算(进行加法时不进位)进行2^{n}乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数P,得出商是Q而余数是R(n位,比P少一位)。关于除数P下面还要介绍。在下图所示的例子中,M=101001(k=6),假定除数=1101(n=3)。经模2除法后的结果:商Q=110101(这个商并没有什么用处),而余数R=001。这个余数R就作为冗余码拼接在数据M后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列FCS(Frame Check Sequence)。因此加上FCS后发送的帧是101001001(即2^{n}M+FCS),共有(k+n)位。

BTW,循环冗余检验CRC和帧检验序列FCS并不是一个概念:前者是检错方法,后者是冗余码。在检错方法上可以用CRC,也可以不用。

计网复习——第三章 数据链路层_第8张图片

在接收端把接收到的数据以帧为单位进行CRC检验:把收到的每一帧都除以同样的除数P(模2运算),然后检查得到的余数R。

如果在传输过程中无差错,那么经过CRC检测后得出的R肯定是0;但如果出现误码,那么R仍等于0的概率是非常非常小的。

一种比较简便的方法是用多项式来表示循环冗余检验过程。在上面的例子中,用多项式P(X)=X^{3}+X^{2}+1表示上面的除数P=1101。多项式P(X)称为生成多项式。现在广泛使用的生成多项式P(X)有以下几种:

CRC-16=X^{16}+X^{15}+X^{2}+1

CRC-CCITT=X^{16}+X^{12}+X^{5}+1

CRC-32=X^{32}+X^{26}+X^{23}+X^{22}+X^{16}+X^{12}+X^{11}+X^{10}+X^{8}+X^{7}+X^{5}+X^{4}+X^{2}+X+1

在数据链路层中,发送端帧检验序列FCS的生成和接收端的CRC检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。

从以上讨论中不难看出,如果我们在传送数据时不以帧为单位来传送,那么就无法加入冗余码以进行差错检验。因此,如果要在数据链路层进行差错检验,就必须把数据划分分帧,每一帧都加上冗余码,一帧接一帧地传送,然后再接收方逐帧进行差错检验。

最后再强调一下,在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接收,即:“凡是接收端数据链路层接收的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。以上所述的可以近似地表述为(通常是这样认为的):“凡是接收端数据链路层接收到的帧均是无差错的”。

注意,我们现在并没有要i去数据链路层向网络层提供“可靠传输”的服务。所谓“可靠传输”是指:数据链路层的发送端发送什么,接收端就接收什么。传输差错可以分为两大类:一类就是最基本的比特差错,另一类是收到的帧没有出现比特差错,但是存在帧丢失、帧重复、帧失序等问题。所以,在数据链路层使用CRC检验,可以实现无比特差错的传输,但不能保证是可靠传输。

过去OSI的观点是:必须让数据链路层向上提供可靠传输。因此在CRC检错的基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到确认,就认为出现了差错并进行重传,直到收到对方的确认为止。现在的互联网有区别对待的方法:

对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出现了差错并且需要改正,那么改正的任务交由上层协议(例如运输层的TCP协议)来完成对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务(第九章)。实践证明,这样可以提高通信效率

可靠传输协议在第五章讨论,本章的数据链路层协议都不是可靠传输的协议。

2. 点对点协议PPP

在通信线路质量较差的年代,在数据链路层使用可靠传输协议曾经是一种好办法。因此,能实现可靠传输的高级数据链路控制HDLC(High-level Data Link Control)就成为当时比较流行的数据链路层协议。但现在HDLC已经很少用 。对于点对点的链路,简单得多的点对点协议PPP则是目前使用最广泛的。

2.1 PPP协议的特点

互联网用户通常都要连接到某个ISP才能接入到互联网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议,如下图。

计网复习——第三章 数据链路层_第9张图片

2.1.1 PPP协议应满足的需求

IETF国际互联网工程任务组(Internet Engineering Task Force)认为,在设计PPP协议时必须考虑以下多方面的需求:

  1. 简单    IETF在设计互联网体系结构时把其中最复杂的部分放在TCP协议中,而网际协议IP则相对比较简单,它提供的是不可靠的数据报服务。在这种情况下,数据链路层没有必要提供比IP协议更多的功能。因此,对数据链路层的帧,不需要纠错,不需要序号,也不需要流量控制。IETF把“简单”作为首要的需求。简单的设计可以使协议在实现时不容易出错,从而使不同的厂商在协议的不同实现上的互操作性提高了,这也是协议标准化的一个主要目的。           总之,这种数据链路层协议非常简单:接收方每收到一个帧,就进行CRC检验。正确则收下,错误则丢弃。
  2. 封装成帧    PPP协议必须规定特殊的字符作为帧定界符(即标志一个帧的开始和结束的字符),以便接收端从收到的比特流中能准确地找出帧的开始和结束位置。
  3. 透明性    PPP协议必须保证数据传输的透明性。这就是说,如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题,
  4. 多种网络层协议    PPP协议必须能够在同一条物理链路上同时支持多种网络层协议(如IP和IPX等)的运行。当点对点链路所连接的时局域网或路由器时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议。
  5. 多种类型链路    除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的(一次只能发送一个比特)或并行的(一次并行地发送多个比特),同步的或异步的,低速的或高速的,电的或光的,交换的(动态的)或非交换的(静态的)点对点链路。【PPPoE(PPP over Ethernet)在以太网运行的PPP是PPP协议能够适应多种类型链路的一个典型例子。PPPoE是为宽带上网的主机使用的链路层协议。这个协议把PPP帧再封装再以太网帧中(当然还要增加一些能够识别各用户的功能)。宽带上网时由于数据传输速率较高,因此可以让多个连接再以太网上的用户共享一条到ISP的宽带链路。现在,即使是只有一个用户利用ADSL进行宽带上网(也不和其他人共享到ISP的宽带链路),也是使用PPPoE协议,见后面的6.4的讨论。
  6. 差错检测(error detection)     PPP协议必须能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。若在数据链路层不进行差错检测,那么已出现差错的无用帧就还要在网络中继续向前转发,因而会白白浪费许多的网络资源。
  7. 检测连接状态     PPP协议必须具有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要有这种及时检测功能。
  8. 最大传送单元    PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值。这样做是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这个帧,并返回差错。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。
  9. 网络层地址协商     PPP协议必须提供一种机制使通信的两个网络层(如两个IP层)的实体能够通过协商知道或能够配置彼此的网络层地址。协商的算法应尽可能简单,并且能够在任何情况下得出协商结果。这对拨号连接的链路特别重要,因为如果仅仅在链路层建立了连接而不知道对方网络层地址,则还不能够保证网络层可以传送分组。
  10. 数据压缩协商    PPP协议必须提供一种方法来协商使用数据压缩算法。但PPP协议并不要求将数据压缩算法进行标准化。

在TCP/IP协议族中,可靠传输由运输层的TCP协议负责,因此数据链路层的PPP协议不需要进行纠错,不需要设置序号,也不需要进行流量控制。PPP协议不支持多点线路(即一个主站轮流和链路上的多个从站进行通信),而只支持点对点的链路通信。此外,PPP协议支持全双工链路

2.1.2 PPP协议的组成

PPP协议的组成有三个部分:

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

2.2 PPP协议的帧格式

2.2.1 各字段的意义

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

计网复习——第三章 数据链路层_第10张图片

  • 首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E。标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果出现两个连续的标志字段,就表示这是一个空帧,应当丢弃。
  • 上图中,首部中的地址字段A规定为0xFF,控制字段C规定为0x03。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出。可见这两个字段实际上并没有携带PPP帧的信息。
  • PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报;若为0xC021,则信息字段是PPP链路控制协议LCP的数据;而0x8021表示这是网络层的控制数据。
  • 信息字段的长度是可变的,不超过1500字节。
  • 尾部中的第一个字段(2字节)是使用CRC的帧检验序列FCS

2.2.2 字节填充

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

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

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

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

2.2.3 零比特填充

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

零比特填充的具体做法是:在发送端,先扫描整个信息字段(通常是硬件实现,但也可以用软件实现,只是会慢些)。只要发现有5个连续的1,即填入一个0。接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续的1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流,如下图。这样就保证了透明传输:在所传输的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。

计网复习——第三章 数据链路层_第11张图片

2.3 PPP协议的工作状态

上一节中通过PPP帧的格式讨论了PPP帧是怎样组成的。但PPP链路一开始是怎样被初始化的?【当用户拨号接入ISP后,就建立了一条从用户个人电脑到ISP的物理连接。这时,用户个人电脑向ISP发送一系列链路控制协议LCP分组(封装成多个PPP帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配一个临时的IP地址。这样,用户个人电脑就成为互联网上的一个有IP地址的主机了。当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接,最后释放的是物理层的连接。】上述过程如下图所示:

计网复习——第三章 数据链路层_第12张图片

PPP链路的初始和终止状态永远是上图中的“链路静止”(Link Dead)状态,这时在用户个人电脑和ISP之间的路由器之间并不存在物理层的连接。→当用户个人电脑通过调制解调器呼叫路由器时(通常是在屏幕上用鼠标点击一个连接按钮),路由器能够检测到调制解调器发出的载波信号。在上方建立了物理连接后,PPP就进入到“链路建立”(Link Establishe)状态,其目的是建立链路层的LCP连接。   →这时LCP开始协商一些配置选项,即发送LCP的配置请求帧(Configure-Request)。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应中的一种:

  1. 配置确认帧(Configure-Ack)——所有选项都接受。
  2. 配置否认帧(Configure-Nak)——所有选项都理解但不能接受。
  3. 配置拒绝帧(Configure-Reject)——选项有的无法识别或不能接收,需要协商。

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

协商结束后双方就建立了LCP链路,接着就进入“鉴别”(Authentication)状态。在这一个状态,只允许传送LCP协议的分组、鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议(Paasword Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。系统可以允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议(Challenge-Handshake Authentication Protocol)。若鉴别身份失败,则转到“链路终止”(Link Terminate状态。若鉴别成功,则进入“网络层协议”(Network-Layer Protocol)状态。

“网络层协议”状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤是很重要的,因为现在的路由器都能够同时支持多种网络层协议。总之,PPP协议两端的网络层可以运行不同的网络层协议,但仍然可以使用同一种PPP协议进行通信

如果在PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块(如分配IP地址)时就要使用NCP中支持IP的协议——IP控制协议IPCP。IPCP分组也封装成PPP帧(其中的协议字段为0x8021)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。

当网络层配置完毕后,链路就进入可进行数据通信的“链路打开”(Link Open)状态。链路的两个PPP端点可以彼此向对方发送分组。两个PPP端点还可发送回送请求LCP分组(Echo-Request)回送回答LCP分组(Echo-Reply),以检查链路的状态。

数据传输结束后,可以由链路的一端发出终止请求LCP分组(Terminate-Request)请求终止链路连接,在收到对方发来的终止确认LCP分组(Terminate-Ack)后,转到“链路终止”状态。如果链路出现故障,也会从“链路打开”状态转到“链路终止”状态。当调制解调器的载波停止后,则回到“链路静止”状态。

上图右边的灰色方框给出了对PPP协议的几个状态的说明。从设备之间无链路开始,到先建立物理链路,再建立链路控制协议LCP链路。经过鉴别后再建立网络控制协议NCP链路,然后才能交换数据。由此可见,PPP协议已经不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

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

广播信道可以进行一对多的通信。下面要讨论的局域网使用的就是广播信道。局域网技术在计算机网络中占有非常重要的地位。

3.1 局域网的数据链路层

局域网最主要的一个特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。局域网具有如下一些优点:

  1. 具有广播功能,从一个站点可以很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源
  2. 便于系统的扩展和逐渐演变,各设备的位置可灵活调整和改变。
  3. 提高了系统的可靠性(reliability)、可用性(availability)、生存性(survivability)。

局域网可按网络拓扑进行分类。下图(a)是星形网。由于集线器(hub)的出现和双绞线大量用于局域网中,星形以太网以及多级星形结构的以太网获得了非常广泛的应用。图(b)是环形网,图(c)是总线网,各站直接连接在总线上。总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射。总线网以传统以太网最为著名。局域网经历了四十年的发展,尤其是在快速以太网、吉比特以太网、10吉比特以太网相继进入市场后,以太网已经在局域网市场中占据了绝对优势。现在以太网几乎成为了局域网的同义词,因此本章从本节开始都是讨论以太网技术。

计网复习——第三章 数据链路层_第13张图片

局域网可使用多种传输媒体。双绞线已成为局域网中的主流传输媒体,当数据率很高时,往往需要使用光纤作为传输媒体。

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

共享信道要着重考虑的一个问题是如何使众多用户能够合理而方便地共享通信媒体资源。在技术上有两种方法:

  1. 静态划分信道——例如第二章的复用技术。用户只要分配到了信道就不会和其他用户发生冲突。但这种信道划分的方法代价较高,不适合局域网使用;
  2. 动态媒体接入控制——又称为多点接入(mutiple access),其特点是信道并非在用户通信时固定分配给用户。这里又分为两类:
  • 随机接入——特点是所有的用户可随机地发送信息。但如果碰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞(冲突),使得这些用户的发送都失败。因此必须有解决碰撞的网络协议。
  • 受控接入——特点是用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询(polling),或称为轮询。

属于随机接入的以太网将被重点讨论。受控接入则由于目前在局域网中使用得较少,不予讨论。

3.1.1 以太网的两个标准

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

在此基础上,IEEE 802委员会的802.3工作组制定了第一个以太网标准,数据率为10Mbit/s。802.3局域网对以太网标准中的帧格式做了很小的一点更动,但允许基于这两种标准的硬件实现可以在同一个局域网上互操作。以太网的两个标准DIX Ethernet V2与IEEE的802.3标准差别很小,因此很多人也常把802.3局域网简称为以太网(经常不严格区分它们)。

为了使数据链路层能更好地适应多种局域网标准,IEEE802委员会就把局域网的数据链路层拆成了两个子层,即逻辑链路控制LLC(Logic Link Control)子层媒体接入控制MAC(Medium Access Control)子层与接入到传输媒体有关的内容都放在MAC子层,而LLC子层则与传输媒体无关,不管采用何种传输媒体和MAC子层的局域网对LLC子层来说都是透明的,如下图:

计网复习——第三章 数据链路层_第14张图片

然而到了20世纪90年代后,激烈竞争的局域网市场逐渐明朗。以太网在局域网市场中已经取得垄断地位,并且几乎成为了局域网的代名词。由于互联网发展很快而TCP/IP体系经常使用的局域网只剩下DIX Ethernet V2而不是IEEE 802.3标准中的局域网,因此现在IEEE 802委员会制定的逻辑链路控制子层LLC的作用已经消失了,很多厂商生产的适配器上就仅装有MAC协议而没有LLC协议。本章在介绍以太网时就不考虑LLC子层。这样对以太网工作原理的讨论更简洁。

3.1.2 适配器的作用

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

计算机与外界局域网的连接是通过通信适配器(adapter)进行的。适配器本来是在主机箱内插入的一块网络接口板(或者是在笔记本电脑中插入一块PCMCIA卡——个人计算机存储器卡接口适配器)。这种接口板又称为网络接口卡NIC或简称为“网卡”。在这种通信适配器上面装有处理器存储器(包括随机存取存储器RAM和只读存储器ROM)。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的。而适配器和和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。由于网络上的数据率各计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后就会告诉适配器,应当从存储器的什么位置上把多长的数据块发送到局域网,或者应当在存储器的什么位置上把局域网传送过来的数据块存储下来。适配器还要能够实现以太网协议。注意:适配器所实现的功能包含了数据链路层和物理层两个部分,但现在的芯片继承度都很高,以致很难把一个适配器的功能严格按照层次的关系精确划分开。

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

计网复习——第三章 数据链路层_第15张图片

3.2 CSMA/CD协议

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

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

人们也常把局域网上的计算机称为“主机”、“工作站”、“站点”、或“站”。在本书中,这几个名词都可以当成是同义词。为了通信的简便,以太网采取了以下两种措施:

第一、采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。适配器对发送的数据帧不进行编号,也不要求对方发回确认。这样做可以使以太网工作起来非常简单,而局域网信道的质量很好,因通信质量不好产生的差错的概率是很小的。因此,以太网提供的服务是尽最大努力的交付,即不可靠的交付。当目的地收到有差错的数据帧时(例如,用CRC查出有差错),就把帧丢弃,其他什么也不做。对有差错帧是否需要重传则由高层来决定。例如,如果高层使用TCP协议,那么TCP就会发现丢失了一些数据。于是经过一定的时间以后,TCP就把这些数据重新传递给以太网进行重传。但以太网并不知道这是重传帧,而是当作新的数据帧来发送。             我们知道,总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因为,在同一时间只能允许一台计算机发送数据,否则各计算机之间就会互相干扰,使得所发送数据被破坏。因此,如何协调总线上各计算机的工作就是以太网要解决的一个重要问题。以太网采用最简单的随机接入,但有很好的协议用来减少冲突发生的概率。以太网采用的协调方法和下面方法非常像,它使用的协议是CSMA/CD,意思是载波监听多点接入/碰撞检测(Carrier Sense Access with Collison Detection)

计网复习——第三章 数据链路层_第16张图片

第二、以太网发送的数据都使用曼彻斯特编码信号。前面第二章2.2节中已经简单地介绍过曼彻斯特编码了。我们知道,二进制基带数字信号通常就是高、低电压交替出现的信号。使用这种信号的最大问题就是当出现一长串的连1或连0时,接收端就无法从收到的比特流中提取位同步(即比特同步)信号。如下图所示,曼彻斯特编码方法是把每一个码元再分成两个相等的间隔。码元1是前一个间隔为低电压而后一个间隔为高电压。码元0则正好相反,从高电压变到低电压(也可采用相反的约定,即1是“前高后低”而0是“前低后高”)。这样就保证了在每一个码元的正中间出现一次电压的转换,而接收端就利用这种电压的转换很方便地把位同步信号提取出来。但是从曼彻斯特编码的波形图也不难看出其缺点,这就是它所占的频带宽度比原始的基带信号增加了一倍(因为每秒传送的码元数加倍了)。

计网复习——第三章 数据链路层_第17张图片

下面介绍CSMA/CD协议的要点:

  • “多点接入”就是说明这是总线型网络,许多计算机以多点接入的方式连接在一根总线上。协议的实质是“载波监听”和“碰撞检测”。
  • “载波监听”就是用电子技术检测总线上有没有其他计算机也在发送。其实总线上并没有什么“载波”,这里只不过是借用以下“载波”这个名词而已。因此载波监听就是检测信道,这是个很重要的措施。不管在发送前,还是在发送中,每个站都必须不停地检测信道。在发送前检测信道,是为了获得发送权。如果检测出已经有其他站在发送,则自己就暂停不许发送数据,必须要等到信道变为空闲时才能发送。在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞。这就称为碰撞检测。
  • “碰撞检测”也就是“边发送边监听”,即适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加)。当适配器检测到的信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测”也被称为“冲突检测”。这时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。因此,任何一个正在发送数据的站,一旦发现总线上出现碰撞,其适配器就要立即停止发送,免得继续进行无效的发送,白白浪费网络资源,然后等待一段随机时间后再次发送。

既然每个站在发送数据前已经监听到信道为“空闲”,那么为什么还会出现数据在总线上的碰撞呢?这是因为电磁波在总线上总是以有限的速率传播的。下图可以说明这一情况。设图中的局域网两端的站A和B相距1km,用同轴电缆相连。电磁波在1km电缆的传播时延约为5us(这个数字要记住)。因此,A向B发出的数据,在约5\mu s后才能传送到B。换言之,B若在A发送的数据到达B之前发送自己的帧(因为这时B的载波监听检测不到A所发送的信息),则必然要在某个时间和A发送的帧发送碰撞。碰撞的结果是两个帧都变得无用。在局域网的分析中,常把总线上的单程端到端传播时延记为\tau。发送数据的站希望尽早知道是否发生了碰撞。那么,A发送数据后,最迟要经过多长时间才能知道自己发送的数据和其他站发送的数据有没有发生碰撞?从下图不难看出,这个时间最多是两倍的总线端到端的传播时延(2\tau,或总线的端到端往返传播时延。由于局域网上任意两个站之间的传播时延(这两个站之间的距离最大)为端到端传播时延。

计网复习——第三章 数据链路层_第18张图片

显然,在使用CSMA/CD协议时,一个站不可能同时进行发送和接收(但必须边发送边监听信道)。因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)

其实,通过上图我们知道,以太网不能保证在某一个时间之内一定可以把自己的数据帧成功发送出去(因为可能发生碰撞),以太网的这一特点叫做发送的不确定性。如果希望在以太网上发生碰撞的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。

从上图中可以看出,最先发送数据帧的是A站,在发送帧后至多经过2\tau就可知道发送帧是否遭受了碰撞。这就是δ→0的情况。因此以太网的端到端往返时间2\tau称为争用期(contention period),它是个很重要的参数。争用期又被称为碰撞窗口(collision window)。这时因为一个站在发送完数据后,只有通过争用期的“考验”,即经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。这时,就可以放心把这一帧数据顺利发送完毕。

以太网使用截断二进制指数退避(truncated binary exponential backoff)算法来确定碰撞后重传的时机。截断二进制指数退避算法并不复杂,这种算法让发生碰撞的站在停止发送数据后,不是等待信道变为空闲后就立刻再发送数据,而是推迟(退避)一个随机时间。这点很容易理解,因为如果几个发生碰撞的站都在监听信道,那么都会同时发现信道空闲,再同时重新发送又会发生碰撞。为了使各站进行重传时再次发生冲突的概率减小,具体退避算法如下

  1. 协议规定了基本退避时间的争用期2\tau,具体的争用期时间51.2\mu s。对于10Mbit/s以太网,在争用期内可发送512bit,即64字节。也可以说争用期是512比特时间。1比特时间就是发送1bit所需的时间。所以这种时间单位与数据率密切相关。为了方便,也可以直接用比特作为争用期的单位。争用期是512bit,即争用期是发送512bit所需的时间。
  2. 从离散的整数集合[0,1,...,(2^{k}-1)]中随机取一个数,记为r。重传应推后的时间就是r倍的争用期。前面的参数k按下面的公式计算:k=Min[重传次数,10]。       可见重传次数不超过10时,参数k等于重传次数;但当超过10时,k就不再增大而一直等于10.
  3. 当重传次数达16次仍不能成功时(这表明同时发送数据帧的站太多,以致连续发生冲突),则丢弃该帧,并向高层报告。

若连续多次发生冲突,就表明可能有较多的站参与争用信道。但使用退避算法可能使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。

我们还注意到,适配器每发送一个新的帧,就要执行一次CSMA/CD算法。适配器对过去发生过的碰撞并无记忆功能。因此,当好几个适配器正在执行指数退避算法时,很可能有某个适配器发送的新帧能够碰巧立即成功地插入信道中,得到发送权,而已经推迟了好几次发送的站,有可能很不巧还要继续执行退避算法,继续等待。

现在考虑一种情况。某个站发送了一个很短的帧,但再发送完毕前并没有检测出碰撞。假定这个帧再继续向前传播到达目的站之前和别的站发送的帧发生了碰撞,因而目的站将收到有差错的帧(丢弃)。可是发送站不知道这个帧发生了碰撞,因而不会重传这个帧,这当然不是我们乐意看到的。为了避免这一情况的发生,以太网规定了一个最短帧长64字节,即512bit。如果要发送的数据非常少,那么必须填入一些字节,使得帧长不少于64字节。对于10Mbit/s以太网,发送521bit需要51.2\mu s,也就是上面提到的争用期。

由此可见,以太网在发送数据时,如果在争用期(共发送了64字节)没有发生碰撞,那么后续发送的数据就一定不会发生冲突。换句话说,如果发生碰撞,就一定是在发送的前64字节内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。只要收到了这种无效帧,就应当立即丢弃。

前面已经讲过,信号在以太网上传播1km大约需要5\mu s。以太网上最大的端到端时延必须小于争用期的一半(即25.6\mu s),这相当于以太网的最大端到端长度约为5km。实际上的以太网覆盖范围远远没有这样大。因此,实用的以太网都能在争用期51.2\mu s内检测到可能发生的碰撞。以太网的争用期确定为51.2\mu s,不仅考虑到以太网的端到端时延,而且还包括其他的许多因素,如存放的转发器所增加的时延,以及下面要讲到的强化碰撞的干扰信号的持续时间等

下面介绍强化碰撞的概念。这就是当发送数据的站一旦发现发生了碰撞时,除了立即停止发送数据外,还要再继续发送32比特或48比特的人为干扰信号(jamming signal),以便让所有用户都知道现在已经发生了碰撞(如下图)。对于10Mbit/s以太网,发送32bit(或48bit)只需要3.2\mu s(或4.8\mu s)。

计网复习——第三章 数据链路层_第19张图片

从上图可看出,A站从发送数据开始到发现碰撞立即停止发送的时间间隔是T_{B}。A站得知碰撞易发生时所发送的强化碰撞的干扰信号的持续时间是T_{J}。图中的B站在得知发生碰撞后,也要发送人为干扰信号,但为简单起见,上图并没有画出B站所发送的人为干扰信号。发生碰撞使A浪费时间T_{B}+T_{J}。可是,整个信道被占用的时间还要增加一个单程端到端的传播时延\tau。因此,总线被占用的时间是T_{B}+T_{J}+\tau

以太网还规定了帧间间隔最小为9.6\mu s,相当于96比特时间。这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。

根据以上所讨论的,可以把CSMA/CD协议的要点归纳如下:

  1. 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部(见后面的4.3节),组成以太网帧,放入适配器的缓存中。但在发送之前,必须先检测信道
  2. 检测信道:若检测到信道忙,则应不停地检测,一直等到信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
  3. 在发送过程中仍不停地检测信道,即网络适配器边发送边监听。这里只有两种可能性:①发送成功:在争用期内一直未检测到碰撞,发送成功后回到步骤1;②发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送认为干扰信号。适配器接着就执行指数退避算法,等待r倍512比特时间后,返回步骤2,继续检测信道。但若重传达到16次仍不成功,则停止重传而向上报错。

以太网每发送完一帧,一定要把已发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要再推迟一段时间后再把这个暂时保留的帧重传一次。

3.3 使用集线器的星形拓扑

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

计网复习——第三章 数据链路层_第20张图片

但10BASE-T以太网的通信距离稍短,每个站到集线器的距离不超过100m。这种性价比很高的10BASE-T双绞线以太网的出现,是局域网发展史上的一个非常重要的里程碑,从此以太网的拓扑就从总线型变为更加方便的星型网络,而以太网也就在局域网中占据了统治地位。

使双绞线能够传送高速数据的主要措施是把双绞线的绞合度做得非常精确。这样不仅可使特性阻抗均匀减少失真,而且大大减少了电磁波辐射和无线电频率的干扰。在多对双绞线的电缆中,还要使用更加复杂的绞合方法。集线器的特点如下:

  1. 从表面来看,使用集线器的局域网在物理上是一个星形网,但由于集线器使用电子器件来模拟实际电缆线的工作,因此整个系统仍像一个传统以太网那样运行。也就是说,使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议(更具体些说,是各站中的适配器执行CSMA/CD协议)。网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据
  2. 一个集线器有许多接口,例如8到16个,每个接口通过RJ-45插头用两对双绞线与一台计算机上的适配器相连(这种插座可连接4对双绞线,实际上只用2对,即发送和接收个使用一对双绞线)。因此,一个集线器很像一个多接口的转发器
  3. 集线器工作在物理层,它的每个接口仅仅简单地转发比特——收到1就转发1,收到0就转发0,不进行碰撞检测。若两个接口同时有信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。下图是具有三个接口的集线器的示意图。计网复习——第三章 数据链路层_第21张图片
  4. 集线器采用了专门的芯片,进行自使用串音回波抵消。这样就可使接口转发出去的较强信号不致对该接口接收到的较弱信号产生干扰(这种干扰即近端串音)。每个比特在转发之前还要进行再生整形并重新定时。

集线器本身必须非常可靠。现在的堆叠式(stackable)集线器由4~8个集线器堆叠起来使用。集线器一般都有少量的容错能力和网络管理功能。例如,【假定在以太网中有一个适配器出了故障,不停地发送以太网帧。这时,集线器可以检测到这个问题,在内部断开与出故障的适配器的连线,使整个以太网仍然能够工作。】模块化的机箱式智能集线器有很高的可靠性。它全部的网络功能都以模块方式实现。各模块均可进行热插拔,出故障时不断电即可更换或增加新模块。集线器上的指示灯还可显示网络上的故障情况,给网络的管理带来了极大的方便。

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

3.4 以太网的信道利用率

下面我们讨论一下以太网的信道利用率。

假定一个10Mbit/s以太网同时有10个站工作,那么每一个站所能发送的平均速率似乎应当是总数据率的1/10(即1Mbit/s)?——其实不然,因为多个站在以太网上同时工作就可能发生碰撞。当发生碰撞时,信道资源实际上是被浪费了。因此,当扣除碰撞所造成的信道损失后,以太网总的信道利用率并不能达到100%。

下图是以太网信道被占用的情况。一个站在发送帧时出现了碰撞。经过一个争用期2\tau后,可能又出现了碰撞。这样经过若干个争用期后,一个站发送成功了。假定发送帧需要的时间是T_{0}。它等于帧长(bit)除以发送速率(10Mbit/s)。

计网复习——第三章 数据链路层_第22张图片

我们应当注意到,成功发送一个帧需要占用信道的时间是T_{0}+\tau,比这个帧的发送时间要多个单程端到端时延\tau。这时因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播。在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间是\tau。因此,必须在经过时间T_{0}+\tau后以太网的媒体才完全进入空闲状态,才能允许其他站发送数据。

从上图可看出,要提高以太网的信道利用率,就必须减小\tauT_{0}之比。在以太网中定义了参数a,他是以太网单程端到端时延\tau与帧的发送时间T_{0}之比: a=\tau/T_{0}当a→0时,表示只要一发生碰撞,就立即可以检测,并立即停止发送,因而信道资源被浪费的时间非常非常少。反之,参数a越大,表明争用期所占的比例越大,这就使得每发生一次碰撞就浪费了不少信道资源,使得信道利用率明显降低。因此,以太网的参数a的值应当尽可能小一些。这就要求\tau小一些或T_{0}大一些。所以,当数据率一定时,以太网的连线的长度收到限制(否则\tau的数值会太大),同时以太网的帧长不能太短(否则T_{0}的值会太小)。

现在考虑一种理想化的情况,假定以太网上的各站发送数据都不会产生碰撞(这显然不是CSMA/CD协议,而是需要一种特殊的调度方法),并且能够非常有效地利用网络的传输资源,即总线一旦空闲就有某个站看i及发送数据。这样,发送一帧占用线路的时间是T_{0}+\tau,而帧本身的发送时间是T_{0},所以我们可计算出极限信道利用率S_{max}=\frac{T_{0}}{T_{0}+\tau }=\frac{1}{1+a}。该公式的意义是:虽然实际的以太网不可能有这样高的极限信道利用率。但公式指出了只有当a远小于1时才能得到尽可能高的极限信道利用率。反之,若参数a远大于1(即每发生一次碰撞,就要浪费相对较多的传输数据的时间),则极限信道利用率就远小于1,而这时实际的信道利用率就更小了。据统计,当以太网的利用率达到30%时就已经处于重载的情况。很多的网络容量被网上的碰撞消耗掉了

3.5 以太网的MAC层

3.5.1 MAC的硬件地址

在局域网中,硬件地址又称为物理地址MAC地址(因为这种地址用在MAC帧中)。

我们知道,在所有计算机系统的设计中,标识系统(identification)都是一个核心问题。在标识系统中,地址就是识别某个系统的一个非常重要的标识符。在讨论地址问题时,很多人常常引用如下定义:“名字指出我们所要寻找的那个资源,地址指出那个资源在何处,路由告诉我们如何到达该处”。这个非形式的定义固然很简单,但有时却不够准确。严格地讲,名字应当与系统的所在地无关。像人名不随我们所处地点而改变一样。但是IEEE 802标准未局域网规定了一种48位的全球地址(一般都简称“地址”),是指局域网上的每一台计算机中固化在适配器的ROM地址,因此:

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

由此可见,局域网上的某台主机的“地址”根本不能告诉我们这台主机位于什么地方。因此,严格地讲:局域网的“地址”应当是一个站的名字或标识符。不过计算机的名字通常都是比较适合人记忆的不太长的字符串,而这种48位二进制的“地址”很不像一般计算机的名字。现在人们还是习惯于把这种48位的“名字”称为“地址”。

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

在制定局域网的地址标准时,首先遇到的问题就是应当用多少位来表示一个网络的地址字段。为了减少不必要的开销,地址字段的长度应当尽可能短些。起初人们觉得用两个字节(共16位)表示地址就够了,因为这一共可表示6万多个地址。但是,由于局域网的迅速发展,而处在不同地点的局域网之间又经常交换信息,这就希望在各地的局域网中的站具有互不相同的物理地址。为了使用户在买到适配器并把及其连到局域网后马上就能工作,而不需要等待网络管理员给他先分配一个地址。IEEE802标准规定MAC地址字段可采用6字节(48位)或2字节(16位)这两种中的一种。6字节地址字段对局部范围内使用的居于去的确太长了,但是由于6字节的地址字段可使全世界所有的局域网适配器都具有不相同的地址,因此现在的局域网适配器实际上使用的都是6字节MAC地址。

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

IEEE规定地址字段的第一字节的最低位为I/G位。I/G表示Individual/Group。当I/G位为0时,地址字段表示一个单个站地址。当I/G位为1时表示组地址,用来进行多播(以前译为组播)。因此,IEEE只分配地址字段前三个字节中的32位。当I/G位分别为0和1时,一个地址块可以分别生成2^24个单个站地址和2^24个组地址。

需要指出,有的把上述最低位写为“第一位”,但第一的含义不清楚。因为在地址记法中有两种标准:第一种是把每一个字节的最低位写在最左边(最左边的最低位是第一位),IEEE 802.3标准就是这种;第二种记法是把每一字节的最高位写在最左边(最左边的最高位是第一位)。在发送数据时,两种记法都是按照字节的顺序发送,但每一个字节中先发送哪一位则不同:第一种先发送最低位,第二种先发送最高位。

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

这样,在全球管理时,对每一个站的地址可用46位的二进制数字来表示(最低位和最低第二位均为0时)。剩下的46位组成的地址空间可以有2^46个地址,已经超过70万亿个,可保证世界上的每一个适配器都可有一个唯一的地址。当然,非无限大的地址空间总有用完的时候。但据测算,到2020年以前还不需要考虑MAC地址耗尽的问题。

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

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

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

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

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

但混杂方式有时很有用。例如,网络维护和管理人员需要用这种方式来监视和分析以太网上的流量,以便找出提高网络性能的具体措施。有一种很有用的网络工具叫做嗅探器(sniffer)就使用了设置为混杂方式的网络适配器。此外,这种嗅探器还可帮助学习网络的人员更好地理解各种网络协议的工作原理。

3.5.2 MAC帧的格式

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

计网复习——第三章 数据链路层_第23张图片

以太网V2的MAC帧较为简单,由5个字段组成。前两个字段分别为6字节长的目的地址和源地址字段。第三个字段是2字节的类型字段,用来标志上一层使用的什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。例如,当类型字段的值是0x0800时,就表示上层使用的是IP数据报。若类型字段的值为0x8137,则表示该帧是由Novell IPX发过来的。第四个字段是数据字段,其长度在46~1500字节(46是这样得到的:最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。最后一个字段是4字节的帧检验序列FCS(使用CRC检验)。当传输媒体的误码率为1×10^-8时,MAC子层可使未检测到的差错小于1×10^-14。

这里我们要指出,在以太网V2的MAC帧格式中,其首部并没有一个帧长度(或数据长度)字段。那么,MAC子层又怎么知道从接收到的以太网帧中取出多少字节的数据交付上一层协议呢?——曼彻斯特编码的一个重要特点是:在曼彻斯特编码的每一个码元的正中间一定有一次电压的转换(从高到低或从低到高)。当发送方把一个以太网帧发送完毕后,就不再发送其他码元了(既不发送1也不发送0)。因此,发送方网络适配器的接口上的电压也就不再变化了。这样,接收方就可以很容易地找到以太网帧的结束位置。在这个位置向前数4字节(FCS字段长度是4字节),就能确定数据字段的结束位置

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

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

还需注意,在以太网上传送数据时是以帧为单位传送的。以太网在传送帧时,各帧之间该必须有一定的间隙。因此,接收端只要找到帧开始定界符,其后面的连续到达的比特流就都属于同一个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帧的数据部分长度。显然,在这种情况下,若数据字段的长度与长度字段的值不一致,则该帧为无效的MAC帧。实际上,前面我们已经讲过,由于以太网采用了曼彻斯特编码,长度字段并无实际意义。
  • 第二,当“长度/类型”字段值小于0x0600时,数据字段必须装入上面的逻辑链路控制LLC子层中的LLC帧。

由于现在广泛使用的局域网只有以太网,因此LLC帧已经失去了原来的意义(见3.1第一节“以太网的两个标准”)。现在市场上流行的都是以太网V2的MAC帧,但大家也常常把它称为IEEE 802.3标准的MAC帧。

4. 扩展的以太网

在许多情况下,我们希望对以太网覆盖范围进行扩展。本届先讨论在物理层对以太网扩展,然后再讨论数据链路层对以太网的扩展。这种扩展的以太网在网络层看来仍然是一个网络。

4.1 在物理层扩展以太网

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

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

计网复习——第三章 数据链路层_第24张图片

光纤调制调解器的作用就是进行电信号和光信号的转换。由于光纤带来的时延很小并且带宽很宽,因此使用这种方法可以很容易地使主机和几公里以外的集线器相连接。

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

计网复习——第三章 数据链路层_第25张图片

这样做可以有以下两个好处:第一,使这个学院不同系的以太网上的计算机能够进行跨系的通信;第二,扩大了以太网覆盖的地理范围。例如,在一个系的10BASE-T以太网中,主机与集线器的最大距离是100m,因而两台主机之间的最大距离是200m。但在通过主干集线器相连后,不同系的主机之间的距离就可扩展了,因为集线器之间的距离可以是100m(使用双绞线)或甚至更远(如使用光纤)。

但这种多级结构也会带来一些缺点:

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

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

扩展以太网更常用的方法是在数据链路层上进行。最初人们使用的是网桥(bridge)。网桥对收到的帧根据其MAC帧的目的地址进行转发过滤。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个接口,或者是把它丢弃(即过滤)。

1990年问世的交换式集线器(switching hub),很快就淘汰了网桥。交换式集线器常称为以太网交换机(switch)或第二层交换机(L2 switch),强调这种交换机工作在数据链路层。下面简单地介绍以太网交换机的特点:

4.2.1 以太网交换机的特点

以太网交换机实质上是一个多接口的网桥,通常都有十几个或更多的接口,和工作在物理层的转发器、集线器有很大的差别。以太网交换机的每个接口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。以太网交换机还具有并行性,即能够同时连接多对接口,使多对主机能同时通信(而网桥只能一次分析和转发一个帧)。相互通信的主机都是独占媒体资源,无碰撞地传输数据

以太网交换机的接口还有存储器,能在输出端口繁忙时把到来的帧及进行缓存。因此,如果连接在以太网交换机上的两台主机,同时向另一台主机发送帧,那么当这台主机的接口繁忙时,发送帧的这两台主机的接口会把收到的帧暂存一下,以后再发送出去。

以太网交换机是一种即插即用设备,其内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。以太网交换机由于使用了专用的交换结构芯片,用硬件转发,其转发速率要比使用软件转发的网桥快很多。

以太网交换机的性能远远超过普通的集线器,而且价格并不昂贵,这就使工作在物理层的集线器逐渐退出市场。

对于传统的10Mbit/s的共享式以太网,若共用10个用户,则每个用户占有的平均带宽只有1Mbit/s。【若使用以太网交换机来连接这些主机,虽然在每个接口到主机的带宽还是10Mbit/s,但由于一个用户在通信时是独占而不是和其他网络用户共享传输媒体的带宽,因此对于拥有10个接口的交换机的总容量是100Mbit/s。】这正是交换机的最大优点。

从共享总线以太网转到交换式以太网时,所有接入设备的软件和硬件、适配器等都不需要作任何改动。

以太网交换机一般都具有多种速率的接口,例如,可以具有10Mbit/s、100Mbit/s、1Gbit/s的接口的各种组合,这就大大方便了各种不同情况的用户。

虽然许多以太网交换机对收到的帧采用存储转发方式进行转发,但也有一些交换机采用直通(cut-through)的交换方式。直通交换不需要把整个数据帧先缓存后再进行处理,而是在接收数据帧的同时立即按数据帧的目的MAC地址决定该帧的转发接口,因而提高了帧的转发速度。如果在这种交换机的内部采用基于硬件的交叉矩阵,交换时延就非常小。直通交换的一个缺点是它不检查差错就直接将帧转发出去,因此又可能也将一些无效帧转发给其他的站。在某些情况下,仍需要采用基于软件的存储转发方式进行交换,例如,当需要进行线路速率匹配、协议转换或差错检测时。现在有的厂商已经生产出能支持两种交换方式的以太网交换机。以太网交换机的发展与建筑物结构化布线系统的普及应用密切相关。在结构化布线系统中,广泛地使用了以太网交换机。

4.2.2 以太网交换机的自学习能力

我们用一个简单的例子来说明以太网交换机是怎样进行自学习的。

假定在下图中的以太网交换机有4个接口,各连接一台计算机,其MAC地址分别是A,B,C,D。在一开始,以太网交换机里面的交换表是空的,如下图(a)。

计网复习——第三章 数据链路层_第26张图片

A先向B发送一帧,从接口1进入到交换机。交换机接收到帧以后,先查找交换表,没有查到应从哪个接口转发这个帧(在MAC地址这一列中,找不到目的地址为B的项目)。接着,交换机把这个帧的源地址A和接口1写入交换表中,并向从除了接口1以外的所有接口广播这个帧。C和D将这个帧丢弃,因为目的地址不对。只有B才收下这个目的地址正确的帧。这也称为过滤。

从新写入交换表的项目(A,1)可以看出,以后不管从哪一个接口收到帧,只要其目的地址是A,就应当把收到的帧从接口1转发出去。

假定接下来B通过接口3向A发送一帧。交换机查找交换表,发现交换表中的MAC地址有A。表明要发送给A的帧(即目的地址为A的帧)应从接口1转发,于是就把这个帧传送到接口1转发给A。显然,现在已经没有必要再广播收到的帧。交换表新增加的项目(B,3),表明以后如果有发送给B的帧,应当从接口3转发出去。

经过一段时间后,只要C和D也向其他主机发送帧,以太网交换机中的就会写入对应的新增项目。这样,交换表中的项目就齐全了。要转发给任何一台主机的帧,都能很快在交换表中找到对应的接口。

考虑到有时可能要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个项目都设有一定的有效时间,过期的项目就自动被删除。用这样的方法保证交换表中的数据都符合当前网络的实际状况。

以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。但有时为了增加网络的可靠性,在使用以太网交换机组网时,往往会增加一些冗余的链路。在这种情况下,自学习的过程就可能导致以太网帧在网络的某个环路中无限制地兜圈子。下图可以简单地说明这个问题:

计网复习——第三章 数据链路层_第27张图片

在上图中,假定一开始主机A通过接口交换机#1 向主机B发送一帧。交换机#1 收到这个帧后就向所有的其他接口进行广播发送。现观察其中一个帧的走向:离开#1的接口3→交换机#2的接口1→交换机#2的接口2→交换机#1的接口4→接口3→……。这样无限制地循环下去,白白消耗了网络资源。

为了解决上述问题,IEEE 802.1D标准制定了一个生成树协议STP(Spanning Tree Protocol)。其要点就是不改变网络的实际拓扑,但要在逻辑上切断某些链路,使得从一台主机到所有主机的路径是无环路的树状结构,从而消除上述现象。

4.2.3 从总线以太网到星形以太网

传统的电话网是星形结构,其中心就是电话交换机。那么在20实际70年代中期出现的局域网,为什么不采用这种星形结构呢?这时因为在当时的技术条件下,还很难用廉价的方法制造出高可靠性的以太网交换机。所以那时的以太网就采用无源的总线结构。

然而随着以太网上站点数目增多,使得总线结构以太网的可靠性下降。与此同时,大规模集成电路以及专用芯片的发展,使得星形结构的以太网交换机可以做得既便宜又可靠。在这种情况下,采用以太网交换机的星形结构又成为以太网的首选拓扑,传统的总线以太网在市场消失。

总线以太网采用CSMA/CD协议,以半双工方式工作。但以太网交换机不使用共享总线,没有碰撞问题,因此不适用CSMA/CD协议,而是以全双工方式工作。既然连以太网的重要协议CSMA/CD都不使用了(相关的争用期也没有了),为什么还叫做以太网呢?——原因就是它的帧结构未改变,仍然采用以太网的帧结构

4.3 虚拟局域网

利用以太网交换机可以很方便地实现虚拟局域网VLAN(Virtual LAN)。在IEEE 802.1Q标准中,对虚拟局域网VLAN是这样定义的虚拟局域网VLAN是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个VLAN的帧都有一个明确的标识符,指明发送这个帧的计算机属于哪一个VLAN

虚拟局域网其实只是局域网给用户提供的一种服务,而不是新型的局域网。

下图是使用了四个交换机的网络拓扑。设有10台计算机分配在三个楼层中,构成了三个局域网:

LAN1:(A1,A2,B1,C1),LAN2:(A3,B2,C2),LAN3:(A4,B3,C3)

但这10个用户划分为三个工作组,也就是说划分为三个虚拟局域网VLAN。即:

VLAN1:(A1,A2,A3,A4),VLAN2:(B1,B2,B3),VLAN3:(C1,C2,C3)。

计网复习——第三章 数据链路层_第28张图片

从上图可以看出,每一个VLAN的计算机可处在不同的局域网中,也可以不在同一个楼中。

利用以太网交换机可以很方便地将这10台计算机划分为三个虚拟局域网:VLAN1, VLAN2, VLAN3。在虚拟局域网上的每个站都可以收到同一个虚拟局域网上的其他成员所发出的广播。例如,计算机B1~B3同属于虚拟局域网VLAN2。当B1向工作组内成员发送数据时,计算机B2和B3将会收到广播的信息,虽然它们没有和B1连在同一个以太网交换机上。相反,B1向工作组内成员发送数据时,计算机A1,A2,C1都不会受到B1发出的广播信息,虽然它们与B1连接在同一个以太网交换机上,以太网交换机不会向虚拟局域网以外的计算机传送B1的广播信息。这样,虚拟局域网限制了接收广播信息的计算机数,使得网络不会因传播过多的广播信息(即所谓的“广播风暴”)而引起性能恶化。

由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。

以太网交换机的种类很多。例如,“具有第三层特性的第二层交换机”和“多层交换机”。前者具有某些第三层的功能,如数据报的分片和对多播通信量的管理,而后者可根据第三层的IP地址对分组进行过滤。

1988年IEEE批准了802.3ac标准,这个标准定义了以太网的帧格式的扩展,以便支持虚拟局域网。虚拟局域网协议允许在以太网的帧格式中插入一个4字节的标识符(如下图),称为VLAN标记(tag),用来指明发送该帧的计算机属于哪一个虚拟局域网。插入VLAN标记得出的帧802.1Q帧。显然,如果还使用原来的以太网帧格式,那么就无法区分是否划分了虚拟局域网。上图标注出在几个粗线链路上传输的帧是802.1Q帧。在其他链路上传输仍是普通的以太网帧。

计网复习——第三章 数据链路层_第29张图片

VLAN标记字段的长度是4字节,插入在以太网MAC帧的源地址字段和类型字段之间。VLAN标记的前两个字节总是设置为0x8100(即二进制10000001 00000000),称为IEEE 802.1Q标记类型。

当数据链路层检测到MAC帧的源地址字段后面的两个字节的值是0x8100时,就知道现在插入了4字节的VLAN标记。于是就接着检查后面2个字节的内容。在后面的两个字节中,前3位是用户优先级字段,接着的一位是规范格式指示符CFI(Canonical Format Indicator),最后12位是该虚拟局域网VLAN标识符VID(VLAN ID),它唯一地标志了这个以太网属于哪一个VLAN。

由于用于VLAN的以太网帧的首部增加了4个字节,因此以太网的最大帧长从原来的1518字节(1500字节的数据加上18字节的首部)变为1522字节。

5. 高速以太网

随着电子技术的发展,以太网的速率也在不断提升。从传统的10Mbit/s以太网一直发展到现在常用的速率为1Gbit/s的吉比特以太网,甚至更快的以太网。下面介绍几种高速以太网技术。

5.1 100BASE-T以太网

100BASE-T是在双绞线上传送100Mbit/s基带信号的星形拓扑以太网,仍使用IEEE 802.3的CSMA/CD,他又称为快速以太网(Fast Ethernet)用户只要使用100Mbit的适配器和100Mbit/s的集线器或交换机,就可很方便地由10BASE-T以太网直接升级到100Mbit/s,而不必改变网络的拓扑结构。所有在10BASE-T上的应用软件和网络软件都可保持不变。100BASE-T的适配器具有很强的自适应性,能够自动识别10Mbit/s和100Mbit/s。1995年IEEE已把100BASE-T的快速以太网定为正式标准,其代号为IEEE 802.3u,是对现行的IEEE 802.3标准的补充。

100BASE-T可使用以太网交换机提供很好的服务质量,可在全双工方式下工作而无冲突发生。因此,CSMA/CD协议可对全双工方式工作的快速以太网是不起作用的(但在半双工方式工作时则一定要使用CSMA/CD协议)。快速以太网使用得MAC帧格式仍然是IEEE 802.3标准规定的帧格式。

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

100Mbit/s以太网的新标准改动了原10Mbit/s以太网的某些规定。我们知道,以太网有一个重要的参数a,他必须保持很小的数值。在3.4节曾给出a的公式: a=\tau/T_{0}。这里的\tau是单程端到端时延,T_{0}是帧的发送时间。我们知道T_{0}是帧长与发送速率之比,可见为了保持参数a不变,可以使\tau和发送速率的乘积不变。在帧长一定的条件下,若数据率提高到10倍,可把网络电缆长度(因而使\tau)减小到原有数值的十分之一。

在100Mbit/s的以太网中采用的方法是保持最短帧长不变,对于铜缆100Mbit/s以太网,一个网段的最大长度是100m,其最短帧长仍为64字节,即512比特。因此,100Mbit/s以太网的争用期是51.2\mu s,帧间最小间隔现在是0.96\mu s,都是10Mbit/s以太网的1/10。

下表是100Mbit/s以太网的新标准规定的三种不同的物理层标准:

计网复习——第三章 数据链路层_第30张图片

在标准中把上述的100BASE-TX和100BASE-FX合在一起称为100BASE-X。

100BASE-T4使用4对UTP3类线或5类线时,使用3对线同时传送数据(每一对线以33\frac{1}{3}Mbit/s的速率传送数据),用1对线作为碰撞检测的接收信道。

5.2 吉比特以太网

吉比特以太网产品已经在1996年夏季问世。IEEE在1997年通过了吉比特以太网的标准802.3z,并在1998年成为正式标准。几年来,吉比特以太网快速占领市场,成为以太网的主流产品。吉比特以太网的标准IEEE 802.3z有以下几个特点:

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

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

吉比特以太网的物理层使用两种成熟的技术:一种来自现有的以太网,另一种而是美国国家标准协会ANSI制定的光纤通道FC(Fiber Channel)。采用成熟技术就能大大缩短吉比特以太网标准的开发时间。

下表是吉比特以太网的物理层标准:

计网复习——第三章 数据链路层_第31张图片

现在1000BASE-X(包括表3-2中的前三项)的标准是IEEE 802.3z,而1000BASE-T的标准是IEEE 802.3ab。

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

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

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

计网复习——第三章 数据链路层_第32张图片

5.3 10吉比特以太网(10GE)和更快的以太网

10GE并非把吉比特以太网的速率简单地提高到10倍,因为还有许多技术上的问题要解决。顺便指出,10吉比特就是10×10^9比特。

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

10GE只工作在全双工方式,因此不存在争用问题,当然也不使用CSMA/CD协议。这就使得10GE的传输距离大大提高了(因为不再受必须进行碰撞检测的限制)。

下表是10GE的物理层标准:

计网复习——第三章 数据链路层_第33张图片计网复习——第三章 数据链路层_第34张图片

需要指出的是,40GE/100GE只工作在全双工的传输方式,并且仍然保持了以太网的帧格式以及802.3 标准规定的以太网最小和最大帧长。100GE在使用单模光纤传输时,仍然可以达到40km的传输距离,但这需要波分复用(使用4个波长复用一根光纤,每一个波长的有效传输效率是25Gbit/s)。

计网复习——第三章 数据链路层_第35张图片

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

  1. 以太网是一种经过实践证明的成熟技术,无论是互联网服务提供者ISP还是端用户都很愿意使用以太网。当然对ISP来说,使用以太网还需要在更大的范围进行试验。
  2. 以太网的互操作性很好,不同的厂商生产的以太网都能可靠地进行互操作。
  3. 在广域网中使用以太网时,其价格大约只有同步光纤网SONET的五分之一和异步传递方式ATM的十分之一。以太网还能够适应多种传输媒体,如铜缆、双绞线以及各种光缆。这就使具有不同传输媒体的用户在进行通信时不必重新布线
  4. 端到端的以太网连接使帧的格式全都是以太网的格式,而不需要再进行帧格式的转换,这就简化了操作和管理。但是,以太网和现有的其他网络,如帧中继或ATM网络,仍然需要有相应的接口才能进行互连。

以太网从10Mbit/s到10Gbit/s甚至到100Gbit/s的演进,证明了以太网是:①可扩展的;②灵活的(多种媒体、全/半双工、共享/交换);③易于安装;④稳健性好

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

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

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

然而以太网的帧格式标准中,在地址字段部分并没有用户名字段,也没有让用户键入密码来鉴别用户身份的过程。如果网络运营商要利用以太网接入到互联网,就必须解决这个问题。

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

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

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

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

本章的重要概念

  • 链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)
  • 数据链路层使用的信道主要有点对点信道广播信道两种。
  • 数据链路层传送的协议数据单元是帧。数据链路层的三个基本问题是封装成帧、透明传输和差错检测
  • 循环冗余检验CRC是一种检错方法,而帧检验序列FCS是添加在数据后面的冗余码
  • 点对点协议PPP是数据链路层使用最多的协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
  • PPPoE是为宽带上网的主机使用的链路层协议。
  • 局域网的优点是:具有广播功能,从一个站点可很方便地访问全网;便于系统的扩展和逐渐演变;提高了系统的可靠性、可用性、生存性
  • 共享通信媒体资源的方法有二:一是静态划分信道(各种复用技术),二是动态媒体接入控制,又称为多点接入(随机接入或受控接入)
  • IEEE 802委员会曾把局域网的数据链路层拆成两个子层:逻辑链路控制(LLC)子层(与传输媒体无关)和媒体接入控制(MAC)子层(与传输媒体有关)。但现在LLC子层已经成为历史。
  • 计算机与外界局域网的通信要通过通信适配器(或网络适配器),它又称为网络接口卡或网卡。计算机的硬件地址就在适配器的ROM中
  • 以太网采用无连接的工作方式,对发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错的帧就把它丢弃,其他什么也不做。
  • 以太网采用的协议是具有冲突检测的载波监听多点接入CSMA/CD。协议的要点是:发送前先监听,边监听边发送,一旦发现总线上出现碰撞,就立即停止发送。然后按照退避算法等待一段随机事件后再次发送。因此,每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。以太网上各站点都平等地争用以太网信道
  • 传统的总线以太网基本上都是使用集线器的双绞线以太网。这种以太网在物理上是星形网,但在逻辑上则是总线型网。集线器工作在物理层,它的每个接口仅仅简单地转发比特,不进行碰撞检测
  • 以太网的硬件地址,即MAC地址实际上就是适配器地址或适配器标识符,与主机所在的地点无关。源地址和目的地址都是48位长。
  • 以太网的适配器有过滤功能,它只接收单播帧、广播帧或多播帧
  • 使用集线器可以在物理层扩展以太网(扩展后的以太网仍是一个网络)。
  • 交换式集线器常称为以太网交换机或第二层交换机(工作在数据链路层)。他就是一个多接口的网桥,而每个接口都直接与某台主机或另一个集线器相连,且工作在全双工方式。以太网交换机能同时连通许多对的接口,使每一对相互通信的主机都能像独占通信媒体那样,无碰撞地传输数据
  • 高速以太网有100Mbit/s的快速以太网、吉比特以太网和10Gbit/s的10GE。最近还发展到100吉比特以太网。在宽带接入技术中,也常常使用高速以太网进行接入。

 

 

 

 

 

你可能感兴趣的:(计算机网络,网络,以太网)