介质访问控制
共享介质
在介绍 MAC 概念之前,必须要说明一下共享介质的概念。
在一个网络环境中,多个设备可能需要同时访问同一个物理介质来发送数据,这个介质可以是电缆、光纤或者无线信道。
当设备发送数据时,数据包会在整个介质上传播,所有连接到该介质的设备都可以接收到数据包。如果多个设备同时发送数据,介质上的数据信号就会相互冲突进而导致错误。
所以 MAC 协议确保了 共享介质上的 有效、公正且有序的数据传输。
MAC方式总结
介质访问控制(MAC,Media Access Control)可以分为 信道划分 以及 随机访问 两种大方向。
信道划分 介质访问控制:也叫做多路复用,在一条传输介质上同时传输多个不同种类的信号(种类可以根据不同的参数进行划分),这样不同的设备可以发送特定类型的信号,并且不同信号之间相互不干扰,信道划分 访问控制可以分为以下几种:
- FDM:频分多路复用
- TDM:时分多路复用
- WDM:波分多路复用
- CDM:码分多路复用
随机访问 介质访问控制是指多台设备共享同一个通信介质时,它们可以随机地尝试发送数据,而不需要事先协调,当发生冲突后再做后续的协调,以保证不会接收到错误的数据。
- ALOHA
- CSMA
- CSMA/CD
- CSMA/CA
多路复用
- 频分多路复用(Frequency Division Multiplexing,FDM):
- FDM是一种通过将频谱划分成不同的频率带宽块,使多个信号能够同时传输的方法。每个信号占用不同的频带宽度,以避免干扰。
- 电视和广播广播中的不同频道,以及有线通信中的多频道宽带互联网,都使用了FDM。
- 时分多路复用(Time Division Multiplexing,TDM):
- TDM是一种通过在时间轴上分割信号的方式,使多个信号能够依次传输的技术。每个信号在不同的时间段内传输,时间段通常非常短,以实现快速切换。
- 电话网络中的T1和E1传输系统以及数字电视信号的传输都采用了TDM。
- 波分多路复用(Wavelength Division Multiplexing,WDM):
- WDM是一种在光纤通信中使用的多路复用技术,它通过在光波的波长维度上分隔信号来允许多个信号共享同一光纤。
- 长距离光纤通信网络中使用WDM来实现高容量数据传输。
- 码分多路复用(Code Division Multiplexing,CDM):
- CDM是一种通过在传输中使用不同的编码序列来区分不同的信号的方式。每个信号都与一个唯一的编码序列相关联,以使接收器能够区分它们。
- 无线通信中的CDMA(Code Division Multiple Access)是一种使用CDM的技术。
CDMA原理
在CDMA中,每一个比特时间划分为 m 个短的间隔,称为码片(chip),每个站被指派一个惟一的 m bit 码片序列(chip sequence) 。
每个站被指派一个惟一的 m bit 码片序列(chip sequence) 。
- 如发送比特 1,则发送自己的 m bit 码片序列。
- 如发送比特 0,则发送该码片序列的二进制反码。
令向量 $S$ 表示站 S 的码片向量,令 $T$ 表示其他任何站的码片向量。两个不同站的码片序列正交,就是向量 $S$ 和 $T$ 的规格化内积(inner product)都是0:
$$S \cdot T = \frac{1}{m} \sum_{i=1}^{m}{S_i T_i} = 0$$
任何一个码片向量和该码片向量自己的规格化内积都是1:
$$S \cdot S = \frac{1}{m} \sum_{i=1}^{m}{S_i^2} = 0$$
ALOHA协议
1. 纯ALOHA (Pure ALOHA)
工作原理:
- 当一个站点有数据要发送时,它会直接发送数据。
- 发送完成后,该站点会等待一个预定的时间间隔,以便接收来自接收方的确认。
- 如果在此时间段内未接收到确认,站点会假定数据已冲突并被损坏,因此它会在随机的后续时间重新发送数据。
2. 时隙ALOHA (Slotted ALOHA)
工作原理:
- 与纯ALOHA不同,时隙ALOHA将时间分为固定的时隙或间隔。
- 站点只在时隙的开始时发送数据,这减少了两个数据包可能在同一时间内发送的机会,因为它们必须在时隙边界上对齐。
- 如果数据冲突(多个站点在同一时隙发送数据),发送站点会在随机的后续时隙重试。
CSMA协议
CSMA(Carrier Sense Multiple Access)的中文叫做 载波监听多路访问,理解 CSMA 的关键在于理解它的名称中的两个部分:载波监听 以及 多路访问:
- 载波监听(Carrier Sense):因为 CSMA 是随机访问介质控制的一种方式,所以在发送数据前,必须确定当前通信介质中没有其他设备正在发送数据。所以载波监听可以被理解为以太网口内部芯片自带的一种功能,具体而言就是一种可以监听 信道在当前位置是否有数据传输的 的一种功能。
- 多路访问(Multiple Access):多个设备可以访问同一个通信介质。这意味着在任何给定时间,任何设备都可以尝试发送数据。
所以 CSMA 可以理解为 通过 载波监听 避免冲突,进而实现共享介质上的 多路访问。
以下图为例,A、B、C、D 分为是连接到同一共享介质上的不同设备,当 A 开始发送数据时,B、C、D 分别会在不同的时刻监测到信号,具体的时刻为 设备与A之间的距离 / 信号传播速度
。
CSMA 的问题在于它无法处理碰撞,当一个设备监听到当前介质中无信号时,它就可以发送数据,但监听得到的结果可能是 “假结果”。因为有可能其他设备已经发送信号了,只是信号由于传播时延还没有到达当前设备。
所以假设当前设备监听得到了 “假结果”,那么此时发送数据后介质上就会发生冲突。
CSMA如何处理冲突
CSMA 不具备碰撞处理的功能,冲突处理是 CSMA/CD 的功能。 这意味着在 CSMA 中,设备不会主动检测到碰撞。
但是 CSMA 也具备一定冲突处理的功能,这依赖于超时和重传机制。
在 CSMA 中,发送设备在传输数据后会等待确认响应(如 ACK,Acknowledgment 确认帧)。如果发生碰撞,接收设备无法正确接收数据,因此不会发送确认帧。 发送设备在等待一段时间后没有收到确认响应,推断可能发生了数据丢失(可能由于碰撞)。
这个知识了解即可,目的是帮助大家理清 CSMA 和 CSMA/CD 的区别。下文通过一个实例说明 CSMA 的冲突处理功能:
假设有两个设备 A 和 B,它们都使用 CSMA 协议并共享同一个信道:
- 初始状态:信道空闲,设备 A 和 B 都准备发送数据。
- 监听信道:A 和 B 都监听信道,发现信道空闲。
- 发送数据:A 和 B 几乎同时开始发送数据,由于没有碰撞检测机制,它们不知道发生了碰撞。
- 碰撞发生:A 和 B 的数据在信道上发生冲突,接收设备无法解码出有效数据,因此不会发送确认帧。
- 等待确认:A 和 B 等待一段时间,发现没有收到确认帧,推断可能发生了碰撞。
- 重传尝试:A 和 B 各自等待一个随机时间(不同的随机时间),然后重新尝试发送数据。
CSMA 也 根据其在信道空闲时的行为分为三种类型,如下所示,了解即可。
特征 | 1-persistent CSMA | Non-persistent CSMA | p-persistent CSMA |
---|---|---|---|
信道空闲时的行为 | 立即开始传输数据 | 立即开始传输数据 | 根据概率p决定是否传输数据 |
信道忙时的行为 | 立即开始传输数据 | 等待一个随机时间后重新监听 | 根据概率p决定是否重新监听 |
碰撞的可能性 | 高(当多个设备同时监听信道) | 低(等待随机时间片段) | 中等(取决于p的值和竞争情况) |
等待时间 | 无等待 | 随机等待时间片段 | 随机等待时间片段 |
适用性 | 适用于低碰撞概率,高速局域网 | 适用于高碰撞概率,低速局域网 | 适用于中等碰撞概率和速率的局域网 |
CSMA/CD协议
CSMA/CD (CSMA with Collision Detection,载波监听多路访问/碰撞检测) 是 CSMA 的一种拓展,在了解这个知识之前,请确保你已经明晰了什么是 CSMA 中的 CS(Carrier Sense 即 载波监听),以及什么是 CSMA 中的 MA(Multiple Access 即 多路访问)。
CSMA/CD 比 CSMA 多出一个 CD(Collision Detection 即 碰撞检测)的功能。 在上文中我们提到,CSMA 中监听到信道空闲可能是 “虚假的”,所以在 CSMA 发送数据后介质中也许会发生冲突,但 CSMA 只能依靠非常原始的方案处理冲突。
CSMA/CD 就高级一些,在发送数据期间,我们刚刚提到的 监测器件(Carrier,就是 CSMA 中 C 的简称)会一直监听有没有冲突发生, 如果有冲突的话,就等待一段随机的时间,然后重试以上过程,并且发送一个特殊信号告诉其他设备发生了冲突。
上图说明了 碰撞检测的功能,这里需要内化 传播时延和传输时间 这两个概念:
- 传输时延 = 距离 / 信号传播速度
- 传输时间 = 数据大小 / 数据传输速率
碰撞发生的时间和检测到碰撞的时间是不一样的,在上图中竖线表示时间轴,通过时间轴我们可以得知某个事件发生的时间。
CSMA/CD 可以使用的限制条件:帧的传输时延至少要两倍于信号在总线上的传播时延
为了在一个帧的发送过程中检测到冲突,发送站必须在整个帧发送完毕之前收到冲突信号。如果一个站点在发送完整个帧后才能检测到冲突,那么冲突的数据就已经在网络上传输完毕了,这样无法避免数据的损坏。
这种机制是基于这样一个事实:冲突的信号需要在网络上传播并被发送站检测到,发送站才会知道发生了冲突。因此,如果帧的传输时延太短,发送站可能在信号冲突返回之前就已经发送完毕了帧,导致无法检测到冲突。为了确保冲突能够被检测到,必须要求帧的传输时间足够长,以便在帧发送结束前,冲突信号能够返回到发送站。
这里再总结一下 CSMA/CD 的流程:
- 监听信道(Carrier Sense):设备在尝试发送数据之前首先监听物理信道,检查是否有其他设备正在传输数据。如果信道忙,则设备等待,直到信道变为空闲。
- 等待随机时间(Backoff):如果信道忙,设备会随机选择一个退避时间(Backoff time),然后等待该时间段,以便稍后重新尝试发送数据。这个随机等待时间有助于减少碰撞的概率,因为不同设备的退避时间可能不同。
- 发送数据:当设备检测到信道为空闲时,它可以开始发送数据帧。设备发送数据时会继续监听信道,以检测是否发生碰撞。
- 碰撞检测(Collision Detection):如果两个或多个设备同时发送数据并发生碰撞,它们会检测到碰撞并立即停止发送。这是通过在发送过程中持续监听信道来实现的。如果设备在发送数据时检测到信道上的信号强度增加(即碰撞),它会立即停止发送,以避免数据损坏。
- 碰撞处理:一旦设备检测到碰撞,它会发送一个特殊的信号(碰撞信号)通知其他设备发生了碰撞。所有参与碰撞的设备将等待一段随机的时间,然后重新尝试发送数据。
- 重传数据:设备在等待随机时间后,会重新尝试发送数据。如果再次发生碰撞,设备将重复上述碰撞处理步骤,直到成功发送数据或达到最大重传次数(通常是16次)为止。
- 成功发送或放弃:如果设备成功发送数据(即没有发生碰撞),接收设备将确认数据的接收。如果设备多次尝试发送数据但仍然无法成功,它最终会放弃发送,以避免网络过度拥塞。
CSMA/CA协议
CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)是一种用于无线局域网(如Wi-Fi)中的协议,用于协调多台无线设备共享通信媒体的访问。与CSMA/CD不同,CSMA/CA采用碰撞避免而非碰撞检测的方式来管理共享媒体。以下是CSMA/CA的主要过程:
- 侦听信道(Carrier Sense):当一个设备想要传输数据时,它首先侦听信道,检查信道是否忙碌。如果信道被其他设备使用,当前设备会等待一段随机的时间再次检测信道是否空闲。这是为了避免同时尝试发送数据而导致碰撞。
- 发送请求(Request to Send,RTS):如果信道在一段时间内保持空闲,设备可以选择发送一个RTS帧,该帧包含了将要传输的数据的信息。这个RTS帧通知其他设备,该设备打算发送数据,以防止其他设备在此期间发送数据。
- 清除发送请求(Clear to Send,CTS):如果其他设备接收到RTS帧并且信道仍然空闲,它会发送CTS帧作为响应。CTS帧确认了该设备的数据传输请求,并告诉发送设备可以开始传输数据。
- 数据传输:一旦设备收到CTS帧,它可以开始传输实际的数据帧。其他设备会侦听传输,以确保不会干扰正在传输的设备。
- ACK帧(Acknowledgment):接收设备在成功接收到数据后发送一个ACK帧,以通知发送设备数据已被成功接收。如果发送设备没有收到ACK帧,它会假定数据包已丢失,然后根据需要重新传输数据。
IFS 是什么?
IFS(Interframe Space)是指不同类型帧之间的时间间隔,用于控制和协调设备之间的通信。IFS的作用是为了确保在无线网络中的设备之间进行有效的共享媒体访问,并减少冲突。
Short Interframe Space (SIFS):当设备发送一个数据帧后,它会等待SIFS时间,以便快速发送另一个数据帧或发送ACK(确认)帧作为响应。
Distributed Interframe Space (DIFS):当设备想要发送数据时,它首先侦听信道,如果信道被其他设备占用,则等待一个DIFS的时间,然后再次侦听信道。