>> >> >> Reference << << << <<<<<<Ref>>>>>>
Data Link Layer
Modified: 2025-12-31 | Author:ljf12825

数据链路层处于OSI模型的第2层,负责在相邻节点之间可靠地传输数据帧(Frame),并进行差错检测、帧定界、流量控制等工作

它处理什么问题

问题说明
成帧(Framing)把网络层的分组(Packet)封装成帧(Frame),方便底层传输。
差错检测与校正(Error Detection and Correction)通过 CRC、奇偶校验等方式检查数据在传输过程中是否损坏。
流量控制(Flow Control)控制发送速率,防止接收方来不及处理。
介质访问控制(MAC)多个设备共享物理媒介时,控制谁可以发数据(如以太网中的 CSMA/CD)。
物理地址寻址(MAC Address)使用物理地址(MAC地址)来标识链路上的节点。

数据链路层的结构

数据链路层通常分为两个子层(尤其在IEEE 802中)

子层功能
LLC(逻辑链路控制)子层提供差错检测、帧同步等服务,定义帧格式。
MAC(介质访问控制)子层控制设备如何访问共享物理媒介(决定谁能“说话”)。

层间关系

帧的组成(通用结构)

尽管不同链路层协议的帧结构会略有不同,但帧通常包含以下几个部分:

+---------+-----------+---------+------------+--------+
| 帧头    | 地址信息   | 控制字段 | 数据载荷    | 帧尾   |
+---------+-----------+---------+------------+--------+
区域内容和作用
帧头表示帧的起始位置,一般用于帧定界,比如标识“一个帧从这里开始”
地址信息包含发送方和接收方的 MAC地址(物理地址),用于局域网中标识设备
控制字段表示帧类型、编号、确认、流量控制等(用于差错控制/顺序控制)
数据载荷来自上层网络层(IP)的数据包,即真正要传送的“内容”
帧尾包含差错检测码,比如 CRC,用来检查帧在传输过程中是否出错(通常不能纠错)

帧的界定

帧的界定,指的是接收方如何识别和划分一个个帧的起始和结束
因为在链路上传输的是一串连续的比特流,接收端必须知道从哪开始读、读到哪结束,这就是帧的界定要解决的问题

为什么需要帧的界定

链路层是点到点或点到多点之间的通信,如果不做帧的划分:

常见的帧界定方式

字节计数法(Byte Count)

优点:结构简单,开销小
缺点:如果长度字段出错,整个帧就错乱,恢复困难

字符充填法(Character Stuffing)

例如:
发送帧:[FLAG][data1][ESC][FLAG][data2][FLAG]
接收端通过ESC识别数据中的特殊字符不是标志位

优点:可靠,能处理控制字符冲突
缺点:只适用于字符流,效率略低

比特充填法(Bit Stuffing)以太网使用

例如:
原始数据:01111110(冲突)
比特充填后:01111101
接收端发现连续5个1后自动删掉后面的0,还原原始数据

优点:适用于任意比特流
缺点:需要位级处理,稍复杂

比特填充法的局限就在于:
它假设连续5个1后跟的0一定是充填的,无法判断它是不是数据本身的0
为了避免误判,协议的设计者必须保证:

基于物理层的编码规则(如曼彻斯特编码)

某些链路技术(如以太网物理层)使用编码规律来隐式地帮助同步帧界限,例如通过信号边缘检测等

差错检测

差错检测保证数据传输的正确性和可靠性

差错为什么发生

数据在物理媒介上传输时,可能因为干扰、噪声、电磁波、硬件故障等原因,导致传输的比特发生错误(比如0变成1,1变成0)
这些错误如果不检测出来,接收方就会得到错误数据,造成系统错误

差错检测的目标

常见差错检测的方法

奇偶校验(Parity Check)

循环冗余校验(CRC,Cyclic Redundancy Check)

校验和(Checksum)

哈希函数

差错检测流程简述

1.发送端:

2.接收端:

差错检测的局限性

如果数据和校验码都被篡改了,接收端的校验结果依然“正确”,怎么办

所有差错检测码(包括CRC)都是基于数学算法设计的,它们并不能保证100%发现所有错误

为什么

发生这种情况的概率极低

但是仍然可能存在(理论上)

解决方案与防范措施

结论

差错检测码不是绝对完美的,但它是网络传输中非常高效且可靠的第一道防线。它把大部分错误都拦截了,高层协议和应用层再负责剩下的

MAC地址

MAC地址的结构

48位分成两个部分:

部分长度说明
前24位(OUI)3字节(24位)组织唯一标识符,分配给设备制造商(IEEE授权)
后24位3字节(24位)设备序列号,由制造商自行分配

MAC地址的作用

MAC地址的类型

1.单播地址(Unicast)

2.组播地址(Multicast)

3.广播地址(Broadcast)

MAC地址在通信中的流程

1.当一台设备要发送数据给另一台设备时,它会在帧头写上目标设备的MAC地址

2.以太网交换机会根据MAC地址转发帧

3.接收设备收到帧后,会检查目标MAC地址是否与自己匹配,匹配则处理数据,不匹配则丢弃

补充:ARP协议

冲突检测

这是以太网中一个非常重要的机制,尤其是在传统共享介质环境下保证通信顺畅的关键技术

什么是冲突

在以太网的共享媒介(比如早期集线器环境)中,多个设备可能同时尝试发送数据

以太网中的冲突检测机制:CSMA/CD

CSMA/CD = Carrier Sense Multiple Access With Collision Detection
载波监听多路访问/冲突检测

CSMA/CD工作流程

1.载波监听(Carrier Sense)

2.多路访问(Multiple Access)

3.冲突检测(Collision Detection)

4.冲突处理

5.退避算法(Backoff)

为什么要冲突检测

举例

假设设备A和设备B同时监听到信道空闲,都开始发送:

现代网络中的情况

冲突检测主要存在于传统的以太网共享介质环境,但它不是所有网络技术都有的机制

介质控制访问

主要负责协调多个设备如何共享同一物理传输媒介,保证数据有序、有效地传输

什么是介质访问控制

为什么需要介质访问控制

假设多个设备共用一根网线或无线信道

常见的介质访问控制方法

竞争式访问(Contention-based Access)

设备竞争使用信道,常见协议有:

非竞争式访问(Contention-free Access)

采用集中管理,设备按顺序或规则访问信道:

优点:冲突少,适合高负载,实时要求高的场景

数据链路层的典型协议

协议用途
Ethernet(以太网)局域网中最常见的数据链路层协议。
PPP(点对点协议)常用于串口连接、电话拨号网络等。
HDLC思科设备之间通信常用,控制帧可靠传输。
802.11(Wi-Fi)无线局域网数据链路层协议,包含复杂的MAC管理逻辑。

Ethernet

Ethernet是计算机网络中最重要、最经典的链路层协议之一,是日常生活和工作中局域网通信的基础协议。它实现了数据链路层的大部分功能,尤其是在局域网(LAN)中广泛使用

Ethernet是一种数据链路协议,用于在局域网中传输数据帧,由IEEE定义为IEEE 802.3标准

它解决了:

特点说明
传输介质传统用双绞线、光纤,也支持同轴电缆
带宽速度从10Mbps到10Gbps,甚至更高
访问控制方式传统采用CSMA/CD,现代交换机全双工避免冲突
物理拓扑早期是总线拓扑,现在多用星型拓扑
帧格式固定帧结构,包含MAC地址、类型字段等
设备地址使用唯一的48位MAC地址标识设备

以太网帧结构(最常见的帧格式)

+------------+------------+--------------+-----------+---------------------+
| 目标 MAC地址 | 源 MAC地址  | 类型字段(Type) | 数据部分    | CRC校验码      |
| (6 Bytes)   | (6 Bytes)   | (2 Bytes)       | (46~1500B) | (4 Bytes)     |
+------------+------------+--------------+-----------+---------------------+
字段大小作用
目的 MAC 地址6 字节接收方设备的 MAC 地址
源 MAC 地址6 字节发送方设备的 MAC 地址
类型字段2 字节指明数据部分携带的是哪种协议(如 IPv4 为 0x0800)
数据部分(Payload)46~1500 字节传输的有效载荷(如IP数据包)
CRC 校验码4 字节检测数据是否在传输过程中出错

以太网帧最小长度为64字节,数据部分不足时会自动充填,最大为1518字节(不包括VLAN等扩展)

以太网帧界定

以太网使用如下方式实现帧界定:

这不是“标识符”分隔,而是通过信号模式和协议规范来界定帧的开始

PPP

常用在点对点连接上,特别是拨号网络和某些宽带接入场景

什么是PPP协议

PPP协议特点

特点说明
面向点对点链路连接仅限两个端点,避免冲突和多路访问问题
封装灵活支持多种网络层协议(IP、IPX、AppleTalk等)
链路控制支持链路建立、维护和拆除
认证机制支持PAP、CHAP等多种认证方式
差错检测使用CRC16进行帧校验

PPP帧格式

+--------+--------+---------+------------+----------+---------+
| 标志位 | 地址   | 控制    | 协议字段    | 信息字段 | FCS校验  |
| 1字节  | 1字节  | 1字节   | 2字节       | 变长     | 2字节    |
+--------+--------+---------+------------+----------+---------+

PPP协议的工作过程

1.链路建立:通过LCP(链路控制协议)协商链路参数(最大传输单元、认证方式等)

2.认证阶段(可选):使用PAP或CHAP认证连接双方身份

3.网络层协议协商:通过NCP(网络控制协议)协商所使用的网络层协议参数(如IP地址)

4.数据传输:链路建立和认证完成后,开始传输封装好的网络层数据

5.链路终止:通信结束时拆除链路

PPP优点

应用场景

从帧转换成比特

基本概念

帧 -> 比特流:本质上就是将一整帧的数据按照物理层的编码方式,转成一串二进制信号,在线上发送

转换过程

1.构建帧

例如以太网帧结构如下:

字段长度(字节)说明
前导码7帮助接收方同步
帧开始定界符(SFD)1标记帧开始
目的 MAC 地址6
源 MAC 地址6
类型 / 长度2
数据(Payload)46–1500
CRC(循环冗余校验)4

举例:

整个帧可能是:
[前导码][SFD][目的MAC][源MAC][类型][数据][CRC]

这是完整的帧结构,每一项都是字节或多个字节组成

2.字节 → 比特(准备物理层发送)

每个字节 = 8个比特

例如:

字节:0x4F = 01001111

整个帧会被逐字节转成二进制流

3.比特 → 物理信号(在物理层)

比特转信号依赖于编码方式(如曼彻斯特编码、NRZ、NRZI等)和物理媒介(如双绞线、光纤、无线电波)

例子:曼彻斯特编码

这样可以通过电压变化表示一个个比特。网卡会把这些编码后信号发送到传输媒介上

发生位置

发送端的网卡(NIC)

这是转换帧为比特流、发送信号的核心设备,发生以下过程

阶段动作发生在
构造帧操作系统内核/驱动将数据打包成帧(如以太网帧)CPU + 驱动软件
帧 ➝ 比特流网卡把帧转成一串比特网卡硬件
比特 ➝ 电信号网卡将比特编码(如曼彻斯特)并转换为电压/光信号网卡的物理层电路
物理信号传输电信号通过网线、光纤或无线天线发送出去网卡 + 媒介

接收端的网卡

接收端网卡进行逆向过程

阶段动作发生在
接收电信号接收从线路来的信号(电压/光波)网卡
电信号 ➝ 比特流解码为 0/1 的比特流网卡
比特流 ➝ 帧按照协议组装出完整帧网卡驱动
帧 ➝ 数据交给操作系统协议栈(如 TCP/IP)处理操作系统内核

实际例子

在浏览器中访问一个网站