网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

用于临时网络环境中实现公平信道接入的改进型二进制指数退避算法

更新时间:2026年03月27日   作者:spoto   标签(Tag):

二进制指数退避算法通过随机化各个站点尝试访问无线频道的时机,从而避免了数据包之间的冲突。不过,这种随机化处理并不能完全消除数据包冲突现象,因此会导致系统吞吐量下降,同时还会增加数据包的延迟和丢失率。此外,BEB算法这会导致各广播电台之间出现不公平的频道分配情况。

一部手机临时网络这是一组无线节点,它们可以动态地自行排列成任意的、临时的拓扑结构,而无需依赖现有的基础设施来构建网络。这些节点在通信过程中会进行动态移动,因此它们的位置是难以预测的。这些节点可以离开原来的位置……拓扑网络充满活力地。

通常,这种网络被用于诸如以下这样的应用中:紧急行动/应急事务, 环境控制,以及军事应用在……的地方没有集中的网络基础设施管理或支持机制。比如路由器 or 基站在……中IEEE 802.11标准的、常规的。分布式协调功能算法这是一种高效且基础的算法,能够确保获得最佳的结果。MANET与不断变化的拓扑结构之间的兼容性挑战。基于“带有碰撞避免机制的载波侦测多址接入”技术来实现。(CSMA/CA)协议DCF的持股者可以访问该媒体资源,其操作遵循“先倾听,再发言”的基本原则。BEB算法它被用于DCF中。之后在发生碰撞的情况下,希望重新传输数据的节点需要等待一段随机的时间,这段时间被称为“退避时间”。在这里,具有较短退避时间的节点会优先尝试进行数据传输,而具有较长退避时间的节点则会被推迟下来。

分布式协调功能:

该函数用于防止碰撞的发生。CSMA/CA以及RTS/CTS确认框。在传输过程中,发送方会等待接收方的确认。DIFS(分布式协调功能帧间间隔)如果通道处于空闲状态,那么它会发送数据帧,也就是RTS ACK帧。而接收方则等待这一消息的到来。SIFS(短帧间隔)在等待一段时间后,系统会向发送方发送CTS帧的接收确认。如果信道处于繁忙状态,那么该站点会继续等待信道空闲下来,直到达到DIFS时间为止。此时,它会生成一个随机的BT,以发送数据帧。

二进制指数退避算法:

在成功传输数据之后,该函数会……CW()该函数被调用,用于将CW值调整到CWmin。在数据冲突发生时,节点会调用Double函数。CW()将CW的值翻倍,直到它等于或大于CWmax为止。

如果该节点尝试发送数据七次仍然失败,那么该函数将会……CW()此外,还会使用这种方法来调整CW值,使其达到CWmin。这样一来,数据包的延迟和丢失现象就会减少,从而也降低了数据帧需要重新传输的概率。不过,这样做也会带来公平性问题。

公平性问题:

如果所谓的“延迟时间”真的存在的话……节点A与……相比,它很低。节点B那么节点A由于第一个节点有更高的概率再次进行传输,因此它会首先达到零值,从而重置争用窗口到最小值。这样一来,第一个节点就有更大的机会继续传输数据。

假设有一个文件。“aaa.txt”在这个文件中,生成以下内容。0s以及1s在这里,0s意味着失败。1s意思是“成功的”。以下是文本文件的内容:

1010011000100011

以下是上述方法的实现过程:

C++
// 采用上述方法的C++程序#include<iostream>#include<fstream>#include<string>#include<ctime>使用命名空间标准;// 驱动程序代码整数主要/核心(){// 槽位时间浮点数slot_time=0.00000166;整数CWmin=32,CWmax=1024;整数k;整数i,Curr_BW=32,计数器=0;浮点数BT,总备用时间=0;fstreamfp;字符串f_name=“aaa.txt”;字符/字母ch;整数x=0,y=0;fp.开放的(f_name,iOS::in|iOS::外出/离开);// 打开文件if(!fp){cout<<f_name<<不存在\n";返回0;}// 否则否则{cout<<f_name<<以读取模式打开了。无需额外解释。";}// 从文件中读取字符当…的时候(fp.获得/得到(ch)){// 已达到文件末尾if(ch==1||ch==‘0’){cout<<“框架”<<ch<<" \n ";}// 如果字符的值为1if(ch==“1”){x=x+1;cout<<成功的传输\n";Curr_BW=CWmin;cout<<当前的时间窗口为:<<Curr_BW<<"\n";BT=Curr_BW*slot_time;cout<<=> 延迟时间为:”<<BT<<" \n";计数器=0;}// 如果该字符为0否则if(ch==‘0’){y=y+1;if(计数器<7){cout<<传输失败/无法成功传输\n";当前BW值=当前BW值*2;if(当前BW值>CWmax){当前BW值=CWmax;}cout<<当前的时间窗口为:<<当前BW值<<"\n";计数器=计数器+1;cout<<计数器的值为:<<计数器<<" \n ";BT=当前BW值*slot_time;cout<<=> 延迟时间为:”<<BT<<" \n";}// 否则否则{Curr_BW=CWmin;cout<<当前的时间窗口为:<<Curr_BW<<"\n";BT=Curr_BW*slot_time;cout<<=> 延迟时间为:<<BT<<" \n";}}if(ch==1||ch==‘0’){// 计算退避时间总延迟时间=总备份时间+BT;cout<<"\n";// 输出时间cout<<=> 该框架的总等待时间为:”<<总备用时间<<" \n ";cout<<"无需额外解释。";}}// 输出成功的次数以及失败的次数cout<<“成功次数:”<<x<<"\n";cout<<失败次数:”<<y<<"\n";返回0;}
C
// 采用上述方法的C语言程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>// 驱动程序代码整数主要/核心(){// 槽位时间浮点数slot_time=0.00000166;整数CWmin=32,CWmax=1024;整数k;整数i,当前BW值=32,计数器=0;浮点数BT,总备用时间=0;文件/资料*fp;字符/字母*f_name=“aaa.txt”;字符/字母ch;整数x=0,y=0;fp=打开(f_name,“r+”);// 打开文件if(fp==空值){printf(“%s”不存在。" \n",f_name);返回0;}// 否则否则{printf(“%s:已打开,处于读取状态。”模式。无需额外解释。",f_name);}// 从文件中读取字符((ch=fgetc(fp))!=EOF){// 已达到文件末尾if(ch==1||ch==‘0’){printf(框架 %c\n ",ch);}// 如果字符为1if(ch==1){x=x+1;printf(“成功的”传输\n");当前BW值=CWmin;printf(当前的“窗口的编号为:%d\n",
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料