介质访问控制

需熟练掌握信道划分以及随机访问信道控制的各种方式,在选择题中会考察。除此外,需理解 CSMA/CD 的细节,在往年真题的大题中也考察过。

共享介质

共享介质
A
B
C
D
E

在介绍 MAC 概念之前,必须要说明一下共享介质的概念。

在一个网络环境中,多个设备可能需要同时访问同一个物理介质来发送数据,这个介质可以是电缆、光纤或者无线信道。

当设备发送数据时,数据包会在整个介质上传播,所有连接到该介质的设备都可以接收到数据包。如果多个设备同时发送数据,介质上的数据信号就会相互冲突进而导致错误。

所以 MAC 协议确保了 共享介质上的 有效、公正且有序的数据传输。

MAC 方式总结

介质访问控制(MAC,Media Access Control)可以分为 信道划分 以及 随机访问 两种大方向。

信道划分 介质访问控制:也叫做多路复用,在一条传输介质上同时传输多个不同种类的信号(种类可以根据不同的参数进行划分),这样不同的设备可以发送特定类型的信号,并且不同信号之间相互不干扰,信道划分 访问控制可以分为以下几种:

  • FDM:频分多路复用
  • TDM:时分多路复用
  • WDM:波分多路复用
  • CDM:码分多路复用

随机访问 介质访问控制是指多台设备共享同一个通信介质时,它们可以随机地尝试发送数据,而不需要事先协调,当发生冲突后再做后续的协调,以保证不会接收到错误的数据。

  • ALOHA
  • CSMA
  • CSMA/CD
  • CSMA/CA

多路复用

多路复用(Multiplexing)是一种技术,用于在同一传输介质上同时传输多个信号,包含频分多路复用(FDM)、时分多路复用(TDM)、波分多路复用(WDM)和码分多路复用(CDM)四种。

FDM

频分多路复用(FDM)将可用带宽划分为若干个不重叠的频段,每个信号占用一个频段。各个信号可以同时传输,但彼此之间不会干扰,因为它们占用不同的频率。

MUX
channel 1 (f1)
DEMUX
channel 2 (f2)
channel 3 (f3)
frequency
FDM

FDM 在传统的模拟电话系统和广播中广泛使用。

TDM

时分多路复用(TDM)将时间划分成若干个时隙,每个信号在不同的时隙中传输。所有信号在时间上轮流使用同一传输介质。

MUX
1
DEMUX
2
3
4
1
2
3
4
1
2
3
4
TDM

TDM 常用于数字通信系统,如数字电话网络。

WDM

波分多路复用(WDM)是 FDM 的一种应用,主要用于光纤通信。它将光纤的可用带宽划分为多个波长(颜色),每个信号占用一个波长。

MUX
DEMUX
WDM

WDM 技术可以大幅增加光纤的通信容量,广泛应用于长距离和高速光纤网络。

CDM

码分多路复用(CDM)使用不同的编码来区分各个信号。所有信号可以在同一频带上同时传输,但通过使用不同的编码序列来避免相互干扰。

虽然 CDM 的概念可以用在许多不同的传输系统中,但在实践中,它主要作为 码分多址CDMA,Code Division Multiple Access) 的基础技术。

在 CDMA 中,每一个比特时间划分为 m 个短的时间槽,称为码片(chip),每个站被指派一个惟一的 m bit 码片序列(chip sequence) 。

  • 如果发送比特 1,则发送自己的 m 位码片序列。
  • 如果发送比特 0,则发送该码片序列的二进制反码。

简单理解就是,A 站向 C 站发出的信号用一个向量来表示,B 站向 C 站发出的信号用另一个向量来表示,两个向量要求相互正交。向量中的分量,就是所谓的码片。

当两个或多个站点同时发送时,各路数据在信道中线性相加。为了从信道中分离出各路信号,要求各个站点的码片序列相互正交。

令向量 $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 \overline{S} = \frac{1}{m} \sum_{i=1}^{m}{S_i \cdot \overline{S_i}} = 0$$

举个实际的例子来说明。令向量 $S$ 表示 A 站的码片向量,$T$ 表示 B 站的码片向量。假设 A 站的码片序列被指派为 00011011,则 A 站发送 00011011 就表示发送比特 1,发送 11100100 就表示发送比特 0。为了方 便计算,将码片中的 0 写为-1,将 1 写为+1,因此 A 站的码片序列是(-1 -1 -1 +1 +1 -1 +1 +1)。

令 $T$ = (-1 -1 +1 -1 +1 +1 +1 -1),可以观察到,不管是 $T$ 还是 $\overline{T}$,都有四个码片的值与 $S$ 相反,所以 $S \cdot T = 0$。

当 A 站向 C 站发送数据 1 时,就发送了向量 (-1 -1 -1 +1 +1 -1 +1 +1)。

当 B 站向 C 站发送数据 1 时,就发送了向量 (+1 +1 -1 +1 -1 -1 -1 +1)。

两个向量在公共信道上叠加,实际上是线性相加,得到 $S + \overline{T}$ = (0 0 -2 2 0 -2 0 2)。

ALOHA 协议

ALOHA 协议是一种早期开发的随机访问协议,用于在共享信道上传输数据。ALOHA 有两种基本类型:纯 ALOHA 和时隙 ALOHA。

  • 纯 ALOHA:用户可以在任何时间发送数据包。由于没有时间同步,数据包之间容易发生冲突。
  • 时隙 ALOHA:时间被分成离散的时隙,用户只能在时隙的开始发送数据包。这种方法通过同步发送时间,减少了冲突的概率。

纯 ALOHA

纯 ALOHA(Pure ALOHA)是一种简单的随机接入协议,允许用户在任意时刻发送数据包,而无需对时间进行任何同步或分时。 由于用户可以在任何时间发送数据包,数据包之间可能会发生冲突。

Station1
Station1
Station2
Station2
Station3
Station3
Station4
Station4
Frame 1.1
Frame 1.1
Resend
Resend
Frame 1.2
Frame 1.2
Frame 2.1
Frame 2.1
Resend
Resend
Frame 3.1
Frame 3.1
Resend
Resend
Frame 4.1
Frame 4.1
Frame 2.1
Frame 2.1
Frame 4.1
Frame 4.1
Frame 3.1
Frame 3.1
Collision
duration
Collision...
Collision
duration
Collision...
Resend
Resend
Text is not SVG - cannot display

工作原理:

  • 用户随时发送数据包。
  • 如果数据包成功到达接收端,则传输完成。
  • 如果发生冲突(即两个或多个用户同时发送数据包),相关用户需要等待随机的时间后重传。

时隙 ALOHA

时隙 ALOHA(Slotted ALOHA)在纯 ALOHA 的基础上引入了时间同步,将时间划分为一系列等长的时隙。用户只能在时隙的开始发送数据包。

Station1
Station1
Station2
Station2
Station3
Station3
Station4
Station4
Frame 1.1
Frame 1.1
Frame 1.2
Frame 1.2
Frame 2.1
Frame 2.1
Resend
Resend
Frame 3.1
Frame 3.1
Resend
Resend
Frame 4.1
Frame 4.1
Frame 2.1
Frame 2.1
Frame 4.1
Frame 4.1
Frame 3.1
Frame 3.1
Slot 1
Slot 1
Resend
Resend
Slot 2
Slot 2
Slot 3
Slot 3
Slot 4
Slot 4
Slot 5
Slot 5
Slot 6
Slot 6
Text is not SVG - cannot display

工作原理:

  • 时间被划分为等长的时隙。
  • 用户在时隙的开始时发送数据包。
  • 如果一个时隙内只有一个用户发送数据包,则传输成功。
  • 如果多个用户在同一时隙发送数据包,发生冲突,相关用户等待随机时间后重传。

CSMA 协议

CSMA(Carrier Sense Multiple Access)的中文叫做 载波监听多路访问,理解 CSMA 的关键在于理解它的名称中的两个部分:载波监听 以及 多路访问:

  • 载波监听(Carrier Sense):因为 CSMA 是随机访问介质控制的一种方式,所以在发送数据前,必须确定当前通信介质中没有其他设备正在发送数据。所以载波监听可以被理解为以太网口内部芯片自带的一种功能,具体而言就是一种可以监听 信道在当前位置是否有数据传输的 的一种功能。
  • 多路访问(Multiple Access):多个设备可以访问同一个通信介质。这意味着在任何给定时间,任何设备都可以尝试发送数据。

所以 CSMA 可以理解为 通过 载波监听 避免冲突,进而实现共享介质上的 多路访问

以下图为例,A、B、C、D 分为是连接到同一共享介质上的不同设备,当 A 开始发送数据时,B、C、D 分别会在不同的时刻监测到信号,具体的时刻为 设备与 A 之间的距离 / 信号传播速度

A
B
C
D
Time
Time
传输时间
B 感知到信号
C 感知到信号
D 感知到信号
传播时延 =
不可靠的时间段

这里需要深入理解 传播时延和传输时间 这两个概念:

  • 传输时延(propogation time) = 距离 / 信号传播速度
  • 传输时间(transmission time) = 数据大小 / 数据传输速率

CSMA 的问题在于它无法处理碰撞,当一个设备监听到当前介质中无信号时,它就可以发送数据,但监听得到的结果可能是 “假结果”。因为有可能其他设备已经发送信号了,只是信号由于传播时延还没有到达当前设备。

所以假设当前设备监听得到了 “假结果”,那么此时发送数据后介质上就会发生冲突。比如假设 C 在 A 的信号到来之前检测得到假结果,然后发送帧,这个时候信道中就会出现冲突:

A
B
C
D
Time
Time
传输时间
冲突在此刻发生

那么 CSMA 如何处理冲突呢?(了解即可)

如何处理冲突

CSMA 不具备碰撞处理的功能,冲突处理是 CSMA/CD 的功能。 这意味着在 CSMA 中,设备不会主动检测到碰撞。

但是 CSMA 也具备一定冲突处理的功能,这依赖于超时和重传机制。

在 CSMA 中,发送设备在传输数据后会等待确认响应(如 ACK,Acknowledgment 确认帧)。如果发生碰撞,接收设备无法正确接收数据,因此不会发送确认帧。 发送设备在等待一段时间后没有收到确认响应,推断可能发生了数据丢失(可能由于碰撞)。

这个知识了解即可,目的是帮助大家理清 CSMA 和 CSMA/CD 的区别。下文通过一个实例说明 CSMA 的冲突处理功能:

假设有两个设备 A 和 B,它们都使用 CSMA 协议并共享同一个信道:

  1. 初始状态:信道空闲,设备 A 和 B 都准备发送数据。
  2. 监听信道:A 和 B 都监听信道,发现信道空闲。
  3. 发送数据:A 和 B 几乎同时开始发送数据,由于没有碰撞检测机制,它们不知道发生了碰撞。
  4. 碰撞发生:A 和 B 的数据在信道上发生冲突,接收设备无法解码出有效数据,因此不会发送确认帧。
  5. 等待确认:A 和 B 等待一段时间,发现没有收到确认帧,推断可能发生了碰撞。
  6. 重传尝试:A 和 B 各自等待一个随机时间(不同的随机时间),然后重新尝试发送数据。

CSMA 也 根据其在信道空闲时的行为分为三种类型,如下所示:

特征1-persistent CSMANon-persistent CSMAp-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 的简称)会一直监听有没有冲突发生, 如果有冲突的话,就等待一段随机的时间,然后重试以上过程,并且发送一个特殊信号告诉其他设备发生了冲突。

A
B
C
D
Time
Time
t1
t4
冲突发生的时刻
A 感知到
冲突
C 感知到
冲突
t2
t3

以上图为例,假设 A 向 D 发送一段数据,C 向 A 发送一段数据,我们可以观察到:冲突发生的时间点 和 设备检测到冲突的时间点是不同的。 当 A 和 C 检测到冲突发生时,它们会立即停止发送,并且发送信号通知其他设备该次碰撞:

A
C
t1,A 发送数据
A
C
C 检测到信道空闲,发送数据
A
C
A
C
t2,发生冲突
STOP
t3,C 检测到冲突,
停止发送
A
C
STOP
t4,A 检测到
发生冲突

流程

CSMA/CD 的工作流程如下:

  1. 准备发送:适配器从网络层获得一个分组,封装成帧,放入网络适配器缓存准备发送。
  2. 检测信道:监听信道是否空闲,若信道空闲,则开始发送该帧;若信道忙,则持续检测直至信道空闲。
  3. 在发送过程中,适配器仍然持续检测信道。这里只有如下两种可能。
    • 发送成功:在争用期内一直未检测到冲突,该帧肯定能发送成功。
    • 发送失败:在争用期内检测到冲突,此时立即停止发送,并且广播碰撞通知信号。接着适配器执行指数退避算法, 等待一段随机时间后返回到步骤 2。若重传 16 次仍不能成功,则停止重传并向上报错。
开始
监听信道
信道
发送数据
无冲突
?
发送数据
广播碰撞信号
重传次数
> 16?
指数退避
Y
N
Y
N
N
Y

限制条件

CSMA/CD 可以使用的限制条件:帧的传输时延至少要两倍于信号在总线上的传播时延

为了在一个帧的发送过程中检测到冲突,发送站必须在整个帧发送完毕之前收到冲突信号。如果一个站点在发送完整个帧后才能检测到冲突,那么冲突的数据就已经在网络上传输完毕了,这样无法避免数据的损坏。

这种机制是基于这样一个事实:冲突的信号需要在网络上传播并被发送站检测到,发送站才会知道发生了冲突。因此,如果帧的传输时延太短,发送站可能在信号冲突返回之前就已经发送完毕了帧,导致无法检测到冲突。为了确保冲突能够被检测到,必须要求帧的传输时间足够长,以便在帧发送结束前,冲突信号能够返回到发送站。

A
B
Time
Time
A
B
Time
Time
B 在这个时刻接收到最后一个比特
最小传输时长 = 2 ×最大传播时延

最小帧大小 = 带宽 ×最小传输时长
A 在这个时刻传输结束
B 在 A 发送的信号刚到达的前一瞬间
开始发送数据
A 必须还在传输数据,也就是说数据传输还没有结束,
才能在这个时刻检测到冲突
一般的冲突场景
碰撞的边界情况
冲突在这个时刻发生

CSMA/CA 协议

CSMA/CD 适用于以太网(使用有线连接的局域网),但在无线局域网(WLAN,Wireless LAN)中无法直接使用 CSMA/CD,主要有以下原因:

  1. 无线设备不能同时“听”和“说”:无线收发器在发送数据时,无法同时监听信道来判断是否发生碰撞。
  2. 信道干扰比有线环境严重:无线信号受环境干扰更大,误判空闲或碰撞的概率更高。
  3. 隐蔽站问题:假设 A 和 C 两台无线设备都想给 B 发送数据,但 A 和 C 彼此“看不到”,只看到 B 是空闲的。结果就是 A 和 C 同时给 B 发送,发生碰撞,但它们却以为没事。

为此,802.11 标准定义了广泛用于无线局域网的 CSMA/CA 协议,它对 CSMA/CD 协议进行修改,将冲突检测改为冲突避免(Collision Avoidance,.CA)。“冲突避免”并不是指协议可以完全避免冲突,而是指协议的设计要尽量降低冲突发生的概率。

流程

Source
Destination
Other Nodes
DIFS
SIFS
RTS
CTS
CTS
DATA
ACK
ACK
SIFS
SIFS
Delay
Access
  1. 侦听信道(Carrier Sense):当一个设备想要传输数据时,它首先侦听信道,检查信道是否忙碌。如果信道被其他设备使用,当前设备会等待一段随机的时间再次检测信道是否空闲。这是为了避免同时尝试发送数据而导致碰撞。
  2. 发送请求(Request to Send,RTS):如果信道在一段时间内保持空闲,设备可以选择发送一个 RTS 帧,该帧包含了将要传输的数据的信息。这个 RTS 帧通知其他设备,该设备打算发送数据,以防止其他设备在此期间发送数据。
  3. 清除发送请求(Clear to Send,CTS):如果其他设备接收到 RTS 帧并且信道仍然空闲,它会发送 CTS 帧作为响应。CTS 帧确认了该设备的数据传输请求,并告诉发送设备可以开始传输数据。
  4. 数据传输:一旦设备收到 CTS 帧,它可以开始传输实际的数据帧。其他设备会侦听传输,以确保不会干扰正在传输的设备。
  5. ACK 帧(Acknowledgment):接收设备在成功接收到数据后发送一个 ACK 帧,以通知发送设备数据已被成功接收。如果发送设备没有收到 ACK 帧,它会假定数据包已丢失,然后根据需要重新传输数据。

IFS

由于无线信道的可靠程度不如有线网络,所以 802.11 标准使用 停等方案,即站点每通过无线局域网发送完一帧,就要在收到对方的确认帧后才能继续发送下一帧。

为了尽量避免冲突,802.11 标准规定,所有站完成发送后,必须等待一段很短的时间(继续监听)才能发送下一帧。这段时间称为帧间间隔(InterFrame Space,IFS)。帧间间隔的长短取决于该站要发送的帧的类型。802.11 标准使用了下列三种 IFS:

  • SIFS(Short IFS):当设备发送一个数据帧后,它会等待 SIFS 时间,以便快速发送另一个数据帧或发送 ACK(确认)帧作为响应。
  • DIFS(Distributed IFS):当设备想要发送数据时,它首先侦听信道,如果信道被其他设备占用,则等待一个 DIFS 的时间,然后再次侦听信道。
  • PIFS(Point Coordination IFS):中心协调器使用 PIFS 来在其他设备竞争前抢占信道。