计算机网络第三章:数据链路层学习总结

计算机网络第三章:数据链路层 学习总结

概述

数据链路层位于物理层之上,网络层之下,其主要任务是将网络层交下来的IP数据报组装成帧,并在相邻的两个节点之间可靠地传输帧。它处理物理层可能出现的差错,并提供流量控制和差错控制服务。

1. 基本问题

1.1 封装成帧 (Framing)
  • 概念: 数据链路层将网络层传下来的数据报添加首部和尾部,封装成帧。帧是数据链路层进行传输的单位。
  • 帧定界: 首部和尾部包含特殊的控制字符,用于标识帧的开始和结束。
  • 最大传送单元 (MTU): 帧的数据部分长度上限。不同的数据链路层协议有不同的MTU。
1.2 透明传输 (Transparent Transmission)
  • 问题: 如果数据部分恰好包含帧定界的控制字符,接收方会误认为帧已结束,导致错误。
  • 解决方案 :
    • 字节填充 (Byte Stuffing): 当数据中出现与帧定界符相同的字节时,在前面插入一个转义字符 (ESC)。若数据中出现ESC字符,则在前面再插入一个ESC字符。
    • 零比特填充 (Zero-bit Stuffing): 在发送端,扫描整个帧的数据部分。每当发现连续5个1时,立即在后面插入一个0。接收端收到帧时,进行逆操作,每当发现连续5个1后跟着一个0,就把这个0删除。
1.3 差错检测 (Error Detection)
  • 目的: 检测帧在传输过程中是否发生比特差错。
  • 方法: 在帧的尾部添加冗余码(如FCS,帧检验序列)。接收方根据冗余码进行计算,判断帧是否出错。
  • 注意: 差错检测只能"发现"差错,不能"纠正"差错,也不能保证100%发现所有差错(漏检率很低)。

2. 差错控制

2.1 检错 (Error Detection)
  • 奇偶校验 (Parity Check) :
    • 原理: 在数据位后添加一个校验位,使整个码字中1的个数为奇数(奇校验)或偶数(偶校验)。
    • 特点: 只能检测出奇数个比特差错,无法检测偶数个比特差错,也无法定位错误。
  • 循环冗余校验 (CRC - Cyclic Redundancy Check) :
    • 原理 : 基于模2运算。发送方将数据多项式 M ( x ) M(x) M(x) 除以一个事先选定的生成多项式 G ( x ) G(x) G(x),得到一个余数作为帧检验序列 (FCS)。接收方用接收到的数据(包含FCS)除以 G ( x ) G(x) G(x),若余数为0,则认为无差错。
    • 模2运算: 是一种不带借位和进位的二进制运算,加法和减法等同于异或 (XOR) 运算。
    • 生成多项式 G ( x ) G(x) G(x): 必须包含首尾的1,且通常是国际标准。
    • 特点: 检错能力强,漏检率极低,但不能纠错。
2.2 纠错 (Error Correction)
  • 海明码 (Hamming Code) :
    • 原理: 通过在数据位中插入多个校验位,并巧妙设计这些校验位与数据位的关系,使得当发生单个比特差错时,能够定位错误并进行纠正。
    • 校验位数量 r r r : 设数据位为 k k k 位,校验位为 r r r 位,则总码字长度为 k + r k+r k+r 位。校验位 r r r 需满足海明不等式: 2 r ≥ k + r + 1 2^r \ge k+r+1 2r≥k+r+1。
    • 校验位位置 : 通常放在 2 0 , 2 1 , 2 2 , ... , 2 r − 1 2^0, 2^1, 2^2, \dots, 2^{r-1} 20,21,22,...,2r−1 的位置上。
    • 纠错能力: 能够纠正单个比特差错,但对于多比特差错的纠正能力有限。

3. 可靠传输协议

可靠传输是指发送端发送什么,接收端就收到什么。数据链路层通常使用确认和超时重传机制来实现可靠传输。

3.1 停止-等待协议 (Stop-and-Wait ARQ)
  • 工作原理: 发送方每发送一个帧,就停止发送,等待接收方的确认 (ACK)。只有收到确认后,才发送下一个帧。若超时未收到确认,则重传该帧。
  • 特点 :
    • 优点: 简单易实现。
    • 缺点: 信道利用率极低,因为大部分时间都在等待确认。
    • 帧编号: 需要对帧进行编号(0和1),以区分重复帧。
    • 确认帧编号: 确认帧也需要编号,以避免确认丢失导致的问题。
3.2 回退N帧协议 (Go-Back-N ARQ, GBN)
  • 工作原理 : 发送方可以连续发送多个帧,无需等待每个帧的确认。发送方维护一个发送窗口 W T W_T WT ,窗口内的帧可以连续发送。接收方只对按序到达的帧发送累积确认 (Cumulative ACK) ,即确认号 n n n 表示已正确接收到编号为 n n n 及其之前的所有帧。
  • 重传机制 : 如果发送方超时未收到某个帧的确认,或收到否定确认 (NAK),则从该帧开始,回退N帧,重传所有已发送但未被确认的帧(包括该帧及其之后的所有帧)。
  • 窗口大小 :
    • 发送窗口 W T W_T WT 的大小必须满足 1 ≤ W T ≤ 2 n − 1 1 \le W_T \le 2^n - 1 1≤WT≤2n−1 (其中 n n n 是帧序号的比特数)。
    • 接收窗口 W R W_R WR 的大小固定为1,只接收期望的按序帧。
  • 特点 :
    • 优点: 提高了信道利用率。
    • 缺点: 当出现差错时,会重传大量可能已经正确到达的帧,效率不高。
3.3 选择重传协议 (Selective Repeat ARQ, SR)
  • 工作原理 : 发送方和接收方都维护一个窗口。发送方可以连续发送窗口内的帧。接收方对每个正确接收的帧都发送逐个确认 (Individual ACK),即使帧失序到达,也会先缓存起来。
  • 重传机制: 发送方只重传那些未被确认的帧。接收方将缓存的失序帧,待其前面的帧到达后,按序交付给网络层。
  • 窗口大小 :
    • 发送窗口 W T W_T WT 和接收窗口 W R W_R WR 的大小必须满足 W T + W R ≤ 2 n W_T + W_R \le 2^n WT+WR≤2n (其中 n n n 是帧序号的比特数),且通常 W T = W R ≤ 2 n − 1 W_T = W_R \le 2^{n-1} WT=WR≤2n−1。
    • 一般情况下,为了避免序号空间混淆,发送窗口和接收窗口的最大值都为 2 n − 1 2^{n-1} 2n−1。
  • 特点 :
    • 优点: 效率最高,只重传真正丢失或损坏的帧。
    • 缺点: 协议实现复杂,接收方需要缓存失序帧。

4. 介质访问控制 (MAC - Medium Access Control)

MAC协议解决多个站点共享同一传输介质时如何协调访问的问题。

4.1 CSMA/CD 协议 (Carrier Sense Multiple Access with Collision Detection)
  • 应用于 : 有线局域网,特别是以太网 (Ethernet)
  • 工作原理 :
    1. 载波监听 (Carrier Sense): 发送前先监听信道,如果信道空闲,则发送;如果信道忙,则等待。
    2. 多点接入 (Multiple Access): 多个站点共享同一信道。
    3. 冲突检测 (Collision Detection): 在发送过程中,边发送边监听信道。如果检测到冲突(信号强度异常),则立即停止发送。
    4. 随机退避 (Random Backoff): 发生冲突后,发送方停止发送,执行二进制指数退避算法,等待一段随机时间后,再重新监听信道并尝试发送。
  • 争用期 (Collision Window / Slot Time) : 以太网的端到端往返时延 2 τ 2\tau 2τ。这是检测到冲突的最长时间。在争用期内,如果发送方没有检测到冲突,则认为本次发送不会再发生冲突。
  • 最短帧长 : 为了确保在发送最短帧的过程中能够检测到冲突,以太网规定了最短帧长。最短帧长 = 争用期 × \times × 数据传输速率。
4.2 CSMA/CA 协议 (Carrier Sense Multiple Access with Collision Avoidance)
  • 应用于: 无线局域网 (WLAN),如 Wi-Fi (IEEE 802.11)。

  • 为什么不用CSMA/CD :

    • 隐蔽站问题 (Hidden Terminal Problem): 站点A和C都想给B发数据,A和C互相听不到对方,可能同时发送导致B处冲突。
    • 暴露站问题 (Exposed Terminal Problem): 站点B给A发数据,C想给D发数据。C能听到B,误认为信道忙而不敢发送,但实际上C给D发数据不会影响B给A。
    • 无法有效检测冲突: 无线信号衰减严重,且发送方通常无法在发送的同时有效监听并检测到冲突。
  • 工作原理 :

    1. 载波监听 (Carrier Sense): 发送前先监听信道。
    2. 冲突避免 (Collision Avoidance) :
      • RTS/CTS (Request To Send / Clear To Send): 可选机制。发送方先发送RTS帧,接收方收到后回应CTS帧。其他站点听到RTS或CTS后,会抑制发送,从而避免冲突。
      • 帧间间隔 (IFS - InterFrame Space): 不同的IFS优先级不同,用于协调对信道的访问。
      • 确认机制: 接收方在收到数据帧后,会发送ACK确认帧。若发送方未收到ACK,则认为发生冲突或数据丢失,进行重传。
    • 退避算法: 类似CSMA/CD,但退避是在发送数据前进行,而不是检测到冲突后。

重点突破

典型例题
1. CRC 循环冗余校验计算

问题 :

假设数据串为 101001,生成多项式 G ( x ) = x 3 + x + 1 G(x) = x^3 + x + 1 G(x)=x3+x+1。计算CRC冗余码 (FCS)。

Solution:

  1. 确定生成多项式对应的二进制串 :
    G ( x ) = x 3 + x + 1 G(x) = x^3 + x + 1 G(x)=x3+x+1 对应的二进制串为 1011

  2. 确定冗余码的位数 :

    生成多项式的最高次幂是3,所以冗余码的位数为3位。

  3. 在数据串后添加0 :

    数据串 101001 后添加3个0,得到 101001000

  4. 进行模2除法 :

    101001000 除以 1011

    复制代码
        100110  (商)
    1011)101001000
         1011
         ----
           00100
             0000
             ----
             01001
             1011
             ----
              01100
              1011
              ----
               01110
               1011
               ----
                01010
                1011
                ----
                 0001  (余数)
  5. 得到FCS :

    余数为 001。这就是CRC冗余码 (FCS)。

  6. 最终发送的帧 :

    数据串 101001 + FCS 001 = 101001001

Analysis :

CRC计算的关键在于理解模2除法(异或运算)。发送方将数据与FCS拼接后发送。接收方收到后,用整个帧(数据+FCS)除以相同的生成多项式。如果余数为0,则认为传输无差错;否则,认为有差错。

2. 海明码纠错

问题 :

假设数据位 k = 4 k=4 k=4,使用海明码进行纠错。计算所需的校验位数量 r r r,并给出校验位的位置。如果接收到的码字为 1101010 (从左到右,第1位是最高位),请判断哪一位出错并纠正。

Solution:

  1. 计算校验位数量 r r r :

    根据海明不等式 2 r ≥ k + r + 1 2^r \ge k+r+1 2r≥k+r+1,其中 k = 4 k=4 k=4。

    • 当 r = 1 r=1 r=1 时, 2 1 = 2 < 4 + 1 + 1 = 6 2^1 = 2 < 4+1+1 = 6 21=2<4+1+1=6,不满足。
    • 当 r = 2 r=2 r=2 时, 2 2 = 4 < 4 + 2 + 1 = 7 2^2 = 4 < 4+2+1 = 7 22=4<4+2+1=7,不满足。
    • 当 r = 3 r=3 r=3 时, 2 3 = 8 ≥ 4 + 3 + 1 = 8 2^3 = 8 \ge 4+3+1 = 8 23=8≥4+3+1=8,满足。
      所以,需要3个校验位 ( r = 3 r=3 r=3)。
  2. 确定校验位和数据位的位置 :

    总码字长度为 k + r = 4 + 3 = 7 k+r = 4+3 = 7 k+r=4+3=7 位。

    校验位通常放在 2 0 , 2 1 , 2 2 , ... 2^0, 2^1, 2^2, \dots 20,21,22,... 的位置。

    • P 1 P_1 P1 (校验位1) 在第1位 ( 2 0 2^0 20)
    • P 2 P_2 P2 (校验位2) 在第2位 ( 2 1 2^1 21)
    • D 1 D_1 D1 (数据位1) 在第3位
    • P 3 P_3 P3 (校验位3) 在第4位 ( 2 2 2^2 22)
    • D 2 D_2 D2 (数据位2) 在第5位
    • D 3 D_3 D3 (数据位3) 在第6位
    • D 4 D_4 D4 (数据位4) 在第7位

    码字结构:P1 P2 D1 P3 D2 D3 D4

  3. 计算校验位的值 (假设原始数据为 d1 d2 d3 d4) :

    每个校验位负责检查特定位置的比特。一个比特位由其位置的二进制表示决定由哪些校验位检查。

    • P 1 P_1 P1 检查所有位置的二进制表示中最低位为1的比特(1, 3, 5, 7): P 1 = D 1 ⊕ D 2 ⊕ D 4 P_1 = D_1 \oplus D_2 \oplus D_4 P1=D1⊕D2⊕D4
    • P 2 P_2 P2 检查所有位置的二进制表示中次低位为1的比特(2, 3, 6, 7): P 2 = D 1 ⊕ D 3 ⊕ D 4 P_2 = D_1 \oplus D_3 \oplus D_4 P2=D1⊕D3⊕D4
    • P 3 P_3 P3 检查所有位置的二进制表示中第三低位为1的比特(4, 5, 6, 7): P 3 = D 2 ⊕ D 3 ⊕ D 4 P_3 = D_2 \oplus D_3 \oplus D_4 P3=D2⊕D3⊕D4

    (注:这里为了简化,直接使用接收到的码字进行校验,而不是先推导原始数据。)

  4. 接收到的码字分析 :

    接收到的码字 1101010,对应位置如下:
    C7 C6 C5 C4 C3 C2 C1 (从右到左,位号)
    D4 D3 D2 P3 D1 P2 P1 (码字内容)
    0 1 0 1 0 1 1 (接收到的值)

    我们使用接收到的码字来计算校验和 (Syndrome)。

    • S 1 = C 1 ⊕ C 3 ⊕ C 5 ⊕ C 7 = P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 S_1 = C_1 \oplus C_3 \oplus C_5 \oplus C_7 = P_1 \oplus D_1 \oplus D_2 \oplus D_4 S1=C1⊕C3⊕C5⊕C7=P1⊕D1⊕D2⊕D4
    • S 2 = C 2 ⊕ C 3 ⊕ C 6 ⊕ C 7 = P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 S_2 = C_2 \oplus C_3 \oplus C_6 \oplus C_7 = P_2 \oplus D_1 \oplus D_3 \oplus D_4 S2=C2⊕C3⊕C6⊕C7=P2⊕D1⊕D3⊕D4
    • S 3 = C 4 ⊕ C 5 ⊕ C 6 ⊕ C 7 = P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 S_3 = C_4 \oplus C_5 \oplus C_6 \oplus C_7 = P_3 \oplus D_2 \oplus D_3 \oplus D_4 S3=C4⊕C5⊕C6⊕C7=P3⊕D2⊕D3⊕D4

    将接收到的码字 1101010 (从左到右,即 C 7 C 6 C 5 C 4 C 3 C 2 C 1 C_7 C_6 C_5 C_4 C_3 C_2 C_1 C7C6C5C4C3C2C1) 填入:
    C 1 = 0 C_1 = 0 C1=0
    C 2 = 1 C_2 = 1 C2=1
    C 3 = 0 C_3 = 0 C3=0
    C 4 = 1 C_4 = 1 C4=1
    C 5 = 0 C_5 = 0 C5=0
    C 6 = 1 C_6 = 1 C6=1
    C 7 = 1 C_7 = 1 C7=1

    计算校验和:
    S 1 = C 1 ⊕ C 3 ⊕ C 5 ⊕ C 7 = 0 ⊕ 0 ⊕ 0 ⊕ 1 = 1 S_1 = C_1 \oplus C_3 \oplus C_5 \oplus C_7 = 0 \oplus 0 \oplus 0 \oplus 1 = 1 S1=C1⊕C3⊕C5⊕C7=0⊕0⊕0⊕1=1
    S 2 = C 2 ⊕ C 3 ⊕ C 6 ⊕ C 7 = 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1 S_2 = C_2 \oplus C_3 \oplus C_6 \oplus C_7 = 1 \oplus 0 \oplus 1 \oplus 1 = 1 S2=C2⊕C3⊕C6⊕C7=1⊕0⊕1⊕1=1
    S 3 = C 4 ⊕ C 5 ⊕ C 6 ⊕ C 7 = 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1 S_3 = C_4 \oplus C_5 \oplus C_6 \oplus C_7 = 1 \oplus 0 \oplus 1 \oplus 1 = 1 S3=C4⊕C5⊕C6⊕C7=1⊕0⊕1⊕1=1

  5. 判断错误位置 :

    将校验和 S 3 S 2 S 1 S_3 S_2 S_1 S3S2S1 组合成一个二进制数:111

    111 转换为十进制数: 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 4 + 2 + 1 = 7 1 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 4 + 2 + 1 = 7 1×22+1×21+1×20=4+2+1=7。

    这意味着第7位出错。

  6. 纠正错误 :

    接收到的码字是 1101010

    第7位是 1。将其翻转:1 变为 0

    纠正后的码字为 1101010 -> 0101010

Analysis :

海明码通过巧妙设计校验位,使得任何一个比特位的翻转都会导致特定的校验和组合(称为"伴随式"或"综合症"),这个组合正好指示了出错的比特位。这种自检自纠的能力是海明码的核心价值。


易错点

  1. GBN 与 SR 协议中窗口大小的极限值条件

    • GBN (回退N帧) :
      • 发送窗口 W T W_T WT 必须满足 1 ≤ W T ≤ 2 n − 1 1 \le W_T \le 2^n - 1 1≤WT≤2n−1。如果 W T = 2 n W_T = 2^n WT=2n,则发送方可能无法区分新帧的确认和旧帧的重复确认,导致协议失效。
      • 接收窗口 W R W_R WR 固定为1。
    • SR (选择重传) :
      • 发送窗口 W T W_T WT 和接收窗口 W R W_R WR 都必须满足 W T + W R ≤ 2 n W_T + W_R \le 2^n WT+WR≤2n,且通常 W T = W R ≤ 2 n − 1 W_T = W_R \le 2^{n-1} WT=WR≤2n−1。
      • 如果 W T + W R > 2 n W_T + W_R > 2^n WT+WR>2n,接收方可能无法区分新帧和重传的旧帧,导致协议失效。例如,当 W T = W R = 2 n − 1 + 1 W_T = W_R = 2^{n-1}+1 WT=WR=2n−1+1 时,可能会出现问题。

    核心区别: GBN的接收方只接受按序帧,而SR的接收方可以缓存失序帧。这导致了窗口大小限制的不同。

  2. 以太网最短帧长的计算 (争用期 2 τ 2\tau 2τ)

    • 概念: 以太网的CSMA/CD协议要求在发送帧的过程中能够检测到冲突。这意味着,如果发生冲突,发送方必须在帧发送完毕之前检测到它。
    • 争用期 2 τ 2\tau 2τ: 是指信号从网络一端传播到另一端所需时间的两倍,即最长端到端往返时延。
    • 最短帧长计算 :
      • 设数据传输速率为 R R R (bps)。
      • 最短帧长 (比特数) = 争用期 (秒) × \times × 数据传输速率 (bps)
      • 即:Min_Frame_Length = 2 * τ * R
    • 易错点 : 混淆争用期和单向传播时延 τ \tau τ。最短帧长是为了确保在最坏情况下(最远两端发生冲突),发送方能在发送完帧之前检测到冲突,所以需要考虑往返时延 2 τ 2\tau 2τ。如果帧太短,可能在冲突信号传回来之前,帧已经发送完毕,导致无法检测到冲突。

相关推荐
qq_16014487几秒前
低成本高效学习路线图
学习
航Hang*几秒前
第七章:综合布线技术 —— 设备间子系统的设计与施工
网络·笔记·学习·期末·复习
好奇龙猫5 分钟前
【人工智能学习-AI-MIT公开课13.- 学习:遗传算法】
android·人工智能·学习
mg6686 分钟前
0基础开发学习python工具_____用 Python + Pygame 打造绚丽烟花秀 轻松上手体验
开发语言·python·学习·pygame
智链RFID16 分钟前
RFID技术:企业效率革命新引擎
大数据·网络·人工智能·rfid
Wcowin18 分钟前
非对称密码
网络·密码学
航Hang*18 分钟前
第六章:综合布线技术 —— 干线子系统的设计与施工
网络·笔记·学习·期末·复习
JeffDingAI26 分钟前
【CANN训练营】在CANN8.5上体验Hello World开启Ascend C学习
c语言·开发语言·人工智能·学习
d111111111d27 分钟前
STM32 HAL库定时器PWM输出全攻略:从零到精准控制
笔记·stm32·单片机·嵌入式硬件·学习
hssfscv37 分钟前
Javaweb学习笔记——JDBC和Mybatis
笔记·学习·mybatis