aloha协议文档格式.docx
《aloha协议文档格式.docx》由会员分享,可在线阅读,更多相关《aloha协议文档格式.docx(5页珍藏版)》请在冰豆网上搜索。

且仅当[t0,t0+t]时段内没有其他用户想发送帧即可。
所以
p0=p{[t0,t0+t]时段内没有其他用户发送帧}
=gkeg/k!
=e
所以s=g*egg
当g=1时,取最大值e-1=0.368
p0表示在对应时间段内没有用户发送帧的概率,即p0表示某用户发送成功的概率,1-p0为发送失败的概率。
对于该用户,它发送k次才能成功的概率等于p0*(1-p0)k-1.平均发送次数为p0*(1p0)k1
k11egp0
说明发送成功需要的发送次数与到达率有指数关系
篇二:
aloha协议介绍
aloha协议和它的后继者csma/cd都是随机访问或者竞争发送协议。
随机访问意味着对任何站都无法预计其发送的时刻;
竞争发送是指所有发送的站自由竞争信道的使用权。
aloha协议或称aloha技术、aloha网,是世界上最早的无线电计算机通信网。
aloha协议的思想很简单,只要用户有数据要发送,就尽管让他们发送。
当然,这样会产生冲突从而造成帧的破坏。
但是,由于广播信道具有反馈性,因此发送方可以在发送数据的过程中进行冲突检测,将接收到的数据与缓冲区的数据进行比较,就可以知道数据帧是否遭到破坏。
同样的道理,其他用户也是按照此过程工作。
如果发送方知道数据帧遭到破坏(即检测到冲突),那么它可以等待一段随机长的时间后重发该帧。
时隙aloha协议。
思想是用时钟来统一用户的数据发送。
办法是将时间分为离散的时间片,用户每次必须等到下一个时间片才能开始发送数据,从而避免了用户发送数据的随意性,减少了数据产生冲突的可能性,提高了信道的利用率。
纯aloha协议(purealoha)
当传输点有数据需要传送的时候,它会向立即向通讯频道传送。
接收点在收到数据后,会ack传输点。
如果接收的数据有错误,接收点会向传输点发送nack。
当网络上的两个传输点同时向频道传输数据的时候,会发生冲突,这种情况下,两个点都停止一段时间后,再次尝试传送。
因为有太多的传输冲突.
分段aloha(slottedaloha)
这是对纯aloha协议的一个改进。
改进之处在于,它把频道在时间上分段,每个传输点只能在一个分段的开始处进行传送。
每次传送的数据必须少于或者等于一个频道的一个时间分段。
这样很大的减少了传输频道的冲突。
篇三:
实验一分槽aloha协议仿真实验报告
实验一分槽aloha协议仿真实验报告
1.实验目的
(1)掌握Vb、Vc++、Vs或jaVa等集成开发环境编写仿真程序的方法;
(2)理解并掌握分槽aloha协议原理。
2.实验内容
编写仿真程序,对一定网络环境下mac层的多路访问协议的分槽aloha协议进行实现。
通过仿真,学习协议采取的介质访问管理,包括介质分配和冲突解决机制,并对协议的性能与理论结果进行比较分析。
3,.编程语言和环境
(1)编程语言;
matlab
(2)编程环境linux
4.实验内容与实现原理
用于在多路访问信道上确定下一个使用者的协议属于数据链路层的一个子层,称为介质访问控制(mediumaccesscontrol,mac)子层,许多局域网都使用多路访问信道作为它的通信基础。
最简单的信道分配方案是Fdm(为每个站专门分配一段频率)和tdm(为每个站分配一个时槽),当站的数量比较大而且可变,或者流量具有突发性变化的时候,就需要用到纯aloha协议或分槽aloha协议。
如果信道的状态可以被检测到,可以用到1-坚持型csma、非坚持csma和p-坚持csma等协议。
本实验模拟常见的几种mac层多路访问协议
(1)仿真思路
设置各站点初始产生包的时间点及产生包的时间间隔(均为随机值),得到所有站点成功发送10000个数据包的总时间以及这段时间内所有数据包的个数(包括各站点每次新产生的包以及由于冲突而重发的包),从而计算出每包时内尝试次数及其对应的吞吐量。
针对不同的包产生间隔,得到不同的每包时内尝试次数及其对应的吞吐量,将其画成一条曲线。
(2)具体步骤(示例代码为matlab)
1)初始化各站点产生包的时间点(可采用0到1的随机数),统一归并到时槽开始的时间点。
mgtime=[ttime/log(1-x/mnum)]*log(rand(1,mnum));
%初始化各站点包产生的时间点,为[0,1]的随机数
mtime=(fix(mgtime/slot)+1)*slot;
%各站点数据包发送时间点,归并到时槽的开始处
其中:
ttime为发送一个包所需的时间,mnum为站点的总个数,可通过改变不同的x值得到不同的包产生时间点。
x的取值小于站点总个数
2)选出最早产生数据包的站点作为初始发送站点,若此时槽只有一个数据包,则发送成功;
若有两个以上数据包,则冲突。
记录此时槽内所有包的个数
idx=find(mtime==now_time);
%findingoftheterminalwhichtransmissionstart
iflength(idx)>
state(idx)=tRansmit;
%state为各站点在此时槽的状态
mtime(idx)=now_time+mplen(idx)/srate;
%发送结束时间,mplen为数据包的长度,srate为发送的速率
mtime(idx)=round(mtime(idx)/slot)*slot;
tplen=tplen+sum(mplen(idx));
%此时槽内所有包的总长度
end
idx=find(state==tRansmit|state==collision);
1
state(idx)=collision;
%当有两个以上数据包时,发生冲突
3)若成功,则发送成功的数据包数加1,程序结束点也是成功的个数为10000时。
然后根
据生成包的随机时间间隔,得出此站点下一次发送包的时间点。
idx=find(mtime==now_time
%findingoftheterminalwhichtransmissionsucceeded
spnum=spnum+1;
%发送成功的数据包数加1
splen=splen+mplen(idx);
%总共发送成功数据包的长度(计算吞吐量)state(idx)=standby;
%设置此站点发送状态为等待
mgtime(idx)=now_time+[ttime/log(1-x/mnum)]*log(1-rand);
%算出此站点下次产生的时间点
mtime(idx)=(fix(mgtime(idx)/slot)+1)*slot;
%归并到时槽的开始点
4)若发生冲突,根据随机后退时间,得出此站点下一次发送包的时间点。
%findingoftheterminalwhichtransmissionfailed
state(idx)=standby;
mtime(idx)=now_time+[ttime/log(1-x/mnum)]*
log(rand(1,length(idx)));
%站点等待的时间,下次重发此数据包的时间点
mtime(idx)=(fix(mtime(idx)/slot)+1)*slot;
%归并到时槽的开始处end
5)依次循环上述过程,直至10000个数据包成功发送。
计算出每包时内传输次数及其吞吐
量
traffic=tplen/srate/now_time;
%每包时内传输次数
%总共传输的包(包括站点新产生的包及由于冲突重传的包)的总长度除以发
送速率再除以发送完最后一个包的时间
thoughput=splen/srate/now_time;
%吞吐量
%成功传输的包的总长度除以发送速率再除以发送完最后一个包的时间
5.实验代码
form=2:
1:
500%m表示标签数
n=1000;
%aloha算法,m表示m个标签,n表示重发次数
a=rand(m,n);
%生成一个0-1分布的矩阵
a1=0.5*a;
%生成一个0-0.5分布的矩阵,假设随机退避时间服从0-0.5分布
b=cumsum(a1,2);
%矩阵b是对a1每列相加得到的,表示随机发送的时间
t=b(1,n);
%t为标签均发送时间,即为观察时间
c=1:
(m*n);
%生成一个向量
fori=1:
m%将矩阵b转化为向量,赋值到向量c
forj=1:
n
c(1,(i-1)*n+j)=b(i,j);
d=sort(c);
%将向量按从小到大的顺序排序,用于计算两数据包之间的时间差
e=diff(d);
%向量的微分,求两数据包之间的时间差,用于判断是否产生碰撞
t0=0.001;
%每个数据包的宽度
n=0;
%初始化n(发送成功的数据包)
m=0;
%初始化m,总共的数据包
(m*n-1)%此循环用于计算m与n
ifd(1,i) m=m+1;
ifi==1
elseifi==(m*n-1)
elseifi~=1
elsecontinue
g=t0/t*m;
%仿真得到的平均交换的数据包量,由于这里假设所有数据包的宽度相同且都为t0,t为观察时间
s=t0/t*n;
%仿真得到的吞吐量
q=s/g;
%发送成功率
F=m/500;
%归一化标签数,便于观察随标签数的变化其他量的变化情况
plot(g,s,r.,g,q,ko,g,F,g*);
%绘出g与s,q,F的图像
holdon;
%保留在同一张图上
xlabel(平均交换的数据包量g);
%添加x轴的标题
title(aloha算法仿真);
%添加标题
legend(吞吐量s,发送成功率q,归一化标签数F);
%添加注释
gridon;
%添加网格
6实验总结本次实验对我来说难度较大,但我认真分析,查阅资料,翻看书本,总算做了出来。
实验过程中,由于对代码语言的不熟悉,出现了一系列问题,但都圆满解决。
本次实验不但让我掌握了新语言,而且锻炼了我的动手能力,学到了许多新知识。