数据链路层-MAC多点访问控制协议

发布时间 2023-12-06 09:52:46作者: 小张同学哈

解决的问题

对于一个共享性介质(总线型局域网的总线),各个节点如何协调对它的访问和使用?通过各种途径来控制对共享介质访问的方式,在数据链路层称为多点访问控制协议。

多点访问控制协议按照访问方式分为三种类型:信道划分方式、随机方式、轮流方式。

信道划分方式

频分复用: FDM(Frequency Division Multiplexing)将信道划分为不同的频段给不同节点使用

波分复用:WDM(Wavelength Division Multiplexing),将信道划分为不同的波段给不同的节点使用

码分复用:CDM(Code Division Multiplexing),将信道划分为不同的编码给不同的节点使用

时分复用:TDM(Time Division Multiplexing),将信道划分为不同的时间段给不同的节点使用

使用信道划分方式,信道在高负载情况下,信道利用率很高,这是该方式的突出优点。但在低负载情况下,信道利用率偏低,例如在时分复用情况下,某个节点有数据要传送,却只能使用特定的时间段,不能一直使用信道,导致信道利用率比较低。

随机方式

CSMA/CD

CSMA/CD(Carrier Sense Multiple Access/collision detection):载波监听多点接入、冲突检测方式。这种访问控制方式在802.3 Ethernet中使用(有线局域网)。

1. 节点在发送之前先监测信道是否空闲,如果空闲则发送。如果忙,则持续监测信道,等待闲时再发送。

2. 节点在发送过程中也要持续的监测信道,检测是否有冲突。如果有冲突,则立即停止发送,以避免更进一步的信道浪费。停止发送后,发送方需要做两件事:

    1. 发送一个Jamming Signal,冲突增强信号,告知所有节点发送了冲突

    2. 选择一个随机时间(二进制指数退避算法),等待该时间后,再检测信道闲忙,尝试重发。

如何检测信道闲忙

发送前,检测信道中是否有信号传送即可得知信道状态

如何检测冲突?

发送过程中,可以对比发送信号和接收信号的强度 ,或者 过零点检测  得知是否有冲突。

随机时间的确定

在第m次失败后,适配器随机从{012,3 ,... ,2^m-1}中选择一个数字K,等待K*512位时再检测信道。
该二进制指数退避算法的精妙之处在于,在信道负载很低时,退避时间很小,从而有利于节点尽快发送数据。

在信道负载很高时,退避窗口变大,节点的平均退避时间也变大,有利于减少冲突,从而提高信道利用率。

CSMA/CA

CSMA/CA(Carrier Sense Multiple Access with Collision Avoid):载波监听多点接入、冲突避免方式。以太网协议在无线局域网(WLAN)中使用该方式做各节点的访问控制。

1. 节点在发送之前先监测信道,信道空闲持续DIFS时间后,才能发送,一旦启动发送,不再检测信号是否冲突,持续将帧发送完毕。

2. 如果检测到信道忙,则选择一个随机值K,随后持续周期性的检测信道,如果信道忙,则K不变,如果信道空闲则将K减1,直到K减为0,才能发送。

3. 如果发送方发送后,接收到ACK则发送成功。如果没有接收到ACK则重复步骤2.

4. 对于接收方,收到帧后,如果帧没有出错,则等待SIFS时间后发送ACK。SIFS要小于DIFS

                                                  

 

1. 为什么在无线局域网中不使用冲突检测方式?

  a. 无法进行冲突检测,无线信道上,无线电磁波在开放空间中衰减很快,不同的节点发送的电磁波相互串扰,使得冲突检测在技术上实现起来较为麻烦。

  b. 在无线局域网中,冲突 与 发送是否成功没有关系。在有线信道上,信号发生冲突时,几乎可以认为发送失败,信号未发生冲突,几乎可以认为发送成功。但是在无线信道上,由于节点隐藏问题未发生冲突时,也有可能发送失败,由于节点暴露问题,发生冲突时,也有可能发送成功。因此发送成功与否与信号冲突没有必然关系。

2. 什么是节点暴露问题?

A----------------B--------------------C------------------D

ABCD四个节点,A能收到B的信号,但无法收到C和D的信号。D能收到C的信号,但无法收到B和A的信号。B和C能相互收到信号。如果在t时刻,B需要向A发送数据,C需要向D发送数据,如果C成功发送数据帧,则会导致B收到C发送给D的信号,导致B认为信道忙,无法发送数据。但事实C向D发送数据时,不会导致B向A发送数据的冲突,这就是节点暴露问题。节点暴露问题会导致信道利用率降低。

3. 什么是节点隐藏问题?

 如图,A和B之前由于距离、地形(隔着山脉)等问题,A的信号无法到达B,B的信号也无法到达A,此时A和B两个节点相互看不见,也就是A和B两个节点相互隐藏。在此情况下,如果在t时刻,A检测到信道闲,向C发送数据,B也检测到信道闲(A和B无法接收到对方的信号,因此会误认为信道闲),向C发送数据,两者的信号会在C点形成冲突,导致发送不成功。

4. 为什么SIFS要小于DIFS?

这样设计的目的是使得ACK帧等待时间要比普通帧少,使得ACK帧更容易在冲突中获胜,使得ACK帧的优先级更高,从而避免数据接收成功后因为无法收到ack导致重发造成的信道浪费。

5. 在发送方监测到信号忙(发送冲突时),随后再监测信道,为什么不再信道闲时立即发送,而是等到计时器减为0后再发送?

这样设计的目的是尽可能的减少冲突的概率。无线信道中,一旦发送必须把整个帧发送出去,中间无法取消。在此期间,一旦发生冲突,整个帧的发送时间上信道就被浪费掉了,因此冲突的代价非常大。为了避免冲突,使得节点尽可能的谦让,以减少冲突的概率。在检测到信道忙时,就冻结计时器,信道闲时才将计时器减1.

 冲突避免(RTS-CTS交换)

允许发送方“预约”信道,避免长数据帧的冲突。RTS-CTS交换是一个可选项。

1. 发送方要发送数据时,首先向BS(Base Station,基站)发送一个小的RTS(Request To Send)帧(RTS帧的发送也可能会发生冲突,但是RTS帧很小,信道浪费比较少)

2. BS广播CTS(Clear To Send)帧来作为RTS的响应

3. 所有节点都能收到CTS,这时发送方能够发送数据,其他节点不能发送数据(节点被抑制)

 

轮流方式

轮询方式

1. 主节点依次轮训从节点是否有数据要传送

2. 从节点一般比较dump

 缺点

  • 轮询的开销:轮询本身消耗信道带宽
  • 延迟:每个节点需要等到主节点轮询后才能开始传输,及时只有一个节点要发送数据,也要轮询一遍到该节点时,该节点才能发送数据
  • 单点故障:主节点发生故障,整个系统将无法工作

令牌传递(令牌环)

令牌环是基于轮询的介质访问控制方法。令牌沿着环网单向流动,依次通过各站点。一个站点若想要发送数据,必须持有令牌,否则只能等待空令牌的到达。因其受控接入特点,所以避免了冲突的发生。

(1).获取空令牌并发送数据:一个站点需要发送数据时,首先等待空令牌的到达,并取得令牌,将其状态设置为“忙”,并紧接着在令牌帧后添加数据,传至环网上。

(2).接收与转发:数据沿环网传输时,所经过的每个站点都会将本机的MAC地址与数据帧的目的地址进行比对,若匹配则接收,若不匹配则转发给下一个站点。

(3).撤销数据并释放令牌:数据帧在网上流动一圈后回到发送端,由发送站点将数据取下,并释放令牌。将令牌发送给下游站点,使下游站点获取发送数据的权利。

令牌(token)是一种特殊的数据帧,从一个节点到下一个节点在网络中循环传递。

 缺点

  • 令牌的开销:令牌本身消耗信道带宽
  • 延迟:每个节点只有抓住令牌后才能传输
  • 单点故障:令牌丢失则整个系统故障,需要有复杂的机制重新生成令牌

 

 对比分析

信道划分MAC协议

    • 共享信道在高负载时是有效和公平的
    • 在低负载时效率低下
      • 只能等到自己的时隙开始发送或者利用1/N的信道频率发送
      • 当只有一个节点有帧传时,也只能够得到1/N个带宽分配

随机访问MAC协议

    • 在低负载时效率高:单个节点可以完全利用信道全部
    • 高负载时:冲突开销较大,效率极低,时间很多浪费在冲突中

轮流协议

有2者的优点!