3.5.2_1 随机访问介质访问控制
在这个小节中,我们要介绍随机访问、介质访问控制。在考研大纲当中,要求我们掌握这样的几种介质访问控制方式。分别是信道划分、随机访问和轮询访问。
采用随机访问的这种策略去实现介质访问控制,我们需要了解ALOHA、CSMA以及CSMA/CD,CSMA/CA这几种协议,在这个视频中,我们先探讨前两种协议。
世界上最早的一个随机访问介质访问控制协议是ALOHA协议,它诞生于1968年。发明这个通信协议的人来自美国的夏威夷大学,当时这一帮人希望构建一个可以连接夏威夷地区的网络,取这一串英文的首字母,于是就把这个协议称为ALOHA。另一方面ALOHA这个词在夏威夷语里边也是当地人见面的一个常用的问候语,表示爱、感情、和平、同情等等。所以,来自夏威夷大学的这个团队提出的ALOHA协议,其实除了这几个英文单词的缩写之外,相信也结合了当地的文化背景。ALOHA协议又可以分为纯ALOHA和时隙ALOHA两种类型,ALOHA这种协议开创了介质访问控制的新的思路,也就是允许各个节点随机的去访问信道。后来,随着技术的发展,ALOHA协议又进化成了CSMA协议,这种协议在ALOHA协议的基础之上加入了载波监听的机制,一会儿我们会展
开来探讨。根据CSMA协议的实现细节的不同,又可以把它划分为1-坚持、非坚持和p-坚持 CSMA。再往后,基于CSMA协议,又进一步的发展出用于早期有线以太网的CSMA/CD协议,以及用于无线局域网,也就是大家熟悉的,WIFI的这种CSMA/CA协议,在历年的考研真题中CSMA/CD是最常考的,其次是CSMA/CA。ALOHA协议和CSMA这两种协议我们主要了解他们的理念思想,对于这两种协议的细节,不需要过度的深究。
首先我们看纯ALOHA和时隙ALOHA,这给大家整理了这两种ALOHA协议的流程图。首先来看纯 ALOHA协议,这种协议很简单粗暴,如果几个节点共享一个信道,其中的某一个节点,它一旦准备好数据帧之后,就可以立刻把数据帧发送到这个信道上,如果有两个节点同时准备好了数据帧,并且同时再往信道上发送各自的数据帧,那么两个节点之间肯定会产生冲突,也就是信号和信号之间彼此相互干扰,最终导致数据的接收方收到错误的信息。在这种有可能发生冲突的情况下,为了保证数据帧的传输是可靠的。因此,我们需要在纯ALOHA协议当中引入ACK确认机制,大家可以结合我们之前学习的停止等待协议来理解。如果一个结点把数据帧发送到信道上,它会等待数据的接收方返回ACK,如果超时没有收到ACK,数据的发送方就会随机等待一段时间之后,再尝试重传这个数据帧,这是超时重传机制。数据的发送方如果能够收到ACK,就会进入到下一个帧的传输,一旦下一个帧准备好之后,又会把下一个帧立刻发送到这个信道上。
这儿给大家画了一个纯ALOHA协议的示意图,假设最下方图是一条广播信道,有A、B、C、D这样的四个节点,分别对应四条横线,这四条横线的横轴方向表示的是时间t增长的方向。首先假
设绿方格开始这一时间点,A节点准备好了一个数据帧,我们把这个数据帧命名为a_1,刚才我们说过,在纯 ALOHA协议当中,一旦准备好了一个数据帧,这个节点就会立刻把数据帧发送到信道上,所以从这个时间点开始A节点会把信号打到广播信道上。我们不妨假设在这段时间之内,其他任何一个节点都不会往这个广播信道上发送数据帧。因此A结点的a_1数据帧在整个传输的过程中不会发生信号冲突,当整个数据帧传输完成之后A节点就可以撤销相应的信号。
随着时间的推移,我们假设在上图1红点这个时间点B节点准备好了b_1这个数据帧,当这个数据帧准备好了之后,它就会立即把这个数据帧的信号发送到信道上,与此同时在b_1这个数据帧还没有传输完成的时候,我们假设上图2红点这个时间点C节点也准备好了想要发送的数据帧叫做c_1,当c_1这个数据帧准备好了之后,它就会立即把数据帧的信号发送到信道上,C结点发出的信号和B 结点发出的信号就会有冲突,而这种信号的冲突又会导致两个数据帧的某一些比特发生错误。比如说b_1数据帧最后一段和c_1数据帧的开头一段,很有可能会因为信号冲突而导致比特错误。之前我们学过差错控制的原理,如果一个帧的内部有比特错,这个帧的接收方会检测出这种比特错误,并且把有错误的帧给丢弃。同时,基于停止等待协议的思想,接收方把错误帧丢弃之后不会给数据的发送方返回ACK,因此节点B迟迟没有收到ACK,就知道b_1这个帧发送失败了。在这种情况下,基于纯ALOHA协议的规则,发送节点会随机等一段时间之后再尝试重传。类似的道理,节点 C也会因为迟迟没有收到c_1帧的ACK而发现c_1这个帧已经传送失败了。因此C节点也会随机等待一段时间之后,再尝试重发c_1这个帧,在另一个时刻,D节点准备好了d_1这个帧,并且会立即把d_1帧发送到广播信道上,在这个帧发送的过程当中,并没有其他节点传输别的帧,因此d_1这个帧可以传输成功。回到B节点,b_1这个帧传输失败之后,随机等待了一段时间,在另一个时间点重发b_1这个帧,与此同时,A节点又准备好了a_2,这两个帧的传输信号在信道上又会有一段重合的时间,也就是会发生冲突。因此a_2这个帧和b_1这个帧又会传输失败,二者又需要随机的再等待一段时间再重新发送,再回到C这个节点,刚才我们说c_1这个帧传输失败,随机等待一段时间之后,在另一时间点重新传输c_1帧,这次传输和其他的帧并没有时间上的重合,因此c_1 这个帧重传可以成功。有必要解释一下,为什么每个帧需要随机等一段时间之后再重新尝试重传?思考这样的一个问题,如果一个帧传输失败之后,我们只等待固定的一个时间,而不是随机的一个时间,是不是意味着比如说b_1和c_1这两个帧,它们俩传输失败之后都需要等待固定的时间。在这种情况下,两个帧的下一次重传肯定也会发生冲突,如果我们让每个帧发送失败的时候,随机等待的时间的长短是不一样的,那么各个帧重新发送的这个时间就有可能把它们错开。所以在ALOHA协议当中,如果一个帧发送失败,它的下一次重传,我们需要用某一种随机算法去确定一个重传时间,这样可以使得发生冲突的两个帧,在下一次重传的时候,尽可能的让他们把时间给错开,这就是为什么要随机等一段时间的原因,这是纯ALOHA协议。
接下来看时隙ALOHA协议,相比于纯ALOHA,时隙ALOHA会规定时隙的大小,并且大小是固定的。
我们结合这张图来理解,同样A、B、C、D四个节点连接在同一条广播信道上,对于时隙ALOHA协议来说,会把时间切分为固定大小的时隙,一小格就是一个时隙,一个节点可能在任何时候准备好接下来要发送的数据帧,但是这个数据帧准备好之后,不可以立即发送到信道上,而是需要在接下来的时隙当中把它发送到信道上,比如A这个节点,在某一时刻准备好了a_1这个帧,但是这个帧需要到接下来的时隙当中去发送,其他几个帧的发送都是一样的。所以在时隙ALOHA协议当中,如果一个节点准备下一个数据帧,这个数据帧会在最近的一个时隙才发送到信道上,时隙的大小是固定的,并且一个时隙一定可以传输完整个帧。从上图例子中可以看到A、B、C、D这几个节点,分别准备好a_1、a_2、b_1、c_1、d_1 这几个帧之后,他们并不会立即把帧发送到信道上,而是会在下一个完整的时隙当中,再把这个帧发出去,和纯ALOHA协议对比,会发现采用时隙ALOHA协议之后,这些帧的发送过程就没有发生冲突。因此,时隙ALOHA协议避免了用户发送数据的随意性,相比于纯ALOHA协议来说,降低了冲突的概率,从而也提升了信道的利用率。
当然时隙ALOHA协议也有可能会发生冲突,比如我们让C节点在某一时刻准备好c_2这个帧,c_2 帧的发送和a_2帧的发送就会刚好碰在同一个时隙当中,此时这两个帧就发生了冲突,发生冲突之后A、C这两个节点会分别随机的等待一段时间,然后再尝试重新发送各自的数据帧。所以时隙ALOHA也会发生冲突,只不过发生冲突的概率要比纯ALOHA要更小。
接下来我们介绍CSMA协议,中文译名是载波监听多路访问协议。在考试当中,通常直接使用CSMA这种英文缩写,很少使用中文的译名。CSMA协议相比于ALOHA协议来说,有一个重要的新特性被引入了,就是监听。在CSMA协议当中,我们会要求各个节点在发送数据之前需要先监听一下信道是否空闲,只有信道空闲的时候,才会尝试去发送数据,相比之下ALOHA协议在发送数据之前并不会去监听,并不会去检查信道上有没有其他节点的数据。
我们不妨用耳朵的图标去表示各个节点监听信道的特性。在硬件层面,如果要支持CSMA协议,网络适配器也就网卡上需要安装一个载波监听装置,这个装置可以用于监听信道上有没有其他节点正在发送的数据。比如说现在B这个节点正在往信道上发送数据,与此同时A这个节点也想要发送数据,但是在发送数据之前,他会先监听信道,发现信道上有其他节点发出的数据,或者说信号,A节点会暂时不发送数据,等信道空闲了再发,所以CSMA协议就像是一群有礼貌的人在进行对话,就是每一个人在开口说话之前会先听一下有没有其他人正在说话,如果其他人正在说话,等他说完我再说,相比之下ALOHA协议就是一群无理的匹夫在对话,不管此时有没有其他人正在说话,反正只要我有话想说,就会立刻开始发言。这是CSMA协议和ALOHA协议的一个显著区别。CSMA 协议又可以进一步的分为1-坚持CSMA、非坚持CSMA以及p-坚持CSMA。分别看一下这三种CSMA协议的区别,先看最简单的一种。
叫做1-坚持CSMA协议。假设现在B节点正在发送数据帧,也就是说正在使用信道,此时如果A节点准备好了接下来要发送的数据帧,它在发送数据帧之前会先监听信道,如果此时信道不空闲,A节点会坚持监听信道,监听的动作会一直持续,直到发现某一个时刻信道上的信号已经被撤销了,此时信道空闲了,这个节点就会立刻把自己想要发的数据给打到信道上,A节点的数据帧发出去之后可能传输成功,也可能传输失败,如果传输成功,比如说A节点收到了刚才发出去的数据帧的 ACK,A节点就可以去准备下一个数据帧,然后用同样的方法去发送下一个数据帧。当然传输有可能会失败,比如说同样是刚才那个故事,B节点首先在信道上发送数据,与此同时A节点准备好了下一个数据帧,准备好数据帧之后就会开始监听信道,看他什么时候空闲,另一方面C节点也准备好了下一个数据帧也在同时监听这个信道,当B节点发完自己的数据帧之后,A和C同时会感知到信道的空闲,于是A结点和C结点会同时往信道上发送自己的数据,此时A结点和C结点就冲突了,于是这两个节点发送的数据帧就有可能传输失败,传输失败之后,这两个节点会随机推迟一段时间之后再重新尝试重传。关于为什么要随机推迟一段时间,原因和ALOHA协议是一样的,因为A和C同时发送数据,并且同时发生了数据的冲突,如果他们俩发送失败之后,推迟重发的时间是一样的,下一次他们俩重发的时候肯定也会冲突,因此发生冲突的这些节点,需要采用某一种随机算法去计算出一个随机值,各自推迟不同的时间,再去尝试重传,这样就可以降低重传的时候,再一次发生冲突的概率。所以推迟重传的时间应该是随机的,各个节点推迟的时间不相同,如果一个结点要重传数据帧,推迟的时间到点了之后,做的事情和发一个新的数据帧是一样的,它也会重新开始监听这个信道,并且如果信道不空闲,就会坚持监听,一旦发现信道空闲,又会立刻把这个数据帧重传到信道上,这是1-坚持CSMA协议。根据刚才的分析,不难得出这样的结论,这种协议的优点就是
信道的利用率高。因为所有的节点在准备好数据之后,就会开始监听这个信道,一旦信道空闲下来,并且某一个节点已经有准备好的数据帧,这个节点就会立即把信道再一次给用起来,所以信道的利用率是比较高的,这是它的优点。它的缺点就是刚才我们说的那种情况,如果多个节点都已经准备好了数据,并且这些节点都在同时监听信道的时候,一旦这个信道空闲下来,就会有多个节点同时发送数据,在这种情况下,冲突的概率就会增大,怎么解决这个缺点呢?接下来,我们把这种协议进行改造,提出非坚持CSMA。
这两个图会发现只有左边部分的流程是不一样的,其他部分完全一致,接下来我们重点关注左边部分,在非坚持CSMA协议当中,数据帧被准备好之后,在发送之前需要先监听信道,如果信道此时不空闲,会放弃监听信道,并且随机推迟一段时间,过一段时间之后再尝试去监听信道,用这样的策略可以减少冲突的发生,这么说可能比较抽象,还是用刚才那个例子。假设现在B节点正在往信道上发送数据,与此同时,A节点准备好了下一个数据帧,准备数据帧之后,会开始监听信道,另一方面C节点也准备好了下一个数据帧,它也会监听信道,基于非坚持CSMA协议的规则,这两个节点此时去监听信道,会发现信道是不空闲的,一旦发现信道不空闲,这两个节点就会放弃去监听
信道,并且会随机推迟一段时间,比如说C这个节点发现现在信道是忙碌的,随机往后推迟十秒钟,十秒钟以后再来看信道有没有空闲,而A这个节点它也随机往后推迟了几秒,不过它的随机时间可能是三秒,三秒之后来检查一下信道有没有空闲,这样的话就意味着三秒之后,如果信道空闲了,A这个节点就可以去使用信道,而十秒之后C节点才会再重新检查这个信道,也就是说,因为这种随机推迟一段时间的策略A和C这两个节点,下一次去监听信道的时间是不一样的,这样的话就可以让这两个结点发生冲突的概率降低。所以非坚持CSMA协议,解决了1-坚持CSMA协议的缺点。刚才我们说的是信道不空闲的情况,如果信道空闲的话,和1-坚持CSMA一样,节点会立刻把数据帧发送到信道上,从图中左边部分,大家应该可以看出为什么这种协议称为非坚持的协议,因为在这种协议中,如果信道不空闲,各个节点并不会坚持监听信道,而是会放弃监听信道,所以叫非坚持的CSMA协议。相比之下CSMA协议当中,如果信道不空闲,节点会坚持监听,直到信道空闲,然后立刻发送数据帧,所以这是坚持和非坚持两个定语的含义。结合刚才的例子,我们能体会到这种协议的优点就是:当多个节点都已经准备好数据,但是信道还没有空闲的时候,由于各个节点检测到信道不空闲,会分别随机推迟一段时间,因此这种随机推迟的策略可以使各个节点错开发送数据,从而降低冲突的概率,这是它的优点。与此同时也带来了一个缺点,就是在刚才这种情况下,有可能信道刚恢复空闲的时候,并不会被立即使用,导致信道的利用率降低,什么意思呢?像刚才说B节点正在使用信道,A和C监听信道都发现信道在忙,A随机推迟到三秒以后再来检查信道,而C随机推迟到十秒以后再来检查信道,是不是有可能在一秒到三秒这个期间内,其实节点B已经把这个信号撤销了,也就是说这段时间信道是闲置的,这段时间没有被立即利用起来,同样的道理,如果A这个结点,它在三秒到四秒这段时间内传输数据,在四秒以后信道又空闲了,接下来 C这个节点要等到十秒之后才会开始利用信道,所以四秒到十秒,这段时间信道资源又闲置了,所以这种非坚持的策略带来了优点的同时,也导致了一些缺点,可能会使得信道利用率降低。怎么办呢?不妨把1-坚持和非坚持进行一个中和,提出一种p-坚持CSMA协议。
p-坚持CSMA协议,只有图中红色框框部分和1-坚持是不一样的。首先和1-坚持CSMA协议一样,在p-坚持协议当中,一个节点准备好数据之后会监听信道,如果信道不空闲,这个节点会坚持监听,所以他有坚持监听的特性,直到发现信到空闲的时候,会有这样的两种可能性发生,首先有p 这么大的概率,会立即把数据帧发送到信道上,另外有1-p的概率会推迟一段时间,再尝试发送。
结合一个例子来理解,假设B节点正在信道上发送数据,与此同时A节点准备好了下一个数据帧,开始监听信道,C节点也准备好了下一个数据帧,同时也会监听信道,无论是哪个节点都会发现,此时信道是不空闲的,但是他们会坚持监听,直到发现信道空闲为止。假设在之后的某一个时刻B 结点撤销了自己的信号,此时两个结点都发现信道空闲了,接下来我们不妨假设概率p等于二分之一,1-p也等于二分之一,也就是说,当他们俩都发现信道空闲的时候,每一个节点有二分之一的概率可能会立即把数据发送到信道上,也有二分之一的概率会尝试着推迟一段时间再重新发送,不妨假设A这个节点,用某一种算法刚好确定了这一次刚好落在了立即发送的选项上,所以A节点会立即把自己准备好的数据帧打到信道上,与此同时C节点会尝试推迟一段时间再发送,不妨假设C 这个节点会推迟三秒,A节点发送数据帧两秒之后,数据帧就发完了,所以A节点会撤销信号,接下来到第三秒的时候C节点又会重新尝试监听信道,发现此时信道空闲,并且这次假设C节点以二分之一的概率抽中了立即发送选项,此时C节点会把自己的信号打到信道上,从刚才例子当中不难看到,p-坚持CSMA协议属于1-坚持CSMA和非坚持CSMA的折中方案。如果有多个节点同时准备好了数据,在信道空闲的情况下,各个节点不一定同时发出自己的数据,这样可以降低冲突的概率,同时p-坚持也解决了非坚持协议当中信道利用率低、信道可能会长时间闲置的问题。现在大家
应该能够感受到p-坚持的这个p是什么意思了。就是当一个节点发现信道空闲的时候,会以概率p去把数据帧发送到信道上,同时会以概率1-p推迟一段时间再去尝试发送,因此p这个前缀指的是信道空闲的时候,立即把数据帧发出去的这种概率,类似的道理,1-坚持的这个1表示的就是当信道空闲的时候,是以概率1去立即把数据帧发送到信道上。如果用同样的逻辑去给非坚持CSMA改一个名字的话,我们不妨把它加一个前缀,变成1-非坚持CSMA协议,这样有助于大家记忆,可以把非坚持CSMA记作是1-非坚持CSMA,这个1的含义就是当信道空闲的时候,会以概率1把这个数据帧立即发送到信道上,另一方面,非坚持和坚持这两个定语指的是当信道不空闲的时候,到底要不要坚持去监听信道,如果不坚持监听信道,会选择随机推迟一段时间再来尝试监听信道。
在这个视频中,我们先介绍了ALOHA和CSMA这两大类协议。ALOHA协议在发送数据之前不会监听信道是否空闲。ALOHA分为纯ALOHA和时隙ALOHA,后者比前者发生冲突的概率更低。CSMA协议当中介绍了1-坚持、非坚持和p-坚持这样的三种方案,其中非坚持这种方案为了方便记忆,可以把它记作是1-非坚持,就是把三者的命名规律统一一下,前面的这个1或者p指的是当监听到信道空闲的时候,到底以多大的概率去立即发送帧,而第二个定语坚持和非坚持指的是当信道不空闲的时候,到底要不要坚持监听信道。大家可以结合这张图进行回顾。
以上就是这个视频的全部内容。