目录
一、理论基础
CSMA/CA分为两类,第一类是时分多路复用技术与CSMA/CD相结合的方式;第二类是二次检测避免冲突方式。下面分别介绍这两种方式。
第一类避免冲突的工作方式要点如下:每次传递结束后,立即把时间划分成时间片,这些时间片分属网络中各结点。结点根据时间片的先后发送信息,具有第一个时间片的结点首先发送,发送结束后,按优先权顺序把发送权交给具有第二个时间片的结点。轮到某个结点而该结点又无报文可发时,它的时间片就空闲不用。如果在时间片轮回一周后,所有结点都无报文可发,那么网络就返回到CSMA/CD方式,这时又按竞争方式获取信道。信道在CSMA/CD方式下使用一次后,系统又回到时间片方式。在这种可避免冲突的系统中,通常给某些结点以特殊的优先权,使它们总是能在第一个时间片发送信息。如果给它们的时间片没有使用,则重新在其他结点轮流分配时间片。在这种系统中,结点必须有能力完成时间片的同步,执行分配时间片的算法以及CSMA/CD方式的算法,因此,实现起来较复杂,价格也较贵。这种方法的优点是效率高。
第二类避免冲突的CSMA/CA技术,称为二次检测信道访问技术。这是一种与第一种方式完全不同的CSMA/CA技术。它由结点在发送信息前对介质进行两次检测来避免冲突的发生,其工作方式如下:准备发送信息的结点在发送前侦听介质一段时间(大约为介质最长传播延迟时间的2倍),如果在这一段时间内介质为“闲”,则开始准备发送,发送准备的时间较长,约为前一段侦听时间的2~3倍。准备结束后,真正要将信息发送前,再由结点对介质进行一次迅速短暂的侦听,若仍为空闲,则可正式发送。如果这时侦听到介质上有信息传输,则马上停止自己即将开始的发送。按某种算法延迟一段随机时间,然后再重复以上的二次检测过程,所以这种方式又称为“二次检测”法。由于第二次侦听的时间短,在这么短暂的时间内有两个点同时发送信息的可能性很小,因此基本上可以避免冲突。同时,这种方式没有“边发边听”,而仅仅是“先听后发”,这样,用不着“边听边发”的复杂的冲突检测装置,降低了成本。这种方法的缺点是,发送后一旦发生冲突,也不中止自己的发送,直到发送完毕才知道错误,再重新侦听、重发 。
CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)是一种用于无线网络中的媒体访问控制(MAC)协议,旨在避免数据碰撞,提高网络的效率和可靠性。它在无线传输环境中广泛使用,特别是在IEEE 802.11标准的Wi-Fi网络中。CSMA/CA采用了一系列机制,以确保数据的可靠传输,并最小化碰撞的发生。
CSMA/CA的基本原理如下:
-
载波监听(Carrier Sense): 设备在发送数据之前会先监听信道,检测是否有其他设备正在发送数据。如果信道空闲,设备才能开始发送数据,以避免与其他设备的传输冲突。
-
碰撞避免(Collision Avoidance): 即使信道在开始时是空闲的,由于信号传播延迟,多个设备可能在不同位置同时检测到空闲信道,导致数据碰撞。为了避免这种情况,设备在准备发送数据之前会引入随机延迟(即截断二进制指数退避算法),以增加设备之间的时间间隔,降低碰撞的可能性。
-
RTS/CTS握手: 在发送数据之前,设备可以使用“请求发送”(Request to Send,RTS)和“清除发送”(Clear to Send,CTS)握手过程来协调。发送设备首先发送RTS帧,其他设备在接收到RTS帧后等待一段时间,然后发送CTS帧作为确认。这种握手过程可以减少隐藏节点问题和碰撞。
-
NAV(Network Allocation Vector): NAV是一个计数器,表示信道上还有多少时间是占用的。当设备接收到RTS或CTS帧时,会更新NAV的值,其他设备在发送数据之前会检查NAV,以确保信道已空闲。
总体来说,CSMA/CA采用了一系列机制来减少碰撞的发生,提高无线网络的效率。然而,由于信号传播延迟和隐藏节点等问题,CSMA/CA无法完全消除碰撞,因此在高密度网络中可能会影响网络性能。尽管如此,CSMA/CA仍然是许多无线网络标准中的核心协议,用于提供可靠的数据传输。
二、核心程序
clear all;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AllFrame = zeros(1,15); %发的帧的总数
SuccessFrame = zeros(1,15); %发送成功的帧的数量
SER_Nodes = zeros(1,15); %误码率
ConWindow = 2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%:计算节点个数对系统性能的影响
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:15
[AllFrame(i) SuccessFrame(i)] = Csmacd(i,ConWindow);
temp1=(AllFrame(i)-SuccessFrame(i))/AllFrame(i);
[AllFrame(i) SuccessFrame(i)] = Csmacd(i,ConWindow);
temp2=(AllFrame(i)-SuccessFrame(i))/AllFrame(i);
[AllFrame(i) SuccessFrame(i)] = Csmacd(i,ConWindow);
temp3=(AllFrame(i)-SuccessFrame(i))/AllFrame(i);
SER_Nodes(i)=(temp1+temp2+temp3)/3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AllFrame1 = zeros(1,15); %发送总的帧数
SuccessFrame1 = zeros(1,15); %发送成功的帧数
SER_Window = zeros(1,15); %误码率
NumberNodes1 = 4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%:计算争用期长短对系统性能的影响
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:15
[AllFrame1(i) SuccessFrame1(i)] = Csmacd(NumberNodes1,i);
temp1=(AllFrame1(i)-SuccessFrame1(i))/AllFrame1(i);
[AllFrame1(i) SuccessFrame1(i)] = Csmacd(NumberNodes1,i);
temp2=(AllFrame1(i)-SuccessFrame1(i))/AllFrame1(i);
[AllFrame1(i) SuccessFrame1(i)] = Csmacd(NumberNodes1,i);
temp3=(AllFrame1(i)-SuccessFrame1(i))/AllFrame1(i);
SER_Window(i)=(temp1+temp2+temp3)/3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%:画图展示
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1);
subplot(2,1,1);
plot(1:15,SER_Nodes(:));
box on;
grid on;
xlabel('Nodes');
ylabel('SER');
title('CSMA_CD:Nodes-SER');
subplot(2,1,2);
plot(1:15,SER_Window(:));
box on;
grid on;
xlabel('ConWindow');
ylabel('SER');
title('CSMA_CD:ConWindow-SER');
UP531
三、仿真结论