【计算机网络】Data-Link Layer-Ⅱ
MAC子层.
本篇我们主要介绍DLL的MAC子层,前面我们说过,IEEE曾经将DLL分为LLC和MAC两个子层,但LLC已经成为历史,所以不再继续介绍,而主要将关注点放在MAC子层上。首先我们需要清楚的三个概念,关于数据的通信方式有三种单播(unicast)、广播(broadcast)和组播(multicast)。单播是一对一的通信,广播是一对所有的通信,而组播是一对一组的通信。而我们在局域网中为了降低传输成本,采用了共享介质的策略,从而也就决定了数据通信方式通常是广播方式。那么广播方式会带来一个问题:有多个站点同时表示希望发送数据,要求占用信道,应该允许哪一个来使用呢?显然我们不可能让这些希望发送的站点全部一拥而上,这会造成必然的冲突。所以,我们在局域网中需要使用介质的多路访问控制机制,来决定谁是信道的下一个使用者。从某种程度上来说,介质的多路访问控制机制也就是信道分配机制。这个名词是不是有些熟悉,我们前面提到的FDM、TDM都是信道的分配方式,但我们也曾经说过,FDM和TDM都是静态的分配,分配好了之后就不会因为该用户发送数据少而减少对他的分配,也不会因为某一个用户发送需求大而增加对他的分配。这样的静态分配机制无法满足我们的要求,所以我们希望信道的分配是动态的,能够根据当前用户使用信道的情况来进行分配,做到因地制宜,而非画地为牢。下图中我们给出静态分配信道的特点,包括它的缺点以及使用情况。
信道的动态分配.
我们通过多路访问协议来进行信道资源的动态分配,提高信道的利用率,下图中是一些常用的多路访问协议,我们也是按照这个顺序来介绍这几个协议的:
1.纯ALOHA协议.
ALOHA协议由Norman Abramson及其同事设计,这个协议有两个版本:纯ALOHA协议以及分隙ALOHA协议。后者是前者的改良版,拥有更高的信道利用率。纯ALOHA协议的工作原理如下图所示:
在进行纯ALOHA协议的性能分析之前,我们需要引入一些概念:
另外我们需要知道一个帧的冲突危险期是多久,顾名思义冲突危险期就是一个帧很有可能和别的帧发生冲突的时期。假设我们在t时刻发送一个帧,这个帧在t+t时刻发送完毕,那么这个帧很可能和信道中已经存在的帧发生冲突,也就是那些[t,t+t]时间区间内已经在信道内的帧。在接下来的一个t内,这个帧还有可能被冲突——如果一个站点在t+t时刻发送一个帧,并且在t+2t时刻完成,那么这个帧就会与我们前一个发送的帧发生冲突,所以,我们说纯ALOHA协议的冲突危险期是两个时隙2t.下面我们给出纯ALOHA协议信道利用率的推导:
可以看出,纯ALOHA协议的信道利用率相当地低,原因就在于这种"想发就发"的任性机制导致了太多的冲突,从而引发后续的重传、再冲突、再重传。于此基础上,我们提出了纯ALOHA协议的改良版——分隙ALOHA协议。
2.分隙ALOHA协议.
分隙ALOHA协议将时间分成时隙(通俗地说也就是一个个时间片),并且每一个时隙的长度对应于一帧的传输时间。虽然每个站点新帧的产生时间是随机的,但分隙ALOHA协议并不允许像纯ALOHA协议那样的任性发送方式,而是规定帧只能在每一个时隙的起点发送,这样一来就将纯ALOHA协议中的2t冲突危险期缩短到了t. 冲突只会发生在时隙的起点,并且冲突的发生只会浪费一个时隙。一旦某个站占用时隙并且发送成功,那么这个时隙内就不会发生冲突。具体的示意图如下所示:
由于冲突危险期的折半,使得整个网络的吞吐量也得到了提升,因为只需要保证在一个帧时t内不会有新帧发送,所以分隙ALOHA协议的信道利用率达到了36.8%,是纯ALOHA协议的两倍。
3.CSMA协议.
CSMA是另一种随机访问协议,它是Carrier Sense Multiple Access的首字母缩略词,意为载波侦听多路访问,它对于ALOHA协议的侦听/发送策略做出了改进。ALOHA协议其实并没侦听信道当前情况这一环节,纯ALOHA协议中一旦有帧就会发送,分隙ALOHA也只是规定只能在时隙开始时发送。而CSMA则是采用"先听后发"的策略,首先对于信道的使用情况进行侦听,如果信道空闲就执行发送;如果信道忙,就采取适当的回避措施(具体的各种CSMA协议有不同的回避措施)。
首先我们介绍非持续式CSMA协议,它的工作流程是这样的:
- 如果侦听到介质空闲,就开始发送;
- 如果侦听到介质忙,则推迟一个随机分布的时间后,再次进行侦听。
这样的侦听策略很好地诠释了"非持续式",并且等待一个随机时间后再进行侦听可以减少碰撞冲突的可能性,但如果在等待时间内信道恢复空闲,那么这段时间就浪费了。
所以我们有持续式CSMA协议,持续式CSMA协议中,又存在P-持续和1-持续之分。我们先给出1-持续是P-持续的特例这一结论,后续进行论述,所以我们接下来对于P-持续进行介绍:
- 如果侦听到介质空闲,就以概率P发送一个帧,而以概率(1-P)推迟一个时间单元发送;
- 如果介质忙,就持续侦听,一恢复空闲就重复上一步;
- 如果发送已经推迟了一个时间单元,就再重复第一步;
- 如果发生冲突,等待一个随机分布的时间重复第一步。
之所以说1-持续是P-持续的特例,就是在1-持续中,第一步中的概率P=1,也就意味着一旦侦测到空闲就立刻发送。总体上来说持续式CSMA相较于非持续式CSMA有着更短的等待时间,但1-持续中也有着自己的问题:如果两个站点都在等着发送数据,那么一有空闲,它们都会选择发送,冲突是必然的了。
另外,我们需要指出的是,由于传输延迟的存在,并不是站点侦测信道空闲,就意味着发送出的数据不会产生碰撞冲突。我们看下图中的说明以及举例:
我们看到,图中A发送的数据尚未到达B时,B侦听得出信道空闲的结论,所以它决定发送自己的数据。但实际上,冲突就在"信道空闲"中发生了。
所以我们在持续式CSMA的基础上,加入冲突检测Collision Detection功能,构成了CSMA/CD协议。CSMA/CD的基本步骤和普通的CSMA并没有太大差别:
但为了实现CD功能,还是加入了下列这些动作的:
以太网Ethernet.
以太网在我们的参考模型中包含了物理层和数据链路层,它是一种计算机局域网技术,注意Ethernet是在实际生活中使用的具体实现,其标准是DIX标准(实际使用的). 下图中是以太网在参考模型中所处的位置:
以太网由Robert Metcalfe于1973年设计了雏形,采用曼彻斯特编码(新型的也有采用4B/5B编码),经典的以太网数据带宽在3M-10Mbps,如今已经不再使用了;现在使用的是交换式以太网,数字带宽从10M、100M到1G不等。下图中我们给出一些以太网的名称,以及IEEE关于以太网的命名规则:
IEEE802.3协议描述了运行在各种介质上1 Mb/s~10 Mb/s的1-持续CSMA/CD协议的局域网标准,但在我们上面给出的图中可以发现,以太网和802.3并不完全一致的,它们的帧格式有着细小区别。以太网中运行的是CSMA/CD协议,我们说过CSMA/CD协议在发生冲突后,会推迟一个随机生成数的时间再进行侦听与发送,以太网中采用的是二进制指数后退算法。
下面是对于二进制指数退避算法的一个优化思想:
前面我们说过以太网和802.3并不是完全相同的事物,它们的帧格式是存在去别的,我们在下图中给出:
主要有两个区别:第二字段帧开始字符的取值以及第五字段表示的具体含义。下图是IEEE802.3帧的具体格式:
其中前导码就是重复的1010比特序列,占满7个字节,帧起始字段1个字节,10101011;在上图的划分中,就是将帧起始字段的前6位归入先导中,没有什么本质的改变。
需要注意的是,我们这里讨论的地址都是48位的MAC地址,这个地址由IEEE分配,确保这个地址能够唯一标识一台主机,常见的MAC地址表示形式是点分十六进制,就是将48位划分成6组,每组用16进制表示,组与组之间用句点隔开。MAC地址是不可更改的,否则拿什么来唯一标识?
那么我们如何来区分一个帧是DIX以太帧还是802.3帧呢,只需要看第五字段的值,如果小于等于1536(0X600),就说明这是个802.3帧,反之它是一个DIX以太帧。细心的人可能观察到,数据字段有这样一句话"如果少于46个字节,则需要填充",也就是说数据段最少为46字节,那么整个帧的长度就至少为7+1+6+6+46+2+4=72字节,再除去前导码的8个字节,也就是64字节。那么为什么我们需要设定这样一个最小的帧长度呢?对于CSMA/CS熟悉的人可能很清楚,因为为了实现冲突检测的功能,发送有效帧的时间必须要大于等于冲突检测的时间,否则冲突还没检测到(站点认为无冲突),就发送了数据帧出去,网络情况直接反向俯冲,这就是最小帧长的意义。以下是64Byte这一数据的数值推导: