【计算机网络】MACA协议详解

  

目录

1.数据链路层

1.2MAC子层

2.多路访问

2.1随机访问

2.1.1MA

2.1.2CSMA

2.1.3CSMA/CA

3.MACA(带有冲突避免的多路访问)

3.1隐藏终端问题(冲突)

3.2暴露终端问题(闲置)

3.3MACA协议的数据传输过程

3.3.1RTS、CTS、ACK帧结构

3.4MACA协议存在的问题

         因为MACA协议是数据链路层中mac子层中的协议,所以我们一点一点看。如果对OSI七层参考模型很熟悉的朋友可以直接跳过前2章,直接看MACA协议相关内容。

1.数据链路层

1.数据链路层最基本的任务是在网络层上两个相邻节点间无差错地传送以帧(frame)为单位的数据。

注:帧(frame)是指将物理层传送的比特流按照一定的格式进行分割后形成的基本信息块。每一帧中包含数据和必要的控制信息。在帧的控制信息中包含同步信息、地址信息、差错控制以及流量控制信息等。

2.主要功能

(1)帧同步。在数据链路层,数据一帧一帧的进行传送。帧同步是指接收方可以从接收的比特流中准确地区分出一帧的开始和结束的位置信息。

(2)寻址。该层加入数据帧的头部和尾部的信息中,包含了最近节点和下一节点的物理地址。保证每一帧都能送到正确的地址,接收方也知道数据帧的发送方。

(3)访问控制。两个以上设备连接到统一链路时,数据链路协议决定任意时刻由哪个设备获取链路的控制权。

(4)流量控制。防止接收方过载,数据链路协议约束了发送方一次可以发送的数据量和发送数据的速率,同时加上序号标志,使接收节点可以控制数据帧的顺序。

(5)差错控制。采用编码技术控制误比特率。

注:编码技术分为前向纠错和检测重发

前向纠错:当接收端接收到错误信息时,能够自动将错误信息纠正过来。易于实现,但开销大,信道利用率低。

检测重发:接收端接收到错误信息后,就让发送端重发这一帧,直到正确接收为止。

(6)链路管理。通信双方在通信前要交换信息,了解对方的状态,建立数据链路。并在传输时维持链路,通信完毕释放链路。

(7)透明传输。无论所传输的数据是什么样的比特组合,都应当能够在链路上传输。当数据中的比特组合恰巧与某一控制信息相同时,要采取有效措施,防止误认。

3.数据链路层分为上层的LLC子层和下层的MAC子层。

 1.1LLC子层

LLC(Logical Link Control,逻辑链路控制)子层

        负责向其上层(网络层)提供统一的接口,识别网络层协议。

LLC 定义了三种数据通信操作方式:
类型1:无回复的无连接。

        不保证发送的信息一定可以收到。规定了一种静态帧格式,并允许在其上运行网络协议。使用传输层协议的网络协议通常会使用服务类型1方式。


类型2:面向连接。

        给每个帧进行编号,接收端就能保证帧按发送的次序进行接收,并且没有帧丢失。

        滑动窗口流协议用来提高数据传输速率。

类型3:无连接应答响应服务。

1.2MAC子层

MAC(Madia Access Contol, 媒体访问控制)子层

通过在IP包上加8位的目的地址服务接入点和源地址服务接入点来保证不同网络类型中的传播。MAC子层屏蔽了不同物理链路种类的差异性。

MAC主要负责控制与连接物理层的物理介质。

        发送数据

MAC协议可以事先判断是否可以发送数据,若可以发送,添加控制信息

数据+控制信息——按规定的格式——>物理层

        接收数据

MAC协议判断输入的信息否发生传输错误,若没有错误,去掉控制信息,发送到LLC(逻辑链路控制)层。

2.多路访问

        当节点或站点使用一条共同的链路时,叫做多点链路或广播链路。我们需要一个多路访问协议来协调各链路的访问。

        控制访问介质的问题如同开会发言的问题,要设置一定的规则保证会议正常进行。

        1.讨论中不会有两个人同时发言;

        2.保证不能有一个人独占整个讨论。

        因此,我们也需要规则来控制访问介质,这个规则就是多路访问协议

        因为MACA协议属于多路访问协议中的随机访问协议,因此我们下面只介绍这部分。 

2.1随机访问

       在随机访问方法中,每一个站点都有权访问介质而不受其他站点的控制。但是,如果多点试图发送就会产生访问冲突(collision),从而使得帧被破坏或者被修改。

随机访问的方法:

2.1.1MA

        多路访问(multiple access,MA)的基本思想:基站充当中央控制器,每个需要发送帧的站点先将发送到基站,基站接收经延迟后送到目的站点。(即基站起跳的作用)

        这种安排存在潜在的冲突,当多个站点同时尝试向基站发送信息时,不同扎年之间的数据就会碰撞并相互混淆。

如果站点在发送前先检测一下介质,其冲突的概率就会较少。这就是CSMA。

2.1.2CSMA

        载波监听多路访问(Carrier sense multiple access,CSMA)技术,也称先听后说(Listen Before Talk)

  1. 发送站先监听媒介上有无载波,确定是否有其他站点在传输数据
  2. 若媒介空闲,传输数据
  3. 若媒介繁忙,该站点根据持续性策略等待一段时间后再做尝试。

注:CSMA的持续性策略

非坚持型CSMA(nonpersistent CSMA):若站点有数据发送,先检测信道,若信道空闲,则发送;若信道忙,等待一随机时间,然后重新检测信道。

优点:减少了冲突的概率

(因为不太可能存在两个或更多站点等待相同的时间并再次立即重新尝试)

缺点:增加了信道空闲时间,数据发送延迟增大;信道效率比1-坚持CSMA高,传输延迟比1-坚持CSMA大。

坚持型CSMA(1—persistent CSMA):若站点有数据发送,先监听信道,若站点发现信道空闲,则发送;若信道忙,则继续监听直至发现信道空闲,然后完成发送。

优点:减少了信道空闲时间

缺点:增加了发生冲突的概率

(因为在发现线路空闲之后,两个或更多站点都可以发送他们的帧)

广播延迟对协议性能的影响:广播延迟越大,发生冲突的可能性越大,协议性能越差。

p-坚持型CSMA(p-persistent CSMA):若站点有数据发送,先监听信道;若站点发现信道空闲,站点可以选择发送也可以选择不发送,发送数据的概率是p,而不发送的概率是1-p。

它综合了前两个策略的优点,既减少了冲突的几率,又提高了网络效率。

在CSMA中,由于通道的传播延迟,当两个站点监听到总线上没有存在信号而发送帧时,仍会发生冲突。(一个站点之所以能够检测到介质并发现它处于空闲状态,仅仅是因为其他站点的传播信号还没有到达该站点。由于CSMA算法没有冲突检测功能,即使冲突已发生,仍然要将已破坏的帧发送完,使总线的利用率降低。

CSMA的改进方案

使站点在传输时间继续监听媒体,一旦检测到冲突,就立即停止发送,并通知总线上各站冲突已发生。当冲突数超过了预先设定的值,则认为站点已经尝试多次并终止尝试;当冲突数未超过设定值,则等待一段时间后再做尝试。这就是带冲突检测的载波检测多路访问(Carrier sense multiple access with collision detection,CSMA/CD)

2.1.3CSMA/CA

CSMA的另一种改进方式就是带冲突避免的载波检测多路访问(Carrier sense multiple access with collision avoidance,CSMA/CD)。

(1)当站点发现线路空闲时,等待一个JFG(帧间隙)的时间,然后再等待一个随机时间,随后发送帧并设置一个定时器。

(2)站点等待接收方的确认,如果在定时器到达之前接收到确认,则认为传输成功,并开始传输数据。

(3)如果没有收到确认,则认为出现问题(帧丢失或确认丢失)。将补偿参数的值增加1,等待一段时间在重新检测线路。(补偿参数可以认为是决定等待时间的权值)。

        去掉CSMA/CA中的CS部分,CSMA/CA协议就成为了MACA。但CSMA/CA协议中,无论其他站接收到RTS帧还是CTS帧,都根据其中的网络分配矢量(network allocation vector,NAV)字段安静一端时间,这就会导致CSMA/CA无法解决暴露站的问题。

3.MACA(带有冲突避免的多路访问)

MACA(Multiple Access with Collision Avoidance)是无线Ad Hoc网络中使用的MAC层协议,用于解决隐藏终端问题暴露终端问题(CSMA载波监听多路访问协议的存在的主要问题)。

3.1隐藏终端问题(冲突)

        当A向B传送数据的时候,如果C正在检测信道,则C不会听到A,这是由于覆盖距离的问题,它会错误的认为它可以向B传送数据。若C真的开始传送数据了,则在B处产生干扰,扰乱了A发送的数据

        解决隐蔽站问题的关键在于离接收站点B近的站点C要保持安静。这个通过CTS就可以实现,只要接收到CTS的站保持安静就可以了。

3.2暴露终端问题(闲置)

        当B向A发送数据的时候,若C正在检测介质,则它将会听到有一个传输在进行,错误的认为它不能给D发送数据。实际上C所监听到的传输过程只会影响到B和C之间的区域重的接收过程,不会影响到它的接收方D所在的区域。

        解决暴露站问题的关键:离发送站点B近的站点C不需要保持安静,不需要对RTS做出任何反应就像MACA所做的这样。但CSMA/CA中接收到RTS帧的站点也需要保持安静就导致了暴露站问题。

注:为什么CSMA/CA中需要对RTS做出反应(安静)

        因为MACA是一个不可靠的协议,他只管发送,不管发送出去的东西有没有被正确接收

        但CSMA/CA增加了一个ACK帧进行确认,可靠的通讯协议。而在NAV这段时间里面,发送方同样有可能接受数据ACK帧。为了保证发送方能无冲突接收到ACK,所有离发送方近的站点同样需要保持安静。所以所有站点无论是接收到RTS还是CTS都需要保持安静一段时间。这也导致CSMA/CA的效率比较低。

3.3MACA协议的数据传输过程

MACA工作的条件:工作站与帧大小和数据速率保持同步。

传输站A——数据帧——>接收站B:

接收端和发送端

  1. A——RTS包(发送请求)——>B
  2. 如果B空闲,B——CTS包(清除发送)——>A
  3. A接收到CTS帧后,A——Data帧——>B
  4. 成功接收数据后,B——ACK(确认帧)——>A

其他站

        接收到CTS帧,都根据其中的网络分配矢量(network allocation vector,NAV)字段安静一端时间。

注:其他站收到NAV字段推迟发送的时间等于预定数据发送所需的时间。

3.3.1RTS、CTS、ACK帧结构

3.4MACA协议存在的问题

握手时的冲突

        RTS或CTS控制帧正在发送时,这一时间叫做握手周期。

        若站A和站C同时将RTS帧发送给B,则产生冲突。发送方在期望时间内没收到CTS,可退避(back off)等待一段时间后重新尝试。

注:指数退避方法中,站点的等待时间为0~2^{N}*最大传播时间(一个比特位到达终端的时间)之间的某个随机数,其中N是试图传播的次数。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在配置STM32F107的网络地址时,我们需要按照以下步骤进行设置: 1. 首先,我们需要确保在我们的开发环境中已经安装了开发固件库(HAL库)和相应的驱动程序。 2. 在代码中,我们需要包含相关的头文件以及任何可使用的库函数,例如:stm32f10x.h和stm32f10x_eth.h。 3. 接下来,我们需要初始化网络接口控制器(Ethernet Controller Interface)的硬件资源,例如初始化GPIO引脚和时钟,并设置相关的寄存器选项。我们可以使用stm32f10x_eth.h中的函数来实现这一步骤。 4. 一旦硬件资源已经初始化完毕,我们需要设置网络接口的传输和接收模式。这可以通过设置ETH_DMA_PBUF可用和ETH_MAC_AddressAlign_RxFrameByte的值来实现。我们可以使用stm32f10x_eth.h中的相应函数进行设置。 5. 在网卡初始化之后,我们可以使用ETH_MACAddressConfig函数将MAC地址写入寄存器ETH_MACA0HR和ETH_MACA0LR中。这些寄存器存储设备的物理地址。 6. 接下来,我们需要设置IP地址和子网掩码。我们可以通过设置ETH->DMASR和ETH->DMASR的值来完成这一步骤。 7. 最后,我们需要配置网络接口的操作模式,例如全双工或半双工以及传输速度。我们可以使用ETH_Init函数来实现这一步骤。 通过按照以上步骤进行设置,我们可以成功配置STM32F107的网络地址。请注意,具体的配置步骤可能会根据您的具体硬件和软件环境而有所变化。因此,请确保参考相应的硬件和软件文档以获得准确的配置指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值