CSMA介绍

article/2025/8/25 18:14:22

转载自:

http://www.cnblogs.com/cherishui/p/4046360.html

以下是转载内容:

本文主要介绍通讯领域中CSMA相关机制,本文全部资料来自于网络。

 

网络通讯,必须依靠介质来传递数据,将数据调制到模拟信号上,再把此信号通过介质传递到远方。根据介质的不同,分为有线网络和无线网络。为了让世界上各种各样的网络设备生产商生产的设备互联互通,他们必须遵循一定的“通讯语言“,就像一个中国人和美国人在一起,假如他们生产的设备只能够说“本国语言”,那碰在一起,就是驴头不对马嘴,根本无法沟通。为了解决这个问题,IEEE组织推出了两种协议,一种适用于有线网络的IEEE 802.3标准和另一种适用于无线网络的IEEE 802.11标准。在底层传输上,有线网和无线网,都属于广播形式的网络,这也就是说,当一个节点发送信息时,网络范围内的所有节点,都能够接收到,如果有多个节点在同时发送数据,这就容易形成数据堵塞和碰撞,导致网络速度变慢。

为了解决这个问题,协议指定CSMA机制来解决这个问题,CSMA全称为Carrier Sense Multiple Access,中文为载波监听多路访问,具体处理方法根据传输介质的不同而不同。有线网络采用冲突检测(Collision Detection),无线网络采用冲突避免(Collision Avoidance),从字面意思上来看差不多,但是具体细节上还是有些不同。

下面介绍两种避免冲突的方法。

CSMA/CD(有线)

这种方式,在发送方发送信号前,先监听通信信道是否空闲。 如果空闲,则立即发送数据,并且边发边监听信道,如果此时监听到冲突,则立即停止发送数据,同时告诉其他节点已经发送碰撞(发送阻塞信息),自己则随机等待一段时间后重新发送数据包。当监听到信道忙碌时,也需要随机等待一段时间,时间值通过指数退避算法来获得。当尝试若干次都失败的话,则停止发送,通知上层。

下面介绍二进制指数退避算法的基本流程:

1. 确定基本退避时间单位(2T),对于以太网来说,为51.2us

2.   定义一个参数K,它与重传次数N之间的关系为, K = min[N,10]

3.   从上述定义的K,构造离散型整数集合[0,1,2,3,4…,(2^k - 1)]

4.   计算重传时间,从离散整数集合中随机取一个数,乘以基本退避时间单位就是退避时间。

 

CSMA/CA(无线)

发送数据前,先检测到信道状态,等到信道空闲后,再等待一段时间后,再次检测信道是否空闲,如果还是空闲,那么立刻发送数据,否则,随机等待一定时间,等时间到期后,再次发送检测。

发送真实数据前,先向目标端发送的请求传送报文(RTS),等接收到目标端响应报文CTS,发送端才开始传送真正的数据。采用这种RTS-CTS机制,可以确保接下来传送数据时,不会被碰撞。由于RTS-CTS的封包都很小,因此不会增大整体传输开销,此方式可以确保接下来传送数据时,其他设备不会使用信道以避免冲突。

那么,CSMA/CA是如何避免冲突的发送呢?它采用了带确认的发送机制,类似于TCP的ACK回应,如果发送方收到了接收方对其发送数据的ACK确认,那么,不管空中信道是多么的拥挤,数据包还是艰难的穿梭到收发双方,其表现就是收到了ACK信号.

CSMA/CA通过上述三种方式,信道空闲检测RTS-CTSACK确认,提供避免碰撞的无线信道分时访问。     

信道的空闲检测有三种方式,分别是通过能量检测载波检测能量载波混合检测三种方式来检测信道,统称为CCA。

有线网络和无线网络,因为传输介质的不同,检测冲突的方法也就不同。在传统的有线网络中,检测方法是通过通过电缆中电压的变化检测冲突,当数据传输发生碰撞时,电缆中的电压就随着发生变化。在无线网络中,空气作为传输介质,必须采用其他的碰撞检测机制。CSMA/CA提供了三种检测信道空闲(CCA)的方式:

1. 能量检测(ED)   :  对接收信号的能量大小进行判断,当功率大于某一确定值时,就认为信道被占用

2. 载波检测(CS) : 对接收信号与本地的伪随机码(PN码)进行运算比较,如果其值超过某一极限,就认为信道被占用

3. 能量和载波混合检测(ED & CS)

 

为什么采用电缆传输和采用空气传输,需要不同方式的检测方法呢?

这是由于传输介质所决定的,不同的传输介质上,信号衰减的速度不一样。在有线传输上面,假设发出去的信号对于的电压值为3.3(瞬间电压),当检测到冲突时,也就是接收到来自其他设备的信号,通过电压的叠加,可能会得到6V左右的瞬间电压,这很容易检测出来。但在无线传输上,干扰信号就没有这么强劲了,随着传输距离的增加,信号衰减的很快,在发送端,当接收到其他非预期信号的干扰时,电压的拨动不会那么明显,因此需要上面提到CCA方法。

 

CSMA/CA算法概述

下图是CSMA/CD机制的发送数据和接收数据的流程图。

在无线信标网络中,网络中的协调器会定期发送信标给所有的可感知节点。所有待发送数据的设备,在发送数据前,都会通过CSMA/CA机制来竞争传输媒介的使用权。根据网络中是否有信标,将无线网络分为信标网络和非信标网络。在不同网络模式下,CSMA/CA算法版本不一样,分为信标版本slotted CSMA-CA 和非信标版本的unslotted CSMA-CA算法。

两者的区别主要在信标版本下,所有设备的退避时间和和协调器的信标帧传输时间对齐,保证在每段CAP开始时,才开始传输数据,以减少冲突的可能性。在2.4GHz的传输频段下,每1毫秒可以传送完毕62.5个symbols,那么传输一个symbols所需的时间为(1/62.5)毫秒。根据待传输的MPDU的长度(以aMaxSIFSFrameSize,默认为18个字节为界限),帧与帧之间的间隔时间有所不同,具体要求如下:

IFS: Interframe spacing  帧与帧之间的空隙

LIFS : long IFS              长帧与长帧之间的空隙

SIFS : short IFS            短帧与短帧之间的空隙

 image

image 

如果需要ACK确认的帧,则在收到ACK后等待IFS时间,如果不需要,则根据传输帧长度,在等待相应的时间。

 

在此算法中,有三个重要的参数:

NB(后退次数,Number of Back):每检测到信道忙,该值就会加1.在IEEE 802.15.4中,Nb最大值定义为24.为了优化效率,当信道经过4次退避延迟检测后,仍然为忙,则放弃此次传送。在每次传输开始时,该值初始化为0.

CW(碰撞窗口长度, content window length): 每次退避等待时间值,单位为传输20个symbol所需的时间,CW的初始值为2,最大值为31.当判断信道为忙时,重置该值为2. 此参数仅在信标网络下才使用

BE(退避指数,Backoff exponent):设备尝试去退避的最大次数,也就是节点接入信道的能力

当接收信标帧中的BLE域为0时,BE应该初始化为MAC层的macMinBE值,否则,BE值应该设为2和macMinBE两者中的小者。在IEEE 802.15.4中,BE默认值为3,取值范围在0~macMaxBE。其中,macMaxBE的取值范围为[3-8],默认为5.

下图是简要算法流程图:

 

image 

 

CSMA-CA适用范围

CSMA-CA算法适用于传输数据帧、MAC命令帧带CAP的,它不适合在信标网络中传输信标帧,ACK帧或者在CFPs时间内的数据帧传输。ACK帧和信标帧传输,无需CSMA-CA机制。

 

相关参考链接:

CSMA/CD和CSMA/CA详解

 http://www.2cto.com/net/201307/226574.html

CSMA/CA

http://blog.gkong.com/wxl007_96408.ashx

IEEE 802.15.4 协议规范



http://chatgpt.dhexx.cn/article/h2NBcNfH.shtml

相关文章

计算机网络(十)CSMA详解

随机访问截止访问控制(所有用户可随机发送信息,发送信息时占全部带宽) 分类: CSMA:先听再说 CSMA/CD:先听再说,边听边说 CSMA/CA: CSMA协议(载波监听多路访问协议) CS:载波监听…

CSMA协议简述

CSMA协议 载波监听多路访问协议CSMA(carrier sense multiple access) CS:载波侦听/监听,每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据。 当几个站同时在总线上发送数据时,总线上的信号电压摆动…

计算机网络:CSMA协议

载波监听多路访问协议CSMA协议 CS:载波监听/帧听,每一个站再发数据之前都要检测链路上是否有其他站在发送数据。(检测电压摆动值,当几个站同时发送数据时,总线上的电压摆动值就会增大。)MA:多点接入&#…

以太网 CSMA-CD与CSMA-CA的区别与工作方式

2.0.0 以太网 CSMA-CD与CSMA-CA的区别与工作方式 一、冲突域、冲突检测、冲突避免 独木桥上人可以来回走动,但如果两边都有人,如果没有人做出避让,注定是两败俱伤 冲突域概念 冲突域指的是两台及以上终端通信时会发送冲突的区域。 冲突域的…

Windows网络编程 c语言 报错:[Error] ‘bzero‘ was not declared in this scope

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录 阅读前请看一下:我是…

C:bzero与memset

目录 1、bzero 2、memset 3、实例 1、bzero bzero函数声明如下: /* Set N bytes of S to 0. */ extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1)); 意思在注释里也写的很清晰,设置s的前n个字节为0。 2、memset memset函数声…

解决No module named numpy问题

目录 前沿 解决 解决方法1: 方法2:(强行安装更新更高的版本) 前沿 最近开始学习python了,由于要简单处理一下图片,奈何能C力太差,openCV上手有点难,想学习一下py简单的处理一下图…

Python中 No module named pygame

有时候运行Python程序,会出现如下错误 No module named pygame这个报错的意思是 没有安装pygame,有的时候你可能会出现No module named XXXX 这就是在说明你没有安装XXXX模块 解决: 1.进入cmd 2. 输入 pip install xxxx 表示安装这个模块 …

ModuleNotFoundError: No module named ‘transformers_modules.chatglm2-6b‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

ModuleNotFoundError: No module named ‘selenium

下面是我学习时的错误,在此文章记录一下,方便日后查找,以下解决方案都来源于网络。 问题:当jupyter出现ModuleNotFoundError: No module named selenium问题时的解决方案: 解决方案: 1、在cmd运行pip ins…

No module named ‘pyautogui‘

pip install pyautogui 出现如下错误。 ---------------------------------------- ERROR: Command errored out with exit status 1: C:\Users\zhangb\anaconda3\python.exe C:\Users\zhangb\anaconda3\lib\site-packages\pip install --ignore-installed --no-user --pref…

ModuleNotFoundError: No module named ‘torch._six‘的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

No module named ‘win32com‘

问题描述:在删除图片的时候遇到了No module named win32com的问题,详细如下: Traceback (most recent call last):File "PPOCRLabel.py", line 1825, in deleteImgfrom win32com.shell import shell, shellcon ModuleNotFoundErro…

记录-centos7搭建DNS服务(named.servicenamed-chroot)全流程

目录: 1.试验记录 2.全流程 record 注:记录过程中已发现存在的错误或不恰当之处: 数据库文件中时间大小应以秒为单位。 新增区域应写在/etc/named.rfc1912.zones中。 Record: Centos 7 提示: 0. 检查是否安装DNS服…

No module named ‘cvxpy‘ 已解决

问题描述 在windows系统,使用Anaconda搭建的开发环境,Python3;运行代码时出现No module named cvxpy;发现确实没有 cvxpy这个库,但是直接使用pip安装又不行的(pip install cvxpy )总是会报错的…

Duplicate named routes definition

初始化后台菜单的时候报了一堆Duplicate named routes definition, 原因:没有判断addRoutes是否成功,以下为正确逻辑:判断vuex中是否存在menus,当存在之后就不用再addroutes了,不存在则去添加,如…

解决No module named tkinter

原因 今天准备使用tutle画个图,导入turtle后运行发现提示没有tkinter这个包,于是尝试pip install tkinter安装,结果当然是失败: 后面一番搜索之后发现tinter是python3自带的包,不能用pip安装,我这里安装的…

No module named SimpleHTTPServer

问题分析:cmd启动python服务时没有找到SimpleHTTPServer这个模块 python -m SimpleHTTPServer 8000问题解决:在python安装路径下,lib文件下找到http文件夹,里面有server.py文件。 python -m http.server

解决pycharm中报ModuleNotFoundError: No module named ‘tensorflow‘错误

在pycharm中编写python程序时,遇到了报ModuleNotFoundError:no module named XXX的错误。以下是我的解决方法。 目录 一、错误现象 二、原因分析 三、解决方法 四、更多错误解决方法 一、错误现象 执行python程序时,报错,错误信息为Modu…

No module named ensurepip

pip升级失败,然后pip直接用不了 ModuleNotFoundError: No module named ‘pip‘按照网上搜的处理: python -m ensurepip结果返回: ModuleNotFoundError: No module named ensurepip最后找到Python pip 安装与使用处理: curl h…