计算机网络核心概念精讲 第 5 篇:数据链路层协议详解

摘要

本文将带你深入理解数据链路层的工作原理和核心协议,帮助你掌握可靠数据传输的实现机制。你将学到数据链路层的功能与要求、帧结构与同步方法、差错检测与纠正技术、自动重传请求机制以及典型数据链路协议的特点与应用。

学习目标

阅读完本文后,你将能够:

  • 理解链路层功能:掌握数据链路层的核心职责和服务内容
  • 识别帧结构:理解各种帧格式及其字段含义
  • 应用差错控制:掌握CRC、海明码等差错检测技术
  • 分析ARQ机制:理解停止-等待、回退N步、选择重传等协议
  • 熟悉典型协议:了解HDLC、PPP、SLIP等协议的特点和应用

本文由”51学通信”(公众号:51学通信,站长:爱卫生)原创分享。数据链路层是网络协议栈的关键层次,理解其工作原理对于深入掌握网络技术至关重要。如需深入交流或获取更多通信技术资料,欢迎添加微信:gprshome201101。


一、数据链路层概述

1.1 数据链路层的功能

数据链路层位于OSI模型的第二层,在物理层提供的服务基础上,向网络层提供服务。

flowchart TD
    A["数据链路层"] --> B["链路管理"]
    A --> C["帧封装"]
    A --> D["帧同步"]
    A --> E["差错控制"]
    A --> F["流量控制"]

    B --> B1["建立、维护、释放链路"]
    B --> B2["介质访问控制 MAC"]

    C --> C1["添加帧头帧尾"]
    C --> C2["地址字段"]
    C --> C3["类型字段"]

    D --> D1["比特同步"]
    D --> D2["帧定界"]

    E --> E1["差错检测"]
    E --> E2["差错纠正"]
    E --> E3["ARQ重传"]

    F --> F1["防止淹没接收方"]
    F --> F2["滑动窗口"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表全面展示了数据链路层的五大核心功能。

链路管理负责建立、维护和释放数据链路连接。对于面向连接的服务,需要在数据传输前建立链路,传输结束后释放链路。介质访问控制(MAC)协调多个设备对共享介质的访问,避免冲突。

帧封装是指将网络层的数据包(IP数据报)封装成帧,添加帧头和帧尾。帧头包含地址字段(源MAC地址和目的MAC地址)、类型字段(指示上层协议)。帧尾包含校验和(FCS)。

帧同步是指接收方从比特流中识别帧的边界。比特同步是识别比特的边界(时钟同步),帧同步是识别帧的起始和结束位置。

差错控制通过校验和检测传输错误,通过ARQ(自动重传请求)机制请求重传损坏的帧,某些系统还可以通过前向纠错(FEC)纠正错误。

流量控制通过滑动窗口机制防止发送方发送过快淹没接收方,确保接收方来得及处理接收的数据。

1.2 数据链路层提供的服务

数据链路层向网络层提供三种服务:无确认无连接、有确认无连接、有确认面向连接。

flowchart TD
    A["数据链路层服务"] --> B["无确认无连接"]
    A --> C["有确认无连接"]
    A --> D["有确认面向连接"]

    B --> B1["不建立链路"]
    B --> B2["不确认帧"]
    B --> B3["尽力而为"]
    B --> B4["应用: 局域网"]

    C --> C1["不建立链路"]
    C --> C2["每帧独立确认"]
    C --> C3["可靠传输"]
    C --> C4["应用: 无线局域网"]

    D --> D1["建立链路"]
    D --> D2["滑动窗口"]
    D --> D3["保证可靠"]
    D --> D4["应用: 广域网"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px
    style B fill:#c8e6c9,stroke:#2e7d32
    style C fill:#fff9c4,stroke:#f57f17
    style D fill:#ffcdd2,stroke:#c62828

图表讲解:这个图表对比了数据链路层的三种服务类型。

无确认无连接服务是最简单的服务,不建立链路,发送帧后不等待确认,尽最大努力交付。这种服务效率高,但不保证可靠传输。以太网(传统共享式以太网)就是无确认无连接服务——如果需要可靠传输,由上层协议(如TCP)实现。

有确认无连接服务不建立链路,但每帧都独立确认。发送方发送帧后等待确认,超时未收到确认则重传。这种服务提供了可靠传输,但没有链路级的连接概念。无线局域网(IEEE 802.11)使用有确认无连接服务——由于无线信道误码率高,每帧确认是必要的。

有确认面向连接服务在传输数据前建立链路,传输期间维护链路状态,传输结束后释放链路。这种服务使用滑动窗口机制,提供流量控制和差错控制,保证可靠、有序的数据传输。HDLC、PPP等广域网协议使用面向连接服务。


二、帧结构与同步

2.1 帧的基本结构

帧是数据链路层的协议数据单元(PDU),包含帧头、数据字段和帧尾。

flowchart TD
    A["帧结构"] --> B["帧头"]
    A --> C["数据字段"]
    A --> D["帧尾"]

    B --> B1["标志 Flag"]
    B --> B2["地址 Address"]
    B --> B3["控制 Control"]

    C --> C1["网络层数据包"]
    C --> C2["长度可变"]
    C --> C3["有最大长度限制"]

    D --> D1["校验和 FCS"]
    D --> D2["标志 Flag"]

    E["帧定界"] --> E1["标志字节法"]
    E --> E2["字节计数法"]
    E --> E3["违规编码法"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表展示了帧的基本组成部分和帧定界方法。

帧头包含三个主要字段:标志字段(Flag,如01111110)用于帧定界和同步;地址字段(Address)标识目的地址(和源地址);控制字段(Control)用于链路管理和控制信息。

数据字段承载网络层的数据包(IP数据报)。数据字段长度可变,但有最大长度限制(MTU,最大传输单元)。以太网的MTU是1500字节,这意味着IP数据报不能超过1500字节(如果超过,需要分片)。

帧尾包含校验和(FCS,帧检验序列),用于检测传输过程中的错误。常用的校验和是CRC(循环冗余校验),可以检测绝大多数传输错误。

帧定界是接收方识别帧边界的过程。标志字节法使用特殊的标志字节(如01111110)作为帧的开始和结束标志。字节计数法在帧头中指示数据字段的长度。违规编码法使用特殊的编码(如曼彻斯特编码的违规序列)作为帧定界。

2.2 字符填充与比特填充

当帧的数据字段中出现与标志字节相同的模式时,需要使用字符填充或比特填充技术。

flowchart TD
    A["填充技术"] --> B["字符填充<br>Character Stuffing"]
    A --> C["比特填充<br>Bit Stuffing"]

    B --> B1["面向字符的协议"]
    B --> B2["DLE和STX"]
    B --> B3["效率较低"]

    C --> C1["面向比特的协议"]
    C --> C2["0比特插入"]
    C --> C3["透明传输"]

    B2a["发送: 遇到标志<br>前插入转义字符"]
    B2b["接收: 删除转义字符<br>恢复原始数据"]

    C2a["发送: 连续5个1后插入0"]
    C2b["接收: 连续5个1后删除0"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表对比了两种填充技术。

字符填充用于面向字符的协议(如PPP)。当数据字段中出现与标志字节相同的模式时,发送方在前面插入转义字符(如DLE),接收方删除转义字符恢复原始数据。这种方式简单但效率较低。

比特填充用于面向比特的协议(如HDLC)。当数据字段中连续出现5个1时,发送方插入一个0,接收方连续收到5个1后删除后面的0。这确保了帧中不会出现连续6个1,因此01111110标志字节是唯一的,可以作为帧定界。这种方式实现了透明传输——任何数据模式都可以传输。

2.3 帧同步机制

帧同步是接收方从比特流中识别帧边界的过程。

sequenceDiagram
    participant Sender as 发送方
    participant Channel as 信道
    participant Receiver as 接收方

    Sender->>Channel: 发送前导码<br>10101010...
    Channel->>Receiver: 接收前导码

    Note over Receiver: 比特同步<br>锁定时钟

    Sender->>Channel: 发送帧开始标志<br>01111110
    Channel->>Receiver: 接收标志

    Note over Receiver: 帧同步<br>识别帧边界

    Sender->>Channel: 发送帧内容
    Channel->>Receiver: 接收帧内容

    Sender->>Channel: 发送帧结束标志<br>01111110
    Channel->>Receiver: 接收标志

    Note over Receiver: 帧接收完成<br>准备下一帧

图表讲解:这个序列图展示了帧同步的完整过程。

比特同步是帧同步的前提。发送方在帧之前发送前导码(如以太网使用7字节10101010模式),接收方通过前导码锁定时钟,实现比特同步。

帧同步通过识别帧的起始和结束标志实现。当接收方检测到起始标志(如01111110)时,知道帧开始;当检测到结束标志时,知道帧结束。

有些协议(如以太网)使用前导码和SFD(帧开始定界符)来实现同步。以太网前导码是7字节10101010,SFD是1字节10101011,接收方检测到SFD就知道下一字节是帧的开始。

51学通信站长爱卫生:帧同步是数据链路层的关键技术。如果帧同步失败,接收方无法正确识别帧边界,会导致错帧(帧错位)、漏帧(未能识别帧)或虚假帧(将噪声误认为帧)。现代网络设备使用硬件实现帧同步,速度极快且可靠。


三、差错控制

3.1 差错类型

数据传输过程中可能出现的错误分为单比特错误和突发错误。

错误类型定义原因典型场景
单比特错误只有一个比特出错随机噪声、脉冲干扰光纤通信
突发错误连续多个比特出错电磁干扰、信号衰减无线通信、铜缆

3.2 差错检测

差错检测是通过校验码检测传输错误的技术。

flowchart TD
    A["差错检测技术"] --> B["奇偶校验"]
    A --> C["校验和 Checksum"]
    A --> D["循环冗余校验 CRC"]

    B --> B1["1位校验位"]
    B --> B2["检测奇数个错误"]
    B --> B3["简单但效率低"]

    C --> C1["求和取反"]
    C --> C2["检测多种错误"]
    C --> C3["应用: IP、TCP、UDP"]

    D --> D1["多项式除法"]
    D --> D2["检测能力强"]
    D --> D3["硬件实现"]
    D --> D4["应用: 以太网、HDLC"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表对比了三种差错检测技术。

奇偶校验是最简单的差错检测方法。在数据后添加1位校验位,使整个数据中1的个数为奇数(奇校验)或偶数(偶校验)。奇偶校验可以检测奇数个错误,但无法检测偶数个错误,检测能力有限。

校验和(Checksum)是将数据按某种方式求和,取反作为校验字段。IP、TCP、UDP协议都使用校验和。校验和实现简单,可以检测多种错误,但检测能力不如CRC。

循环冗余校验(CRC)是基于多项式除法的差错检测方法。发送方将数据除以生成多项式,余数作为CRC校验码附加到帧后。接收方将整个数据(包括CRC)除以生成多项式,余数为0则表示无错误。CRC的检测能力很强,可以检测几乎所有常见的错误模式。CRC-32(用于以太网)可以检测长达34位突发错误。

3.3 差错纠正

差错纠正不仅检测错误,还能纠正错误。

flowchart TD
    A["差错纠正技术"] --> B["海明码"]
    A --> C["卷积码"]
    A --> D["Reed-Solomon"]
    A --> E["LDPC"]
    A --> F["Turbo码"]

    B --> B1["单比特纠错"]
    B --> B2["双比特检测"]
    B --> B3["理论简单"]
    B --> B4["需要额外校验位"]

    C --> C1["卷积编码"]
    C --> C2["维特比解码"]
    C --> C3["前向纠错"]
    C --> C4["应用: 无线通信"]

    D --> D1["多字节纠错"]
    D --> D2["突发错误纠正"]
    D --> D3["应用: CD、DVD、QR码"]

    E --> E1["低密度奇偶校验码"]
    E --> E2["接近香农极限"]
    E --> E3["应用: Wi-Fi 6、5G"]

    F --> F1["并行级联卷积码"]
    F --> E2["高性能"]
    E3["应用: 3G、4G"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表介绍了五种主要的差错纠正技术。

海明码是最早的差错纠正码,可以纠正单比特错误,检测双比特错误。海明码在数据中插入多个校验位,每个校验位覆盖特定的数据位。通过检查校验位的状态,可以定位出错的比特并纠正它。海明码的效率不高(需要较多的校验位),但理论简单,易于理解。

卷积码是编码有记忆的纠错码,输出不仅取决于当前输入,还取决于之前的输入。维特比算法是卷积码的高效解码算法。卷积码广泛应用于无线通信(如GSM、CDMA、Wi-Fi),通常与交织技术结合使用以抵抗突发错误。

Reed-Solomon码是一种基于多项式的纠错码,特别擅长纠正突发错误。Reed-Solomon码被广泛应用于CD、DVD、QR码、数据存储、卫星通信等领域。CD使用的CIRC(交叉交织里德-所罗门码)可以纠正长达4000比特的突发错误。

LDPC(低密度奇偶校验码)是一种性能接近香农极限的纠错码,解码复杂度相对较低。Wi-Fi 6(802.11ax)和5G NR都采用了LDPC码作为数据信道的纠错码。

Turbo码是并行级联卷积码,性能接近香农极限,但解码复杂度高、延迟大。Turbo码被3G和4G蜂窝网络采用。


四、自动重传请求(ARQ)

4.1 ARQ概述

自动重传请求(ARQ)是通过重传来实现可靠传输的机制。

flowchart TD
    A["ARQ机制"] --> B["停止-等待 ARQ"]
    A --> C["回退N步 ARQ"]
    A --> D["选择重传 ARQ"]

    B --> B1["发送一帧<br>等待确认"]
    B --> B2["简单但效率低"]
    B --> B3["应用: 可靠信令"]

    C --> C1["发送窗口 > 1"]
    C --> C2["累计确认"]
    C --> C3["出错后回退N步"]
    C --> C4["应用: HDLC"]

    D --> D1["发送窗口 > 1"]
    D --> D2["选择性重传"]
    D --> D3["需要接收窗口"]
    D --> D4["应用: 高性能场景"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表对比了三种ARQ机制。

停止-等待ARQ是最简单的ARQ机制。发送方发送一帧后,停止发送并等待确认。收到确认后发送下一帧,超时未收到确认则重传。这种机制简单但效率低,因为发送方在等待确认期间什么都不做。

回退N步ARQ使用滑动窗口,发送窗口大于1。发送方可以连续发送多帧,接收方采用累计确认(ACK n表示n及以前的所有帧都正确接收)。如果发送方发现某个帧出错或超时,则”回退”到该帧,重传该帧及之后的所有帧。这种机制提高了效率,但会重传已经正确接收的帧,浪费带宽。

选择重传ARQ也使用滑动窗口,但只重传出错或超时的帧,不重传已经正确接收的帧。接收方需要维护接收窗口,缓存乱序到达的帧。选择重传ARQ效率最高,但实现最复杂——需要更大的序列号空间、缓存机制、重传排序机制。

4.2 滑动窗口机制

滑动窗口是流量控制和ARQ的核心机制。

flowchart LR
    subgraph Sender["发送方"]
        S1["已发送已确认<br>Seq ≤ ACK"]
        S2["已发送未确认<br>ACK < Seq ≤ ACK + N"]
        S3["可用窗口<br>可以发送"]
        S4["不可用<br>窗口外"]
    end

    subgraph Receiver["接收方"]
        R1["期望接收<br>Seq = Expected"]
        R2["接收窗口<br>可以接收"]
    end

    S2 -->|"收到ACK后<br>窗口右移"| S3
    R2 -.->|"通告接收窗口"| S2

    style S2 fill:#ffcdd2,stroke:#c62828
    style S3 fill:#c8e6c9,stroke:#2e7d32
    style R2 fill:#fff9c4,stroke:#f57f17

图表讲解:这个图表展示了滑动窗口的工作原理。

发送方维护发送窗口,窗口内的帧可以发送。窗口分为四个部分:已发送已确认(Seq ≤ ACK)、已发送未确认(ACK < Seq ≤ ACK + N,红色,窗口右边界)、可用窗口(绿色,可以发送)、不可用(窗口外,暂时不能发送)。

接收方维护接收窗口,表示可以接收的序列号范围。接收方在每个确认中通告期望接收的序列号和接收窗口大小。

当发送方收到确认时,窗口向右滑动,可以发送新的帧。如果接收方的接收窗口缩小,发送方的可用窗口也会相应缩小。

滑动窗口机制同时实现了流量控制和ARQ。流量控制是通过接收窗口大小限制发送方的发送速率。ARQ是通过超时和确认来检测丢失的帧并重传。

4.3 三种ARQ机制对比

特性停止-等待回退N步选择重传
发送窗口大小1NN
接收窗口大小11N
确认方式单帧确认累计确认选择确认
重传策略出错帧出错帧及之后所有帧仅出错帧
带宽效率
实现复杂度
缓存需求
序列号空间1位若干位更大

五、典型数据链路协议

5.1 HDLC协议

高级数据链路控制(HDLC)是一种经典的面向比特的数据链路协议。

flowchart TD
    A["HDLC帧结构"] --> B["标志 Flag 8位"]
    A --> C["地址 Address 8位"]
    A --> D["控制 Control 8位"]
    A --> E["数据 Data 可变"]
    A --> F["校验和 FCS 16/32位"]
    A --> G["标志 Flag 8位"]

    B --> B1["01111110"]
    B1 --> B2["帧定界"]

    D --> D1["信息帧 I-Format"]
    D --> D2["监督帧 S-Format"]
    D --> D3["无编号帧 U-Format"]

    D1 --> D1a["携带数据"]
    D1 --> D1b["P/F位轮询/最终"]
    D1 --> D1c["N(S)发送序列号"]
    D1 --> D1d["N(R)接收序列号"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表展示了HDLC帧的结构和控制字段类型。

HDLC帧以标志字节(01111110)开始和结束。地址字段标识次站地址(在点到点链路中不重要)。控制字段区分帧类型和携带控制信息。

控制字段有三种类型:信息帧(I帧)携带用户数据,包含发送序列号N(S)和接收序列号N(R);监督帧(S帧)用于流量控制和差错控制,不携带数据;无编号帧(U帧)用于链路管理(建立、释放链路)。

HDLC支持三种传输模式:正常响应模式(NRM)、异步响应模式(ARM)、异步平衡模式(ABM)。NRM用于主从结构(一个主站、多个次站),ARM也是主从结构但次站可以主动发送,ABM是点到点的平衡模式。

5.2 PPP协议

点对点协议(PPP)是目前最广泛使用的数据链路协议,用于路由器之间的连接和用户接入互联网。

flowchart TD
    A["PPP协议"] --> B["帧格式"]
    A --> C["链路控制协议 LCP"]
    A --> D["网络控制协议 NCP"]
    A --> E["认证协议"]

    B --> B1["标志 1字节"]
    B --> B2["地址 1字节"]
    B --> B3["控制 1字节"]
    B --> B4["协议 2字节"]
    B --> B5["数据 可变"]
    B --> B6["校验和 2/4字节"]

    C --> C1["建立链路"]
    C --> C2["配置参数"]
    C --> C3["检测链路故障"]
    C --> C4["关闭链路"]

    D --> D1["IPCP"]
    D --> D2["IPXCP"]
    D --> D3["其他NCP"]

    E --> E1["PAP"]
    E --> E2["CHAP"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表展示了PPP的组成部分。

PPP帧包含标志(01111110)、地址(0xFF,固定值)、控制(0x03,固定值)、协议(指示上层协议)、数据和校验和。地址和控制字段固定是为了兼容HDLC,但PPP不使用它们。

LCP(链路控制协议)用于建立、配置、维护和终止数据链路连接。LCP可以协商最大接收单元(MRU)、认证协议、魔术数(用于环路检测)等参数。

NCP(网络控制协议)用于配置网络层协议。IPCP用于配置IP协议参数(如IP地址),IPXCP用于配置IPX协议。

PPP支持两种认证协议:PAP(口令认证协议)和CHAP(挑战握手认证协议)。PAP简单但安全性较低,口令以明文传输。CHAP更安全,使用挑战-响应机制,口令不直接传输。

5.3 以太网帧格式

以太网是最常用的局域网技术,其帧格式经过多次演变。

flowchart TD
    A["以太网帧演变"] --> B["Ethernet II (DIX)"]
    A --> C["IEEE 802.3"]
    A --> D["IEEE 802.1Q VLAN"]

    B --> B1["目的MAC 6字节"]
    B --> B2["源MAC 6字节"]
    B --> B3["类型 2字节"]
    B --> B4["数据 46-1500字节"]
    B --> B5["校验和 4字节"]

    C --> C1["前导码 8字节"]
    C --> C2["目的MAC 6字节"]
    C --> C3["源MAC 6字节"]
    C --> C4["长度 2字节"]
    C --> C5["数据 46-1500字节"]
    C --> C6["校验和 4字节"]

    D --> D1["目的MAC 6字节"]
    D --> D2["源MAC 6字节"]
    D --> D3["VLAN标签 4字节"]
    D --> D4["类型/长度 2字节"]
    D --> D5["数据 46-1500字节"]
    D --> D6["校验和 4字节"]

    D3 --> D3a["TPID 2字节<br>0x8100"]
    D3 --> D3b["TCI 2字节<br>VLAN ID + Priority"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表展示了以太网帧的演变过程。

Ethernet II(也称DIX格式)是最早的以太网帧格式,由DEC、Intel、Xerox三家公司制定。帧中包含目的MAC地址、源MAC地址、类型字段(指示上层协议,如0x0800表示IP)、数据和校验和。

IEEE 802.3标准将类型字段改为长度字段(指示数据长度),并在数据字段添加了LLC(逻辑链路控制)子层。实际上,为了向后兼容,当长度/类型字段值大于1500时,仍然解释为类型字段。

IEEE 802.1Q是VLAN(虚拟局域网)标签标准,在传统以太网帧中插入4字节VLAN标签。VLAN标签包含TPID(标签协议标识符,固定为0x8100)和TCI(标签控制信息)。TCI包含3位优先级、1位CFI(规范格式指示符)、12位VLAN ID。VLAN标签用于隔离广播域,实现逻辑网络划分。


六、数据传输模式

6.1 单工、半双工与全双工

数据传输模式定义了数据在两个方向上的传输方式。

flowchart TD
    A["数据传输模式"] --> B["单工 Simplex"]
    A --> C["半双工 Half-Duplex"]
    A --> D["全双工 Full-Duplex"]

    B --> B1["只能单向传输"]
    B --> B2["发送和接收固定"]
    B --> B3["应用: 广播电视"]

    C --> C1["双向但不能同时"]
    C --> C2["需要切换方向"]
    C --> C3["应用: 对讲机、共享以太网"]

    D --> D1["双向且可同时"]
    D --> D2["无冲突"]
    D --> D3["应用: 电话、交换以太网"]

    style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px

图表讲解:这个图表对比了三种数据传输模式。

单工模式只能单向传输,发送方固定为发送方,接收方固定为接收方。广播电视是典型的单工传输——电视台发送,电视机接收,观众不能向电视台发送信号。

半双工模式支持双向传输,但不能同时进行。发送方和接收方需要切换角色。对讲机是半双工的典型——按住按钮说话(发送),松开按钮收听(接收)。传统共享以太网也是半双工的,某时刻只能有一方发送。

全双工模式支持双向同时传输,发送方和接收方可以同时发送和接收。电话是全双工的——双方可以同时说话。交换以太网提供全双工模式,点到点链路上可以实现同时收发,无冲突,速率翻倍。

51学通信站长爱卫生:全双工是现代网络的主流。对于点到点链路(如计算机与交换机之间),应该使用全双工模式以获得更好的性能。全双工模式不需要CSMA/CD机制,消除了冲突,提高了链路利用率。在配置网络设备时,要注意速率和双工模式的匹配——速率和双工模式不匹配是网络性能下降的常见原因。

6.2 同步传输与异步传输

同步传输和异步传输是两种不同的字符/字节同步方式。

特性同步传输异步传输
同步方式共享时钟起止位同步
传输单位字符块字符
效率
实现复杂度
应用高速网络低速设备、串口

七、核心概念总结

核心概念总结

概念定义应用场景注意事项
数据链路层OSI模型第二层链路管理、帧传输介于物理层和网络层之间
数据链路层PDU封装网络层数据包含帧头、数据、帧尾
帧同步识别帧边界接收方识别帧需要比特同步作为前提
差错检测检测传输错误校验和、CRCCRC检测能力强
纠错码检测并纠正错误前向纠错需要额外开销
ARQ通过重传实现可靠传输数据链路层停止-等待、回退N步、选择重传
滑动窗口流量控制和ARQ机制高性能协议窗口大小影响性能
PPP点对点协议广域网接入支持多种网络层协议

常见问题解答

Q1:为什么以太网的MTU是1500字节?

:以太网的MTU(最大传输单元)是1500字节,这个数值有历史和技术原因,也考虑了多种因素的平衡。

从历史看,早期的以太网(10Base5和10Base2)使用共享介质,采用CSMA/CD机制。如果帧太长,占用介质时间太长,其他设备需要等待更久,冲突概率增加。实验发现1500字节是一个较好的平衡点——足够大以容纳大多数IP数据报,又不太大以至于严重影响冲突性能。

从技术看,1500字节的MTU对应1518字节的以太网帧(18字节帧头帧尾+1500字节数据)。这个长度使得错误帧的检错效率较高——如果帧太长,出错概率增加,重传开销也大。1500字节的错误率在一个可接受范围内。

另外,1500字节也考虑了内存管理的因素。早期的内存资源有限,1500字节是2的幂次方的近似值,便于内存分配和缓存管理。

当然,1500字节并非不可改变。千兆以太网引入了巨型帧(Jumbo Frame),MTU可达9000字节。巨型帧提高了效率(头部开销占比更小),但也带来了兼容性问题(不是所有设备都支持)、内存占用更大、错误影响更大等问题。

51学通信提示:在配置网络时,要注意端到端的MTU匹配。如果某条路径上的MTU较小(如VPN隧道),而发送方使用较大的MTU,会导致分片或丢包。使用Path MTU Discovery(PMTUD)机制可以动态发现路径上的最小MTU。


Q2:滑动窗口的窗口大小如何确定?

:滑动窗口的窗口大小是影响协议性能的关键参数,需要综合考虑多个因素。

首先是传播延迟与带宽的乘积(BDP,Bandwidth-Delay Product)。BDP表示链路上能够”在途”的数据量,即从发送第一个比特到收到确认这段时间内可以发送的比特数。窗口大小至少应该等于BDP才能充分利用链路容量。例如,100Mbps带宽、50ms延迟的链路,BDP=100Mbps×0.05s=5Mb=625KB,窗口大小至少要625KB才能填满管道。

其次是接收方的缓冲区大小。窗口大小不能超过接收方的缓冲区大小,否则接收方无法缓存接收到的数据。接收方会在确认中通告接收窗口大小(rwnd),发送方不能超过这个限制。

再者是链路的稳定性。如果链路不稳定,丢包率高,窗口大小不宜太大。大窗口意味着有很多数据在传输中,一旦丢包,需要重传大量数据。

还有协议的限制。TCP的窗口大小受限于窗口字段(16位)和窗口缩放选项。窗口缩放选项可以将窗口大小扩展到2^30字节,但实际窗口大小还受限于接收缓冲区、拥塞窗口等因素。

实践中,操作系统会自动调整窗口大小。Linux的默认初始窗口通常在10-20个报文段,然后根据网络状况动态调整。高延迟、高带宽的链路(如跨国链路、卫星链路)需要更大的窗口。


Q3:回退N步和选择重传应该如何选择?

:回退N步和选择重传是两种不同的ARQ机制,各有优势和适用场景。

回退N步的主要优势是实现简单。它只需要维护一个发送窗口,接收窗口大小为1(只按序接收),不需要缓存乱序到达的帧。这意味着接收方的内存需求小,实现简单。

回退N步的主要缺点是会重传已经正确接收的帧。如果窗口较大且出错位置靠前,需要重传大量数据,浪费带宽。

选择重传的主要优势是效率高。它只重传出错或丢失的帧,不重传已经正确接收的帧。这对于高延迟、高带宽的链路尤其重要——重传开销小,利用率高。

选择重传的主要缺点是实现复杂。接收方需要维护接收窗口,缓存乱序到达的帧,支持重新排序。发送方和接收方需要更大的序列号空间以避免歧义。

从应用场景看,回退N步适用于链路质量较好(出错率低)、窗口较小的场景。传统的HDLC协议使用回退N步。选择重传适用于链路质量较差(出错率高)、窗口较大的场景。现代高性能协议(如TCP)实际上采用了选择重传和快速重传的混合机制。

51学通信站长爱卫生认为:选择ARQ机制时,要权衡性能和复杂度。对于低速、短距离链路,回退N步已经足够;对于高速、长距离链路,选择重传的价值更明显。在实际应用中,还可以结合前向纠错(FEC)来减少重传次数。


Q4:为什么CRC比奇偶校验和校验和更可靠?

:CRC相比奇偶校验和校验和更可靠,是因为它在检测错误能力和数学原理上都有优势。

从检测能力看,奇偶校验只能检测奇数个错误,无法检测偶数个错误,检测能力极差。校验和(如Internet校验和)采用求和取反的方法,可以检测多种错误,但对于某些特定的多位错误模式可能检测不到。

CRC基于多项式除法,将数据视为一个大的多项式,除以生成多项式,余数作为CRC码。从数学上可以证明,精心选择的生成多项式使得CRC可以检测几乎所有常见的错误模式。CRC-32可以检测所有长度不超过32位的突发错误,对于长度超过32位的突发错误,检测概率为1-2^-32(约40亿分之一)。

CRC的另一个优势是硬件实现高效。CRC校验可以通过移位寄存器和异或门实现,速度极快。现代网卡芯片都内置了CRC计算硬件,几乎不增加处理延迟。

CRC的”距离”特性也很好。不同的生成多项式会产生不同的CRC码,它们的”汉明距离”(能够检测/纠正错误的能力)不同。通过选择好的生成多项式,可以获得很大的汉明距离。

当然,CRC不是完美的。CRC无法检测所有错误(如数据被另一个也是CRC有效的数据替换)。但对于正常传输环境中的随机错误,CRC的检测能力已经足够。


Q5:PPP协议为什么能取代SLIP协议?

:PPP(点对点协议)相比SLIP(串行线路互联网协议),在功能、可靠性和扩展性方面都有显著优势,这是PPP能够取代SLIP的根本原因。

从功能看,SLIP只支持IP协议,是一个非常简单的封装协议——在IP数据报前后添加特殊的标志字节(0xC0)。PPP支持多种网络层协议(IP、IPX、AppleTalk等),通过NCP(网络控制协议)可以方便地扩展支持新的协议。PPP还支持认证、压缩、加密等功能,SLIP完全不支持这些。

从可靠性看,SLIP没有差错检测机制,无法发现传输错误。PPP包含2或4字节的校验和(CRC-16或CRC-32),可以检测传输错误。PPP还可以通过链路质量监控功能评估链路质量,动态调整参数。

从链路管理看,SLIP没有链路管理功能,不能建立、配置、维护、关闭链路。PPP的LCP(链路控制协议)提供了完整的链路管理功能,可以协商最大接收单元、认证协议、魔术数等参数。LCP还可以检测链路环路(通过魔术字段)、链路故障。

从应用看,SLIP主要用于低速串行线路(如9600bps拨号线路),在宽带时代已经完全淘汰。PPP不仅支持串行线路,还支持以太网(PPPoE)、同步链路(如SONET)、无线链路等多种物理层。PPP是目前最广泛使用的点对点协议。

虽然PPP后来也被更先进的协议(如PPP over Ethernet、PPP over ATM)部分取代,但PPP的核心思想(链路控制、网络控制分离)被继承了下来。


总结

本文系统介绍了数据链路层的核心功能、帧结构与同步方法、差错检测与纠正技术、ARQ机制以及典型数据链路协议。

通过学习,你应当理解了数据链路层在网络协议栈中的位置和作用,掌握了帧封装和帧同步的实现原理,了解了CRC、海明码等差错控制技术,理解了停止-等待、回退N步、选择重传等ARQ机制,以及HDLC、PPP、以太网等典型协议的特点和应用。

数据链路层是网络协议栈的关键层次,它将不可靠的物理层转变为可靠的数据链路,为网络层提供服务。理解数据链路层的工作原理,有助于深入理解网络通信的底层机制。

下篇预告

下一篇我们将深入探讨无线网络与安全技术,带你了解无线技术的发展历程、无线局域网的工作原理、无线个人区域网络的技术特点以及无线网络的安全挑战与解决方案。