组帧

💡低优先级

较少考查,了解下几种组帧方法的原理即可。

数据链路层的主要功能之一就是 组帧

帧(frame)代表数据链路层的数据发送单位,在接收到来自于网络层的报文(packet)时如何为其添加帧头和帧尾,并且以何种方式进行 帧定界(接收方区别连续不同的帧)。

组帧的关键就在于 帧定界,也就是对于接收方来说,它能够以某种方式区分连续收到的不同帧。
从这个角度出发,组帧 方式可以被分为以下几种:

字符计数法

字符计数法 是在帧的首部设置一个计数字段,用来指示该帧中包含的字符(或字节)数量。

当接收方开始读取一帧时,首先读取位于 帧首部的计数字段。通过该字段的数值,接收方即可知道该 帧的总长度(即后续应读取的字符数)。随后,接收方按照得到的长度继续读取剩余的数据,直至完整地接收完本帧。

字符填充法

首位定界字符法(字符填充法)即 使用特殊控制字符标志帧的开始和结束

但是使用这种方式可能出现如下问题:就是 首位定界字符 可能会在帧内部出现,这个时候就会造成歧义。

所以当特殊字符出现在帧的数据部分时,需要用 转义字符 ESC 来对特殊字符进行转义,同样,ESC 出现在数据部分同样需要转义。

以上图为例,假设我们使用 FLAG 作为 首位定界字符 的话,那么当 FLAG 出现在数据部分时,我们需要对 FLAG 进行转义,需要注意的是,因为我们使用 ESC 作为转义字符,所以当数据中出现 ESC 时,我们也需要对转义字符自己进行转义。

接收方收到 ESC 后,将 ESC 本身丢弃,并无条件将下一个字节视为普通数据,不管它是 FLAG、ESC 还是其他控制字符,都原样还原为数据交付上层。

零比特填充法

零比特填充法(Bit Stuffing)与首位定界字符法思路类似。

用 01111110 作为一个新的数据帧的开头,这里的关键在于要对数据帧内容中与 01111110 相同的部分进行转义,转义的方式如下:

  • 在 发送方
    • 每当数据中出现 连续 5 个 '1' 时,
    • 就自动插入一个 '0',避免形成 6 个连续的 '1'(即避免形成 01111110)。
  • 在 接收方
    • 每当检测到 连续 5 个 '1' 后跟着一个 '0',就去掉这个 '0',还原原始数据。
    • 在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。零比特填充法 很容易由硬件来实现,性能优于字符填充法

对于 零比特填充法,需要记住 01111110 这种开头的比特填充方式以及具体如何进行转义。

违规编码法

违规编码法(Physcial Layer Coding Violations)使用特殊电平进行定界。比如,曼彻斯特编码 将数据比特“1”编码为“高 - 低”电平,将比特“0”编码为 “低-高” 电平对,而 “高-高” 电平对和 “低-低” 电平对是没有被使用的,所以可以用这两个电平进行帧定界。

两大帧格式

差错控制

💡低优先级

说实话本节细节极多但是考查频率很低,考的话一般是在选择题考一题,这一节的几个知识点说实话只能硬背了,大家可以根据自身精力决定要不要搏一搏这可能出现的两分。

真题练习

分类

  • 检错编码:奇偶校验码、循环冗余码
  • 纠错编码:海明码

奇偶校验码

奇偶校验码(Parity Check Code)是一种 简单高效 的错误检测机制,广泛应用于数据传输和存储系统中,用于发现 单比特错误。其核心思想是通过添加一个 校验比特(parity bit),确保数据中“1”的总数符合特定的奇偶规则。

奇偶校验码有两种常见的类型:奇校验 和 偶校验

  1. 奇校验(Odd Parity):
    • 校验比特的值使数据(包括校验比特)中“1”的总数为 奇数
    • 例如,若原始数据“1”的个数为 偶数,校验比特设为 1;若为 奇数,设为 0
    • 若接收端检测到“1”的总数为 偶数,则说明传输中存在错误。
  2. 偶校验(Even Parity):
    • 校验比特确保数据中“1”的总数为 偶数
    • 例如,若原始数据“1”的个数为 奇数,校验比特设为 1;若为 偶数,设为 0
    • 若接收端检测到“1”的总数为 奇数,则表明数据出错。

奇偶校验码的 工作原理 如下:

  • 发送端:根据奇校验或偶校验规则,计算原始数据中 “1” 的个数,设置校验比特,并将数据连同校验比特一起发送。
  • 接收端:检查接收到的数据(包括校验比特)中 “1” 的总数是否符合预设的奇偶规则。若不符合,说明传输过程中可能发生了单比特错误。

奇偶校验的工作原理是发送端计算数据中所有比特的总数,并根据所选的奇偶性规则设置校验比特的值。接收端在接收数据后再次计算所有比特的总数,包括校验比特,然后检查总数是否满足所选的奇偶性规则。如果总数不符合规则,接收端将检测到错误。

循环冗余码

循环冗余校验(CRC, Cyclic Redundancy Check)是一种常用的数据完整性校验方法,广泛应用于数据传输和存储系统中,用于检测数据在传输过程中是否发生了错误。其核心思想是将数据视为一个二进制多项式,并使用特定的 生成多项式 对其进行 模 2 除法,最终所得的余数即为 CRC 校验值。

校验流程

CRC 的基本校验过程包括以下几个步骤:

  • 生成多项式
    CRC 的关键是一个预先定义好的 生成多项式,通常用二进制数表示。该多项式必须在发送端和接收端之间事先达成一致。

  • 计算校验码(发送端)
    发送端将待发送的数据帧看作一个二进制多项式,然后在数据末尾附加 k-1 个 0(其中 k 是生成多项式的位数),得到 扩展数据。将这组数据用 模 2 除法 除以生成多项式,得到的余数即为 CRC 校验码

  • 附加并发送
    将上述余数作为 CRC 校验码,附加在原始数据帧之后,组成完整的传输数据帧并发送。

  • 校验(接收端)
    接收端收到数据后,以相同方式使用 生成多项式 进行 模 2 除法。如果计算结果的余数为 ,则说明数据在传输过程中未发生错误;否则表示数据已损坏。

发送方

假设原始数据为:1010001101,选用的生成多项式为:110101,则对应多项式形式为:

发送方计算 CRC 校验码的操作流程如下:

  1. 扩展数据:生成多项式是 6 位,因此我们在数据尾部补上 6-1 = 5 个零,得到扩展数据:101000110100000

  2. 模 2 除法计算 CRC(使用异或操作)

              110101011
       ------------------
110101 | 101000110100000
         110101
         ------
          111011
          110101
          ------
            111010
            110101
            ------
              111110
              110101
              ------
                101100
                110101
                ------
                 110010
                 110101
                 ------
                   01110

最终余数为:01110,所以完整的数据帧为:1010001101 01110

注意,除下来只取 部分余 的 位,往后除就把上面一位落下来比较

接收方

继续以上述例子进行说明,接收方收到的数据为:101000110101110

同样使用生成多项式 110101 进行 模 2 除法

              110101011
       --------------------------------------
110101 | 101000110101110
         110101
         ------
          111011
          110101
          ------
            111010
            110101
            ------
              111110
              110101
              ------
                101111
                110101
                ------
                 110101
                 110101
                 ------
                      0

余数为 0,表示数据帧未被破坏,校验通过

注意

使用异或进行 CRC 计算

在 CRC 运算中,模 2 除法的“减法”实际上就是按位 异或 操作(XOR)。这是因为在二进制中,加法和减法在无进位的情况下是等价的。比如:

  • 1 ⊕ 1 = 0 (相当于 1 - 1 或 1 + 1(不进位))
  • 0 ⊕ 0 = 0
  • 1 ⊕ 0 = 1
  • 0 ⊕ 1 = 1

因此,CRC 的除法过程实际上是不断地将当前被除数高位与 生成多项式 对齐后进行 异或 操作,然后向右滑动继续处理,直到处理完所有位。

海明码

海明码(Hamming Code)是一种用于 错误检测 和 纠正 的编码方案,通常用于数据传输和存储系统中。它的主要目标是检测和纠正数据中的 单比特错误

海明码的核心思想是在 数据位 之间插入一定数量的 校验位(也称为奇偶校验位),使得每个校验位都负责检查一组特定的位。校验位的数量取决于数据位的数量,并且它们的位置通常是 2 的幂次(即第 1 位、第 2 位、第 4 位……)。

生成过程

以一个 实例 说明海明码的 生成和纠正 过程:

  • 步骤 1:确定校验位数量

假如我们的数据是 1011 ,也就是 4 位。根据海明码的原则,我们需要确定足够的校验位  来满足以下条件:

对于 k=4 (数据位),我们找到最小的  为 3

注意

对于 k 位数据,应该有多少位校验位

假设我们有 k 位数据,我们需要添加 r 位校验位,那么校验位的总数必须满足以下条件:

所有数据位和校验位的总数加起来可以由校验位来表示。也就是说,每一位数据位和校验位在位模式中都有一个唯一的表示。这意味着  必须至少等于  ,其中加 1 是因为校验位模式全为零(即没有错误)的情况也必须被考虑在内,即

  • 步骤 2:放置校验位和数据位

首先将校验位( p )插入到数据位中的适当位置。校验位下标是 2 的幂( 1,2,4,8,… )。

  • 第 1(20) 位:校验位 p1​
  • 第 2(21) 位:校验位 p2​
  • 第 4(22) 位:校验位 p3​

然后再放置剩余的 数据位 d :

  • 第 3 位:数据位 d1​
  • 第 5 位:数据位 d2​
  • 第 6 位:数据位 d3​
  • 第 7 位:数据位 d4​
位置7654321
海明码d4​d3​d2​p3​d1​p2​p1​
数据110-1--

注意

注意到上述我们提到的关于校验位和数据位的第 n 位,下标是从 1 开始 而不是 0 开始的。

  • 步骤 3:计算校验位

首先给出位置下标的二进制表示:

位置7654321
二进制111110101100011010001
  • p1​ 检查位置 1 、 3 、 5 、 7 的位(最低位为 1) 。所以  ,所以 p1​=0 。

  • p2​ 检查位置 2 、 3 、 6 、 7 的位(次低位为 1)。这些位的异或值为  ,所以 p2​=1 。

  • p3​ 检查位置 4 、 5 、 6 、 7 的位(最高位为 1) 。这些位的异或值为 ,所以 p3​=0 。

  • 步骤 4:生成海明码
位置7654321
海明码d4​d3​d2​p3​d1​p2​p1​
数据1100110

所以, 1011 的 (7,4) 海明码是 0110011 。任何一位的单一错误都可以通过分析 校验位 来检测并纠正。

检测和纠错

还是以 上文的例子 来说明海明码检测和纠错的过程。

假设在传输过程中第二位出现了错误,接收的码变为 0010011 。

首先,接收者现在要 重新计算校验位

  • p1​ (位置 1):检查二进制最低位为 1 的位置(1, 3, 5, 7),即 p1​,d1​,d2​,d4​

    • 接收到的 p1​=0 ,所以 p1′​=p1​ ,无错

  • p2​ (位置 2):检查二进制第二位为 1 的位置(2, 3, 6, 7),即 p2​,d1​,d3​,d4​

    • 接收到的 p2​=0 ,所以 p2′​=p2​ ,有错

  • p3​ (位置 4):检查二进制第三位为 1 的位置(4, 5, 6, 7),即 p3​,d2​,d3​,d4​

    • 接收到的 p3​=0 ,所以 p3′​=p3​ ,无错

可以看到有错误发生,接下来需要 生成错误模式

(p1′​⊕p1​,p2′​⊕p2​,p3′​⊕p3​) = (0⊕0,1⊕0,0⊕0) = (0,1,0)

错误模式为二进制 010,十进制值为 2,表示错误在位置 2(即 p2​ )。

最后一步是 纠正错误:位置 2 的值 p2​ 从 0 翻转为 1,得到纠正后的码字:

位置7654321
海明码d4​d3​d2​p3​d1​p2​p1​
修改前1100100
修改后1100110

现在,海明码回到了正确的 0110011 状态。

海明距离

海明距离是指两个等长的比特序列(也称为码字)在对应位置上不相同的比特个数。它是衡量两个码字之间差异程度的重要指标,广泛应用于 编码理论 中,用于分析 错误检测 和 错误纠正 能力。

编码集

在通信或存储系统中,编码集是指用于表示信息的一组码字。每个码字通常是一个固定长度的比特串,通过引入冗余位,编码集可以在传输过程中检测或纠正一定数量的错误。

编码集的关键属性之一是其最小海明距离(记作 dd)——即任意两个不同码字之间海明距离的最小值。它直接决定了该编码集的 容错能力

  • 检错能力:最多可以检测 d−1 位错误。
  • 纠错能力:最多可以纠正  位错误。

最小海明距离越大,意味着码字之间越“分散”,在信道中被干扰后仍然能区分开来,因此检测和纠错能力更强。


举个实际例子,设有一个编码集,其中包含以下三个 4 位码字:

0000, 0110, 1011

我们计算这三组码字之间的海明距离:

  • 0000 与 0110 的海明距离为 2(第2、3位不同);
  • 0000 与 1011 的海明距离为 3
  • 0110 与 1011 的海明距离为 3

因此,该编码集的最小海明距离为 d = 2 。

根据公式,该编码集最多可以:

  • 检测 1 位错误( d−1=1 );

  • 不能纠错( )。

如果我们想要具备1 位纠错能力,最小海明距离至少要达到 3

重点

海明码示例

海明码(Hamming Code) 是一种经典的线性分组码,其最小海明距离为 d=3 。这意味着:

  • 可以 检测最多 2 位错误
  • 可以 纠正 1 位错误

接收端在解码过程中,会计算出一个称为 伴随式(syndrome) 的比特序列,用于判断是否发生了错误,以及错误的位置:

  • 若伴随式为全零,说明数据未被破坏;
  • 若伴随式为非零,且对应某个位的错误模式,则可准确定位并纠正该位;
  • 若发生 2 位错误,伴随式可能不唯一,可检测但不可纠正,因为错误位置无法唯一确定。

流量控制

🔥高优先级

选择题和解答题都经常考查 ARQ 协议,三个重点不能忽略:1. 三种 ARQ 协议的 实现原理。 2. 窗口大小的限制。3. 信道利用率 的计算方法。

这一节都是理解性内容,需要理清背后的原理。

真题练习

流量控制实现的措施是:通过接收方发送的 ACK 动态调整 发送窗口 的大小

ARQ 协议

ARQ 协议是一类 可靠数据传输协议,用于在 不可靠的信道(比如可能出错或丢包的网络链路)上实现 可靠通信

ARQ 协议的 核心思想 是:

  • 发送方在发送数据后,必须等待接收方的确认(ACK)。
  • 如果在规定时间内没有收到确认,就认为数据丢失或出错,需要重传。

原称:自动请求重传协议(Automatic Repeat ReQuest)

ARQ 协议主要包括三种形式:停等(Stop‑and‑Wait)、回退 N 帧(Go‑Back‑N)以及 选择性重传(Selective Repeat)。其中,回退 N 帧和选择性重传统称为 连续 ARQ 协议

注意

ARQ 在哪一层使用

考研模型里默认:

  • 链路层:可能用 ARQ(作为差错控制手段之一),适用于误码率较高的链路
  • 以太网不使用
  • 无线链路、卫星通信会用
  • 传输层:一定用 ARQ(TCP)

但要记住一句本质话:

ARQ 不是某一层专属,而是一种“机制”,可以出现在不同层。

如果 TCP 是保证可靠传输,那么链路层为什么还需要使用 ARQ?

如果链路层不大可靠的话,链路层 ARQ 可以在底层迅速修补了大多数偶发的比特错误,让上面的 TCP 以为链路几乎从不丢包,从而避免了频繁进入“拥塞控制”状态,大幅提升了吞吐量。

停止等待

停等(Stop‑and‑Wait)是一种最基本的 自动重传请求(ARQ)协议。其核心思想是:发送方在发送完每一个数据帧后立即停止发送,并 等待 接收方的 确认(ACK)。只有在收到确认后,发送方才会继续发送下一个帧,或者在收到 否认发分组后,发送方重新发送之前的 数据分组。由于任意时刻网络中只会有一个帧在传输,所以该协议也被称为“停等”。

停等协议的 工作过程 如下:

  1. 发送数据

    • 发送方将一个数据帧发送给接收方。
    • 同时启动 计时器,用于监控该帧的确认是否在规定时间内到达。
  2. 等待确认

    • 在计时器超时之前,发送方保持在“等待”状态。
    • 此期间若收到 确认帧(ACK),则说明该帧已成功到达并被正确接收。
  3. 确认的接收

    • 接收方收到数据帧后,首先检验其完整性(如校验和、序号等)。
    • 若数据帧无误,接收方立即发送 确认帧(ACK)回给发送方;若检测到错误,则不发送 ACK,或是发送 NAK,否认该分组,导致发送方超时后重传。
  4. 计时器到期

    • 若计时器在收到确认之前到期,发送方认为该帧 或 其确认分组(ACK)已丢失。
    • 发送方随后 重新发送 同一数据帧,并重新启动计时器,重复上述过程直至收到有效的确认。

通过上述四个步骤,停等协议实现了可靠的点对点数据传输,尽管其效率受限于 “每次只能发送一个帧” 的特性。

注意

当数据分组成功发送到接收方,但是接收方发送的 确认分组丢失;此时,根据超时重传机制,发送方会再发送一个相同的数据分组。请问该如何解决这样的分组重复情景?

确认丢失

实际上,只需要给每一个数据分组都加上一个用 1 bit 表示的序号,如果接收方接收的分组编号前后一致的情况,说明出现了帧重复,接收方直接丢弃该帧。

注意事项

  1. 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组

  1. 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号,由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1。

  1. 若只在数据链路层实现停止等待协议,因其往返信道时间较固定,不需要给 ACK 分组进行编号

  1. 其中 超时重传的 超时时间一般选为 略大于“从发送方到接收方的平均往返时间”
  • 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
  • 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易

表示 数据分组 发送时延

表示 ACK 分组 + 数据分组 传播时延 (两个传播时延时间差不多都是 )

表示 ACK 分组 发送时延

上述 过程 未考虑 数据的处理时延

回退 N 帧

在 回退 N 帧(GBN,Go‑Back‑N)协议中,发送窗口 指的是发送方在未收到确认的情况下,最多可以连续发送的数据帧数量。它像一个滑动窗口,控制着数据的发送节奏。

发送方可以在等待确认的过程中,连续发送多个帧,但总数不能超出发送窗口的大小。当窗口被填满时,发送方必须停下来等待确认,收到确认后窗口才能向后滑动,从而腾出空间发送新的帧。

对比 停等协议回退 N 帧 的流水线图

补充

回退 N 帧的语义如何理解?

当发送方检测到某个数据帧超时(或收到重复的 ACK / NAK)时,它不会只重传那一帧,而是“回退”到该丢失帧的序号,并重新发送从该序号开始的所有后续帧 —— 即使这些帧之前已经发送过。

回退 N 帧的 核心要点 如下:

  1. 窗口大小

    • 若帧序号使用  位二进制,则序号空间大小为 
    • 为保证不产生歧义,GBN 的发送窗口大小 W 必须满足  ,因此 最大窗口大小 为  。
    • 接收窗口的大小固定为 1,即接收方只能一次接受并确认期望的序号。
  2. 发送过程

    • 只要发送窗口未满,发送方就可以把窗口内的帧依次发送出去。
    • 对于 最早发送且尚未被确认的帧(即窗口中的第一个未确认帧),发送方启动 单一的超时计时器
    • 其余已发送但尚未确认的帧不再单独维护计时器,而是共享这一个计时器。
  3. 接收过程

    • 接收方维护一个 期望序号(expected sequence number)。
    • 当收到的帧序号等于期望序号时,接收方接受该帧并发送 累计确认 ACK(确认该帧及其之前的所有帧)。随后期望序号加 1。
    • 若收到的帧序号不是期望序号(说明前面的某帧丢失),接收方直接 丢弃该帧,并 重新发送最近一次正确接收的帧的 ACK。由于接收窗口为 1,后续已到达但序号不连续的帧都会被丢弃。(帧序号确认是否相同)
  4. 超时与重传

    • 当 超时计时器 触发时,发送方认为窗口中最早的未确认帧已丢失。按照 GBN 的工作原理,发送方会 从该帧开始,把窗口内的所有帧全部 重新发送
    • 这样做的原因是:即使后面的帧已经到达接收方,由于接收窗口仅能接受连续的序号,这些帧会在接收方被丢弃,只有最早丢失的帧被重新发送后,后续帧才能被顺利接收。

通过 GBN、SR 交互演示 可以直观地了解 Go‑Back‑N 与 Selective Repeat 的工作流程,加深对上述概念的理解。

详细介绍了 回退N帧 协议 的所有可能

在信道质量较差(容易出现误码)的情况下,回退N帧协议的信道利用率并不比 停止-等待协议 的信道利用率高

好题

本题,一定程度上说明了画图的重要性,特别是计算最大平均数据传输速率这种带有周期的

当甲机收到第一个确认帧后,后续就是 发送窗口 的连续滑动(结果和并发1000个数据帧一样),形成一个周期性的发送、等待过程

选择性重传

选择性重传(SR,Selective Repeat)是一种 自动重传请求ARQ)协议,专门用于克服回退 N 帧(Go‑Back‑N)在高误码率环境下的效率低下。与 Go‑Back‑N 不同,SR 只 重传 那些真正丢失或出错的帧,而不必重新发送随后所有的帧,从而在误码率较高的链路上表现得更为高效。

选择性重传 的 核心要点 如下:

  1. 窗口大小

    • 在 SR 中,发送窗口和接收窗口的大小保持一致。
    • 若帧序号采用 n 位二进制表示,则窗口的最大取值为 2n−1 (即序号空间的半数),以避免发送方和接收方窗口的重叠产生歧义。
  2. 发送过程

    • 发送方在其发送窗口范围内连续发帧。
    • 每发送一帧,就为该帧启动一个 计时器;计时器独立于其他帧,超时后仅针对该帧进行重传。
  3. 接收过程

    • 接收方接受所有落在接收窗口中的帧,即使这些帧顺序错乱。
    • 对于每一正确收到的帧,接收方立即发送 确认(ACK)。
    • 乱序到达的帧会被 缓存,待窗口前面的缺失帧补齐后,按正确顺序交付给上层。
  4. 超时与重传

    • 当某帧的计时器到期,发送方只 重传 该帧,而不是窗口内的全部帧。这一点是 SR 与 GBN 的根本区别,也是 SR 在高误码率下保持高吞吐量的关键。
  5. 滑动窗口机制

    • 发送方:收到帧的确认后,窗口左边界向前移动,释放已确认的帧槽位,随后可以发送新的帧。
    • 接收方:当缓存的帧已能够连续组成一个完整序列并交付给上层后,接收窗口也向前滑动,腾出空间接收后续帧。
  6. 冲突确认的处理

    • 由于网络延迟,发送方可能在重传帧后才收到该帧的早期确认。
    • 为避免误判,SR 协议必须具备 识别并丢弃重复确认(duplicate ACK)的机制,只对最新、有效的确认作出响应。

协议对比

几种 ARQ 协议的主要区别是通过发送和接收窗口体现的:

[发送窗口] 

  • 定义:发送方在未收到对方确认(ACK)的情况下,允许连续发送的最大帧数量(或数据单元数量)。
  • 作用:控制发送方的数据发送速率,避免因发送过快导致网络拥塞或接收方处理不过来。

[接收窗口]

  • 定义:接收方允许接收并缓存(或直接交付)的帧的最大数量,通常决定了接收方可以接受乱序或非连续帧的能力。
  • 作用:明确接收方能够处理的数据范围(包括按序和乱序数据),超出窗口的数据会被丢弃。

补充

  • 发送窗口:决定发送方能“同时发多少”。

  • 接收窗口:决定接收方能“同时收多少”以及“是否支持乱序接受”。

先考虑一下分别是 ARQ 协议中的哪一种?再判断 发送窗口接收窗口 的大小

注意,有些题目给定了你发送窗口的大小,直接按照 总序号 减去相应窗口大小即可

这里出题会很阴

三个 ARQ 协议的具体区别如下:

重点

窗口大小限制

在说明窗口大小限制之前,必须先区分三种不同的“编号”概念:

  • 绝对编号:指帧在整个逻辑发送流中的真实顺序编号。 该编号会随着发送不断递增:

    绝对编号本身通常认为是无限增长的,仅用于逻辑分析。

  • 序列号(循环编号):协议首部中的编号字段长度有限。 若序列号字段使用  位,则序列号范围为:

    超过后重新从 0 开始循环。

    例如当 () 时:

  • 窗口内编号:是序列号范围的一个子集

补充

协议真正传输的是 序列号(循环编号)

发送窗口与接收窗口本质上是在“循环序列号空间”上滑动。 这可以与 TCP 中的 绝对下标和序列号 进行类比。

假设协议中的序列号字段使用  位,则序列号空间大小为:

发送窗口大小(​ )与接收窗口大小()必须满足:

为什么有这个限制?

根本原因是防止 序列号回绕(wrap around)带来的歧义

当发送窗口和接收窗口的大小之和超过  时,可能出现以下情况:

  • 一个新帧使用了与之前某个仍在网络中滞留的旧帧相同的序列号;
  • 接收方无法区分该帧是“新的合法帧”还是“旧的延迟到达帧”。

通过保证:

可以确保在任何时刻,发送窗口与接收窗口不会在序列号空间中发生重叠,从而避免不同绝对编号的帧使用同一序列号时产生歧义。

信道利用率

在 ARQ 协议中,信道利用率(也叫做链路利用率)是指信道用于传输有效数据的效率,通常定义为 成功传输数据的时间占总传输时间的比例。它反映了协议在给定信道条件下的性能,是评估 ARQ 协议效率的重要指标。

信道利用率 U 可以表示为

其中:

  • ​ :成功传输有效数据的时间。
  • ​ :总时间,包含数据传输、确认、重传以及等待。

计算方法

对于 ARQ 协议,假设信号传播时间为 ​ ,一个数据帧的传输时间为 ​ ,一个确认帧的传输时间为 ​ ,发送窗口的最大值为  ,信号往返时间 

在此情况下,信道利用率 U = 发送数据的时间 / 从发送第一个帧的时间到收到第一个确认帧的时间:

停等协议

对于停等协议,信道利用率为

​​

连续 ARQ 协议

对于使用了滑动窗口的协议(回退 N 帧选择性重传),一次性可以传输 N 个数据帧,信道利用率为

注意有些时候确认帧比较小,在这种情况下确认帧传输时间 ​ 可以忽略。

此外,  ,所以当  ​  时,信道利用率  。

帧长越大 信道速率越快 传播时延越小 信道利用率越高

介质访问控制(媒体接入控制)

🔥高优先级

数据链路层的另一个重点(之前一个是 ARQ 协议),重点掌握 CSMA/CD 的细节,会在选择题和解答题中考查。多路复用和 CSMA/CA 也要熟悉下,会在选择题中考查。

ALOHA 协议说实话没考察过,但是出现过在考纲中,所以还是加在教程中。

真题练习

共享介质

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

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

当设备发送数据时,数据包会在整个介质上传播,所有连接到该介质的设备都可以接收到数据包。

如果多个设备同时发送数据,介质上的数据信号就会相互 冲突 进而导致错误。

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

注意

其实现代网络架构很少有这种共享介质了,但是考研的语境下,只要题目出现:

  • CSMA/CD
  • 冲突(collision)
  • 传播时延
  • 最小帧长

你就要立刻切换到这个模型:

共享信道 + 广播传播 + 半双工

  • 所有设备接在同一根“线”上
  • 一个设备在一个时刻只能发送或者接收数据
  • 任意发送 = 信号扩散到整个网络
  • 所有设备都能“听到”

用一句话总结这个模型:

一人发,全网听;但只认目的地址
重要

MAC 方式总结

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

最好叫做 媒体接入控制,介质访问控制 英译过来的不够形象

[信道划分介质访问控制] 

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

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

[随机访问介质访问控制] 

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

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

MAC 地址

MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址。

主要用来在共享信道中表示 帧的发送和接受地址。

MAC地址有时也被称为物理地址,但是此物理不是网络中的物理层,其属于数据链路层的范畴

  • 一般情况下,普通用户计算机中往往会包含两块网卡:

    • 一块是用于接入有线局域网的以太网卡
    • 另一块是用于接入无线局域网的Wi-Fi网卡
  • 每块网卡都有一个全球唯一的MAC地址

  • 交换机和路由器往往具有更多的网络接口,所以会拥有更多的MAC地址。

综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。(因为一台设备可以有多个网络接口)

对于使用48比特MAC地址的应用程序,IEEE的目标寿命为100年(直到2080年),但鼓励采用64比特作为替代。

字节发送顺序:从第一字节 到 第六字节
字节内比特发送顺序 : b0 到 b7 

多播 MAC 地址的 应用

IP 地址

IP 分组的传播过程

ARP 协议

ARP 高速缓存表(用于地址解析: IP -> MAC)


如果 在 高速缓存表中没有找到对应 IP 的 MAC地址,则发送 ARP请求报文(目的地址 填 广播地址)寻找对应 IP 的MAC地址

随后发送 ARP 响应报文(单播) 如果发现 MAC 地址不匹配, 则在数据链路层就被网卡拦下

ARP 表项 对应 有两种类型:

  1. 动态:自动获取,生命周期默认为两分钟;

  2. 静态:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。

静态划分信道(非争用)

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

FDM

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

中间用 隔离频带 隔离各个频段。

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

TDM

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

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

WDM

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

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

可以达到 的传输距离

CDM

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

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

CDM最初是用于军事通信的,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。

随着技术的进步,CDMA设备的价格和体积都大幅度下降,因而现在已广泛用于民用的移动通信中

[CDMA] 

在 CDMA 中,每一个 比特时间 划分为 m 个短的 时间槽,称为 码片(chip),使用CDMA的每一个站被指派一个唯一的 码片序列(Chip Sequence)

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

分配给每个站的码片序列 (chip sequence)必须各不相同,实际常采用伪随机码序列 。

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

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

令向量 S 表示站 S 的码片向量,令 T 表示其他任何站的码片向量。两个不同站的码片序列正交,就是向量 S 和 T 的规格化内积(inner product)都是

任何站的码片向量和该码片反码的向量的规格化内积都是

CDMA 的过程可以通过下图辅助理解:

上图以一个实例展示了 CDMA 的过程:

  1. 站点A:码片序列S = (-1,-1,-1,+1,+1,-1,+1,+1),发送比特1,所以发送原序列S

  2. 站点B:码片序列T = (-1,-1,+1,-1,+1,+1,+1,-1),但在这个例子中发送的是T̄(反码),这意味着B站实际发送的是比特0

  3. 信道叠加:S + T = (0,0,-2,+2,0,-2,0,+2)

  4. 信号分离

    • 恢复A的信号:接收信号·S = +1 → 比特1 ✓
    • 恢复B的信号:接收信号·T = -1 → 比特0 ✓
  5. 正交性:S·T = 0,保证了两个信号可以完全分离

动态接入控制(共享介质)

受控接入(非争用)

令牌接入

轮询访问控制中,各站点不能随机发送信息,而是通过一个集中控制的监控站,轮询每个节点,来决定信道的分配。

典型的轮询访问控制协议是 令牌传递协议(令牌环)

令牌作为一种特殊的控制帧来传输,其本身不包含数据,仅用于控制信道使用,只有获得令牌的介质才能够传输数据。这种方式有两个优点,即

  • 持有令牌的介质才能够传输数据,这样能够保证不会有报文冲突情况。
  • 每个介质都有平等获取令牌的机会,这样保证了即使网络拥堵也不会导致性能下降。

缺点:

  • 因为只有持有令牌的介质才能发送数据,所以即使在网络不太拥堵的情况下,其利用率也达不到 100%。

IEEE 802.5 令牌环网络中 令牌和数据的传递过程

  1. 当网络空闲时,环路中只有令牌帧在循环传递。

  2. 当令牌传递到有数据要发送的站点时,该站点修改令牌中的一个标志位,并在令牌中附加需要传输的数据,从而将令牌转换为一个数据帧,并将其发送出去。

  3. 数据帧沿着环路传输,各中间站点一边转发该帧,一边检查其目的地址。若目的地址与本站地址相同,则复制该数据帧用于本地处理,但仍继续转发。

  4. 数据帧沿环路继续传输,直至返回源站。源站识别出这是自己发出的帧后,便不再转发,并通过检验返回的帧判断传输过程中是否出错;若出错,则安排重传。

  5. 源站完成数据发送后,重新生成一个令牌,并传递给下一站点,交出信道控制权。

适合情景: 高负载的广播信道

它通过严格限制同一时刻仅有一个站点拥有发送权限,从根本上避免了冲突

随机接入(争用)

ALOHA 协议

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

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

ALOHA 如何检测冲突

在纯 ALOHA 中:

发送端 直接发,不监听信道

也没有“边发边检测”的能力

那怎么知道冲突了?

靠 ACK(确认应答)机制

接收端会对数据进行差错校验,只有当接收端成功接收并通过差错校验(如 CRC)时
才会发送 ACK

纯 ALOHA

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

工作原理:

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

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

工作原理:

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

CSMA 协议

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

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

  • 多路访问(Multiple Access):多个设备可以访问同一个 通信介质。这意味着在任何给定时间,任何设备都可以尝试发送数据。

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

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

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

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

所以假设当前设备监听得到了“假结果”,那么此时发送数据后介质上就会发生 冲突

那么 CSMA 如何处理冲突呢?

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

所以实际应用中基本没有使用 “纯CSMA” 的协议,因为因为它 只监听信道是否空闲,但:

不能检测冲突(不像 CSMA/CD)
也不避免冲突(不像 CSMA/CA)
一旦多个设备在信道刚空时同时发送,必然冲突,没有机制处理

这在真实网络中会导致高碰撞率和低效率。

实际应用的都是 CSMA 的变种:

| 协议 | 是否实际应用 | 应用场景 | 特点 |
| ----------- | ------ | --------------- | ----------------- |
| CSMA | ❌ 几乎没有 | 教学概念 | 只监听,不检测、不避免、不重传 |
| CSMA/CD | ✅ 是 | 有线以太网(Ethernet) | 监听 + 冲突检测 + 退避 |
| CSMA/CA | ✅ 是 | 无线局域网(Wi-Fi) | 监听 + 冲突避免 + ACK确认 |
重点

CSMA 协议不会直接考查,但是作为 CSMA/CD 的基础,还是需要熟悉下。

三种类型

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

特征1-persistent CSMANon-persistent CSMAp-persistent CSMA
监听到信道空闲时的行为立即发送数据立即开始传输数据在下一个时隙以概率 p 发送数据;以概率 1-p 推迟到下一个时隙
信道忙时的行为持续监听,直到信道空闲等待一个随机时间后,重新监听信道持续监听,直到信道空闲(进入空闲后的行为见上一条)
碰撞的可能性最高(多个站点同时等待,一旦空闲必然冲突)低(随机等待减少了竞争)中等(通过概率 p 分散了发送时机)
延迟特性信道空闲时,发送延迟最小;但发生碰撞时,延迟会很大。避免了多个站点的持续竞争,减少了碰撞,但可能增加平均延迟。在减少碰撞和控制延迟之间取得平衡。
适用性实际上很少用于纯ALOHA或CSMA,因为碰撞概率太高。 更像是一个理论参考。适用于非持续型流量、碰撞概率较高的网络(如早期的以太网)适用于时隙化信道,是前两种策略的一个很好折中,常用于Wi-Fi等网络。
协议听到信道忙时怎么办特点
1-坚持 CSMA一直监听,空闲立即发碰撞概率高
非坚持 CSMA等待随机时间再监听信道利用率低
p-坚持 CSMA空闲时以概率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 向 D 发送一段数据,C 向 A 发送一段数据,我们可以观察到:冲突发生 的时间点 和 设备检测到 冲突的时间点是不同的。

当 A 和 C 检测到冲突发生时,它们会立即停止发送,并且发送信号通知其他设备该次碰撞。

流程

CSMA/CD 的工作流程如下:

  1. 准备发送:适配器从网络层获得一个分组,封装成帧,放入网络适配器缓存准备发送。

  2. 检测信道:监听信道是否空闲,若信道空闲,则开始发送该帧;若信道忙,则持续检测直至信道空闲。(空闲时的信道电压 和 忙碌时的信道电压不同)

  3. 在发送过程中,适配器仍然持续检测信道。这里只有如下两种可能。

    • 发送成功:在争用期内一直未检测到冲突,该帧肯定能发送成功。

    • 发送失败:在争用期内检测到冲突,此时立即停止发送,并且广播 碰撞通知信号。接着适配器执行 指数退避算法,等待一段随机时间后返回到步骤 2。若重传 16 次仍不能成功,则停止重传并向上报错。

载波监听的本质

发送方把自己(还在)发的信号和信道上实际检测到的信号做比较,如果不一致,说明有其他 信号叠加 进来了,即发生 碰撞


除此以外,计算以太网争用期的最晚时间时,为什么信道上还有一个正在传输的帧,但是端另一侧的设备还能发送?

实际上载波监听的 本质是对其信道附近的电平做检测(本地检测,而非全局检测); 上面的例子里,因为设备D 的附近 A设备 发送的 帧还没传到 D 附近,姑且认为 D 检测到的信号是空闲时的信号

为什么 CSMA/CD 只对发送过程进行检测,而不对传播过程进行检测

传播过程中信号已经离开发送方,发送方硬件只能检测本地电平,物理上根本没有办法对传播过程进行监控。

类比 : 人说话时,只能感知到自己正在说的话被噪音干扰,但无法感知你的声音在传播过程中经历了什么?

没有参照对象就无法做比较,所以:

发送中:有自己的信号作为参照 → 能检测冲突
不发送时:没有参照 → 只能判断信道忙/闲,无法判断冲突

个人理解

争用期的本质是 载波监听的局限性(只能检测本地电平)和 碰撞检测的限制(发送方只能拿自己发送的帧去检测回传的信号有没有被干扰), 只有设备发送的帧信号覆盖了整个信道,这样才能保证在信号发送完之前,整个介质中都不会出现碰撞

逻辑链条如下

载波监听只能检测本地电平
    ↓
信号传播需要时间,存在盲区
    ↓
最坏情况下对端在信号到达前一刻发送
    ↓
冲突信号需要 2τ 才能被发送方感知
    ↓
帧的发送时间必须 ≥ 2τ
    ↓
由此反推出最小帧长 64 字节


口诀如下: 先听后发 边听边发 冲突停发 随机重发
指数退避算法

在随机访问网络中,当 冲突 发生后,设备需要 等待一段时间 后重试发送,以避免再次冲突。
指数退避算法(Exponential Backoff Algorithm)通过动态调整等待时间,减少连续冲突的概率,提高网络效率。

其核心思想是当冲突发生时,设备随机选择一个等待时间,并在每次冲突后 成倍增加等待时间范围,以降低后续冲突的可能性。

指数增长规则 如下:

  • 如果是第 k 次重传尝试(通常从 k=1 开始),则从以下范围随机选择等待时间槽(slot)的个数:

[0,2k−1]

  • 每个时间槽长度为一个基本单位(如 51.2 微秒,以太网中一个“slot time”)。
  • 最大的 k 通常是有限制的,例如 以太网中最大为 10(即窗口最多增长到  )

如果尝试达到一定次数仍冲突,放弃传输并上报错误。


举个实际例子:

假设某设备在尝试发送时检测到 冲突

  • 第 1 次重试:在 [0, 1] 中随机选择一个时间槽(即可能等待 0 或 1 个 slot time)。
  • 第 2 次重试:在 [0, 3] 中随机选择(0~3 个 slot)。
  • 第 10 次重试:在 [0, 1023] 中随机选择。
  • 第 16 次重试后仍失败:报错放弃。
限制条件

CSMA/CD 能够正常工作的 限制条件 是:

帧的传输时间至少要两倍于信号在总线上最长的传播时延(即两倍于总线端到端的单向传播时延)。

以太网规定的帧间最小间隔为 (相当于 96 比特的发送时间

注意

这一机制的依据是:冲突信号必须在介质中传播并被发送站捕获,发送站才能意识到冲突的发生。若帧的传输时延过短,发送站可能在冲突信号返回之前就已结束帧的发送,从而错过冲突的检测。

因此,帧的传输时延必须不小于传播时延的两倍,才能确保冲突能够在帧发送完毕前被发现并采取相应的碰撞处理。

极限信道利用率

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)。“冲突避免” 并不是指协议可以完全避免冲突,而是指协议的设计要尽量降低冲突发生的概率。

流程

  1. 侦听信道(Carrier Sense)

    • 设备在发送数据前通过物理侦听(检查信道电信号)和虚拟侦听(NAV,网络分配向量,记录信道占用时间)判断信道是否空闲。若信道忙碌,设备进入退避机制,等待随机时间后再次侦听,以降低碰撞风险。
  2. 退避机制(Backoff)

    • 当设备侦听到信道忙碌时,不会一直等待信道空闲后立即发送,而是启动随机退避计时器

      1. 从竞争窗口(Contention Window)中随机选取一个退避时间槽数

      2. 只有在信道空闲时,退避计时器才会倒计时

      3. 若信道再次变忙,计时器冻结,等信道再次空闲后继续倒计时

      4. 计时器归零后才允许发送

    • 在第 次退避时,在时隙 {0, 1, ……, } 中随机选择一个,随机乘以基本退避时间(一个时隙长度)就得到了随机退避时间

  3. 发送请求(RTS,Request to Send)

    • 若信道空闲超过特定时间(DIFS,分布式帧间间隔),设备可发送 RTS 帧,通知其他设备其传输意图及所需时间。RTS 帧是可选的,主要用于较大数据包或高干扰环境。
  4. 清除发送请求(CTS,Clear to Send)

    • 接收设备在确认信道空闲后(等待 SIFS,短帧间间隔),回复 CTS 帧,确认传输许可并通知附近设备保持沉默。CTS 帧增强了信道保护,减少隐藏节点问题。
  5. 数据传输

    • 发送设备收到 CTS 帧后(等待 SIFS),开始传输数据帧。其他设备通过 NAV 设置避免干扰,确保信道专用于当前传输。
  6. 确认帧(ACK,Acknowledgment)

    • 接收设备成功接收数据后(等待 SIFS),发送 ACK 帧确认。若发送端未收到 ACK(可能因 碰撞 或干扰),启动重传机制,重新执行上述步骤。

根据以上过程我们可以观察到 CSMA/CA 的一些 关键特点

  • 碰撞避免:CSMA/CA 通过侦听、RTS/CTS、退避机制预测和确认机制并避免碰撞,而非像 CSMA/CD(以太网)那样检测碰撞后处理,适合无线网络因其难以实时检测碰撞。
  • 隐藏节点问题:两设备因距离远无法互相侦听,可能同时发送数据导致碰撞。RTS/CTS 机制通过通知附近设备解决此问题。

CSMA/CA 的本质就是一直退避,等到要发送的信号越来越少时才发送,极大概率减少 碰撞时间(但也要兼顾吞吐量)

退避流程

使用退避算法
  1. 在发送数据帧前 检测到信道处于忙状态 保持 CW 重新取值

  2. 在每一次(碰撞、丢失)重传一个数据帧时 CW 翻倍

  3. 在每一次成功发送后要连续发送下一个帧时 重置 CW 从 [0, CW_min] 中随机取值(避免同一站点长期占用信道)

不使用退避算法

当不是连续发送帧时可以不使用退避算法

IFS(帧间间隔)

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

为了尽量避免冲突,802.11 标准规定:所有站在完成一次发送后,必须先等待一个极短的时间(期间继续监听信道)才能发送下一帧。这段等待时间称为 帧间间隔(InterFrame Space,IFS)。不同类型的帧对应的 IFS 长度不同,IFS 的长短用来实现优先级管理,从而保证关键帧能够在竞争激烈的信道中优先获得发送机会。

802.11 标准使用了下列三种 IFS:

  • SIFS(Short IFS):最短的帧间隔 28 ,优先级最高。用于:

    • 接收方回复 CTS 或 ACK;
    • 源站发送连续帧(如 DATA → ACK)。
    • 所有回答 AP 探询的帧;
    • 示例:AP 接收到 RTS 后,等待 SIFS 时间发送 CTS,之后接收到数据后,再等待 SIFS 时间发送 ACK。
  • DIFS(Distributed IFS):普通数据帧的发送间隔。用于:

    • 一个站点在发现信道空闲后,准备发起新的通信前等待的时间。
    • 示例:A 想要发起通信,必须先监听信道空闲,并等待 DIFS 才能发送 RTS。
  • PIFS(Point Coordination IFS):比 DIFS 短、但比 SIFS 长。仅用于中心协调器(AP)抢占信道,用于轮询控制(PCF 模式)

等待 IFS 序列过程如下:

A: 监听信道空闲 → 等待 DIFS → 发送 RTS
AP: 等待 SIFS → 回复 CTS
A: 等待 SIFS → 发送 DATA
AP: 等待 SIFS → 回复 ACK

为了应对无线网络中的 “隐蔽节点” 问题,802.11 引入了 NAV(Network Allocation Vector) 概念,作为一种 “虚拟载波侦听机制”。

NAV 是一种 倒计时定时器,它告诉站点:接下来的多长时间内,信道将被其他设备占用。具体过程如下:

  • A 发送 RTS 帧,并在其中声明:从 RTS 发送起,直到收到 ACK,通信将持续多久。

  • AP 回复 CTS 帧,在 CTS 中再次包含整个传输剩余所需时间(包括 DATA 和 ACK)。

  • 所有收到 RTS 或 CTS 的站点,都会根据帧中的时间字段,设置自己的 NAV 计时器,并保持沉默,避免冲突。

在上图中:

  • B 是隐蔽站,可能听不到 A 的 RTS,但能听到 AP 的 CTS → 会根据 CTS 设置 NAV。
  • 其他站点即使未直接收到数据(例如 DATA),也会因为事先通过 RTS/CTS 设置了 NAV,在期间不会发起竞争。

简单来说,NAV 就像设备内部的一个“占用表”,告诉自己:别人正在用,等一会再发。

总结

RTS / CTS / ACK / NAV 的完整联系

图中轴方向标错了,从上到下是时间轴

RTS 是预约申请,A 发出 RTS,里面写明”我要占用信道多长时间”,这个时间覆盖了后续 CTS + DATA + ACK 的全部时长。

CTS 是双重作用的广播。 AP 回复 CTS,一方面告诉 A”你可以发了”,另一方面把剩余占用时间广播出去——隐蔽站 B 虽然听不到 A 的 RTS,但能听到 AP 的 CTS,于是 B 读取 CTS 里的时间字段,设置自己的 NAV 倒计时,主动闭嘴。

NAV 是虚拟载波侦听。 B 不需要真的监听信道忙不忙,只靠这个倒计时器就知道”现在不该发”。倒计时归零前,B 完全不参与竞争,从根源上避免了冲突。

ACK 是闭环确认。 无线信道误码率高,AP 收到完整数据后才发 ACK。A 没收到 ACK 就认为传输失败,触发重传。这也是为什么 802.11 用停等方式而不像有线以太网那样直接靠 CSMA/CD 善后。

四者的关系一句话概括:RTSCTS 共同构建了信道保护窗口(NAV 是这个窗口的体现),DATA 在窗口内安全传输,ACK 确认窗口使命完成。

局域网和广域网

⭐中优先级

本节主要关注以太网的传输介质和帧格式,往年在解答题出现了传输介质的名称,如果不知道对应的带宽就难搞了。VLAN 和 广域网的概念考查频率低一些,但也比较简单,熟悉下能在选择题应对就可。

真题练习

局域网

局域网(Local Area Network,LAN)是一种覆盖范围较小、用于连接同一物理地点(如家庭、办公室、学校或企业内)的计算机和其他设备的计算机网络。

特性

局域网的特性主要由三个要素决定:拓扑结构传输介质 和 介质访问控制方式,其中 介质访问控制方式 是最关键的因素,它决定了局域网的主要技术特性。

常见的局域网 拓扑结构 主要包括以下四类:

  • 星形结构
  • 环形结构
  • 总线形结构
  • 星形与总线形结合的复合型结构

在 传输介质 方面,局域网可以采用铜缆、双绞线和光纤等多种介质,其中 双绞线 是当前的主流传输介质。

局域网常用的 介质访问控制方法 包括 CSMA/CD 协议令牌总线协议 和 令牌环协议。其中,CSMA/CD 协议和令牌总线协议主要应用于总线形局域网,而令牌环协议则主要用于环形局域网。

实现

局域网主要包含三种实现:

  • 以太网(目前使用范围最广)。逻辑拓扑是总线形结构,物理拓扑是星形结构。

  • 令牌环(Token Ring,IEEE802.5)。逻辑拓扑是环形结构,物理拓扑是星形结构。

  • FDDI(光纤分布数字接口,IEE802.8)。逻辑拓扑是环形结构,物理拓扑是双环结构。

以太网

在实际的局域网应用中,由于 以太网 占据垄断地位,所以基本上成为了局域网的代名词,需要对局域网的概念有深入了解。

参考模型:

传输介质

以太网常用的传输介质有 4 种:粗缆、细缆、双绞线和光纤,这里需要熟练掌握它们的英文名,常在选择题中出现:

参数10BASE510BASE210BASE-T10BASE-FL
传输媒体粗缆细缆双绞线光纤对
编码曼彻斯特编码曼彻斯特编码曼彻斯特编码曼彻斯特编码
拓扑结构总线形总线形星形点对点
网络适配器早期以太网早期以太网现代以太网现代以太网

注意上述传输介质的英文名称其实是挺有讲究的:

首先是前缀的数字,代表的是传输介质的速率, 10 代表 10 Mbps100 代表 100 Mbps,注意这里是 Mbps 而不是 MB/s

其次是中间的 base,代表基带传输(Baseband),基带与宽带(broadband)相对应。基带表示直接传输原始数字信号,不调制;宽带代表使用模拟调制技术传输多个频道信号,常见于有线电视等。

基带:直接传输数字信号 典型例子:以太网 USB
宽带:先调制到载波再传输 典型例子:有线电视 ADSL WiFi

最后是后缀的英文字母,代表的传输介质的类型:

  • 注意字母 T 是 twisted pair 的首字母,含义是 双绞线
  • FL 是 Fiber optic 的缩写,含义是 光纤

帧格式

如上图所示,以太网帧格式从逻辑上可以分为物理层控制字段、帧首部、数据负载、差错校验字段这四个部分,每个字段的具体说明如下所示:

  • 物理层控制字段

    • 前导码(Preamble):7B
      • 由 7 字节的交替的 1 和 0 位组成,用于同步接收方的时钟。
    • 帧开始分隔符(Start of Frame Delimiter, SFD):1B
      • 通常为 10101011,标志帧的开始。
  • 帧首部:固定为 14B

    1. 目的地址(Destination MAC Address):6B
      • 指定帧的接收者的物理 MAC 地址。
    2. 源地址(Source MAC Address):6B
      • 指定帧发送者的物理 MAC 地址。
    3. 类型/长度字段(Type/Length):2B
      • 如果值大于或等于 0x0600(1536),则表示帧携带的数据的类型(例如 IPv4、IPv6、ARP 等)。
      • 如果值小于或等于 0x05DC(1500),则表示数据字段的长度。
  • 负载

    • 数据和填充(Data and Padding):范围为 46-1500B
      • 携带帧的有效载荷,即要传输的数据。
      • 如果数据少于 46 字节,则需要填充,确保数据字段的最小长度为 46 字节。
  • 差错校验字段

    • 帧校验序列(Frame Check Sequence, FCS):4 字节
      • 一个循环冗余校验(CRC)值,用于错误检测。接收方计算帧的 CRC,并与这个字段进行比较,以确定帧是否在传输过程中被损坏。

注意

为什么 前导码 和 帧开始定界符 不包括在以太网帧的最小和最大大小计算中?

需要注意的是,Preamble 和 SFD 确实是以太网标准规定的格式的一部分,但它们属于 物理层 的内容,而非 数据链路层 中的以太网帧内容。

以太网分为 物理层 和 数据链路层。物理层负责比特级的传输和同步,而数据链路层负责处理数据的封装、地址标识和错误检测。

以太网帧的最大和最小大小为多少?

以太网帧的最小和最大大小(不包括前导码和帧开始定界符)有明确的规定,目的是确保帧的有效性并避免冲突。

其中最小大小为 64B,最大大小为 1518B
最小帧大小的要求是为了确保冲突检测机制(如 CSMA/CD)能够正常工作。
最大帧大小也称为 标准帧 或 最大传输单元(MTU),它限制了每个帧可以承载的数据量,以确保设备处理负载不会过大。

以太网帧数据部分的最小大小为 46B,最大大小为 1500B

以太网快速填充:当 IP 数据包的大小 小于 46 时(以太网设备会读取 IP 的首部的长度字段以得知),以太网设备会自动在其末尾填充 0,使其大小为 46 字节

无线局域网

帧格式

802.11 帧共有三种类型,即数据帧、控制帧和管理帧。数据帧的格式如图 3.28 所示。

802.11 数据帧由以下三部分组成:

  • MAC 首部,共 30 字节。帧的复杂性都在 MAC 首部。
  • 帧主体,即帧的数据部分,不超过 2312 字节
  • 帧检验序列 FCS 是 MAC 尾部,共 4 字节

802.11 属于无线局域网专属帧格式

同 以太网的 帧格式不一样

可以观察到,802.11 帧首部里头的字段很多,但是其实主要考察的就是个别字段。

其中最重要的是 4 个地址字段(都是 MAC 地址)。这里仅讨论前三个地址(地址 4 用于自组网络)。这三个地址的内容取决于帧控制字段中的“去往 AP”和“来自 AP”这两个字段的数值,如下表所示:

去往 AP来自 AP地址 1地址 2地址 3地址 4
10接收地址 = AP 地址发送地址 = 源地址目的地址——
01接收地址 = 目的地址发送地址 = AP 地址源地址——

💡核心记忆点:

  • 地址 1:谁接收这帧(无线信号的接收者)
  • 地址 2:谁发的这帧(无线信号的发送者)
  • 地址 3:通信的最终目标或源(真实的目的地或来源)

VLAN

前置

由交换机连接的多个广播域结合成一个广播域后,如果域过大 会出现 网络风暴

VLAN(Virtual Local Area Network)虚拟局域网,通过 逻辑划分 将网络设备(物理局域网)划分成多个独立广播域的技术,使不同 VLAN 之间的设备即使连在同一台交换机上,也无法直接二层通信

一个子网 代表了一个广播域

路由器是通过物理划分直接 将连入他的每个接口分别作为一个局域网。

特性说明
隔离广播不同 VLAN 的 广播包 互不影响
逻辑划分不受物理位置限制
二层隔离VLAN 间通信需要三层路由(路由器或三层交换机)
标识方式VLAN ID(1–4094)区分,IEEE 802.1Q 标准

打个比方:一家公司只有一个办公室(一个交换机),但希望让财务部、技术部和人事部各自的数据隔离,互不干扰。VLAN 就像是在这一个办公室里,用“看不见的墙”把它们隔开,互相听不到对方说话。

⚙️ 那么 VLAN 是如何实现的呢?

VLAN 是通过 交换机 和 VLAN 标签(Tag) 实现的。简单来说:

  • 普通交换机:看网线在哪个口(port)来转发数据。
  • 支持 VLAN 的交换机:会在数据包中加上 VLAN 标签,按“部门”来转发。

802.3 标准定义了支持 VLAN 的以太网帧格式的扩展。它在以太网帧中插入一个 4 字节 的标识符(位于 源地址字段类型字段 之间),称为 VLAN 标签,用来指明发送该帧的计算机属于哪个虚拟局域网。插入 VLAN 标签的帧称为 802.1Q 帧,如下图所示。

图中标签类型 比特位错了

前两个字节永远是 0x 8100,标签控制信息前 4 位:用户优先级 (3bit), CFI (1bit).

其中 VID(VLAN ID) 为 12 位,一个 VLAN 交换机最多支持 4096 个 VLAN
真正起作用的是 VID 用于唯一标识 VLAN


📦 VLAN 示例: 假设有三台电脑:

  • PC1:财务部,接在 VLAN 10
  • PC2:技术部,接在 VLAN 20
  • PC3:人事部,接在 VLAN 30

它们都连在一台交换机上,如果没有 VLAN,三者可以互相通信。如果配置了 VLAN:

  • PC1 发的广播,只有 VLAN 10 内的设备能收到。
  • PC2 和 PC3 不会收到 PC1 的数据,除非通过路由器(或者三层交换机)跨 VLAN 通信。

最大特点: 可以隔离广播域
功能: 可以过滤来自其他网段的帧,可以缩小广播域的范围

转发流程

标签划分方式

划分方式依据
按交换机端口管理员指定哪个端口属于哪个VLAN
按 MAC 地址指定某块网卡属于某个VLAN
按 IP 地址指定某个IP段属于某个VLAN
按协议类型按上层协议划分

广域网

主要看链路建立/认证/网络层协议协商流程

HDLC 协议

HDLC(High-Level Data Link Control,高级数据链路控制)是一种 面向比特(bit-oriented) 的 数据链路层协议,用于在 点对点点对多点 通信中提供可靠的数据传输。

HDLC 几个特点可以被简单总结为:面向比特、面向连接、提供可靠传输。

需要注意的是 HDLC 使用 零比特填充法 来组帧。

PPP 协议

点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。其最初是为拨号连接设计的,但它后来被广泛用于建立各种类型的点对点连接,包括 DSL(数字用户线路)ISDN(综合业务数字网) 和串口连接等。

点对点协议PPP 是因特网工程任务组(Internet Engineering Task Force,IETF)于1992年制定的。经过多次修订,目前PPP已成为因特网的正式标准[RFC1661,RFC1662]。

PPP 的帧格式

PPP 帧的透明传输

[字节]

[比特]

PPP 帧的差错检测

接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;否则,就丢弃这个帧。(一般用查表法进行检验)

        使用PPP的数据链路层,向上提供的是不可靠数据传输服务。

局域网广域网
链路拓扑共享信道(总线/星型)点对点链路为主
寻址方式MAC 地址无 MAC,靠 IP
介质访问控制CSMA/CD、令牌环PPP、HDLC
帧格式以太网帧PPP 帧

数据链路层设备

⭐中优先级

需要了解三点:转发表结构、交换机转发流程 以及 交换方式,选择题会考查,也作为解答题的基础。

真题练习

交换机

交换机(Switch)是网络中用于连接设备并转发数据帧的 二层(数据链路层 物理层)设备 。它通过分析数据帧中的 MAC 地址,将数据帧从接收端口精准转发到 目标设备所在的端口。相比 集线器,交换机只将数据帧发送到必要端口,避免广播到整个网络,显著降低碰撞域,提升带宽利用率和传输速度。

以太网的交换机中通常有多个接口,每个接口都可以直接与一台主机 或 另一台以太网交换机相连。一般工作在全双工方式下 并且 具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞。

交换机吞吐量由接入设备数量 决定 ,假设一个主机通信时独占端口带宽

对比效果,交换机明显有更大优势

转发表

转发表(也称 MAC 地址表)是交换机内部维护的一张记录表(即插即用,使用自学习算法,根据网络中各主机间的实际通信 自动建立和更新),存储了网络设备 MAC 地址 与其 连接端口 的对应关系。每条记录通常包含以下信息:

  • MAC 地址:网络设备的唯一标识。
  • 端口号:设备连接的交换机端口。
  • 附加信息(可选):如 VLAN 标识或条目有效时间。

如上图所示,交换机 A 和 B 分别通过 转发表 记录了通往每个 MAC 地址 的端口。

转发流程

当交换机收到数据帧后,会根据 转发表(MAC 地址表) 执行以下步骤:

  1. 检查目标 MAC 地址

    • 从数据帧的头部提取目标 MAC 地址。
  2. 查询转发表(MAC 地址表)

    • 命中(已学习):如果表中有该 MAC 地址 → 将帧转发到对应端口(单播)。
    • 未命中(未知 MAC):如果表中没有记录 → 交换机将帧 泛洪(Flooding),即复制该帧并发送到除接收端口以外的所有端口。(有点笨,不会排除选取)
  3. 转发数据帧

    • 目标设备收到帧后应答,交换机 会根据 源 MAC 地址 学习到该设备所在端口,并更新转发表。

注意

这里的“广播”是二层的 Flooding 行为,并不是“发送 ARP 请求”。交换机只是盲目地把该帧发给所有人,以期目标主机回复。

以太网交换机的生成树协议 STP,主要是为了避免环路上出现的 广播风暴(大量消耗网络资源,使得其他数据帧无法被正常转发),影响帧转发表的震荡(漂移)

交换方式

交换机的 交换方式 决定了 交换机在接收到数据帧后,决定如何以及何时将该帧转发到目标端口,交换方式 有如下三种:

  • 直通交换:交换机在接收到数据帧的前6个字节(即目的 MAC 地址)后,立即根据 MAC 地址表 查找目标端口并开始转发,无需等待整个数据帧接收完成。

  • 存储转发:交换机接收完整数据帧后,存储在缓冲区中,进行 CRC(循环冗余校验)检查,确认数据帧无误后再根据 MAC 地址表 转发。

  • 碎片隔离:介于直通交换和存储转发之间,检查数据帧的前64字节(以太网最小帧长),若帧长不足64字节(碎片),则丢弃;若正常,则转发。

冲突域

多台设备共享同一传输介质时,若同时发送数据会产生碰撞,这些设备共同构成一个冲突域。集线器不隔离冲突域,所有端口同属一个冲突域。

广播域

广播帧所能到达的所有设备的集合。路由器隔离广播域,交换机和集线器不隔离。

网桥

网桥(Bridge)的功能和 交换机 基本一致,两者都是二层网络设备,用于转发数据帧。网桥中也有 转发表 的概念,转发过程和 交换机 一致,这里不再赘述。

那么 网桥和交换机区别 在哪里呢?

网桥是比较早期计算机网络使用的设备,现在已经渐渐被 交换机 替代,两者的重要区别如下表:

方面网桥(Bridge)交换机(Switch)
端口数量通常较少(2~4 个)通常很多(几十个甚至上百个)
性能软件转发,处理能力较弱硬件转发(ASIC 芯片),转发速度更快
功能简单地转发帧,适合小型或实验网络支持 VLAN、端口镜像、链路聚合等高级功能
使用场景用于连接两个小型网络用于构建现代企业内部网络(LAN)

更全面的对比表

对比项集线器 Hub网桥 Bridge交换机 Switch
工作层次物理层数据链路层数据链路层
转发依据无,直接广播MAC地址MAC地址
碰撞域所有端口同一个每个端口隔离每个端口隔离
广播域同一个同一个同一个
端口数量多口通常只有2口多口
转发方式广播到所有端口存储转发存储转发/直通

集线器没有转发表,一个发送帧 发给所有设备

隔离广播域需要

路由器或VLAN,这是交换机做不到的

AP

无线局域网的 拓扑结构 是 以 AP 为中心的星形。

AP 也可以理解为 ”无线版交换机“

**AP(Access Point,无线接入点)**只干一件事:

把无线信号和有线网络互相转换,让无线设备接入有线网络

它本身不负责路由,不做 IP 寻址,只工作在数据链路层

扩展 :路由器是什么?

路由器工作在网络层,负责:

  • IP 地址分配(DHCP)
  • 不同网络之间的数据转发
  • 连接运营商网络(拨号上网)

家用”路由器”其实是集成设备

家用路由器 = AP + 路由器 + 交换机 三合一

厂商为了方便把三个功能塞进一个盒子,所以日常口语叫”路由器”

集线器 Hub

    ↓ 加入 MAC 地址学习能力
    
网桥 Bridge

    ↓ 多端口网桥
    
交换机 Switch(本质上就是多端口网桥)
    
    
    
AP ──── 可以理解为"无线版交换机"
		
        负责把无线设备接入有线网络
        
		相当于把空气当成了网线

总结

什么时候需要 有连接 可靠
什么时候需要 无连接 不可靠

连接 = 传输前要不要先”打招呼”

|说明|
|---|---|
|无连接|直接发,不需要提前建立状态|
|面向连接|先建立连接(握手)→ 传数据 → 释放连接|

确认 = 收到了要不要回复

说明
不确认发完就完,接收方不回复,丢了就丢了
有确认接收方收到后必须回 ACK,发送方没收到就重传

组合起来就是三种服务

服务类型连接确认类比典型场景
无确认无连接发传单,扔出去不管以太网、实时语音
有确认无连接发短信,对方要回”收到”Wi-Fi
有确认面向连接打电话,先接通再说话可靠链路

❓为什么没有”无确认面向连接”? 既然都建立连接了,不回确认没有意义,所以这种组合实际不存在。


记忆口诀:

连接 = 长期通信前的准备工作,数据多、要求可靠时才值得建;数据少或实时性强时,建连接的开销反而比数据本身还大。

就像 打电话 vs 发传单——说很多话就打电话(建连接),只说一句就发传单(无连接)。

确认 = 传输中的收据回执

两者独立,但面向连接一般都带确认。

可靠的 要求比较高

不仅需要 面向连接 有确认,还需要 超时重传 序号 流量控制 (有点像 ARQ 协议)

ARQ(Automatic Repeat ReQuest): 停等 (连续 ARQ)回退 N 帧 选择重传