介质访问控制MAC以及ALOHA协议

时间:2024-04-14 16:37:36
介质访问控制MAC以及ALOHA协议
        在数据链路层种分两个子层:介质访问控制层(MAC)和逻辑链路控制层(LLC). LLC 层是给高层提供接口并执行流量控制和差错控制的,MAC层主要负责寻址,差错检测以及介质访问控制。LLC层在上,MAC在下。流量控制,差错控制在我之前的博客中都已经讲过了,有兴趣的可以查看一下,那么什么是介质访问控制呢?介质访问控制是指将传输介质带宽有效分配给网上各站点用户的方法。
        如上图,我们知道在有线局域网中多个主机共享一个线路,这叫做复用。那么所有主机都可以在任何时间访问这条线路吗?显然是不能的。在任意时间里面,都只能有至多一个主机访问这个线路,否则会造成冲突,错帧。这就涉及到了竞争,什么时候一个用户才能抓到线路的使用权。
        我认为对于这类的竞争信道,对于任何一个主机,应该重点考虑三个问题:第一,什么时候我可以访问信道?这涉及到访问时机的问题。第二是冲突的检测。因为冲突是很难避免的,必须有必要措施能检测到冲突,这对于进一步处理这个冲突是必要的。第三是冲突处理。冲突之后应该怎么去处理这个冲突?这都是协议应该考虑的问题。
        
        所以ALOHA协议应用而生。ALOHA协议是以70年代夏威夷通信系统为雏形,当时夏威夷大学的研究人员希望把偏僻岛屿上面的用户连接到檀香山的主计算机上面,但是就会产生上面说的那种冲突。于是他们设计了一个ALOHA系统,也就是现在ALOHA协议的模型。
        ALOHA协议可以分成两种:纯ALOHA协议和分槽ALOHA协议。
        1.纯ALOHA协议的思想是: 不按照时间槽发送,不监听信道,随机重发。
介质访问控制MAC以及ALOHA协议
        纯ALOHA协议如上图所示:对于任何一个主机,发送之前是不监听信道的。也就是说,在任何一个主机发送消息之前,他并不会管自己和别人共享的这条信道上面有没有别人在发送,想发就直接发。第二,它的发送是不按照时间槽的。什么是时间槽?时间槽是在分槽ALOHA协议用到的概念,就是把信道使用分散到每个单位时间上,只有在每个时间槽开始的时候,才可以发送,时间槽内其他的时间不允许发送。在上面的图中,两个虚线之间就是一个时间槽,能看到它并不按照每个时间槽开始的时候发送,而是随机发送,也就是纯ALOHA协议不按照时间槽发送。第三就是随机重发。何为随机重发?当发送的时候发现冲突了,那么认为这个帧无效了,所以停止发送。随机等一段时间,再进行重发,这也就是随机重发。
        纯ALOHA协议的信道效率非常差,因为大家想发送就发送,那么肯定会有大量冲突,冲突之后再重发,再次浪费的几率也很大......具体来分析一下效率的话:假设所有主机都是一个标准长度,每个单位时间产生K次传输,并且服从泊松分布,平均为G帧/单位时间。假设一个帧的发送成功的概率为P0,那么平均的吞吐量为S= G *P0。对于任何一个帧,不产生冲突的概率是在它发送的瞬间t0时刻,在(t0-单位时间,t0+单位时间)里面没有其他帧传输。
        没有其他帧传输,也就是泊松分布中k=0的情况,在两个单位时间内,均值为2G,所以在两个单位时间内,产生k帧的概率为:
介质访问控制MAC以及ALOHA协议
        那么k=0不产生冲突的概率:
介质访问控制MAC以及ALOHA协议
        
        所以S=G *P0 = G *e^(-2G). 求导可得最大值为S=0.184,信道利用率才18%多一点。信道利用率这么差,所以想到了改进办法,分槽ALOHA协议。
        
        2.分槽ALOHA协议:在每个时间槽开始的时候发送,发送的同时检测冲突,如果发生冲突,那么在下一个时间槽重新发送。
        在分槽ALOHA协议中最重要的改进就是分槽。每个帧的时间长度要小于一个时间槽的长度,这样一旦冲突,退后到下一个时间槽就可以了。其他的和纯ALOHA协议几乎是一样的。它的信道利用率明显变高,原因是冲突变成了只有在一个时间槽内发生,那么期望从2G变成了G.所以在单个时间槽内不发生冲突的概率从e^(-2G)变成了 e^(-G)。所以S=G *P0 = G *e^(-G). 求导可得最大值为S=0.368,信道利用率提升到37%。
        使用分槽ALOHA的关键是必须分槽,在每个时间槽的开始那一瞬间才可以发送。这也就意味这所有用户必须同步,时间槽同步,这也是分槽ALOHA的难点。但是它的优点就是信道的利用率高了,是原来纯ALOHA协议的两倍。

        那么还可以从哪些方面减少冲突,提升利用率呢?我们是不是可以在发送之前先听一下信道,如果忙就先不发送呢?以及,如果发送之后发现冲突,能不能把随即后退编程后退成一个不至于大家再次发送会再冲突的协议呢?这就是实际中在MAC层我们使用的大名鼎鼎的CSMA/CD协议,它的思想就是基于ALOHA协议的思想发展而来的,所以想了解CSMA一定要先了解ALOHA协议。
        有关CSMA,CSMA/CD协议我博客也有具体的文章来解释他们,以及他们和CSMA/CA对的区别,欢迎大家来指正!
        
        延伸阅读