在链路层中,会讨论到两种截然不同类型的链路层信道。第一种类型是广播信道,这种信道用于连接有线局域网、卫星网和混合光纤同轴电缆( Hybrid Fiber Coaxialcable,HFC)接入网中的多台主机。因为许多主机与相同的广播信道连接,需要所谓的媒体访问协议来协调帧传输。在某些场合中,可以使用中心控制器来协调传输。第二种类型的链路层信道是点对点通信链路,这在诸如长距离链路连接的两台路由器之间,或用户办公室计算机与它们所连接的邻近以太网交换机之间等场合经常能够发现。点到点协议( Point-toPoint Protocol,PPP),该协议的适用范围从经电话线的拨号服务到经光纤链路的高速点到点帧传输。
将运行链路层协议(即第2层)协议的任何设备均称为 结点(node)。结点包括主机、路由器、交换机和WiFi接入点。我们也把沿着通信路径连接相邻结点的通信信道称为 链路(link)。为了将一个数据报从源主机传输到目的主机,数据报必须通过沿端到端路径上的各段链路传输。
尽管任一链路层的基本服务都是将数据报通过单一通信链路从一个结点移动到相邻结点,但所提供的服务细节能够随着链路层协议的不同而变化。链路层协议能够提供的可能服务包括:
链路层的主体部分是在网络适配器( network adapter)中实现的,网络适配器有时也称为网络接口卡( Network Interface Card,NC)。位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了许多链路层服务(成帧、链路接入、差错检测等)的专用芯片。因此,链路层控制器的许多功能是用硬件实现的。例如, Intel I的8254x控制器[ Intel2012]实现了以太网协议。
在发送端,控制器取得了由协议较高层生成并存储在主机内存中的数据报,在链路层帧中封装该数据报(填写该帧的各个字段),然后遵循链路接入协议将该帧传进通信链路中。在接收端,控制器接收了整个帧,抽取出网络层数据报。如果链路层执行差错检测,则需要发送控制器在该帧的首部设置差错检测比特,由接收控制器执行差错检测。
尽管大部分链路层是在硬件中实现的,但部分链路层是在运行于主机CPU上的软件中实现的。链路层的软件组件实现了高层链路层功能,如组装链路层寻址信息和激活控制器硬件。在接收端,链路层软件响应控制器中断(例如,由于一个或多个帧的到达),处理差错条件和将数据报向上传递给网络层。所以,链路层是硬件和软件的结合体,即此处是协议钱中软件与硬件交接的地方。
比特级差错检测和纠正(bit- level error detection and correotion),即对从一个结点发送到另一个物理上连接的邻近结点的链路层帧中的比特损伤进行检测和纠正,它们通常是链路层提供的两种服务。
在发送结点,为了保护比特免受差错,使用差错检测和纠正比特(Eror- Detection and- Correction,EDC)来增强数据D。通常,要保护的数据不仅包括从网络层传递下来需要通过链路传输的数据报,而且包括链路首部中的链路级的寻址信息、序号和其他字段。
差错检测和纠正技术使接收方有时但并总是检测出已经出现的比特差错。即使采用差错检测比特,也还是可能有未检出比特差错( undetected bit error);这就是说,接收方可能无法知道接收的信息中包含着比特差错。因此,接收方可能向网路层交付一个损伤的数据报,或者不知道该帧首部的某个其他字段的内容已经损伤。因此要选择一个差错检测方案,使得这种事件发生的概率很小。一般而言,差错检测和纠错技术越复杂(即那些具有未检测出比特差错概率较小的技术),导致的开销就越大,这就是意味着需要更多的计算量及更多的差错检测和纠错比特。
在传输数据中检测差错的3种技术:奇偶校验(它用来描述差错检测和纠正背后隐含的基本思想)、检验和方法(它通常更多地应用于运输层)和循环冗余检测(它通常更多地应用在适配器中的链路层)。
奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
采用单个奇偶校验位方式,接收方的操作也很简单。接收方只需要数一数接收的d+1比特中1的数目即可。如果在采用偶校验方案中发现了奇数个值为1的比特,接收方知道至少出现了一个比特差错。更精确的说法是,出现了 奇数个比特差错。其他多维奇偶校验维基百科:Multidimensional parity-check code
检验和(checksum),在数据处理和数据通信领域中,用于校验目的地一组数据项的和。它通常是以十六进制为数制表示的形式。如果校验和的数值超过十六进制的FF,也就是255. 就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。
步骤
发送方生成检验和
接收方校验检验和
#include
int main()
{
int a[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
int i,sum=0;
for (i=0;i<8;i++)
sum+=a[i];//将每个数相加
if(sum>0xff)
{
sum=~sum;
sum+=1;
}
sum=sum&0xff;
printf("0x%x\n",sum);
}
一个简单检验和方法就是将这k比特整数加起来,并且用得到的和作为差错检测比特。 因特网检验和( Internet checksum)就基于这种方法,即数据的字节作为16比特的整数对待并求和。这个和的反码形成了携带在报文段首部的因特网检验和。接收方通过对接收的数据(包括检验和)的和取反码,并且检测其结果是否为全1比特来检测检验和。如果这些比特中有任何比特是0,就可以指示出差错。RFC1071详细地讨论因
特网检验和算法和它的实现。在TCP和UDP协议中,对所有字段(包括首部和数据字段)都计算因特网检验和。
检验和方法需要相对小的分组开销。例如,TCP和UDP中的检验和只用了16比特。然而,与后面要讨论的常用于链路层的CRC相比,它们提供相对弱的差错保护。运输层通常是在主机中作为用户操作系统的一部分用软件实现的。因为运输层差错检測用软件实现,采用简单而快速如检验和这样的差错检测方案是重要的。在另一方面,链路层的差错检测在适配器中用专用的硬件实现,它能够快速执行更复杂的CRC操作。
现今的计算机网络中广泛应用的差错检测技术基于 循环冗余检测( Cyelie RedundaCheck,CRC)编码。CRC编码也称为多项式编码( polynomial code),因为该编码能够将要发送的比特串看作为系数是0和1一个多项式,对比特串的操作被解释为多项式算术。
循环冗余校验(Cyclic redundancy check,通称“CRC”)是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的计算机硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。
CRC为校验和的一种,是两个字节数据流采用二进制除法(没有进位,使用XOR来代替减法)相除所得到的余数。其中被除数是需要计算校验和的信息数据流的二进制表示;除数是一个长度为(n+1)的预定义(短)的二进制数,通常用多项式的系数来表示。在做除法之前,要在信息数据之后先加上n个0.
CRC是基于有限域GF(2)(即除以2的同余)的多项式环。简单的来说,就是所有系数都为0或1(又叫做二进制)的多项式系数的集合,并且集合对于所有的代数操作都是封闭的。例如:
(x3+x)+(x+1)=x3+2x+x=x3+x
2会变成0,因为对系数的加法运算都会再取2的模数。乘法也是类似的:
(x2+x)(x+1)=x3+2x2+x=x3+x
我们同样可以对多项式作除法并且得到商和余数。例如,如果我们用x+x+x除以x+ 1。我们会得到:
(x3+x2+x)/(x+1)=(x2+1)-1/(x+1)
也就是说:
(x3+x2+x)=(x2+1)(x+1)-1
等价于:
(x2+x+1)x=(x2+1)(x+1)-1
这里除法得到了商x+ 1和余数-1,因为是奇数所以最后一位是1。
字符串中的每一位其实就对应了这样类型的多项式的系数。为了得到CRC,我们首先将其乘以 ,这里n是一个固定多项式的阶数,然后再将其除以这个固定的多项式,余数的系数就是CRC。
在上面的等式中,x2+x+x1表示了本来的信息位是111, 是所谓的钥匙,而余数1(也就是x0)就是CRC. key的最高次为1,所以我们将原来的信息乘上x1来得到x3+x2+x,也可视为原来的信息位补1个零成为1110。
一般来说,其形式为:
M(x)·xn=Q(x)K·(x)-R(x)
这里M(x)是原始的信息多项式。K(x)是n阶的“钥匙”多项式。M(x)·xn表示了将原始信息后面加上n个0。R(x)是余数多项式,即是CRC“校验和”。在通信中,发送者在原始的信息数据M后附加上n位的R(替换本来附加的0)再发送。接收者收到M和R后,检查M(x)·xn+R(x)是否能被K(x)整除。如果是,那么接收者认为该信息是正确的。值得注意的是M(x)·xn+R(x)就是发送者所想要发送的数据。这个串又叫做codeword.
CRCs经常被叫做“校验和”,但是这样的说法严格来说并不是准确的,因为技术上来说,校验“和”是通过加法来计算的,而不是CRC这里的除法。
“错误纠正编码”(Error–Correcting Codes,简称ECC)常常和CRCs紧密相关,其语序纠正在传输过程中所产生的错误。这些编码方式常常和数学原理紧密相关。例如常见于通信或信息传递上BCH码、前向错误更正、Error detection and correction等
在本章概述中,我们提到了有两种类型的网络链路:点对点链路和广播链路。点对点
链路( point-toe- point link)由链路一端的单个发送方和链路另一端的单个接收方组成。许
多链路层协议都是为点对点链路设计的,如点对点协议( point-- point protocol,PP)和高级数据链路控制(high- level datalink control,HDLC)就是两种这样的协议。第二种类型的链路是广播链路( broadcast ink),它能够让多个发送和接收结点都连接到相同的、单一的、共享的广播信道上。这里使用术语“广播”是因为当任何一个结点传输一个帧时,信道广播该帧,每个其他结点都收到一个副本。以太网和无线局域网是广播链路层技术的例子。:如何协调多个发送和接收结点对一个共享广播信道的访问,这就是多路访问问题( multiple aceessproblem)。广播信道通常用于局域网中,局域网是一个地理上集中在一座建筑物中(或者在一个公司,或者在大学校园)的网络。因此我
们还将在本节后面考察一下多路访问信道是如何在局域网中使用的。
我们都很熟悉广播的概念,因为自电视发明以来就使用了这种通信方式。但是传统的电視是一种一个方向的广播(即一个固定的结点向许多接收结点传输),而计算机网络广播信道上的结点既能够发送也能够接收。多路访问协议( multiple access protocol),即结点通过这些协议来规范它们在共享的广播信道上的传输行为。在各种各样的网络环境下需要多路访问协议,包括有线和无线接入网,以及卫星网络。尽管从技术上讲每个结点通过它的适配器访问广播信道,把结点作为发送和接收设备。在实践中,数以百计或者甚至数以千计个结点能够通过一个广播信道直接通信。
因为所有的结点都能够传输,所以多个结点可能会同时传输帧。当发生这种情况时,所有结点同时接到多个帧;这就是说,传输的帧在所有的接收方处碰撞( collide)了。通常,当碰撞发生时,没有一个接收结点能够有效地获得任何传输的帧;在某种意义下,碰撞帧的信号纠缠在一起。因此,涉及此次碰撞的所有帧都丢失了,在碰撞时间间隔中的广播信道被浪费了。显然,如果许多结点要频繁地传输帧,许多传输将导致碰撞,广播信道的大量带宽将被浪费掉。
当多个结点处于活跃状态时,为了确保广播信道执行有用的工作,以某种方式协调活跃结点的传输是必要的。这种协调工作由多路访问协议负责。
将任何多路访问协议划分为3种类型之一:信道划分协议( channel partitioning protocol)、随机接入协议( random access protocol)和轮流协议( taking- turns protocol)。
给出下列条件。在理想情况下,对于速率为Rbps的广播信道,多路访问协议应该具有以下所希望的特性:
时分多路复用(TDM)和频分多路复用(FDM)是两种能够用于在所有共享信道结点之间划分广播信道带宽的技术。举例来说,假设一个支持N个结点的信道且信道的传输速率为Rbps。TDM将时间划分为时间帧( time frame),并进步划分每个时间帧为N个时隙(slo)。(不应当把TDM时间帧与在发送和接收适配器之间交换的链路层数据单元相混淆,后者也被称为帧。为了减少混乱,在本小节中我们将链路层交换的数据单元称为分组。)然后把每个时隙分配给N个结点中的一个。无论何时某个结点在有分组要发送的时候,它在循环的TDM帧中指派给它的时隙内传输分组比特。通常,选择的时隙长度应使一个时隙内能够传输单个分组。
TDM是有吸引力的,因为它消除了碰撞而且非常公平:每个结点在每个帧时间内得到了专用的传输速率 R/N bps。然而它有两个主要缺陷。首先,结点被限制于R/Nbps的平均速率,即使当它是唯一有分组要发送的结点时。其次,结点必须总是等待它在传输序列中的轮次,即我们再次看到,即使它是唯一一个有帧要发送的结点。
TDM在时间上共享广播信道,而FDM将Rbps信道划分为不同的频段(每个频段具有B/N带宽),并把每个频率分配给N个结点中的一个。因此FDM在单个较大的Rbps信道中创建了N个较小的R/Nbps信道。FDM也有TDM同样的优点和缺点。它避免了碰撞,在N个结点之间公平地划分了带宽。然而,FDM也有TDM所具有的主要缺点,也就是限制一个结点只能使用R/N的带宽,即使当它是唯一一个有分组要发送的结点时。第三种信道划分协议是码分多址( Code Division Multiple Access,CDMA)。TDM和FDM分别为结点分配时隙和频率,而CDMA对每个结点分配一种不同的编码。然后每个结点用它唯一的编码来对它发送的数据进行编码。如果精心选择这些编码,CDMA网络具有一种奇妙的特性,即不同的结点能够同时传输,并且它们各自相应的接收方仍能正确接收发送方编码的数据比特(假设接收方知道发送方的编码),而不在乎其他结点的干扰传输。CDMA已经在军用系统中使用了一段时间(由于它的抗干扰特性)。
第二大类多访问协议是随机接入协议。在随机接入协议中,一个传输结点总是以信道的全部速率(即Rbps)进行发送。当有碰撞时,涉及碰撞的每个结点反复地重发它的帧(也就是分组),到该帧无碰撞地通过为止。但是当一个结点经历一次碰撞时,它不必立刻重发该帧。相反,它在重发该之前等待一个随机时延。涉及碰撞的每个结点独立地选择随机时延。因为该随机时延是独立地选择的,所以下述现象是有可能的:这些结点之一所选择的时延充分小于其他碰撞结点的时延,并因此能够无碰撞地将它的帧在信道中发出。
在对时隙 ALOHA的描述中,我们做下列假设
令P是一个概率,即一个在0和1之间的数。在每个结点中,时隙 ALOHA的操作是简单的。
当结点有一个新帧要发送时,它等到下一个时隙开始并在该时隙传输整个帧。如果没有碰撞,该结点成功地传输它的帧,从而不需要考虑重传该帧。(如果该结点有新帧,它能够为传输准备一个新帧。如果有碰撞,该结点在时隙结束之前检測到这次碰撞。该结点以概率P在后续的每个时隙中重传它的帧,直到该帧被无碰撞地传输出去。
时隙ALOHA看起来有很多优点。与信道划分不同,当某结点是唯一活跃的结点时(一个结点如果有帧要发送就认为它是活跃的),时隙 ALOHA允许该结点以全速R连续传输。时隙 ALOHA也是高度分散的,因为每个结点检测碰撞井独立地决定什么时候重传(然而,时隙 ALOHA的确需要在结点中对时隙同步;时隙 ALOHA也是个极为简单的协议。
时隙 ALOHA协议要求所有的结点同步它们的传输,以在每个时隙开始时开始传输。第一个 ALOHA协议实际上是一个非时隙、完全分散的协议。在纯 ALOHA中,当一帧首次到达(即一个网络层数据报在发送结点从网络层传递下来),结点立刻将该帧完整地传输进广播信道。如果一个传输的帧与一个或多个传输经历了碰撞,这个结点将立即(在完全传输完它的碰撞帧之后)以概率p重传该帧。否则,该结点等待一个帧传输时间。
在此等待之后,它则以概率P传输该帧,或者以概率1-p在另一个时间等待(保持空闲)。
在时隙和纯 ALOHA中,一个结点传输的决定独立于连接到这个广播信道上的其他结点的活动。特别是,一个结点不关心在它开始传输时是否有其他结点碰巧在传输,而且即使有另一个结点开始干扰它的传输也不会停止传输。,即当一个传输结点在传输时一直在侦听此信道。如果它检测到另
个结点正在传输干扰帧,它就停止传输,在重复“侦听-当空闲时传输”循环之前等待一段随机时间。
这两个规则包含在载波侦听多路访问( Carrier Sense Multiple Access,CSMA)和具有碰撞检测的CSMA( CSMA with Collision Detection, CSMA/CD)协议族中。
在分析 CSMA/CD协议之前,从与广播信道相连的适配器(在结点中)的角
度总结它的运行:
等待一个随机(而不是固定)的时间量的需求是明确的一一如果两个结点同时传输帧,然后这两个结点等待相同固定的时间量,它们将持续碰撞下去。但选择随机回退时间的时间间隔多大为好呢?如果时间间隔大而碰撞结点数量小,在重复“侦听一当空闲时传输”的步骤前,结点很可能等待较长的时间(使信道保持空闲)。在另一方面,如果时间间隔小而碰撞结点数量大,很可能选择的随机值将几乎相同,传输结点将再次碰撞。我们希望时间间隔应该这样:当碰撞结点数量较少时,时间间隔较短;当碰撞结点数量较大时,时间间隔较长。
用于以太网以及 DOCSIS电缆网络多路访问协议中的二进制指数后退( binary exponential backoff)算法,简练地解决了这个问题。特别是,当传输一个给定帧时,在该帧经历了一连串的n次碰撞后,结点随机地从[0,1,2,…,2n-1]中选择一个K值。因此,一个帧经历的碰撞越多、,K选择的间隔越大。对于以太网,一个结点等待的实际时间量是K・512比特时间(即发送512比特进入以太网所需时间量的K倍),n能够取的最大值在10以内。
CSMA/CD效率( efficiency of CSMA/CD)定义为:当有大量的活跃结点且每个结点有大量的帧要发送时,帧在信道中无碰撞地传输的那部分时间在长期运行时间中所占的份额。为了给出效率的一个闭式的近似表示,令dprop表示信号能量在任意两个适配器之间传播所需的最大时间。令dtrans表示传输一个最大长度的以太网帧的时间(对于10Mbps的以太网,该时间近似为1.2毫秒)。
效率=1/(1+5dprop/dtrans)
多路访问协议的两个理想特性是:①当只有一个结点活跃时,该活跃结点具有Rbps的吞吐量;②当有M个结点活跃时,每个活跃结点的吞吐量接近R/Mbps。 ALOHA和CSMA协议具备第一个特性,但不具备第二个特性。这激发研究人员创造另一类协议,也就是 轮流协议( taking- turns protoeol)。和随机接入协议一样,有几十种轮流协议,其中每个协议又都有很多变种。这里我们要讨论两种比较重要的协议。
第一种是 轮询协议( polling protocol)。轮询协议要求这些结点之一要被指定为主结点。主结点以循环的方式轮询(pl)每个结点。特别是,主结点首先向结点1发送一个报文,告诉它(结点1)能够传输的帧的最多数量。在结点1传输了某些帧后,主结点告诉结点2它(结点2)能够传输的帧的最多数量。上述过程以这种方式继续进行,主结点以循环的方式轮询了每个结点轮询协议消除了困扰随机接入协议的碰撞和空时隙,这使得轮询取得高得多的效率。
但是它也有一些缺点。第一个缺点是该协议引入了轮询时延,即通知一个结点“它可以传输”所需的时间。例如,如果只有一个结点是活跃的,那么这个结点将以小于Rbps的速率传输,因为每次活跃结点发送了它最多数量的帧时,主结点必须依次轮询每一个非活跃的结点。第二个缺点可能更为严重,就是如果主结点有故障,整个信道都变得不可操作。
第二种轮流协议是 令牌传递协议(oken- passing protocol)。在这种协议中没有主结点。一个称为 令牌( token)的小的特殊帧在结点之间以某种固定的次序进行交换。例如,结点1可能总是把令牌发送给结点2,结点2可能总是把今牌发送给结点3,而结点N可能总是把令牌发送给结点1。当一个结点收到令牌时,仅当它有一些帧要发送时,它才持有这个令牌;否则,它立即向下一个结点转发该令牌。当一个结点收到令牌时,如果它确实有顿要传输,它发送最大数目的帧数,然后把令牌转发给下一个结点。令牌传递是分散的,并有很高的效率。但是它也有自己的一些问题。例如,一个结点的故障可能会使整个信道崩溃。或者如果一个结点偶然忘记了释放令牌,则必须调用某些恢复步骤使令牌返回到循环中来。
一个电缆接入网通常在电缆网头端将几千个住宅电缆调制解调器与一个 电缆调制解调器端接系统( Cable Modem Termination System,CMTS)连接。数据经电缆服务接口(Data-Over- Cable Service Interface,CMTS)规范( DOCSIS) DOCSIS2012]定义了电缆数据网络体系结构及其协议。 DOCSIS使用FDM将下行(CMTS到调制解调器)和上行(调制解调器到CMTS)网络段划分为多个频率信道。每个下行信道宽6MHz,每个信道具有大约40Mhps吞吐量;每个上行信道具有6.4MHz的最大信道带宽,并且最大的上行吞吐量约为30Mbps。每个上行和下行信道均为广播信道。CMTS在下行信道中传输的帧被所有在信道上做接收的电缆调制解调器接收到;然而因为仅有单一的CMTS在下行信道上传输,不存在多路访问问题。但在上行方向,存在着多个有趣的技术挑战,因为多个电缆调制解调器共享到CMTS的相同上行信道(频率),因此能够潜在地出现碰撞。
每条上行信道被划分为时间间隔(类似于TDM),每个时间间隔包含序列微时隙,电缆调制解调器可在该微时隙中向CMTS传输。CMTS显式地准许各个电缆调制解调器在特定的微时隙中进行传输。CMIS在下行信道上通过发送称为MAP报文的控制报文,指定哪个电缆调制解调器(带有要发送的数据)能够在微时隙中传输由控制报文指定的时间间隔。由于微时隙明确分配给电缆调制解调器,故CMTS能够确保在微时隙中没有碰撞传输。
但是CMTS一开始是如何知道哪个电缆调制解调器有数据要发送呢?通过让电缆调制解调器在专用于此目的的一组特殊的微时隙间隔内向CMIS发送微时隙请求帧来完成该任务。这些微时隙请求帧以随机接入方式传输,故可能相互碰撞。电缆调制解调器既不能侦听上行信道是否忙,也不能检测碰撞。相反,该电缆调制解调器如果没有在下一个下行控制报文中收到对请求分配的响应的话,就推断出它的微时隙请求帧经历了一次碰撞。当推断出一次碰撞,电缆调制解调器使用二进制指数回退将其微时隙请求帧延缓到以后的时隙重新发送。当在上行信道上有很少的流量,电缆调制解调器可能在名义上分配给微时隙请求帧的时隙内实际传输数据帧(因此避免不得不等待微时隙分配)因此,电缆接人网可作为应用多路访问协议(即FDM、TDM、随机接入和集中分配时隙都用于一个网络中)的一个极好例子。
首先,以太网是第一个广泛部署的高速局域网。因为它部署得早,网络管理员非常熟悉以太网(它的奇迹和它的奇思妙想),并当其他局域网技术问世时,他们不愿意转而用之。其次,令牌环、FDDI和ATM比以太网更加复杂、更加昂贵,这就进一步阻碍了网络管理员改用其他技术。第三,改用其他局域网技术(例如FDDI和ATM)的最引人注目的原因通常是这些新技术具有更高数据速率;然而以太网总是奋起抗争,产生了运行在相同或更高数据速率下的版本。20世纪90年代初期还引入了交换以太网,这就进一步増加了它的有效数据速率。最后,由于以太网已经很流行了,所以以太网硬件(尤其是适配器和交换机)成为了一个普通商品,而且极为便宜。
初始的以太局域网使用同轴电缆总线来互联结点。以太网的总线拓扑实际上从20世纪80年代到90年代中期一直保持不变。使用总线拓扑的以太网是一种广播局域网,即所有传输的顿传送到与该总线连接的所有适配器并被其处理。
到了20世纪90年代后期,大多数公司和大学使用一种基于集线器的星形拓扑以太网安装替代了它们的局域网。在这种安装中,主机(和路由器)直接用双绞对铜线与一台集线器相连。 集线器(hub)是一种物理层设备,它作用于各个比特而不是作用于顿。当表示一个0或一个1的比特到达一个接口时,集线器只是重新生成这个比特,将其能量强度放大,并将该比特向其他所有接口传输出去。因此,采用基于集线器的星形拓扑的以太网也是一个广播局域网,即无论何时集线器从它的一个接口接收到一个比特,它向其所有其他接口发送该比特的副本。特别是,如果某集线器同时从两个不同的接口接收到帧,将出现一次碰撞,生成该帧的结点必须重新传输该帧。
在21世纪早期,以太网又经历了一次重要的革命性変化。以太网安装继续使用星形拓扑,但是位于中心的集线器被 交换机( switch)所替代。仅知道交换机不仅是“无碰撞的”,而且也是名副其实的存储转发分组交换机就可以了;但是与运行在高至第3层的路由器不同,交换机仅运行在第2层。
前同步码 | 目的地址 | 源地址 | 类型 | 数据 | CRC |
---|
所有的以太网技术都向网络层提供无连接服务。这就是说,当适配器A要向适配器B发送一个数据报时,适配器A在一个以太网帧中封装该数据报,并且把该帧发送到局域网上,没有先与适配器B握手。这种第二层的无连接服务类似于P的第三层数据报服务和UDP的第4层无连接服务。
以太网技术都向网络层提供不可靠服务( unreliable service)。特别是,当适配器B收到一个来自适配器A的帧,它对该帧执行CRC校验,但是当该帧通过CRC校验时它既不发送确认帧;而当该帧没有通过CRC校验时它也不发送否定确认帧。当某帧没有通过CRC校验,适配器B只是丢弃该帧。因此,适配器A根本不知道它传输的帧是否到达了B并通过了CRC校验。(在链路层)缺乏可靠的传输有助于使得以太网简单和便宜。但是它也意味着传递到网络层的数据报流能够有间隙。
如果由于丢弃了以太网帧而存在间隙,主机B上的应用也会看见这个间隙吗?这只取决于该应用是使用UDP还是使用TCP。如果应用使用的是UDP,则主机B中的应用的确会看到数据中的间隙。另一方面,如果应用使用的是TCP,则主机B中的TCP将不会确认包含在丢弃帧中的数据,从而引起主机A的TCP重传。注意到当TCP重传数据时,数据最终将回到曾经丢弃它的以太网适配器。因此,从这种意义上来说,以太网的确重传了数据,尽管以太网并不知道它是正在传输一个具有全新数据的全新数据报,还是一个包含已经被传输过至少一次的数据的数据报。
交换机的任务是接收入链路层帧并将它们转发到出链路。交换机自身对子网中的主机和路由器是 透明的(transparent);这就是说,某主机/路由器向另一个主机/路由器寻址一个帧(而不是向交换机寻址该帧),顺利地将该帧发送进局域网,并不知道某交换机将会接收该帧并将它转发到另一个结点。这些帧到达该交换机的任何输出接口之一的速率可能暂时会超过该接口的链路容量。为了解决这个问题,交换机输出接口设有缓存,这非常类似于路由器接口为数据报设有缓存。
交换机是 即插即用设备(plug-and- play device),因为它们不需要网络管理员或用户的干预。要安装交换机的网络管理员除了将局域网网段与交换机的接口相连外,不需要做其他任何事。管理员在安装交换机或者当某主机从局域网网段之一被去除时,他没有必要配置交换机表。交换机也是双工的,这意味着任何交换机接口能够同时发送和接收。
链路层交换机的性质
指出使用交换机的几个优点,它们不同于如总线或基于集线器的星形拓扑那样的广播链路:
路由器与交换机的比较
路由器是使用网络层地址转发分组的存储转发分组交换机。尽管交换机也是一个存储转发分组交换机,但它和路由器是根本不同的,因为它用MAC地址转发分组。交换机是第二层的分组交换机,而路由器是第三层的分组交换机。即使交换机和路由器从根本上是不同的,网络管理员在安装互联设备时也经常必须在它们之间进行选择。路由器的确使得各系之间通信而不产生碰撞。既然交换机和路由器都是候选的互联设备,那么这两种方式
的优点和缺点各是什么呢?
首先考虑交换机的优点和缺点。如上面提到的那样,交换机是即插即用的,这是世界上所有超负荷工作的网络管理员都喜爱的特性。交换机还能够具有相对高的分组过滤和转发速率,交换机必须处理高至第二层的帧,而路由器必须处理高至第三层的数据报。在另一方面,为了防止广播帧的循环,交换网络的活跃拓扑限制为一棵生成树。另外,一个大型交换网络将要求在主机和路由器中有大的ARP表,这将生成可观的ARP流量和处理量。而且,交换机对于广播风暴并不提供任何保护措施,即如果某主机出了故障并传输出没完没了的以太网广播帧流,该交换机将转发所有这些帧,使得整个以太网的崩溃。
现在考虑路由器的优点和缺点。因为网络寻址通常是分层次的(不像MAC寻址那样是扁平的),即使当网络中存在冗余路径时,分组通常也不会通过路由器循环。(然而,当路由器表被误配置时,分组可能循环,IP用一个特殊的报文首部字段来限制循环。)所以,分组就不会被限制到一棵生成树上,并可以使用源和目的地之间的最佳路径。因为路由器没有生成树限制,所以它们允许以丰富的拓扑结构构建因特网。路由器的另一个特色是它们对第二层的广播风暴提供了防火墙保护。尽管也许路由器最重要的缺点就是它们不是即插即用的,即路由器和连接到它们的主机都需要人为地配置IP地址。而且路由器对每个分组的处理时间通常比交换机更长,因为它们必须处理高达第三层的字段。
通常,由几百台主机组成的小网络通常有几个局域网网段。对于这些小网络,交换机就足够了,因为它们不要求IP地址的任何配置就能使流量局部化并增加总计吞吐量。但是在由几千台主机组成的更大网络中,通常在网络中(除了交换机之外)还包括路由器。路由器提供了更健壮的流量隔离方式和对广播风暴的控制,并在网络的主机之间使用更“智能的”路由。
流行的互联网设备的典型特色比较
集线器 | 路由器 | 交换机 | |
---|---|---|---|
流量隔离 | 无 | 有 | 有 |
即插即用 | 有 | 无 | 有 |
优化路由 | 无 | 有 | 无 |
现代机构的局域网常常是配置为等级结构的,每个工作组(部门)有自己的交换局域网,经过一个交换机等级结构与其他工作组的交换局城网互联。虽然这样的配置在理想世界中能够很好地工作,但在现实世界常常不尽如人意。发现3个缺点:
幸运的是,这些难题中的每个都能够通过 支持虚拟局域网( Virtua Local Network VLAN)的交换机来处理。顾名思义,支持VLAN的交换机允许经一个单一的物理局域网基础设施定义多个虚拟局域网。在一个VLAN内的主机彼此通信,仿佛它们(并且没有其他主机)与交换机连接。在一个基于端口的VLAN中,交换机的端口(接口)由网络管理员划分为组。每个组构成一个VLAN,在每个VLAN中的端口形成一个广播域(即来自一个端口的广播流量仅能到达该组中的其他端口)。这个VLAN解决了上面提到的所有困难即 EE VLAN帧和 CS VLAN帧彼此隔离。人们容易想象到VLAN交换机配置和操作的方法,即网络管理员使用交换机管理软件声明一个端口属于某个给定的VLAN(其中未声明的端口属于一个默认的VLAN),在交换机中维护一张端口到VLAN的映射表;交换机软件仅在属于相同VLAN的端口之间交付帧。
一种更具扩展性互联VLAN交换机的方法称为 VLAN干线连接( VLAN trunking)。每台交换机上的一个特殊端口被配置为干线端口,以互联这两台VLAN交换机。该干线端口属于所有VLAN,发送到任何VLAN的帧经过干线链路转发到其他交换机。但这会引起另外的问题:一个交换机怎样知道到达干线端口的帧属于某个特定的VLAN呢?IEE定义了一种扩展的以太网帧格式802.1Q,用于跨越VLAN干线的帧。802.1Q帧由标准以太网帧与加进首部的4字节 VLAN标签( VLAN tag)组成,而VLAN标签承载着该帧所属的VLAN标识符。VLAN标签由在VLAN干线发送侧的交换机加进帧中,解析后并由在VLAN干线接收侧的交换机删除。VLAN标签自身由一个2字节的 标签协议标识符( Tag Protocol Identifier,TPID)字段(具有固定的十六进制81-00)、一个2字节的标签控制信息字段(包含一个12比特的VLAN标识符字段)和一个3比特优先权字段(具有类似于IP数据报T0S字段的目的)组成。
将链路视为连接两台通信主机的物理线路。在学习多路访问协议时,我们看到了多台主机能够通过一条共享的线路连接起来,并且连接主机的这种“线路”能够是无线电频谱或其他媒体。这使我们将该链路更多地抽象为一条信道,而不是作为一条线路。互联媒体实际上能够是一种相当复杂的交换基础设施。然而,经过这种演化,主机本身维持着这样的视图,即互联媒体只是连接两台或多台主机的链路层信道。
在两台主机之间由拨号调制解调器连接的场合,连接这两台主机的锥路实际上是电话网,这是一个逻辑上分离的、全球性的电信网络,它有自己的用于数据传输和信令的交换机、链路和协议栈。然而,从因特网链路层的观点看,通过电话网的拨号连接被看做一根简单的“线路”。在这个意义上,因特网虚拟化了电话网,将电话网看成为两台因特网主机之间提供链路层连接的链路层技术。
多协议标签交换(MPLS)网络。与电路交换的电话网不同MPLS客观上讲是一种分组交换的虚电路网络。它们有自己的分组格式和转发行为。因此,从教学法的观点看,有关MPLS的讨论既适合放在网络层的学习中,也适合放在链路层的学习中。然而,从因特网的观点看,我们能够认为MPLS像电话网和交换以太网一样,作为为IP设备提供互联服务的链路层技术。因此,我们将在链路层讨论中考虑 MPLS。帧中继和ATM网络也能用于互联IP设备,虽然这些技术看上去有些过时(但仍在部署)。
多协议标签交换
通过采用虚电路网络领域的一个关键概念一一固定长度标签,多协议标签交换(Mulprotocol Label Switching,MPLS)自20世纪90年代中后期在一些产业界的努力下进行演化,以改善IP路由器的转发速度。其目标是:对于基于固定长度标签和虚电路的技术,在不放弃基于目的地IP数据报转发的基础设施的前提下,当可能时通过选择性地标识数据报并允许路由器基于固定长度的标签(而不是目的地IP地址)转发数据报来增强其功能重要的是,这些技术与IP协同工作,使用P寻址和路由选择。IETF在MPIS协议中统一了,这些努力有效地将虛电路技术综合进了路由选择的数据报网络。RFC3031,RFC3032
首先考虑由MPLS使能的路由器处理的链路层帧格式,以此开始学习MPLS。
在MPLS使能的路由器之间传输的一个链路层帧,该帧具有一个小的MPLS首部该首部増加到第二层(如以太网)首部和第三层(即IP)首部之间。RFC3032定义了用于这种链路的MPLS首部的格式;用于ATM和帧中继网络的首部也定义在其他的RFC文档中。包括在MPIS首部中的字段是:标签,它起着虚电路标识符的作用;3比特的实验字段(保留用于实验);单比特S字段用于指示一系列“成栈”的 MPIS首部的结東;以及寿命字段。
一个MPHS加强的帧仅能在两个均为MPLS使能的路由器之间发送。一个MPIS使能的路由器常被称为 标签交换路由器( label-switched router),因为它通过在其转发表中查找MPIS标签,然后立即将数据报传递给适当的输出接口来转发MPLS帧。因此,MPLS使能的路由器不需要提取目的IP地址和在转发表中执行最长前级匹配的查找。
近年来,因特网公司如谷歌、微软已经构建了大量的数据中心。每个数据中心都容纳了数万至数十万台主机,并且同时支持着很多不同的云应用(例如搜索和电子商务)。每个数据中心都有自己的 数据中心网络( data center network),这些数据中心网络将其内部主机彼此互联并与因特网中的数据中心互联。
数据中心中的主机称为 刀片( blade),与比萨饼盒类似,一般是包括CPU、内存和磁盘存储的商用主机。主机被堆叠在机架上,每个机架一般堆放20-40台刀片。在每一个机架顶部有台交换机,这台交换机被形象地称为 机架顶部交换机( Top of Rack,TOR),它们与机架上的主机互联,并与数据中心中的其他交换机互联。具体来说,机架上的每台主机都有块与TOR交换机连接的网卡,每台TOR交换机有额外的端口能够与其他TOR交换机连接。尽管目前主机通常有1Gbps的以太网与其TOR交换机连接,但10Cbp5的连接也许成为标准。每台主机也会分配一个自己的数据中心内部的IP地址。
数据中心网络支持两种类型的流量:在外部客户与内部主机之间流动的流量,以及内部主机之间流动的流量。为了处理外部客户与内部主机之间流动的流量,数据中心网络包括了台或者多台 边界路由器( border router),它们将数据中心网络与公共因特网相连。数据中心网络因此需要将所有机架彼此互联,并将机架与边界路由器连接。 数据中心网络设计( data center network design)是互联网络和协议设计的艺术,该艺术专注于机架彼此连接和边界路由器连接。
一个云数据中心,如一个谷歌或者微软的数据中心,能够同时提供诸如搜索、电子邮件和视频应用等许多应用。为了支持来自外部客户的请求,每一个应用都与一个公开可见的IP地址关联,外部用户向该地址发送其请求并从该地址接收响应。在数据中心内部,外部请求首先被定向到一个 负载均衡器( load balancer)。负载均衡器的任务是向主机分发请求,以主机当前的负载作为函数来在主机之间均衡负载。一个大型的数据中心通常会有几台负载均衡器,每台服务于一组特定的云应用。由于负载均衡器基于分组的目的端口号以及目的IP地址做决策。一旦接收到一个对于特定应用程序的请求,负载均衡器将该请求分发到处理该应用的某一台主机上(该主机可能再调用其他主机的服务来协助处理该请求)。当主机处理完该请求后,向负载均衡器回送响应,再由负载均衡器将其中继发回给外部客户。负载均衡器不仅平衡主机间的工作负载,而且还提供类似NAT的功能,将外部IP地址转换为内部适当主机的IP地址然后将反方向流向客户的分组按照相反的转换进行处理。这防止客户直接接触主机,从而具有隐藏网络内部结构和防止客户直接与主机交互等安全性益处。
对于仅有数千台主机的小型数据中心,一个简单的网络也许就足够了。这种简单网络由一台边界路由器、一台负载均衡器和几十个机架组成,这些机架由单一以太网交换机进行互联。但是当主机规模扩展到几万至几十万的时候,数据中心通常应用 路由器和交换机等级结构( hierarchy of router and switch)。在该等级结构的顶端,边界路由器与接入路由器相连(在图5-30中仅仅显示了两台,但是能够有更多)。在每台接入路由器下面、有3层交换机。每台接入路由器与一台顶层交换机相连,每台顶层交换机与多台二层交换机以及一台负载均衡器相连。每台二层交换机又通过机架的TOR交换机(第三层交换机)与多个机架相连。所有链路通常使用以太网作为链路层和物理层协议,并混合使用铜缆和光缆。通过这种等级式设计,可以将数据中心扩展到几十万台主机的规模。因为云应用提供商持续地提供高可用性的应用是至关重要的,所以数据中心在它们的设计中也包含了冗余网络设备和冗余链路。
因为数据中心的一个关键需求是放置计算和服务的灵活性,所以支持主机到主机的高带宽通信十分重要。例如,一个大规模的因特网搜索引擎可能运行在跨越多个机架的上千台主机上,在所有主机对之间具有极高的带宽要求。类似地,像EC2这样的云计算服务可能希望将构成用户服务的多台虚拟机运行在具有最大容量的物理主机上,而无需考虑它们在数据中心的位置。如果这些物理主机跨越了多个机架,前面描述的网络瓶颈可能会导致性能不佳。
为了降低数据中心的费用,同时提高其在时延和吞吐量上的性能,因特网云服务巨头都在不断地部署新的数据中心网络设计方案。尽管这些设计方案都是专有的,但是许多重要的趋势是一样的。
其中的一个趋势是部署能够克服传统等级设计缺陷的新型互联体系结构和网络协议。一种方法是采用 全连接拓扑( fully connected topology)来替代交换机和路由器的等级结构。在这种设计中,每台第一层交换机都与所有第二层交换机相连,因此:①主机到主机的流量绝不会超过该交换机层次;②对于n台第一层交换机,在任意两台二层交换机间有a条不相交的路径。这种设计可以显著地改善主机到主机的容量。这种设计不仅减轻了主机到主机的容量限制,同时创建了一种更加灵活的计算和服务环境。在这种环境中,任何未连接到同一台交换机的两个机架之间的通信在逻辑上是等价的,而不论其在数据中心的位置如何。
另外一个主要的趋势就是采用基于船运集装箱的 模块化数据中心( Modular Data CentMDC)。在MDC中,在一个标准的12米船运集装箱工厂构建一个“迷你数据中心”并将该集装箱运送到数据中心的位置。每一个集装箱都有多达数千台主机,堆放在数十台机架上,并且紧密地排列在一起。在数据中心位置,多个集装箱彼此互联,同时也和因特网连接。一且预制的集装箱部署在数据中心,通常难以检修。因此,每一个集装箱都得体地设计为性能下降:当组件(服务器和交换机)随着时间的推移出现故障时,集装箱继续运行但是性能下降。当许多组件出现故障并且性能已经下降到低于某个國值时,整个集装箱将会被移除,并用新的来替换。创建由集装箱构成的数据中心提出了新的联网挑战。对于MDC,有两种类型的网络:每一个集装箱中的内部网络和互联每个集装箱的核心网络。在每个集装箱内部,在规模上升到数千台主机的时候,通过廉价的商用吉比特以太网交换机创建全连接的网络(如前面所描述)是可行的。然而,核心网络的设计仍然是一个带有挑战性的问题,这需要能互联成百上千的集装箱,同时能够为典型工作负载提供跨多个集装箱的主机到主机间的高带宽。Farrington2010中提出了一种互联集装箱的混合电/光交换机体系结构,当采用高度互联拓扑的时候,一个主要的问题是设计交换机之间的路由选择算法。种可能是采用随机路由选择方式。另一种可能是在每台主机中部署多块网络接口卡,将每台主机连接到多台低成本的商用交换机上,并且允许主机自己在交换机间智能地为流量选路。这些方案的变种和扩展正被部署在当前的数据中心中。
链路层的基本服务是将网络层的数据报从一个结点(主机、交换机、路由器,WiFi接人点)移动到一个相邻的结点。在通过链路向相邻结点传输之前
所有链路层协议都是通过将网络层数据报封装在链路层帧中来操作的。然而,除了这个共同的成帧功能之外,不同的链路层协议提供截然不同的链路接入、交付和传输服务。造成这些差异的部分原因是链路层协议必须工作在很多种链路类型上。一个简单的点对点链路具有单个发送方和接收方,并通过单一“线路”通信。一个多路访问链路在许多发送方和接收方之间共享;因此,对多路访问信道的链路层协议有一个协调链路接入的协议(它的多路访问协议)。在MPIS的情况下,连接两个相邻结点的“链路”,其本身可能实际上就是一个网络。
在链路层通信所依据的原理中,我们研究了差错检测和纠正技术、多路访问协议、链路层寻址、虚拟化(VLAN)以及扩展的交换局域网和数据中心网络的构造方法。今天对链路层的许多关注在于这些交换网络。在差错检测/纠正场景中,为了对帧通过链路传输时可能发生的比特翻转进行检测并在某些情况下进行纠正,在帧的首部增加附加比特的方法。简单的奇偶校验和检验和方案,以及更健壮的循环冗余检测。
协调访问广播信道的3大类方法:信道划分方法(TDM、FDM)、随机接入方法( ALOHA协议和CSMA协议)和轮流方法(轮询和令牌传递)。电缆接入网,发现它使用了多种这些多路访问方法。让多个结点共享单个广播信道的结果,是需要在链路层提供结点地址。物理地址和网络层地址是非常不同的,而且在因特网场景中,一个专门的协议(ARP,即地址解析协议)用于在这两种寻址形式之间进行转换,并且详细学习了极为成功的以太网协议。然后研究了共享一个广播信道的结点是怎样形成一个局域网的,以及多个局域网怎样能够互联形成一个更大的局域网,即互联这些本地结点完全不需要网络层路由选择的干预。多个虚拟局域网是怎样能够产生一个单一的物理局域网体系结构的。
通过关注当MPLS网络互联P路由器时是如何提供链路层服务的和展望今天用于大型数据中心的网络设计。
通过识别在获取一个简单的Web网页时所需要的许多协议,联通了应用层,运输层、网络层、链路层。