【2021/1/17修订】【梳理】计算机网络:自顶向下方法 第六章 链路层和LAN(docx)

计算机网络

知 识 梳 理

(第一版)

建议先修课程:数据结构。
配套教材:
Computer Networking - A Top Down Approach, 7th edition James F. Kurose, Keith W. Ross
参考书目:
1、计算机网络(第7版) 谢希仁 编著 高等教育出版社


链接:https://pan.baidu.com/s/1fSJhIvNDDgcCfkNYKvl-bw
提取码:0000


说明

由于时间关系,6.7 节的笔记暂时还没做。


六 链路层和LAN

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

每台运行链路层(二层)协议的设备都可以称为结点(node)。于是,结点可以指主机、路由器、交换机、Wi-Fi访问点(见第7章)等设备。连接邻接结点的通信信道(物理线路,有线或无线)都称为链路(link)。数据报要从源主机传输到目标主机,就必须在端到端路径的每一条通信链路中移动。在通过特定的链路时,传输结点将数据报封装进链路层帧(link-layer frame),并将该帧传送到链路中。
链路和数据链路(data link)并不是一回事。链路只是一条路径的组成部分。当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。不过,为了表达简便一些,在不致混淆的情况下,也将数据链路层简称链路层。
也有人采用另外的术语。这就是把链路分为物理链路和逻辑链路。物理链路就是上面所说的链路,而逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。

局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。局域网刚出现时,比广域网具有更高的数据率、更低的时延和更小的误码率。但随着光纤在广域网的应用,广域网也具有很高的数据率和很低的误码率。
局域网具有如下一些主要优点:
(1) 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
(2) 便于系统的扩展和逐渐演变,各设备的位置可灵活调整和改变。
(3) 提高了系统的可靠性(reliability)、可用性(availability)和生存性(survivability)。

链路层提供的基本服务是:将数据报从一个结点通过一条通信链路传输到另一个邻接结点。此外,链路层还可能提供:
·封装成帧(framing)。每种链路层协议的帧都有一个数据字段,这部分填入数据报。至于帧结构的其它部分则与链路层协议有关。
·链路访问(link access)。媒体访问控制(medium access control,MAC)明确了帧如何发送到链路上。对于点到点链路,发送方和接收方都各只有一个,MAC协议很简单(甚至可以不存在):发送方可以在链路空闲的任何时刻发送帧。当一条广播链路连接有多个结点时,MAC协议将协调这些结点之间的帧传输。
·可靠传递(reliable delivery)。当链路层提供可靠传递服务时,它保证每份网络层数据报都能够准确无误地传送。链路层可靠传递服务也可以通过确认与重传机制(3.4节)来实现。当使用错误率较高的链路(如无线链路)时,在链路层需要保证可靠传递,及时进行纠错,避免在运输层或应用层触发重传。当然,如果链路错误率很低,这种服务则没有必要。当前,光纤、同轴电缆、许多双绞铜线等介质都是可靠的,因此许多链路层协议都不提供可靠传输服务。
·错误检测与校正(error detection and correction)。由于信号衰减和电磁噪声等原因,链路层硬件可能接收到错误的帧。通过在帧中添加额外的错误检测位,接收结点可以凭此检错。链路层的错误检测更为复杂,因此由硬件来实现检测。错误校正则要求接收方检测出错误的位置并尝试纠正。

一个帧的帧长等于帧的数据部分长度加上帧首部和帧尾部的长度。首部和尾部的一个重要作用就是进行帧定界(确定帧的界限)。首部和尾部还包括许多必要的控制信息。在发送帧时,是从帧首部开始发送的。
当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。ASCII码是7位编码共128个,其中可打印的有95个,不可打印的控制字符有33个。控制字符SOH(Start Of Header)放在帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束。请注意,SOH和EOT都是控制字符的名称,编码分别是01h和04h。SOH(或EOT)并不是S、O、H(或E、O、T)三个字符。

当传输出现差错时,帧定界符的作用更加明显。假定发送端尚未发送完一个帧时突然故障,中断了发送;在恢复正常后重新从头发送刚才未发送完的帧。接收端发现该帧只有SOH没有EOT,就判定其不完整,必须丢弃。而后面收到的数据有明确的帧定界符(SOH和EOT),代表这是一个完整的帧,应当收下。
当数据是非ASCII码时,如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地识别帧的边界,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃(假如这部分没有SOH字符)。

透明(transparency),即一个实际存在的事物看起来却好像不存在一样(例如,你看不见放在你前面的一块100%透明的玻璃)。链路层要完成透明传送数据的任务,这表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层有什么妨碍数据传输的东西。或者说,数据链路层对这些数据来说是透明的。
为了使传输透明,必须设法使数据中可能出现的SOH和EOT在接收端不被解释为控制字符。具体的方法是:发送端的链路层在数据中的SOH或EOT的前面插入一个转义字符ESC(1Bh)。而接收端的链路层把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果ESC也出现在数据当中,那么解决方法是在ESC的前面插入一个ESC。因此,当接收端收到连续两个ESC时,就删除前面的一个。

链路层在网络适配器(network adapter),即网卡中实现。网络适配器的核心是链路层控制器,通常是一颗专门的芯片,实现了很多链路层服务。链路层控制器的大多数功能都在硬件中实现,少数则运行在主机的CPU上。目前,网卡大多集成在计算机的主板上。而对带宽与网络质量要求较高的场合,还可以使用独立网卡。它们通常通过PCI-E总线与CPU相连。
在发送端,控制器取得由上层协议生成的数据报,将其封装进链路层帧,并在帧的首部填入必要信息,然后通过链路访问协议将帧发送到通信链路中。在接收端,控制器接收整个帧,提取出数据报。如果链路层提供错误检测,那么发送控制器会将校验码填入首部。接收控制器会进行错误检测,与首部中的校验码比对。信号在网卡处完成串行并行转换,网卡也可以对数据进行缓存。

链路层的软件部分主要负责高级的链路层功能,比如组装链路层地址信息和激活控制器硬件。网卡驱动程序属于软件部分。在操作系统安装驱动后,驱动程序以后就会告诉适配器,应当从存储器的什么位置上把多长的数据块发送到局域网,或者应当在存储器的什么位置上把局域网传送过来的数据块存储下来。在接收端,链路层软件响应控制器中断(例如收到一个或几个帧时会产生中断),处理错误,并将数据报上交给网络层。因此,链路层是软件和硬件的组合,是协议栈中软件与硬件交汇的部分。
6.2 错误侦测和校正技术
需要保护的数据不仅仅是数据报,还包括链路层帧的首部。注意,错误检测并不能保证总是能检测出所有的错误。当链路层无法侦测到存在的错误时,出错的数据报会被传递给网络层。所以,应尽量压低检错手段无法检测错误的几率。
一般地,很多复杂的检错纠错算法会消耗大量的算力。

下面我们介绍3种检错手段:奇偶校验、校验和和循环冗余检查。

奇偶校验(parity check)是最简单的校验方法之一。奇偶校验可以仅用1个校验位实现:在参与检错的d位数据后附加1位奇偶校验位,总共得到d+1位数据。对于奇校验,当被校验数据分别含有奇数个1和偶数个1时,校验位分别为0和1,使得被校验数据连同校验位总是有奇数个1;对于偶校验,当被校验数据分别含有奇数个1和偶数个1时,校验位分别为1和0,使得被校验数据连同校验位总是有偶数个1。
在接收方,只需要统计数据位与校验位共有多少个1。当校验策略分别为奇校验和偶校验时,统计出来的1的数量分别必须是奇数个和偶数个,否则判定传输出错。
单个奇偶校验位可以检测出奇数个错误(1变0;0变1),但无法检测出偶数个错误。因为同时有偶数个位出错时,奇偶性不变。在可靠的链路中,出现1位错误的概率都很小;一段不太长的数据内出现2位错误的几率就差不多可以忽略了。但是,如果链路不够可靠,统计表明,错误往往是大量出现的。这时候单个奇偶校验位无法探测到的错误可以占到50 %。
如果将参与检错的数据分成i行×j列,那么需要i+j+1个校验位。这种二维奇偶校验不但可以定位错误的具体位置,还可以纠错。如果校验位本身出错,自然是可以校正的。二维奇偶校验可以校正任意1位或2位的错误。

接收方探测并纠正错误的能力叫做前向错误校正(forward error correction,FEC)。这种技术在音视频回放设备中很常见。在网络中,FEC可以单独使用,也可以与链路层ARQ(ARQ见第三章)配合。FEC技术是十分有用的,因为可以减少发送端重新传输的次数。它们为接收方提供了立即纠正错误的手段。此举可以大大提升将数据上交给上层的速率,而无需等待NAK报文或发送方重传的报文在链路中传播。这对实时应用和用到传播延迟较长的链路的情况非常重要。

在校验和(checksum)方法中,d位数据被视作由k位整数组成的数列。一个简单的校验和方法是:把这d位数据按k位分一组,把每组的k位加起来,用这个和作为错误检测位的内容。第三章和第四章已经讲过另一种校验和算法——Internet校验和算法了。除了TCP和UDP对整个报文校验,IPv4仅对报头校验以外,快速运输协议(Xpress Transport Protocol,XTP)等协议也使用此算法。XTP对报头和整个分组各一个校验和。

校验和带来的额外数据量很小,但其纠错能力比CRC(见下文)要弱。校验和用于运输层,而CRC用于链路层。因为运输层一般是用软件实现的,作为主机操作系统的一部分;而链路层一般有专用的硬件来实现,能够以快得多的速率执行特定算法。因此,虽然CRC比校验和要复杂许多,但适配器中的ASIC足以胜任。当然,更快的软件实现的校验和和CRC等算法早已开发出来了。

今天的计算机网络中,常用循环冗余检查(cyclic redundancy check,CRC)码。下面对其进行讲解。
设有d位数据D参与检测。
首先,收发双方要约定一个生成元(generator)G,具有r+1位。G的最高位(最左侧)为1。
对给定的数据D,发送方会生成r个额外的位(冗余码,记作R)附在D后,得到的d+r位二进制数据D+R能被G整除(使用模2算术)。
使用CRC检错时,接收方只需要用接收到的d+r位除以G。如果余数不是0,则判定出错,否则判定数据正确。
在CRC中,所有的计算都在模2算术下进行,不进行进位和退位。于是不难发现,加减都等效于异或。
乘除则仍然基于二进制算术的规则,只不过当需要加减的时候也要丢弃全部进位和退位。在一般的二进制算术中,乘以2^k就相当于把数左移k位。所以,给定D和R,算式
D·2rR
产生d+r位的结果。
接下来讲解发送方如何计算R。根据前面的要求(得到的d+r位二进制数据D+R能被G整除),就是要给出R使得
D·2rR=nG, n∈N
两边异或R,得
D·2r=nGR
于是,如果用G去除D·2^r,余数就为R。即
R=(D·2^r) % G
于是我们可以归纳出CRC的步骤(所有运算均为模2算术):
【发送方】
输入:二进制数据D,共d位。
步骤:
【1】收发双方协商冗余码位数r,以及一个r+1位的生成元G。
【2】计算冗余码
R=(D·2^r ) % G
【3】将冗余码R连接在D的末尾。
输出:原数据及冗余码D+R
注释:+表示字符串连接运算,且D+R=D·2rR。

【接收方】
输入:发送方发来的数据及冗余码D+R。
步骤:
【1】计算余数
R^’=(D+R) % G
输出:如果余数R^’=0,则数据正确;否则,数据出错。
注释:+表示字符串连接运算,且D+R=D·2rR。
国际标准已经定义好了不同位数的生成元。例如,对CRC-32(它被大量的链路层IEEE协议使用),其冗余码长度为32位,生成元为33位:1 0000 0100 1100 0001 0001 1101 1011 0111b(1 04C1 1D87h)。
每个CRC标准都能探测到不多于r位的错误。在特定的假设下,一段数据内出现超过r位错误的概率可以按1-〖1/2〗^r估计。每个CRC标准也都能探测到奇数位错误。但是,CRC无法定位到具体出错的位。

冗余码也称帧检验序列(frame check sequence,FCS)。循环冗余检验CRC和帧检验序列FCS并不是同一个概念。CRC是一种检错方法,而FCS是添加在数据后面的冗余码,在检错方法上可以选用CRC,也可不选用CRC。

CRC码也叫多项式码(polynomial codes),这是因为二进制串可以被看作一个每个系数都为0或1的多项式,对二进制位字符串的操作也可以被解释为多项式算术。例如,如果生成元G=1101,则G可用多项式p(x)=x3+x2+1表示。这种多项式也称生成多项式。
用生成多项式表示CRC-32的生成元:
x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x^2+x+1
CRC-64-ECMA的生成多项式:
█(x64+x62+x57+x55+x54+x53+x52+x47+x46+x45+x40+x39+x38+x37+x35+x33+@x32+x31+x29+x27+x24+x23+x22+x21+x19+x17+x13+x12+x10+x9+x7+x4+x+1)
CRC-64-ISO的生成多项式:
x64+x4+x^3+x+1

不难看出,如果传送数据时不以帧为单位来传送,那么就无法加入冗余码以进行差错检验。因此,如果要在数据链路层进行差错检验,就必须把数据划分为帧,每一帧都加上冗余码,再一帧一帧地传送,然后在接收方逐帧进行差错检验。
必须强调,在数据链路层若仅仅使用CRC,则只能做到对帧的无差错接受,即:“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但最终还是因为出错而被丢弃。以上所述的可近似表述为(通常都是这样认为):“凡是接收端数据链路层接受的帧均无差错”。

请注意,我们现在并没有要求数据链路层向网络层提供可靠传输的服务。所谓可靠传输就是:数据链路层的发送端发送什么,在接收端就收到什么。传输错误可分为两大类:一类就是前面所说的最基本的位错误,而另一类传输差错则更复杂些:收到的帧并没有出现位错误,但却出现了帧丢失、帧重复或帧失序。帧丢失很容易理解。此外,在讲解TCP的时候,大家已经接触过重复和失序的情况了。
过去OSI的观点是:必须让数据链路层向上提供可靠传输。因此在CRC检错的基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因而就进行重传,直到收到对方的确认为止。这种方法在历史上曾经起到很好的作用。但现在的通信线路的质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低。因此,现在互联网就采取了区别对待的方法:
对于通信质量良好的有线链路,数据链路层协议不使用确认和重传机制:不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出错并且需要校正,那么校错的任务就由上层协议(例如TCP)来完成。对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务(见第7章)。
6.3 多路访问链路和协议
网络链路分为两种:点对点链路(point-to-point link)在两端分别仅具有一个发送方或接收方。很多链路层协议都是针对点对点链路设计的。点对点协议(point-to-point protocol,PPP)和高级数据链路控制(high-level data link control,HDLC)便是这样的协议。HDLC是可靠传输协议,随着通信质量的提高,现在已很少使用了。

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

PPP不支持多点线路(一个主站轮流和链路上的多个从站通信)只支持点对点的链路通信。此外PPP只支持全双工链路。

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

PPP帧格式如下图。

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

当PPP使用异步传输时,它把转义符定义为0x7D,并使用字节填充,RFC 1662规定了如下所述的填充方法:
(1) 把信息字段中出现的每一个0x7E字节转换为2字节序列 (0x7D,0x5E)。
(2) 若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的字符),则把0x7D转为2字节序列 (0x7D,0x5D)。
(3) 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面加入一个0x7D字节,同时可能需要将该字符的编码加以改变。
由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。

当 PPP 用在同步传输链路时,协议规定采用硬件来完成位填充(和HDLC的做法一样)。
PPP使用在SONET/SDH(同步光网络 / 同步数字体系)链路时,使用同步传输(一连串的位连续传送)而不是异步传输(逐个字符地传送)。在这种情况下,PPP采用零填充方法来实现透明传输。
零比特填充的具体做法是:在发送端,先扫描整个信息字段(通常用硬件实现,但也可用软件实现,只是会慢些)。只要发现有5个连续的1,则立即在后面填入一个0。经过零填充后的数据,保证在信息字段中不会出现6个连续的l。接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流,这样就保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。

下面是PPP的状态图,描述了PPP的不同工作状态:

PPP链路的起始和终止状态永远是链路静止(Link Dead)状态,这时在用户PC和ISP的路由器之间不存在物理层的连接。
当PC通过MODEM呼叫路由器时,路由器检测到MODEM发出的载波信号。在双方建立物理层连接后,PPP就进入链路建立(Link Establish)状态,其目的是建立链路层的LCP连接。
这时LCP开始协商一些配置选项,即发送LCP的配置请求帧(Configure-Request)。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应中的一种:
(1) 配置确认帧(Configure-Ack),所有选项都接受。
(2) 配置否认帧(Configure-Nak),所有选项都理解但不能接受。
(3) 配置拒绝帧(Configure-Reject),选项有的无法识别或不能接受,需要协商。
LCP配置选项包括链路上的最大帧长、所使用的鉴别协议(authentication protocol)的规约(如果有的话),以及不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部中省略这2字节)。
协商结束后双方就建立了LCP链路,接着就进入鉴别(Authenticate)状态。在这一状态,只允许传送LCP协议的分组、鉴别协议的分组以及监测链路质量的分组。若使用口令鉴别协议PAP(Password Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。系统可允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议CHAP(Challenge-Handshake Authentication Protocol)。若鉴别身份失败,则转到链路终止(Link Terminate)状态。若鉴别成功,则进入网络层协议(Network-Layer Protocol)状态。
在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤是很重要的,因为现在的路由器都能同时支持多种网络层协议。总之,PPP两端的网络层可以运行不同的网络层协议,但仍然可以使用PPP通信。
如果在PPP链路上运行的是IP,则对PPP链路的每一端配置IP模块(如分配IP地址)时就要使用NCP中支持IP的协议——IP控制协议IPCP(IP Control Protocol)。IPCP分组也封装成PPP帧(协议字段为0x8021)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP报头,以减少链路上发送的位数。
当网络层配置完毕后,链路就进入可以进行数据通信的链路打开(Link Open)状态。链路的两个PPP端点可以向对方发送分组。PPP端点还可发送回送请求LCP分组(Echo-Request)和回送回答LCP分组(Echo-Reply),以检查链路状态。
数据传输结束后,可以由链路的一端发出终止请求LCP分组(Terminate-Request)请求终止链路连接,在收到对方发来的终止确认LCP分组(Terminate-Ack)后,转到链路终止状态。如果链路出现故障,也会从链路打开状态转到链路终止状态。当调制解调器的载波停止后,则回到链路静止状态。
PPP已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

广播链路(broadcast link)则允许具有多个发送方和接收方通过单一的共享广播信道同时连接。使用“广播”一词是因为任意一个结点传输帧时,帧都会被广播给其它任何结点。以太网(Ethernet)和无线局域网(wireless LAN)便是广播链路层技术。广播信道常常用于局域网。
广播这个概念并不少见。电视就是一种单路广播,由固定的结点对其它接收结点传输数据。不过,计算机网络中的各个结点都是既可以发送又可以接收的。与此同时还有各种各样的规则对通信做出限制。所以,计算机网络中的广播复杂得多。

如果有多个帧直接不加处理地在同一条广播信道中传送,那么帧会发生碰撞(collision),导致最后所有结点都无法接收正确的信息,因为碰撞的帧互相干扰了对方携带的数据。为了避免碰撞,当多个结点需要使用同一条链路时,需要将它们配合好。这是多路访问协议(multiple access protocol)的责任。四十多年以来,数千篇论文是围绕多路访问协议撰写的。当新型链路(比如无线链路)出现时,对多路访问协议仍要继续改进。

多路访问协议可以分为三种:信道划分协议(channel partitioning protocol)、随机访问协议(random access protocol)和轮流协议(taking-turns protocol)。

多路访问协议需要具备如下特性:
1、当仅有一个结点需要发送数据时,该结点的吞吐率为R bps。
2、当有M个结点需要发送数据时,每个结点的吞吐率均为R/M bps。这并不是说每个结点在任意时刻都需要具有这个速率,而是说平均速率应为这个值。
3、协议是去中心化的,即没有任何主结点的崩溃会导致整个网络的崩溃。
4、协议简单,实现成本不高。

常见的三种信道划分协议为TDM、FDM和CDMA,在“附录一 物理层与通信基础”中已经介绍过了。

在随机访问协议中,进行传输的结点总是以信道的满速率进行传输,即R bps。当发生碰撞时,波及到的所有结点都将重新传输碰撞掉的帧。不过,结点经历碰撞时,不会立刻重传因碰撞而损毁的帧,而是先延迟一段随机的时间,再重新发送。一般而言,这使得各个结点都能在重发时不再遭遇碰撞。

最简单的随机访问协议之一是时隙ALOHA协议(slotted ALOHA protocol,SA protocol)。假设:
·所有帧的长度都为L位。
·时间分成长为L/R秒的时隙(时隙是传输一帧的时间)。
·结点仅在时隙的起始位置开始传输。
·结点是同步的,于是每个结点都知道时隙何时开始。
·如果一个时隙出现了两个或多个帧的碰撞,则所有结点都会在该时隙结束之前检测到碰撞。

设概率0<p<1。则时隙ALOHA在每个结点需要进行的操作很简单:
·当有结点有新的帧需要发送时,它直接等待下一个时隙的开始,彼时将传送整个帧进入该时隙。
·如果未发生碰撞,结点无需重传,可以准备新的帧进行发送。
·如果发生碰撞,结点在本时隙结束之前侦测到碰撞。在接下来的时隙中,结点有p的概率重传该帧,直至该帧无碰撞地发送完毕。

SA具有许多优点。与信道划分不同,它允许一个结点在仅有它自己准备好需要传输的数据时满速传输。SA也是高度去中心化的,因为每个结点独立检测碰撞、各自决定是否重传。不过要做到这点需要时隙对于各个结点是同步的。SA也是一个非常简单的协议。

如果仅有一个活动结点(已经准备好需要发送的帧的结点),SA效果很好。但如果活动结点有多个,则有两个效率问题。第一,如图,当多个结点活动时,这些时隙的一部分将发生碰撞,于是被浪费了。第二,接下来的部分时隙也可能空闲,因为在这些时隙,所有活动结点都选择暂不重传。仅有一个结点决定重传时,对应的时隙才被利用了,这种时隙称为成功时隙。时隙多路访问协议的效率定义为:当具有大量活动结点,并且每个结点都有大量的帧准备发送时,成功时隙所占的比例。如果不进行访问控制,每个结点在碰撞后都立刻重传,效率就是零。

现在估计时隙ALOHA的效率。为了简便,在每个结点检测到发生碰撞后以p的概率决定重传的情况下,进一步假设结点 在每个时隙也有p的概率新准备一帧,即在任意时隙任意结点都以p的概率传输一帧。设有n个结点,若一个时隙是成功时隙,则要求仅有一个结点决定传输,而其它结点都不传输。于是该时隙为成功时隙的概率为p(1-p)(n-1)。如果n个结点都是活跃结点,那么决定传输的活跃结点可以是这n个结点中的一个,这时该时隙为成功时隙的概率是np(1-p)(n-1)。
当整数n>0时,设g§=np(1-p)^(n-1)。求一阶导
dg§/dp=n(1-p)^(n-2) (1-p-p(n-1))=n(1-p)^(n-2) h§

dh§/dp=-(n+2)p+1<0
若要使
dg§/dp=0
易得唯一解
p=1/n
可见,g§在p=1/n时取得最大值。
当广播信道的结点很多时,取n→+∞,对应的概率模型为泊松分布(Poisson distribution)
P(X=k)=C_n^k p^k (1-p)(n-k)≈λk/k! e^(-λ),k = 0,1,2,……,n
参数为λ=np=1。设X代表决定传输的结点数。该时隙为成功时隙,要求仅有一个结点决定传输,概率是
P(X=1)≈λ^1/1! e^(-1)=1/e≈0.368
因此,时隙ALOHA协议的理论最高效率约为37%。

时隙ALOHA要求所有结点同步。不过它的前身――ALOHA协议则是无时隙、完全去中心化的。在纯ALOHA中,当一帧第一次到达(即一份网络层数据报在发送端传下来)时,结点立刻将整个帧传输到广播信道上。如果传输的帧遇到碰撞,则发送该帧的结点以p的概率重传。当决定不重传时,结点等待一个帧需要的传输时间。等待完毕后,重传的概率仍为p。

现在估计纯ALOHA的效率。为了方便,同样假设在任意时刻任意结点都有p的概率传输一帧。假设这个帧在时间t_0传输,传输一帧需要t秒,则在时间段[t_0-t,t_0]内,其它结点都不得开始传输,此概率为(1-p)(n-1)。而在该帧传输的时间段[t_0,t_0+t]内,其它结点也不得传输,此概率同样为(1-p)(n-1)。当有n个活动结点时,决定传输的活跃结点可以是这n个结点中的一个,这时该时隙为成功时隙的概率是np(1-p)^2(n-1) 。用同样的方法,求得ALOHA协议的理论最大效率为
1/2e≈0.184
可见,ALOHA协议的理论最高效率约为18 %,正好是时隙ALOHA的一半。

无论是纯ALOHA还是时隙ALOHA,每个结点决定是否进行传输都是独立的,不受其它结点是否正在传输的影响。

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

最早的以太网将许多计算机都连接到一根总线上。总线的特点是:当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。这种就是广播通信方式。但我们并不总是要在局域网上进行一对多的广播通信。为了在总线上实现一对一通信,可以使每一个适配器拥有一个与其它适配器都不同的地址。在发送数据帧时,在帧的首部写明目标地址。现在的电子技术很容易做到:仅当数据帧中的目的地址与适配器ROM中存放的硬件地址一致时,该适配器才能接收这个数据帧。适配器对不是发送给自己的数据帧就丢弃。这样,具有广播特性的总线上就实现了一对一的通信。
总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因此,在同一时间只能允许一台计算机发送数据,否则各计算机之间就会互相干扰,使得发送数据被破坏。如何协调总线上各计算机的工作就是以太网要解决的一个重要问题。

网络领域中,有两个重要的技术:
·载波侦听(carrier sensing):一个结点侦听需要使用的信道。如果其它结点正在传送帧,则该结点将等待,直到在一段(很短的)时间内都没有侦听到任何正在进行的传输,再开始(继续)自己的传输。其实总线上并没有什么“载波”,这里只不过借用一下“载波”这个名词而已。
·碰撞检测(collision detection):一个结点在传输过程中也侦听正在使用的信道。当它探测到其它结点正在传输时,停止传输并等待一个随机的延迟,再继续监听,直到链路空闲。当几个站同时在总线上发送数据时,总线上的电压变化增大(互相叠加)。当适配器检测到的信号电压变化幅度超过阈值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。这时,总线上传输的信号严重失真,无法从中恢复出有用的信息来。因此,任何一个正在发送数据的站点,一旦发现总线上出现碰撞,其适配器就要立即停止发送,免得继续进行无效的发送,白白浪费网络资源。
这两个规则已经被纳入载波侦听多路访问(carrier sense multiple access,CSMA)及带有碰撞检测的载波侦听多路访问(CSMA with collision detection,CSMA/CD)协议族。CSMA和CSMA/CD的许多变种已经出现。

信号在信道中传输是需要时间的。信道传播延迟(channel propagation delay)越大,载波侦听节点不能侦听到网络中另一个节点已经开始传输的机会就越大。电磁波在1 km电缆的传播时延约为5 μs(这个数字应当记住)。
在局域网的分析中,常把总线上的单程端到端传播时延记为τ。那么,主机发送数据后,最迟要经过2τ才能判定自己发送的数据和其它站发送的数据有没有碰撞。显然,这种情况的构成条件是:总线一端的主机A发送的数据无限接近目标主机B但又未到达,B此时因为检测不到冲突而开始发送数据,B发送的数据到达A时A仍未停止传输。这时候A才能检测到信号电压过高,判定发生了碰撞。在下图中,这个极端条件对应δ→0。
局域网上任意两个站之间的传播时延有长有短,因此局域网必须按最坏情况设计,即取总线两端的两个站之间的传播时延(这两个站的距离最大)为端到端传播时延。

可见,每个站在自己发送数据之后的一小段时间内,存在遭遇碰撞的可能。这段时间取决于另一个发送数据的站到本站的距离。因此,以太网不能保证某一时间之内一定能够把自己的数据帧成功发送出去。这一特点称为发送的不确定性。如果希望在以太网上发生碰撞的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。
最先发送数据帧的A站,在发送数据帧后至多经过时间2τ就可知道所发送的数据帧是否遭受了碰撞。所以2τ也称争用期(contention period)或碰撞窗口(collision window)。一个站在发送完数据后,只有通过争用期的“考验”,即经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。这时,就可以放心把这一帧数据顺利发送完毕。

使用CSMA/CD网络适配器的大致工作过程是:
1、适配器从网络层获得一份数据报,生成一帧链路层帧,将其放入适配器的缓存中。
2、如果检测到信道空闲(未在信道中检测到有信号能量到达适配器)持续了96比特时间(帧间最小间隔),则开始(继续)传输帧。否则,等待至空闲为止。
3、传输过程中,适配器继续检测是否具有来自使用该信道的其它适配器的信号能量。
4、如果适配器未检测到其它适配器的信号能量,并完成了整个帧的传输,则传输结束(回到1)。否则,放弃传输。
5、如果放弃了一帧的传输,适配器等待一段随机的时间,然后回到步骤2继续发送该帧。当重传达16次仍不能成功时(同时发送数据的站太多,以致连续发生冲突),则丢弃该帧,并向高层报告。
10 Mbps以太网的帧间最小间隔为9.6 μs。这是为了使刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。
随机等待一段延迟的目的很明显:如果几个发生碰撞的站都在监听信道,那么都会同时发现信道变成了空闲。如果大家都同时再重新发送,那么肯定又会发生碰撞。不过,随机等待的时间不能太长也不能太短。如果等待太长,信道将保持较多空闲;如果太短,则碰撞几率较大。
以太网每发送完一帧,一定要把已发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要在推迟一段时间后再把这个暂时保留的帧重传一次。

二进制指数后退(binary exponential backoff)算法在以太网和DOCSIS电缆网络多路访问协议中使用:
如果准备传输的帧已经经过了n次碰撞,则结点随机从n个值{0, 1, 2,…, 2^n-1}中选择一个K。在以太网中,结点实际等待的时间为:K×传送512位到以太网需要的时间(争用期2τ),n最大为10。如果以太网的速率是10 Mbps,则争用期为51.2 μs。可见,当碰撞次数增多后,K的上限指数增长,使得等待的延迟也迅速增长。这便是该算法名称的由来。

当每个结点准备一个新的帧时,都会运行CSMA/CD算法,对过去发生过的碰撞并无记忆。因此,当其它适配器处于指数后退状态时,一个具有新帧的节点能够立刻进行一次成功的传输。使用CSMA/CD协议的结点无法同时发送和接收(但必须边发送边监听信道)。因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替(半双工)通信。

现在考虑一种情况。某个站发送了一个很短的帧,但在发送完毕之前并没有检测出碰撞。假定该帧在到达目的站之前和别的站发送的帧发生了碰撞,因而目的站将收到有差错的帧(当然会把它丢弃)。可是发送站却不知道这个帧发生了碰撞,因而不会重传这个帧。这种情况显然是我们所不希望的。为了避免发生这种情况,以太网规定了一个最短帧长64字节,即512-bit。如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。对于10 Mbit/s以太网,发送512 bit的时间需要51.2 μs,也就是上面提到的争用期。如果在争用期(共发送了64字节)没有发生碰撞,那么后续发送的数据就一定不会发生冲突。换句话说,如果发生碰撞,就一定是在发送的前64字节之内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。只要收到了这种无效帧,就应当立即将其丢弃。
信号在以太网上传播1 km大约需要5 μs。以太网上最大的端到端时延必须小于争用期的一半(即25.6 μs),由此可得以太网的最大端到端长度约为5 km。实际上的以太网覆盖范围远远没有这样大。因此,实用的以太网都能在争用期51.2 μs内检测到可能发生的碰撞。以太网的争用期确定为51.2 μs,不仅考虑到以太网的端到端时延,而且还包括其它许多因素,如存在的转发器(见6.4节)所增加的时延,以及下面要讲到的强化碰撞的干扰信号的持续时间等。

当发送数据的站一旦发现发生了碰撞,除了立即停止发送数据外,还要再继续发送32位或48位的人为干扰信号(jamming signal),以便让所有用户都知道现在已经发生了碰撞。这个过程称为强化碰撞。
如图,A站从发送数据开始到发现碰撞并停止发送的时间间隔是T_B。A站得知碰撞已经发生时所发送的强化碰撞的干扰信号的持续时间是T_J。B站在得知发生碰撞后,也要发送人为干扰信号。但为简单起见,没有画出B站所发送的人为干扰信号。发生碰撞使A浪费时间T_B+T_J。可是整个信道被占用的时间还要增加一个单程端到端的传播时延τ(在τ时间内,虽然A已经暂停发送数据,但是暂停之前发送的数据还在链路上传播,这段时间内B不可以发送数据)。因此,总线被占用的时间至少是T_B+T_J+τ。

当仅有一个结点需要发送帧时,该结点能以信道的最大速率传输。对以太网,典型的速率为10 Mbps或100 Mbps或1 Gbps或10 Gbps或40 Gbps或100 Gbps。未来,以太网将突破1 Tbps的速率。不过,如果有多个结点需要传输,等效的传输速率就会低得多。CSMA/CD的效率定义为:当具有大量活动结点,并且每个结点都有大量的帧准备发送时,无碰撞传输的时间所占的比例。
对CSMA/CD效率的推导超出了书本范围,这里只给出近似的式子:
η=1/(1+(5d_prop)/d_trans )
其中d_prop和d_trans分别是链路的传播延迟和传输延迟。
显然,当传播延迟为0时,效率达到1,即发生碰撞时,结点会立刻检测到,并立刻终止传输,不浪费信道。此外,当传播延迟不为0,但传输速率很低(传输延迟很高)时,效率也接近1。这意味着一个帧开始传输以后,将占用信道较长时间。这意味着信道在大多数时候都被利用了起来。

假定发送一帧需要时间T_0(帧长比发送速率)。但实际上成功发送一帧占用信道的时间是T_0+τ。因为当发送完最后一位时,这一位还要在以太网上传播。在最极端的情况下,发送站在传输媒体的一端,数据传输到另一端所需的时间就是τ。因此在T_0+τ时间后,以太网的媒体才空闲,才允许其它站发送数据。
要提高以太网的信道利用率,就必须减小τ与T_0之比。以太网定义了参数a,是以太网单程端到端时延与帧发送时间之比
a=τ/T_0
当a→0,表示只要一碰撞,就立即可以检测出来,并立即停止发送,因而信道资源被浪费的时间非常非常少。反之,参数a越大,表明争用期所占的比例越大,这就使得每发生一次碰撞就浪费了不少的信道资源,使得信道利用率明显降低。因此,以太网的参数a的值应当尽可能小些。这就是说,当数据率一定时,以太网的连线的长度受到限制(否则τ的值会太大),同时以太网的帧长不能太短(否则T_0会太小,使a太大)。
考虑一种理想化的情况。假定以太网上的各站发送数据都不会产生碰撞(这显然已经不是CSMA/CD,而是需要使用特殊的调度方法),并且能够非常有效地利用网络的传输资源,即总线一旦空闲就有某一个站立即发送数据。这样,发送一帧占用线路的时间是T_0+τ,而发送一帧的时间是T_0,则极限信道利用率
η=T_0/(T_0+τ)=1/(1+a)
虽然实际的以太网不可能有这样高的信道利用率,但上式指出,只有当参数a远小于1才能得到尽可能高的极限信道利用率。反之,每发生一次碰撞,就要浪费相对较多的传输数据的时间,则极限信道利用率就远小于1,而这时实际的信道利用率就更小了。据统计,以太网的利用率达到30 %时就已经属于重载。很多的网络容量被网上的碰撞消耗掉了。

ALOHA和CSMA都能具备多路访问协议的第一个特性,即仅有单个结点传输时,结点能跑满链路的传输速率。但当多个结点活跃时,由于碰撞,每个结点分到的速率会低于理论上的平均值。于是,研究人员开发出了另一类协议——轮流协议。轮流协议也有至少数十种,每个这样的协议都有许多变体。

轮询协议(polling protocol)要求有一个结点设为主结点。主结点轮流告知其它结点,此时可以开始传输一定数量的帧。主结点可以观测信道是否空闲,以便决定是否可以令其它结点开始传输。
通过这样的方式,轮询协议避免了碰撞问题和空白时隙,这使得轮询协议的效率高得多。但它也有缺点。首先,轮询是有延迟的:通知其它结点开始传输这个过程也需要时间。如果仅有一个结点有数据需要传输,很明显传输速率将远低于额定速率。因为其它非活跃结点收到通知以后并无数据可以发送,所以这些通知白白耗费了信道。其次,如果主结点故障,整个信道将不可用。

另一种轮流协议是令牌传递协议(token-passing protocol)。这种协议没有主结点。令牌(token)是一种特殊的帧,在结点之间以固定顺序传输。每个结点仅在有数据传输时才保留令牌,否则立即将令牌传递给下一个结点。当收到令牌的结点有数据传输时,将令牌传递给下一结点的同时也会一并告知可以传输的最大帧数量。
令牌传递是去中心化的,效率也很高。但它也有自己的问题。如果一个结点故障,可以导致整个信道崩溃。如果一个结点忘记释放令牌,则需要额外的恢复过程来令令牌重新进入循环。

有线传输数据业务接口规范(Data Over Cable Service Interface Specifications)规定了电缆数据网络的架构和协议。回忆1.2节,一个典型的电缆访问网络将至少数千部居民电缆MODEM连接到一个位于网络头端的电缆MODEM终端系统(CMTS)。DOCSIS使用FDM来划分下行(CMTS到MODEM)和上行(MODEM到CMTS)信道为很多份,每条下行信道的宽度是6 MHz,带来最大40 Mbps的吞吐量;每条上行信道的宽度是6.4 MHz,最大吞吐量为30 Mbps。上下行信道都是广播信道。CMTS沿下行信道传输的帧会被所有连接的MODEM收到,但由于只有一个CMTS进行传输,因此没有多路访问问题。但上行则不同,多个MODEM可以同时通过同一条信道传输数据给CMTS,碰撞是可能发生的。

每条上行信道都被分为许多个时间间隔,类似TDM,每个时间间隔包含一系列微时隙序列。在微时隙期间,MODEM可以传输数据到CMTS。CMTS通过在下行信道上发送控制信息(MAP报文)来显式指定哪些MODEM可以在哪些微时隙发送数据。这能够确保在微时隙中不发生碰撞。
但CMTS如何知道一开始有哪些MODEM要发送数据呢?令MODEM在一组特殊的专用微时隙间隔内发送微时隙请求帧给CMTS就可以了。这些微时隙请求帧通过随机访问的方式来传输,所以可能碰撞。MODEM无法探测上行信道是否正忙,也无法探测碰撞。不过,如果MODEM未在接下来的下行控制报文中收到请求的响应,则判定发生了碰撞。此后,MODEM使用二进制指数回退来决定重传时间。如果上传信道的流量很少,MODEM可以在分配给微时隙请求帧的时隙中直接传输数据帧,避免等待微时隙分配。
6.4 交换式LAN
并不是主机和路由器本身具有链路层地址,而是它们的适配器(网络接口)具有链路层地址。如果主机或路由器具有多个网络接口,则每个接口各具有一个链路层地址。这与IP地址类似。但是,链路层交换机的接口不具有链路层地址。这是因为链路层交换机的职责是透明地在主机与路由器之间运输数据报,主机或路由器不必明确地将帧通过指明地址定向到特定的交换机。链路层地址有许多别称,如LAN地址(LAN address)、物理地址(physical address)、硬件地址(hardware address)和MAC地址(MAC address)。链路层协议为以太网时,链路层地址也称以太网地址(Ethernet address)。
对许多LAN,MAC地址长48位(6字节)。IEEE 802标准虽然规定了MAC地址可以仅有2字节,但由于6字节的地址字段可使全世界所有的局域网适配器都具有不相同的地址,因此现在的局域网适配器使用的都是6字节MAC地址。
虽然MAC地址被设计为永久性的,但现在已经可以通过软件修改适配器的MAC地址了。
MAC地址是扁平结构而不是层次的,并且无论适配器位于哪个地理位置,一般都不改变。

IEEE 802.3标准将每字节的最低位记在最左侧。在地址记法中有两种标准:第一种记法是最左边的最低位是第一位;第二种记法是最左边的最高位是第一位。在发送数据时,两种记法都是按照字节的顺序发送,但每一个字节中先发送哪一位则不同:第一种记法先发送最低位,第二种记法先发送最高位。
但要注意这只是单个字节内的情况。TCP/IP中,所有长度大于8位的数据都是按大端(big endian)方式传输的(RFC 1700),从而保证数据在不同主机之间传输时能够被正确解释。大端字节序也称网络字节序(network byte order)。

适配器的MAC地址是全球唯一的。IEEE的注册管理机构(Registration Authority,RA)负责管理MAC地址空间。当一家公司想要生产适配器时,则购买一块容量为2^24的地址空间。IEEE将MAC地址的高24位即组织唯一标识符(Organizationally Unique Identifier,OUI)固定,然后将这块地址分配给公司。低24位(扩展唯一标识符,Extended unique identifier,EUI)可由公司自由使用。
地址字段的第一字节的最低位为I/G位。I/G表示Individual / Group。当I/G位为0时,地址字段表示单个站地址。当I/G位为1时表示组地址,用来进行多播(组播)。
IEEE还考虑到可能有人并不愿意向IEEE的RA购买OUI。为此,地址字段第1字节的最低第2位规定为G/L位,表示Global / Local。当G/L位为0时是全球管理(保证在全球没有相同的地址),厂商向IEEE购买的OUI都属于全球管理。当G/L位为1时是本地管理,用户可任意分配网络上的地址。采用2字节地址字段时全都是本地管理。但以太网几乎不理会这个G/L位。
这样,在全球管理时,每一个站的地址可用46位的二进制数字来表示(最低位和最低第2位均为0时)。剩下的46位组成的地址空间可以有246个地址,已经超过70万亿个,可保证世界上的每一个适配器拥有一个唯一的地址。当然,非无限大的地址空间总有用完的时候。

当适配器要向目标适配器发送帧时,发送适配器把目标适配器的MAC地址插入帧中,然后把帧发送到所在的LAN。交换机可能会把收到的帧广播给全部接口。即使帧首部没有写入目标地址,交换机也可以转发。适配器每在网络上接收到一帧,就将帧的目标地址与自己的MAC地址比对。如果不匹配,则丢弃该帧。如果匹配,则收下以后再进行后续处理。

以太网适配器还可设置为一种特殊的工作方式,即混杂方式(promiscuous mode)。工作在混杂方式的适配器只要“听到”有帧在以太网上传输就悄悄地接收下来,不管这些帧是发往哪个站。这样做实际上是“窃听”其它站点的通信而并不中断它们的通信。黑客常利用这种方法非法获取口令。因此,以太网上的用户不愿意网络上有工作在混杂方式的适配器。
但混杂方式有时却非常有用。例如,网络维护和管理人员需要用这种方式来监视和分析以太网上的流量,以便找出提高网络性能的具体措施。嗅探器(sniffer)就使用了设置为混杂方式的网络适配器。此外,这种嗅探器还可帮助学习网络的人员更好地理解各种网络协议的工作原理。

所有的适配器都至少应当能够识别单播帧和广播帧。有的适配器可用编程方法识别多播地址。当操作系统启动时,它就把适配器初始化,使适配器能够识别某些多播地址。显然,只有目的地址才能使用广播地址和多播地址。
当目标MAC地址为广播地址(broadcast address,FF-FF-FF-FF-FF-FF)时,LAN中的全部适配器都将接收并处理该帧。
IANA拥有的以太网地址块的高24位为00-00-5E,因此TCP/IP使用的以太网多播地址块的范围是从00-00-5E-00-00-00到00-00-5E-FF-FF-FF。而IANA拥有的以太网多播地址的范围是从01-00-5E-00-00-00到01-00-5E-7F-FF-FF。不难看出,在每一个地址中,只有23位可用作多播。这只能和D类IP地址中的23位有一一对应的关系。D类IP地址可供分配的有28位(高4位1110),可见在这28位中的前5位不能用来构成以太网硬件地址。由于多播IP地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机将以太网帧的数据部分上交给IP层后,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。

除了IP地址以外,主机和路由器同时具有MAC地址,理由主要有:
【1】LAN是被设计为可以使用任意的网络层协议的,并不仅仅针对IP和Internet。如果适配器也使用IP地址,那么在需要使用其它网络层协议(IPX、DECnet等)的场景,适配器就不能很好地支持了。
【2】如果适配器使用网络层地址,则网络层地址需要存储于适配器的RAM中,并且每次适配器加电时都要重新配置。如果不使用任何地址,而是令适配器直接将数据部分交给上层,由网络层检查网络层地址,则LAN每接收到一帧(包括同一广播LAN内目标地址不为本机的那些帧)时,主机都会被打断(因为帧总是被交给上层)。
总之,为了使各层尽量独立,每一层都需要有自己的地址策略。现在我们已经学习了三种类型的地址:应用层的主机名、网络层的IP地址和链路层的MAC地址。

那么,能不能够只是用MAC地址之类的硬件地址通信,而不使用IP地址呢?答案也是不可以的:
·全世界存在各种架构不同的网络,使用了不同的硬件地址。为了使这些异构网络之间可以通信,就必须进行非常复杂的硬件地址转换。这是几乎不可能做到的。
·有了IP地址,就可以唯一标记每台连接到Internet的主机,得以大大简化地址转换工作,使得原先复杂的地址转换中的绝大多数工作既不需要用户在应用层面上自行实现或配合,也不需要实现在网络设备中。
·Internet的IP地址是统一编址的,使得与硬件地址没有直接联系。在IP网络上,用户或高层软件直接使用IP地址进行通信,不需要关心具体网络在低层的差异。

为了将网络层地址转换为链路层地址,Internet引入了地址解析协议(address resolution protocol,ARP)。ARP根据输入的IP地址返回同一子网内的目标主机的MAC地址。与DNS不同,DNS将Internet上的任何主机解析为IP地址,而ARP仅对子网内的主机和路由器解析IP地址为MAC地址。如果尝试解析其它子网的计算机的MAC地址,则ARP报错。

每台主机和路由器的内存中都有一张ARP表(ARP table),包含了从IP地址到MAC地址的映射。ARP表还包括TTL值,指示对应的条目何时过期,需要删除。ARP表不需要为每台主机和路由器记录表项。
一般而言,每个条目的有效期为10到20分钟。设置这种地址映射项目的生存时间是很重要的,以便当网络中的主机变化(例如,某主机的网卡故障,更换了新的网卡)时及时更新。
有的资料将ARP表称为ARP高速缓存(cache)。但要注意ARP高速缓存是存储在内存中的。
ARP是即插即用的,即ARP表会自动建立,无需系统管理员手动配置;如果主机与子网断开,则对应的项在之后会从子网中的其它ARP表中删除。
在命令行下输入arp -a可以查看ARP表的全部内容。

当主机要向本局域网的另一主机发送IP数据报时,如果ARP表中已经具有目标IP地址对应的MAC地址,则一切照常;否则,发送方需要构造一个特殊的分组,称为ARP分组(ARP packet)。ARP分组的字段包括收发双方的IP和MAC地址。ARP请求和响应分组的格式是一样的。ARP请求分组的目的是:请求子网内的其它全部主机和路由器,给出需要解析为MAC地址的IP地址。
ARP分组的目标MAC地址为广播地址。适配器将ARP包封装进链路层帧中,目标地址设为FF-FF-FF-FF-FF-FF,然后将帧发送到子网中。包含ARP请求的帧会被子网内的所有其它适配器接收到,每个适配器都会将ARP包向上传递给ARP模块,ARP模块检查IP地址是否与ARP包中的目标IP地址匹配。如果匹配,则将响应ARP包送回给请求主机。请求主机根据收到的应答中的IP地址更新自己的ARP表,并开始发送需要发送的IP数据报,将数据报封装进链路层帧,其目标MAC是对先前ARP请求进行响应的主机或路由器的MAC。除了发起ARP请求的主机更新自己的ARP表以外,收到ARP请求的主机也会将发送方的地址写入自己的ARP高速缓存中。
ARP请求报文是通过广播帧发送的;但ARP响应报文是通过标准帧发送的(单播),仅由一台源主机发给一台目标主机。

ARP数据包被封装进链路层帧,所以ARP位于链路层之上;而ARP包既包含链路层地址也包含网络层地址等字段,ARP的用途是为了将IP地址解析为链路层的硬件地址,因此最好将ARP视为位于链路层与网络层之间的协议。

路由器的每个接口都有一个IP地址、ARP模块和适配器。当向子网外发送数据报时,发送主机通过ARP获取的是第一跳路由器(默认网关)的MAC地址;数据报每经过一台路由器,路由器就通过ARP获取下一跳路由器的MAC地址;而下一跳为目标子网时,获取的目标MAC地址就是目标主机的MAC地址了。

以太网ARP定义于RFC 826,而TCP/IP教程RFC 1180则对ARP进行了很不错的介绍。除了ARP以外,还存在逆地址解析协议(RARP),将硬件地址转化为网络层地址。但DHCP已经包含了RARP的功能。

从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是透明的。只要连接在同一网络上的主机或路由器进行通信,ARP就会自动地将该IP地址解析为链路层所需要的硬件地址。

下面小结一下需要使用ARP的四种典型情况:
[1]发送方是主机,要把IP数据报发送到同一个网络中的另一台主机。当发送主机的ARP表中不具有接收主机的MAC地址时,发送主机要发送ARP广播,获得目标主机的MAC地址。
[2]发送方是主机,要把IP数据报发送到另一个网络中的另一台主机。当发送主机的ARP表中不具有默认网关的MAC地址时,发送主机要发送ARP广播,获得默认网关的MAC地址。
[3]发送方是路由器,要把IP数据报转发到同一个网络中的主机。当路由器的ARP表不具有接收主机的MAC地址时,路由器要发送ARP广播,获得目标主机的MAC地址。
[4]发送昂是路由器,要把IP数据报转发到另一个网络中的主机。当路由器的ARP表不具有接收主机的MAC地址时,路由器要发送ARP广播,获得下一跳路由器的MAC地址。

免费ARP(Gratuitous ARP)报文它是一种特殊的ARP报文,发送端IP地址和目标IP地址都是本机IP地址,源MAC地址是本机MAC地址,目标MAC地址是广播地址。它不期望得到IP对应的MAC地址。设备通过对外发送免费ARP报文来实现以下功能:
验证IP地址是否冲突。当其它设备收到免费ARP报文后,如果发现报文中的IP地址和自己的IP地址相同,则给发送免费ARP报文的设备返回一个ARP应答,告知该设备IP地址冲突。
通知网络中的其它主机及时更新ARP缓存。若设备改变了硬件地址,通过发送免费ARP报文通知其它设备更新ARP表。

以太网的成功有很多原因。首先,以太网是第一个广泛部署的高速局域网。因为它部署得早,网络管理员非常熟悉以太网,于是当其它LAN技术问世时,他们不愿意切换到其它技术。其次,令牌环(802.5)、FDDI和ATM更复杂且成本更高。此外,虽然新技术总是带来更高的速率,但以太网总是通过推出更快的版本将后来者击败。交换以太网在1990年代早期出现后,进一步提升了有效传输速率。最终,以太网越来越流行,相关的硬件(适配器和交换机)也变得非常便宜了。

最初的以太网LAN于1975年由Xerox的Palo Alto研究中心发明,使用同轴总线互连结点。总线拓扑在1980年代到1990年代中期都保持不变。总线拓扑的以太网是广播LAN,总是将帧传输给总线上的所有适配器。总线两端的匹配电阻吸收在总线上传播的电磁波,避免总线上产生有害的电磁波反射。
1980年代和1990年代早期,以太网面临其它LAN技术的挑战,包括令牌环、FDDI和ATM。但后来,以太网逐渐成为了最流行的LAN技术,并将在未来保持垄断。以太网在LAN中的地位,正如Internet在全球网络中的地位。
1990年代后期,许多公司和大学都通过基于集线器(hub)的星形拓扑用以太网装置替换了已有的局域网。在这种装置中,主机和路由器都通过双绞铜线直连到集线器。集线器是物理层设备,对位进行操作,而不是帧。当一个bit到达一个接口时,集线器仅仅重新创建这个bit,增强其能量,将其传递给所有其它接口。因此,基于集线器的星形拓扑的以太网也是广播LAN:当集线器从一个接口收到一位时,就将这个位复制给其它全部接口。如果集线器同时收到两个帧,就会发生碰撞,创建这些帧的结点需要重新传输相应的帧。
使用集线器的局域网在物理上是一个星形网,但由于集线器使用电子器件来模拟电缆线,因此整个系统仍像传统以太网那样运行,即:使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,各站中的适配器执行CSMA/CD协议。网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据。
随着时代的前进,集线器已经被交换机取代:集线器能干的活,交换机干得更好;并且,交换机的价格足够便宜。
在2000年代早期,以太网经历了一次重大演化。虽然以太网装置继续使用星形拓扑,但集线器都被换成了交换机。这不仅避免了碰撞,而且实现了存储转发功能。与路由器和网络层交换机不同,链路层交换机工作在第二层。

如图,这是DIX Ethernet V2标准的以太网帧格式。DIX Ethernet V2是世界上第一个局域网产品规范,由DEC、Intel和Xerox联合制定。在此基础上,IEEE 802委员会的802.3工作组于1983年制定了第一个IEEE的以太网标准IEEE 802.3。802.3局域网对以太网标准中的帧格式做了很小的一点改动,但允许基于这两种标准的硬件实现可以在同一个局域网上互操作。以太网的两个标准DIX Ethernet V2与IEEE的802.3标准只有很小的差别,因此很多人也常把802.3局域网简称为“以太网”。虽然严格说来,“以太网”应当是指符合DIX Ethernet V2标准的局域网。
以太网帧的各个字段分别是:
·前同步码(preamble)。以太网帧的头8个字节固定为AA AA AA AA AA AA AA ABh(AAh = 10101010,ABh = 10101011)。前7字节用于令接收、发送适配器进行时钟同步。发送适配器无法以精确的额定速率传输帧,相对于额定速率总有一些漂移,局域网上的其它适配器无法预知这种漂移。接收适配器只需通过前同步码的前7字节,来锁定发送适配器的时钟。最后2位连续的1对接收方起到警示作用,指示重要的内容马上就要到来。在使用SONET/SDH进行同步传输时则不需要用前同步码,因为在同步传输时收发双方的位同步总是一直保持着的。此外,以太网在传送帧时,各帧之间还必须有一定的间隙。因此,接收端只要找到帧开始定界符ABh,其后面的连续到达的比特流就都属于同一个MAC帧。可见以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输。
·目标地址(destination address)。即目标适配器的MAC地址,6字节。当接收适配器收到以太网帧后,如果自身的MAC地址与帧的目标地址匹配,则将帧包含的上层数据呈递给网络层。如果不匹配,则丢弃该帧。
·源地址(source address)。即将数据发送到LAN的适配器的地址,6字节。
·类型(type)。2字节,允许以太网复用不同的网络层协议。根据类型字段的不同,适配器将数据部分交由相应的网络层协议(IP,Novell IPX,AppleTalk等)。不同的网络层协议具有不同的协议号。ARP也具有自己的协议号。
·数据。46到1500字节。数据段包含了数据报。以太网的MTU为1500字节。如果IP数据报大于1500字节,则需要分片。数据段最小为46字节。如果IP数据报小于46字节,则多出来的空白会被填充。网络层通过IP数据报的长度字段把数据报与填充内容区别开来。如果数据字段的长度不在这个范围,则此帧无效,将被丢弃。
链路层协议 MTU(字节)
Ethernet 1500
PPP 1500
IEEE 802.3 1492
FDDI 4352
·CRC码。4字节。允许接收方检验帧是否出错。传输媒体的误码率为10-8时,MAC可使未检测到的差错占比小于10-14。
以太网帧的首部并没有长度字段。当发送方把一个以太网帧发送完毕后,就不再发送其它码元了(既不发送1,也不发送0)。而以太网采用Manchester编码。当接收端将数据全部接收完毕,网络适配器的接口上的电压也就不再变化了。这样,接收方就可以很容易地找到以太网帧的结束位置。此外,如果帧的长度不是整数个字节,那么这一帧无效,需要丢弃。

最后要提一下,802.3标准规定的MAC帧格式与上面所讲的以太网V2 MAC帧格式的区别就是两个地方。
第一,IEEE 802.3规定的MAC帧的第三个字段是“长度 / 类型”。字段值大于0x0600(1536)时表示类型,这样的帧和以太网V2 MAC帧完全一样;字段值小于0x0600时才表示长度,即MAC帧的数据部分长度。显然,此时若数据字段的长度与长度字段的值不一致,则该帧为无效的MAC帧。以太网采用曼彻斯特编码,长度字段并无实际意义。
第二,当“长度 / 类型”字段值小于0x0600时,数据字段必须装入LLC帧。在早期,出于有关厂商在商业上的激烈竞争,IEEE 802委员会未能形成一个统一的、“最佳的”局域网标准,而是被迫制定了几个不同的局域网标准,如802.4令牌总线网、802.5令牌环网等。为了使数据链路层能更好地适应多种局域网标准,IEEE 802委员会就把局域网的数据链路层拆成两个子层,即逻辑链路控制LLC(Logical Link Control)子层和媒体访问控制MAC(Medium Access Control)子层。与接入到传输媒体有关的内容都放在MAC子层,而LLC子层则与传输媒体无关,采用任何传输媒体和MAC子层的局域网对LLC子层来说都是透明的。不过,现在广泛使用的局域网只有以太网,因此LLC帧已经失去了原来的意义。当今市场上流行的都是以太网V2的MAC帧,但大家也常常把它称为IEEE 802.3标准的MAC帧。

以太网的全部技术都为网络层提供了无连接服务。换句话说,当适配器A想发送数据报给适配器B时,A仅仅将数据报封装到以太网帧里,把帧发送到LAN中,而不在发送前先与B握手,也不对发送的帧编号,更不要求对方发回确认。这种二层无连接服务类似于三层的IP和四层的UDP提供的无连接服务。
以太网为网络层提供不可靠服务。如果适配器B从适配器A接收到了帧,那么B对帧进行CRC,但不会回送检查结果。假如校验失败,则B直接丢弃出错的帧。不进行可靠传输,使得以太网简单而廉价。但代价是上交给网络层的数据报流可能存在缺失。不过,现在局域网信道的质量已经很好,因通信质量差而出错的概率是很小的。
如果因为以太网帧被丢弃而导致缺失出现,接收方B的应用会发现吗?这取决于应用层使用TCP还是UDP。如果是UDP,则B中运行的应用会发现数据缺少了一部分。如果是TCP,则B中的TCP未确认部分数据,导致A中的TCP重传。如果发送方A重传数据,则丢失的数据会重新回到以太网中。从这个角度,也可以说以太网重传了数据。但有一点很明确:以太网并不知道当前正在传输的数据是重传的还是全新的。

以太网具有一系列衍生的标准,如10BASE-T,10BASE-2,100BASE-T,1000BASE-LX,10GBASE-T和40GBASE-T等。这些连同许多以太网技术都被IEEE 802.3 CSMA/CD工作组标准化了。在这些标准中,10、100、1000、10G和40G代表速率(10 M、100 M、1000 M、10 G和40 G);BASE代表基带以太网(baseband Ethernet),代表物理媒介仅运送以太网流量。几乎所有的802.3标准都适用于基带以太网。后缀指物理媒体类型。以太网既是链路层规范也是物理层规范,能在各种各样的介质中传输数据。T代表双绞铜线(twisted-pair copper wires)。

历史上,以太网最初被构想为一段同轴电缆。早期的10BASE-2和10BASE-5都是针对基于两种类型的同轴电缆的10 Mbps以太网的,电缆长度不超过500米。而10BASE-T要求两台主机的距离不超过200米,否则信号会衰减到使CSMA/CD协议无法正常工作。如果需要更长的运行距离,则使用转发器(repeater)。转发器是物理层设备,从输入端接收信号,在输出端重新生成信号。如今的以太网已经完全不同了:转发器早已被淘汰,结点通过点对点双绞铜线或光纤连接到交换机。
在计算机网络发展的早期,有一个概念叫做网桥,也称桥接器(bridge)。网桥是连接两个局域网的一种存储转发设备。它将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器。网桥对收到的帧根据其MAC帧的目的地址进行转发和过滤。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个接口,或者是把它丢弃(过滤)。后来,网桥也被具有更多端口、同时也可隔离冲突域(见下文)的交换机所取代。

到了1990年代中期,以太网被标准化为100 Mbps。原先的以太网MAC协议和帧格式被保留了下来,不过也为铜线(100BASE-T,该标准也称快速以太网Fast Ethernet,IEEE 802.3u)、光纤(100BASE-FX,100BASE-SX,100BASE-BX)定义了高速物理层。使用双绞线时,100 M以太网的传输距离限制为100米;使用光纤时,则限制放宽到数千米。
用户只要使用100 Mbit/s的适配器和100 Mbit/s的集线器或交换机,就可很方便地由10BASE-T以太网直接升级到100Mbit/s,而不必改变网络的拓扑结构。所有在10BASE-T上的应用软件和网络软件都可保持不变。100BASE-T的适配器有很强的自适应性,能够自动识别10 Mbit/s和100 Mbit/s(以及半双工和全双工)。
100BASE-T可使用以太网交换机提供很好的服务质量,可在全双工方式下工作而无冲突发生。因此,CSMA/CD协议对全双工方式工作的快速以太网是不起作用的(但在半双工方式工作时则一定要使用CSMA/CD协议)。
在100 Mbps以太网中,保持最短帧长64字节不变。100 Mbps的以太网的争用期变为5.12 μs,帧间最小间隔为0.96 μs,都是10 Mbps以太网的1/10。

G级以太网则是高度成功的10 M和100 M以太网标准的扩展。举例:40 G以太网对现有以太网设备保持了完全的兼容性G级以太网标准IEEE 802.3z主要做了:
·使用标准的以太网帧格式,使得与10BASE-T和100BASE-T向后兼容。这使得现有设备能快速迁移到G级以太网。
·允许点对点链路和共享广播链路。点对点链路使用交换机,广播链路使用集线器。在G级以太网的专用术语中,集线器也称缓冲分配器(buffered distributor)。
·对广播信道使用CSMA/CD协议。为了获得可以接受的效率,两个结点的最大距离必须严格限制。
·在半双工方式下使用CSMA/CD协议,而在全双工方式不使用CSMA/CD协议。
·对点对点信道,允许在40 Gbps的速率下全双工运行。
1000BASE-X(-SX,-LX,-CX)的标准是IEEE 802.3z,而1000BASE-T的标准是IEEE 802.3ab。
G级以太网工作在半双工方式时,必须进行碰撞检测。由于数据率提高了,因此只有减小最大电缆长度或增大帧的最小长度,才能使参数a保持为较小的数值。若将吉比特以太网最大电缆长度减小过多,那么网络的实际价值就大大减小。而若将最短帧长提高得过大,则在发送短数据时开销又嫌太大。因此,G级以太网采用了载波延伸(carrier extension)的办法,使最短帧长仍为64字节(保证兼容性),同时将争用期增大为512字节。凡发送的MAC帧长不足512字节时,就用一些特殊字符填充在帧的后面,使MAC帧的发送长度增大到512字节,这对有效载荷并无影响。接收端在收到以太网的MAC帧后,要把所填充的特殊字符删除后才向高层交付。当原来仅64字节长的短帧填充到512字节时,所填充的448字节就造成了很大的开销。
为此,G级以太网还增加了一种功能称为分组突发(packet bursting)。这就是当很多短帧要发送时,第一个短帧要采用上面所说的载波延伸的方法进行填充。但随后的一些短帧则可一个接一个地发送,它们之间只需留有必要的帧间最小间隔即可。这样就形成一串分组的突发,直到达到1500字节或稍多一些为止。当G级以太网工作在全双工方式时,不使用载波延伸和分组突发。

10GE(10GbE)以太网并不是只将速率简单提高10倍,因为还有许多技术上的问题要解决。10GE的帧格式与10 Mbit/s,100 Mbit/s和1 Gbit/s以太网的帧格式完全相同,并保留了802.3标准规定的以太网最小帧长和最大帧长。这就使用户在将已有的以太网进行升级时,仍能和较低速率的以太网方便地通信。10GE只工作在全双工方式,因此不存在争用问题,当然也不使用CSMA/CD协议。这就使得10GE的传输距离大大提高了(不再受必须进行碰撞检测的限制)。

表中的前三项的标准是IEEE 802.3ae,在2002年6月完成。第四项的标准是IEEE 802.3ak,完成于2004年。最后一项的标准是IEEE 802.3an,完成于2006年。
以太网的技术发展得很快。在10GE之后又制定了40GE/100GE的标准IEEE 802.3ba-2010和802.3bm-2015。下表是40GE和100GE的物理层名称及传输距离,其中有两项带*号的是802.3bm提出的。
需要指出的是,40GE/100GE只工作在全双工的传输方式(不使用CSMA/CD协议),并且仍然保持了以太网的帧格式以及802.3标准规定的以太网最小和最大帧长。100GE在使用单模光纤传输时,仍然可以达到40 km的传输距离,但这需要波分复用(使用4个波长复用一根光纤,每一个波长的有效传输速率是25 Gbit/s)。

总之,在使用总线拓扑和基于集线器的星形拓扑的早期,以太网明显是一条广播链路,可能发生帧碰撞。我们说,每一个以太网都是一个独立的碰撞域(collision domain,也称冲突域)。在任一时刻,每一个碰撞域中只能有一个站发送数据。集线器会增大冲突域,且不能提高吞吐量。如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
为了避免碰撞,以太网标准引入了CSMA/CD协议,该协议对于小范围的有线广播局域网特别有效。今天广为使用的以太网是基于交换机的星形拓扑,采用的是存储转发分组交换,是否还真正需要一种以太网MAC协议呢?交换机会协调传输,在任何时候决不会向相同的接口转发超过一个帧。此外,现代交换机是全双工的,这使得一台交换机和一个结点能够同时向对方发送帧而不发生干扰。换句话说,基于交换机的以太局域网中不会有碰撞,因此没有必要使用MAC协议了。

时至今日,以太网已与20世纪70年代中期的雏形有了非常大的不同:速率至少提升了三四个数量级;以太网帧能通过各种媒介传输;交换以太网已经具备统治性的低位;甚至MAC协议也经常不是必要的了。也许你会问:这还是以太网吗?答案很明确:从定义上说,是的。虽然前面说的这些方面都发生了翻天覆地的变化,但有一样东西在这三四十年来一直保持不变:以太网帧格式。

“交换机”并无准确的定义和明确的概念。著名网络专家Perlman认为:“交换机”应当是一个市场名词,而交换机的出现的确使数据的转发更加快速了。有时我们也使用这个广泛被接受的名词一一以太网交换机。
以太网交换机实质上就是一个多接口的网桥,通常有十几个或更多的接口,和工作在物理层的转发器、集线器有很大的差别。以太网交换机的每个接口都直接与主机或另一台以太网交换机相连,并且一般都工作在全双工方式。
以太网交换机还具有并行性,能同时连通多对接口,使多对主机同时通信(网桥只能一次分析和转发一个帧)。相互通信的主机都是独占传输媒体,无碰撞地传输数据。也就是说,以太网交换机能大大增加网络的总容量。
以太网交换机的接口还有存储器,能在输出端口繁忙时把到来的帧进行缓存。因此,如果连接在以太网交换机上的两台主机同时向另一台主机发送帧,那么当这台主机的接口繁忙时,发送帧的这两台主机连接到的接口会把收到的帧暂存一下,以后再发送出去。
从共享总线以太网转到交换式以太网时,所有接入设备的软件和硬件都不需要做任何改动。帧结构不变。
虽然许多以太网交换机对收到的帧采用存储转发方式转发,但也有一些交换机采用直通(cut-through)的交换方式。直通交换不必把整个数据帧先缓存再处理,而是在接收帧的同时就立即按帧的目标MAC地址把帧转发出去,因而提高了转发速率。如果采用ASIC实现此功能,交换时延可以做到非常小。不过,直通交换的缺点是:不检查差错就直接转发帧,因此有可能将一些无效帧转发给其它站。某些情况下,仍需要采用基于软件的存储转发方式进行交换。例如,当需要进行线路速率匹配、协议转换或差错检测时。现在有的厂商已生产出能支持两种交换方式的以太网交换机。
以太网交换机的发展,与使用交换机所在网络的建筑物结构化布线系统的普及应用密切相关。在结构化布线系统中,广泛地使用了以太网交换机。
以太网交换机的种类很多。例如“具有第三层特性的第二层交换机”和“多层交换机”。前者具有某些第三层的功能,如数据报的分片和对多播通信量的管理,而后者可根据第三层的IP地址对分组进行过滤。

交换机自身对子网中的主机和路由器是透明(transparent)的:主机或路由器给帧标好另一台主机或路由器的地址(而不是特地把帧送到交换机),然后直接把帧丢进LAN里,并不会意识到接下来有交换机收到了这个帧并进行转发。帧到达交换机输出接口的速率可以高于该接口的链路速率,因此交换机也和路由器一样具有输出接口缓存来暂存准备发送出去的帧。

过滤(filtering)是一种交换机功能,决定哪些帧需要转发到哪些接口,而哪些帧应当直接丢弃。转发(forwarding),是指决定帧应当被导向哪些接口,并将帧转发到相应接口。交换机的过滤和转发功能都通过交换表(switch table,也称地址表)来完成。交换表包含LAN内的部分主机和路由器的信息。交换表项包含:MAC地址,对应的交换机接口,以及该项放入表中的时间。以太网交换机使用了ASIC,用硬件转发,其转发速率要比使用软件转发的网桥快很多。

如果有一个MAC地址为A的帧到达了接口x,那么分成三种情况:
·交换表中没有包含A的项。交换机将把此帧转发给除了x以外的全部接口。即:当交换表中没有目标MAC地址对应的记录时,交换机广播该帧。
·交换表中具有包含A的项,且指示了转发到接口x。由于收到此帧也是通过x接口,因此无需转发,该帧直接丢弃。
·交换表中具有包含A的项,但指示了转发到接口y≠x。则该帧需要转发到接口y。

交换表是由交换机自动构建和维护的,无需网管或配置协议的干预。这个特性称为自学习(self-learning)。自学习的实现方式是:
1、初始时,交换表是空的。
2、对某台主机H发来的帧,交换机会在表中存储源MAC地址(即主机H的适配器MAC地址)、到达的接口和当前时间。通过这种方式,交换机在表中记录了发送端所在的LAN网段。如果LAN中的每一台主机都发送一帧,那么每台主机在表中都有记录。之后,如果接收到目标地址指向H的源地址的帧,交换机就可以在交换表中查找到相应的条目,于是直接向当时H发送的帧到达的接口进行转发。
3、经过一段时间(即老化时间,aging time)后,如果没有接收到包含相应的源地址的帧,那么对应的项就被从表中删除。如果LAN中的一台PC被其它PC代替(适配器不是同一个了),那么被代替的PC在表中的记录最终会被删除。

交换机也是即插即用的设备,因为无需网管或用户的干预。网管想安装交换机时,只需要将LAN网段连接到交换机的接口上,不用做别的。在安装交换机或者当某主机从局域网网段之一被去除时,管理员也没有必要配置交换表。

有时为了增加网络的可靠性,在使用以太网交换机组网时,往往会增加一些冗余的链路。在这种情况下,自学习的过程就可能导致以太网帧在网络的某个环路中无限制地兜圈子。802.1D标准制定了生成树协议(spanning tree protocol,STP)。要点就是不改变网络的实际拓扑,但在逻辑上切断某些链路,使得一台主机到所有其它主机的路径都是无环路的树状结构,从而消除了兜圈子现象。

使用交换机的优点有:
·高速、无碰撞。使用交换机而非集线器建立的LAN中,不会因碰撞而浪费带宽。交换机会把帧适时缓存起来,不会在网段上同时传输多个帧。与路由器一样,交换机的最大聚合带宽是其全部接口的速率之和。相比带广播链路的LAN,这是性能上的巨大飞跃。
·异构链路。交换机将链路之间彼此隔离,使得不同链路可以使用不同的媒介并具有不同的速率。这能使较旧的设备能与最新的设备在同一个局域网中使用。
·管理。除了提供更高的安全性,交换机也降低了网络管理的难度。例如,如果一个适配器故障并不断发送以太网帧,则交换机能检测到该问题并在内部断开异常适配器。有了这个特性,网管无需在网络故障的时候被单位的电话吵醒,开车回单位去手动修复问题。如果电缆断开,也只影响该电缆原先连接的主机。在同轴电缆时代,许多网管花费数小时沿线检修(爬地板),去查找导致整个网络瘫痪的断电。交换机还可以统计带宽使用、碰撞率、流量类型等数据,并将这些信息展示给网管,以便发现和修正bug,以及计划后续的LAN升级方式。

当主机与交换机相连时,通常仅接收目标地址指向它的帧。如果主机A通过交换机向B发送帧,那么虽然同一子网内的主机C也连接到该交换机,但是C上的嗅探器无法嗅探到A发送B的消息。可见,与广播链路环境(如802.11 LAN与基于集线器的LAN)不同,在交换LAN中,攻击者更难嗅探到需要的帧。然而,当交换表中没有需要的条目时,交换机会将收到的相应的帧广播给整个LAN。这时候,子网内的任何其它主机C都可以嗅探到广播的帧。针对交换机的一种攻击叫做交换机毒化(switch poisoning),也称MAC洪水(MAC flooding),通过发送大量包含不同的伪造源MAC地址的分组给交换机,导致交换表被无效条目占满,无法为LAN内的合法主机记录相应的条目。这就导致交换机不得不广播从这些合法主机发送的帧,这些帧就可以用嗅探器捕获。不过,这种攻击只有技艺高超的攻击者才能做到,因此交换机比集线器和WLAN更难受到嗅探。

作为互连设备,路由器和交换机有什么区别?各有哪些优缺点?
首先是交换机的优点和缺点。
交换机是即插即用的,这一特性为全世界的网络管理员所喜爱。交换机也具有相对更高的过滤与转发速率。
然而,为了防止广播帧的循环,交换机的活动拓扑必须为树形。此外,一个大的交换网络需要主机与路由器记录一张大的ARP表,并且会产生非常多的ARP流量与处理量。交换机易受广播风暴(broadcast storm),即过多的广播信息的影响:如果一台主机故障,发送了过多的以太网广播帧,那么交换机会将这些帧转发,导致整个网络崩溃。
再来列举路由器的优点和缺点。
网络地址常常是层次性的,分组不会简单地在路由器之间循环,即便网络中存在冗余的路径。然而,如果路由表配置不正确,循环是可以发生的。IP数据报的报头具有TTL字段,限制了最大跳数。所以,分组就不会被限制到一棵生成树上,并可以使用源和目的地之间的最佳路径。由于路由器没有生成树限制,Internet的拓扑可以是各种各样的,例如在欧洲和北美之间可以具有非常多的活动链路。另外,路由器为二层广播风暴提供了防火墙保护。可能路由器的最大缺陷是它们无法即插即用:路由器和主机必须配置IP地址,才能发挥路由功能。路由器处理每个包的时间通常也长于交换机,因为它们要在第三层处理包。
“router”一词具有两种读音“rooter”和“rowter”。人们花费了很多时间争论哪种读法才是正确的。

对于几百台左右的主机与几个局域网网段规模的小型网络,仅使用交换机也是最够的,这样可以将流量本地化,提升总吞吐量,且不要求配置IP地址。但更大的网络一般需要路由器,以更好地隔离流量,控制广播风暴,并确定更优的路由。

一种比较简单的局域网结构是分层的:例如,一个机构的每个工作组(部门)拥有自己的交换LAN,通过交换机与其它交换LAN连接。这种网络是理想化的,实际使用时具有如下的不足:
·缺少流量隔离。虽然层次化令不同组的流量本地化于一台交换机,但广播流量(比如携带ARP与DHCP信息的帧,或者自学习交换机还没有学习相应目的地的帧)还是会遍历整个机构的网络。限制广播流量的范围可以提升LAN性能,以及增强安全性和对隐私的保护。比如,一个LAN是行政管理团队专用的,而其它LAN则由雇员使用,并开启了Wireshark分组嗅探器。这时候,行政团队可能希望自己的流量从不到达职工使用的主机。以上图的拓扑为例,如果将最中间的连接了6个接口的交换机换成路由器,这种隔离就可以实现了。当然,仅使用二层交换机的时候,也有实现这种隔离的方案。
·交换机的低效使用。如果机构里有很多组,每个组的主机数量又很少,那么会有大量的交换机的很多接口都用不到。如果一台接口足够多的交换机也能连接全部主机,又无法提供流量隔离功能。
·管理用户。例如,如果一个职工被调到了其它组,又不方便使用其它的主机而必须使用原有的主机,则必须改变物理布线,将该职工所用主机连接到其它交换机。如果有职工在多个组中工作,问题就更复杂了。

幸运的是,上述问题都可以通过支持虚拟局域网(virtual local area network,VLAN)的交换机解决。
支持VLAN的交换机允许在一个物理LAN上定义多个虚拟的LAN,当然也可以将多个LAN中的一些主机划分给一个VLAN。一个VLAN内的主机可以通信,就像连接到同一交换机那样。在基于端口的VLAN中,交换机端口(接口)被网络管理员分成若干个组,每一组构造一个VLAN,每个VLAN内的全部端口形成一个广播域(broadcast domain),又称网段(network segment)。广播流量只能在VLAN内传输。
网络管理员使用交换机管理软件声明一个端口属于某个给定的VLAN(未声明的端口属于默认的VLAN),在交换机中维护一张端口到VLAN的映射表;交换机仅在属于相同VLAN的端口之间交付帧。

那么,要在不同的VLAN之间通信时,怎么办?一种方案是:将VLAN交换机的一个端口与外部的路由器相连,并将该端口同时配置为属于这两个VLAN。于是,即便这两个VLAN中的主机使用相同的物理交换机,逻辑上也会将这些主机视作是通过不同的交换机连接到路由器的。从一个VLAN到另一个VLAN的IP数据报将先到达路由器,再从路由器传回同一交换机的不同端口。不过,交换机厂商已经想到办法使这种方案很容易被网管实施:有的设备既是VLAN交换机又是路由器,于是就不再需要额外的路由器了。

VLAN中继(VLAN trunking)可以互连VLAN交换机。使用VLAN中继时,每台交换机都要预留一个端口,将其配置为trunk端口。Trunk端口是属于所有VLAN的,发送到任何VLAN的帧都将通过trunk链路转发给其它交换机。IEEE定义了扩展以太网帧格式802.1Q(Dot1q),这是专门针对需要穿过VLAN中继的帧制定的。.1Q帧也包含标准以太网帧的内容,但还包括一个4字节的VLAN标签(VLAN tag),标记该帧所属的VLAN。在VLAN trunk的发送端,VLAN标签被加入帧内;在VLAN trunk的接收端,VLAN标签被移除。VLAN标签的2字节是标签协议标识符(tag protocol identifier,TPID),剩下2字节是标签控制信息,依次为:3-bit的优先级字段、1-bit的规范格式指示符(canonical format indicator,CFI)和12-bit的VLAN标识符。

除了基于端口的VLAN,VLAN还可以通过其它方式定义。在基于MAC的VLAN中,网关指定不同的MAC属于哪些VLAN。当设备连接到端口时,根据设备的MAC地址,端口连接到指定的VLAN。VLAN还可以根据网络层协议(IPv4、IPv6、AppleTalk等)、高层应用或服务或它们的组合,以及其它标准指定。VLAN还可以经过IP路由器进行扩展,允许LAN们通过单一的VLAN连接,甚至可以形成跨越全球的单一VLAN。

以太网的应用范围已经从局域网(校园网、企业网)扩大到城域网和广域网,从而实现了端到端的以太网传输。这种工作方式的好处是:
(1) 以太网是一种经过实践证明的成熟技术,无论是互联网服务提供者ISP还是端用户都很愿意使用以太网。
(2) 以太网的互操作性也很好,不同厂商生产的以太网都能可靠地进行互操作。
(3) 在广域网中使用以太网时,其价格大约只有同步光纤网SONET的五分之一和异步传递方式ATM的十分之一。以太网还能够适应多种传输媒体,如铜缆、双绞线以及各种光缆。这就使具有不同传输媒体的用户在进行通信时不必重新布线。(4) 端到端的以太网连接使帧的格式全都是以太网的格式,而不需要再进行帧的格式转换,这就简化了操作和管理。但是,以太网和现有的其它网络,如帧中继或ATM网络,仍然需要有相应的接口才能进行互连。
以太网从10Mbit/s到10Gbit/s甚至到100Gbit/s的演进,证明了以太网是:
(1) 可扩展的(速率从10 Mbit/s到100 Gbit/s)。
(2) 灵活的(多种媒体、全/半双工、共享/交换)。
(3) 易于安装。
(4) 稳健性好。
6.5 链路虚拟化:网络作为链路层
多协议标签交换(multiprotocol label switching,MPLS)是在1990年代中后期综合了许多工业界的技术而诞生的,其目的是通过增加定长标签来提高IP路由器的转发速率。“多协议”表示在MPLS的上层可以采用多种协议。这并不代表要放弃基于目的地的IP数据报转发基础设施,而是要通过选择性标记数据报来增强它,并允许路由器在可能时通过定长标签立即转发数据报。这些技术与IP协同工作,通过IP来进行寻址和路由。MPLS协议由IETF颁布,已成为互联网的建议标准。
对标记的IP数据报进行硬件转发,称为标记交换。“交换”也表示在转发时不再上升到三层查找转发表,而是根据标记在二层用硬件进行转发。MPLS可使用多种链路层协议,如PPP、以太网、ATM以及帧中继等。
人们经常把MPLS与异步传递方式ATM联系起来,这仅仅是因为它们都采用了面向连接的工作方式。以前很多人都曾认为网络的发展方向是以ATM为核心的宽带综合业务数字B-ISDN。然而价格低廉得多的高速IP路由器仍然占领了市场,最终导致ATM技术和B-ISDN未能够成为网络的发展方向。

兼容MPLS的路由器处理的链路层帧中,数据部分的最前面是MPLS报头,紧随其后的才是IP报头和上层数据。使用这种封装技术的原因是:下层网络未必支持标签,而且IPv4数据报报头也没有多余的位置存放MPLS标签。RFC 3032定义了MPLS报头的格式,如下图。把带MPLS报头的IP数据报封装成以太网帧时,以太网的类型字段在单播时设置为8847h,而在多播时为8848h。这样,接收方可以用帧的类型来判决这个帧是携带了MPLS标记还是一个常规的IP数据报。从层次的角度看,MPLS报头处在第二层和第三层之间。

MPLS报头一共4字节,包括4个字段:
(1)标记值(label)占20位。由于一个MPLS标记占20位,因此从理论上讲,可以同时容纳高达220条(1048576)条流。但是,实际上几乎没有哪个MPLS实例会使用很大数目的流,因为通常需要管理员人工管理和设置每条交换路径。
(2)试验(exp)占3位,目前保留用于试验。
(3)栈S占1位,在有“标记栈”时使用,用于标记一系列堆叠的MPLS报头,这里不予讨论。
(4)生存时间TTL占8位,用来防止MPLS分组在MPLS域的环路中循环。
这种MPLS增强帧只能在支持MPLS的路由器(又称标签交换路由器,label-switched router,LSR)间传送。不支持MPLS的路由器无法正确识别MPLS报头。MPLS域(MPLS domain)中所有的路由器都是支持MPLS技术的标记交换路由器。

MPLS的基本工作过程是:
(1) MPLS域中的各LSR使用专门的标签分配协议LDP(Label Distribution Protocol)交换报文,并找出和特定标记相对应的路径,即标签交换路径LSP(Label Switched Path)。各LSR根据这些路径构造出转发表。这个过程和路由器构造自己的路由表相似[RFC 3031]。限于篇幅,这里不讨论转发表构造的详细步骤。MPLS是面向连接的,因为在LSP上的第一台LSR就根据IP数据报的初始标签确定了整个的标签交换路径。
(2) 当一份IP数据报进入到MPLS域时,MPLS入口结点(ingress node)就给它打上标签(插入MPLS报头),并按照转发表转发给下一台LSR。以后的所有LSR都按照标签进行转发。给IP数据报打标签的过程叫做分类(classification)。严格的第三层(网络层)分类只使用了IP报头中的字段,如源IP地址和目的IP地址等。大多数运营商实现了第四层(运输层)分类(除了要检查IP报头外,运输层还要检查TCP或UDP报头中的协议端口号),而有些运营商则实现了第五层(应用层)分类(更进一步地检查数据报的内部并考虑其有效载荷)。
(3) 由于在全网统一分配全局标签是非常困难的,因此一个标签仅仅在两台LSR之间才有意义。分组每经过一台LSR,LSR就要做两件事:一是转发,二是更换新的标签,即把入标签更换成为出标签。这就叫做标签对换(label swapping)。做这两件事所需的数据都已清楚地写在转发表中。例如:

标签交换路由器就知道应当把该IP数据报从出接口1转发出去,同时把标记对换为l。当IP数据报进入下一台LSR时,这时的入标记就是刚才得到的出标记。下一台LSR在转发该IP数据报的时候,又把入标记1对换为另一个出标记,比如2。
(4) 当IP数据报离开MPLS域时,MPLS出口结点(egress node)就把MPLS的标签去除,把IP数据报交付非MPLS的主机或路由器,以后就按照普通的转发方法进行转发。
上述的这种“由入口LSR确定进入MPLS域以后的转发路径”称为显式路由(explicit routing),它和互联网中通常使用的“每一台路由器逐跳进行路由选择”(逐跳路由)有着很大的区别。

MPLS有个很重要的概念就是转发等价类FEC(Forwarding Equivalence Class)。转发等价类,就是路由器按照同样方式对待的IP数据报的集合。“按照同样方式对待”表示:从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等。FEC的例子是:
(I) 目的IP地址与某一个特定IP地址的前缀匹配的IP数据报(这就相当于普通的IP路由器);
(2) 所有源地址与目的地址都相同的IP数据报;
(3) 具有某种服务质量需求的IP数据报。
总之,划分FEC的方法不受什么限制,这都由网络管理员来控制,因此非常灵活。入口结点并不是给每一个IP数据报指派一个不同的标记,而是将属于同样FEC的IP数据报都指派同样的标记。FEC和标记是——对应的关系。

下面举一个把FEC用于负载平衡的例子。有时候,传统的路由协议基于某些算法和策略(例如最短路径)进行路由选择,有可能令大量的流量都要经过同一条路径,导致局部过载,甚至成为整个网络的瓶颈。有了FEC,就可以批量将具有某些性质(比如都具有相同的源地址和目标地址,可以由网络管理员自定义)的数据报设置为转发到其它路径,进而使网络的负载较为平衡。

MPLS路由器在进行转发和路由器之间通信时,无需解析分组的IP报头。现存的链路状态路由算法(如OSPF)已经针对MPLS做了扩展,可以在MPLS兼容的路由器之间洪泛链路状态信息。在MSPF中,使用的路由算法没有统一标准,使用何种算法与设备厂商有关。

MPLS的一个更重要的优势是:提供了不能用IP做到的流量管理能力。网络管理员能够通过MPLS来覆盖一般的IP路由,强制某细纹流量沿着指定的路径流向目的地(无论是出于性能还是一些特定策略的考虑)。这是基于MPLS的流量工程(traffic engineering)的一种简单情形。

MPLS还可用于其它目的。例如,当链路故障时,可以通过MPLS预先计算好的备用路径来快速恢复网络的通信能力。MPLS还用于VPN。为了给顾客实现VPN,ISP使用启用了MPLS的网络来将顾客使用的网络互连。MPLS可以用于将客户的VPN使用的资源和地址与其它用户隔离。
6.6 数据中心网络
诸多IT行业的巨头,如Google、Microsoft、Facebook和Amazon等,都有自己的数据中心。每个这样的大型数据中心至少具备几十万台主机,支持不同的云应用,如搜索、邮件、社交网络、电子商务和影音串流等。每个数据中心都拥有自己的数据中心网络,将Internet和数据中心内的计算机互连起来。

一座大的数据中心一个月的总运行成本要按数千万美元计。这些经济成本中,花在主机上的并不是绝大多数(例如45 %)。基础设施的成本可以达到25 %,包括变压器、不间断电源供应系统(uninterruptable power supplies,UPS)、为长时间断电准备的发电机、冷却系统等。约15 %的花销用于。网络的花费也可以占到15 %,包括交换机、路由器、负载平衡器、外部链路和流量传输。当然,在这些费用中,设备费用是按使用期限均摊给每个月的,以便能和电费等持续性的开销一同计算。虽然网络不是成本最多的部分,但在网络上进行创新,可以减小总成本并提升性能。

数据中心的主机负责提供内容(网页和视频等)、存储邮件与文档、集体执行分布式计算(比如搜索引擎的索引)。主机常被做成刀片式的,堆叠在机架上。一个机架可以具有20到40台刀片服务器。机架顶部设有机架顶部交换机(top-of-rack(TOR) switch),互连机架中的主机和数据中心的其它交换机。机架中的所有主机都有自己的网络接口连接到TOR交换机,并被分配仅在数据中心内有效的IP地址;每台TOR交换机都有额外的接口连接到其它交换机。

数据中心网络支持两种流量:一种是与外部客户端的流量,另一种是与内部主机的流量。数据中心网络具有若干台边界路由器(border router),将数据中心网络连接到Internet。数据中心网络的不同机架也连接到边界路由器,从而加入整个数据中心网络。如何设计数据中心网络,已经成为了近年来计算机网络研究的一个重要分支。

为了运行各种应用,每个应用程序都被分配一个公共可见的IP地址,客户端将请求发送给相应的IP地址,相应应用通过自己的IP地址进行应答。在数据中心内部,外部请求先经过负载平衡器(load balancer),后者的工作是在主机之间分配请求,根据主机当前的负载来平衡负载。大型数据中心经常具有多台负载平衡器,每台负责一组特定的应用。负载平衡器也称“4层交换机“,因为它根据目标端口号和目标IP地址来做出决策。在收到对特定应用程序的请求后,负载平衡器将其转发给运行该应用程序的一台主机。主机可以自行处理也可以调用其它主机的服务来处理请求。当请求处理完毕后,就被发送回负载平衡器,后者将其交付给外部客户端。负载平衡器不但进行负载均衡,还充当了类似NAT的作用,将公用的外部IP地址与内部IP地址互相转换。这也使得客户端不直接与主机通信,隐藏了内部的网络结构,增强了安全性。

当拥有的主机数量非常多时,数据中心通常将路由器和交换机分层。最顶层的边界路由器与访问路由器连接。每台访问路由器之下有三个层的交换机,并连接到顶层的交换机。每台顶层(Tier-1)交换机连接到Tier-2交换机;每台Tier-2交换机则通过TOR交换机(Tier-3交换机)连接机架。所有链路一般都使用以太网作为链路层和物理层协议,既可以使用铜线也可以使用光纤。这种层次化的结构有利于扩大数据中心的规模。

为了增强可用性,网络部件一般都有冗余。例如,每台TOR交换机可以连接到多台Tier-2交换机,访问路由器和交换机都可以部署足够多的数量。每台访问路由器之下具有单个子网,以限制ARP广播流量的范围。这些子网会被进一步划分成若干个更小的VLAN子网,每个这样的VLAN子网可以具有数百台主机。

层次结构解决了数据中心规模难以扩大的问题,但还是会受到主机到主机的容量限制的影响。如果交换机之间的链路速率相对不足,那么不同机架的主机通信时,速率将受到制约,无法跑满主机网卡支持的最高速率。如果主机间的流量需要穿过更高层次的交换机或路由器,则需要交换机(路由器)之间具备更高的速率。而部署更高端口速率的交换机与路由器需要的花费是极其昂贵的。

为了降低运行成本和延迟并增强吞吐量,拥有数据中心的各大企业都在改进数据中心的网络设计。虽然这些设计是专有的,但也可以归纳出不少相同的趋势。
首先,新的互连架构和网络协议被用于克服传统层次化设计的缺点。一种方案是将交换机和路由器之间采用完全连接拓扑:每台Tier-1连接到全部的Tier-2交换机;每台Tier-2交换机也连接到全部的Tier-1交换机。
其次,基于容器的模块化数据中心(modular data centers,MDC)也在大规模铺开。工厂组装好许多大型容器,容器内包含数据中心需要的各种硬件,然后将这些容器运送到数据中心所在的位置投入使用。每个这样的容器可以具备上千台主机,几十个机架。一旦这种容器在数据中心部署完毕,维修就比较困难了。因此,这种容器已经针对了性能下降的情况进行设计:当部件(服务器、交换机等)故障后,容器以降低的性能继续工作。如果损坏的部件达到一个阈值导致性能损失不可接受,则整个容器将被移除,替换新的容器。

在MDC中,有两类网络:容器内网络和容器间网络(核心网络)。在容器内,使用廉价的商用G级以太网交换机对几千台主机构造一个完全连接网络是可行的。但是,如果要将这些容器在满足主机到主机的速率足够的要求下连接起来,即便是针对典型负载而不是满载,也是非常具有挑战性的。
设计了互连拓扑,还要有配套的路由算法。可以使用随机路由,也可以为每台主机配置多个网卡,以此将每台主机连接到低成本商用交换机上,允许主机在交换机之间进行智能路由。这些方法的变种已经在当代的各种数据中心中投入使用。

大型云供应商已越发趋向于定制数据中心内的一切,包括网络适配器、交换机、路由器、软件和网络协议。

Amazon提出了“可用区域”(availability zone)的可靠性概念:数据中心被复制到多个附近(约几千米范围内)的建筑中,并将数据在同一可靠区域内同步,使得容错率增加。

迄今为止,仍然不断有更多的创新被提出来。有兴趣的读者可以参阅关于数据中心网络设计的近期论文和视频。

猜你喜欢

转载自blog.csdn.net/COFACTOR/article/details/111906418