计算机网络(5)——数据链路层

article/2025/8/7 7:59:50

1.概述

数据链路层负责一套链路上从一个节点向另一个物理链路直接相连的相邻节点传输数据报。换言之,主要解决相邻节点间的可靠数据传输

节点(nodes):路由器和主机
链路(links):连接相邻节点的通信信道在这里插入图片描述

2.数据链路层服务

2.1 组帧

组帧(framing):将来自网络层的IP数据报构造成数据帧,添加首部(帧起始标志、地址信息)和尾部(校验序列)

典型帧格式: [起始符][地址字段][控制字段][数据][CRC校验/FCS][结束符]在这里插入图片描述
注意:以太网标准规定,最小帧长度必须为64字节,所以最小数据长度=64-目的MAC(6)-源MAC(6)-类型(2)-FCS(4)=46

2.2 帧同步

帧同步:确保接收方能够正确识别数据帧的起始和结束位置的过程。常见的帧同步方法:

比特填充的标志比特法(Bit Stuffing):使用一个特定的比特序列(如01111110)来标志帧的开始和结束在这里插入图片描述
发送方:如果数据中出现连续的5个1比特,则直接插入1个0比特
接收方:当出现连续的5个1比特时

  • 如果下一比特是0,则为有效数据,直接丢弃该0比特
  • 如果下一比特是1,则连同后一位0比特构成定界符

在这里插入图片描述

2.3 介质访问控制

介质访问控制(MAC):当多个节点共用同一条链路时,MAC决定了多个设备如何共享传输介质

2.4 寻址

寻址(Addressing):在数据链路层使用物理地址(MAC地址)进行设备寻址,确保数据能够正确地传输到目标设备

MAC地址(Media Access Control Address):用于在网络中唯一标识一个网络设备地地址

  • 由48位二进制比特位组成,通常以12个十六进制数标识,每两个数字之间用冒号分隔。例如:00:1A:2B:3C:4D:5E
  • 前24位(OUI,Organizationally Unique Identifier):由IEEE(电气与电子工程师协会)分配个各个网络设备制造商,用于标识生产该网络设备的厂商
  • 后24位(EUI,Extended Unique Identifier):由制造商自行分配,用于区分同一厂商生产的不同设备

MAC寻址过程示例:主机A向主机D发送数据,途中经过路由器B和路由器C(这四个节点处于不同的网络段)在这里插入图片描述

2.5 流量控制

流量控制(Flow Control):协调发送方和接收端之间的数据传输速率,防止发送方发送速率过快导致接收方无法即使处理。常见方法:

  • 停等协议(Stop-and-Wait):发送方发送一帧等到接收方的确认,在发送下一帧
  • 滑动窗口协议(Sliding Window):允许发送方未收到确认的情况下发送多个帧,通过窗口大小控制发送速率(详细解释请移步计算机网络(3)——传输层)

2.6 差错控制

背景:信道的噪声导致的数据传输问题

  • 1.差错(incorrect):数据发生错误(发生比特翻转)
  • 2.丢失(lost):接收方未收到帧
  • 3.乱序(out of order):先发后至,后发先至
  • 4.重复(repeatedly delivery):接收方收到多个帧(由于传输层的超时重传机制)

解决办法:差错检测与纠正

  • 1.在数据传输的过程中,检测帧中的比特错误,并在可能的情况下进行纠正

3.差错编码

概念:
数据链路层的差错编码(差错控制编码/信道编码)是确保数据在物理介质上可靠传输的核心技术。它通过在原始数据中添加冗余比特,使接收方能够检测甚至纠正传输过程中产生的比特翻转(如0变1或1变0)

  • 检错码(Error Check Code):主要用于检测数据传输或存储过程中是否发生了错误
  • 纠错码(Error Correction Codes):纠错码不仅能检测错误,还能纠正错误

核心功能:

  • 1.差错检测:发现数据帧中是否存在错误
  • 2.差错纠正:定位并修复错误比特(无需重传)
  • 3.提高可靠性:降低因物理层不可靠导致的传输错误率

下面介绍几种主要的差错编码技术

3.1 奇偶校验

奇偶校验(Parity Check):在数据中添加一个额外的校验位(奇偶位),使数据中“1”的个数满足奇数或偶数

  • 奇校验:确保数据中“1”的总数(包括校验位)为奇数。如果原始数据中“1”的个数已是奇数,校验位为0;否则为1
  • 偶校验:确保数据中“1”的总数(包括校验位)为偶数。如果原始数据中“1”的个数已是偶数,校验位为0;否则为1

奇校验示例:在这里插入图片描述

缺点:

  • 1.单比特错误检测:奇偶校验只能检测单个数据位或校验位的错误。如果数据中发生了奇数个位的错误,奇偶校验可以检测到;但如果发生了偶数个位的错误,奇偶校验将无法检测到
  • 2.无法定位错误:奇偶校验只能告诉接收方数据中是否存在错误,但无法指出具体是哪个位发生了错误。这使得在检测到错误后,无法进行纠正,只能要求重传数据
  • 3.误判:在某些情况下,奇偶校验可能会错误地认为数据有错误。例如,如果校验位本身发生了错误,而数据位没有错误,奇偶校验会认为整个数据有错误

3.2 循环校验

循环校验(Cyclic Redundancy Check,CRC)是一种在数字通信和数据存储中广泛使用的错误检测技术。它的核心目的是检测数据传输或存储过程中可能发生的意外改动(比特错误),例如由噪声、干扰或硬件故障引起的错误

CRC校验码计算方法:
1.设原始数据D为x位二进制数字
2.使用预先定义好的生成多项式G作为除数

  • 例如:CRC-16-CCITT的生成多项式是x¹⁶ + x¹² + x⁵ + 1,其二进制表示为1 0001 0000 0010 0001(通常简写为 0x11021)

3.生成多项式有y + 1位二进制数,最高次方为y,校验码的位数为y
4.将原始数据M乘以2^y(相当于在M后面添加y个0)
5.再用G对M做模2除(异或运算),得到y位余数(不足y位前面用0补齐),即为CRC校验码

CRC校验示例:

  • 原始数据 (D): 11010011 (二进制)

  • 生成多项式 (G): x⁸ + x² + x¹ + 1

    • 通常简写为 十六进制 0x107 (但计算时用 100000111 更直观)。
  • CRC长度®: 8 位 (因为生成多项式最高次项是 x⁸)。

  • 目标: 计算原始数据 11010011 的 CRC-8 校验码,并验证接收端如何检测错误。


步骤 1: 发送方计算 CRC 校验码

  1. 在原始数据末尾附加 r 个 0:

    • 原始数据 D = 11010011
    • 附加 r=8 个 0: 11010011 + 00000000 = 1101001100000000
  2. 进行模2除法 (XOR 除法):

    • 被除数: 1101001100000000
    • 除数/生成多项式 (G): 100000111 (9位)
    • 规则: 对齐除数最高位 1 到被除数当前最高位 1,做 XOR 操作。结果作为新的部分被除数,继续下移

    计算过程:

        1101001100000000  <-- 被除数 (原始数据 + 8个0)
    XOR  100000111         <-- 除数 (G) 第一次对齐最高位的1 (位置1)
    ----------------------1010000100000000  <-- 第一次 XOR 结果 (余数)100000111        <-- 除数右移对齐下一个最高位的1 (位置3)
    ----------------------100010100000000100000111       <-- 除数右移对齐 (位置4)
    ----------------------10110000000100000111   <-- 除数右移对齐 (位置7) (注意前面补了3个0)
    ----------------------110011100100000111 <-- 除数右移对齐 (位置8)
    ----------------------100110110100000111 <-- 除数右移对齐 (位置9)
    ----------------------1100100  <-- 最终余数 (8位)
    
    • 关键点:
      • 每次只对当前被除数中最高位的 1 进行对齐和 XOR。
      • XOR 操作是按位进行的,没有借位或进位
      • 当除数位数大于剩余被除数位数时,除法停止。
      • 最后得到的余数位数必须等于 CRC 长度 r (8位)。如果不足,在前面补0。本例余数是 1100100,补足8位是 01100100 (前面加一个0)。
  3. 得到 CRC 校验码:

    • 最终余数 01100100 (二进制) 就是计算出的 CRC-8 校验码
    • 十六进制表示为 0x64
  4. 发送完整数据帧:

    • 发送方将 原始数据 + CRC校验码 一起发送出去:
      • 原始数据: 11010011
      • CRC 码: 01100100
      • 发送帧: 1101001101100100

步骤 2: 接收方验证数据 (无错误情况)

  1. 接收数据帧: 1101001101100100

  2. 使用相同的生成多项式进行模2除法:

    • 被除数: 接收到的整个帧 1101001101100100
    • 除数: 同一个 100000111
    • 目标: 计算余数是否为 0。

    计算过程:

        1101001101100100  <-- 接收到的完整帧 (数据 + CRC)
    XOR 100000111         <-- 除数对齐第一个1 (位置1)
    ----------------------1010000101100100100000111       <-- 对齐下一个1 (位置3)
    ----------------------1000101001100100100000111      <-- 对齐 (位置4)
    ----------------------10110010100100100000111  <-- 对齐 (位置7)
    ----------------------1100010000100100000111    <-- 对齐 (位置8)
    ----------------------100011110100100000111   <-- 对齐 (位置9)
    ----------------------110001100100000111 <-- 对齐 (位置12)
    ----------------------1000011  <-- 最终余数 100000111 <-- 位数不够除?停止!余数=1000011 (7位) -> 补0=01000011
    
    • 注意: 接收方计算时,除数会一直尝试对齐到数据末尾的 CRC 部分
    • 最终余数: 经过完整的模2除法后,得到的余数是 01000011 (补足8位)。
  3. 验证结果:

    • 计算得到的余数是 01000011 (二进制),不等于 00000000
    • 结论:数据在传输中发生了错误!

4.MAC

介质访问控制协议(Medium Access Control,MAC)负责解决多个设备共享同一通信信道时的冲突问题

MAC协议主要分为以下三类:

4.1 信道划分MAC

使用多路复用技术(FDM、TDM、WDM、CDM)
详细解析请见计算机网络(1)——概述中的3.1.2 多路复用

4.2 随机访问MAC

4.2.1 CSMA

载波监听多路访问协议(Carrier Sense Multiple Access,CSMA):发送前先侦听,减少冲突概率。侦听/发送策略分类:

  • 非坚持:侦听到忙->随机等待后重新侦听
  • 1-坚持:侦听到忙->持续侦听
  • p-坚持:侦听到忙->以概率p持续侦听;以概率(1-p)随机等待后重新侦听

冲突仍然可能发生:由于信号传播延迟在这里插入图片描述
在t4/t5时刻之后,后续再发送数据已经没有意义了,但是CSMA协议一旦开始发送第一个比特,那么该数据就要发送完毕。这会导致不必要的资源浪费,所以基于CSMA提出了一改改进的CSMA/CD协议

4.2.2 CSMA/CD

CSMA/CD(Carrier Sense Multiple Access/Collision Detect冲突检测):在CSMA协议的基础上增加了冲突检测机制

  • 设备在发送数据的同时持续监听信道
  • 能够即使发现数据传输过程中是否发生冲突
  • 边发边听,不发不听在这里插入图片描述
  • t2时刻D检测到冲突后不再发送数据;t3时刻B检测到冲突后不再发送数据

冲突检测机制:

  • 1.有线局域网易于实现:测量信号强度,比较发送与接收强度
  • 2.无限局域网很难实现:信号衰减太快,接收信号强度直接淹没在本地发送信号强度下

场景假设:在这里插入图片描述
某一空闲时间A发送数据,当数据即将到达B的临界时刻,B也开始发送数据;当B发送的数据到达A时,A才会检测到冲突。根据边发边听,不发不听的特性,如果B发送的数据到达A时,A已经完成数据发送的过程,那么A将不再检测冲突,所以要满足一个条件:L(min)/R >= 2d(max)/V

4.3 轮转访问MAC

/信道划分MAC随机访问MAC轮询/令牌MAC
网络负载重时共享信道效率高且公平产生冲突开销结合两者优点
网络负载轻时共享信道效率低共享信道效率高且单个节点可以利用信道的全部带宽结合两者优点

4.3.1 轮询(Polling)

基本概念: 轮询是一种集中式的介质访问控制方法 由一个主节点(控制器)按顺序询问各个从节点是否有数据要发送在这里插入图片描述

工作原理:

  • 主节点定期向每个从节点发送轮询信号
  • 从节点在被轮询时才能发送数据
  • 主节点控制传输顺序和时机

特点:

  • 确定性:传输顺序和时间是确定的
  • 公平性:每个节点都有机会发送数据
  • 简单性:实现相对简单
  • 延迟可预测:传输延迟相对可预测

优点:

  • 避免了冲突
  • 适合实时性(数据从发送方到接收方传输的延迟)要求高的应用
  • 易于管理带宽分配

缺点:

  • 依赖主节点,主节点故障会导致整个网络瘫痪
  • 效率可能不高,特别是在节点数量多或负载低时
  • 延迟可能较大,特别是在节点数量多时

4.3.2 令牌环(Token Ring)

基本概念:令牌MAC是一种基于令牌的介质访问控制方法,使用一个称为"令牌"特殊帧来控制网络访问在这里插入图片描述

工作原理:
(1)令牌传递

  • 网络中只有一个令牌在循环传递
  • 令牌是一个特殊的控制帧,授权节点发送数据

(2)节点访问流程

  • 节点想要发送数据时,必须等待令牌到达
  • 节点接收到空闲令牌后,将其改为忙令牌
  • 节点附加要发送的数据帧到忙令牌上
  • 数据帧在环网中循环传递到目标节点

(3)数据接收

  • 目标节点复制数据帧
  • 数据帧继续在环中传递,直到回到发送节点
  • 发送节点移除数据帧,并将令牌恢复为空闲状态

主要特点:

  • 确定性访问:每个节点都有确定的访问机会,避免了冲突
  • 公平性:所有节点轮流获得访问权,避免了"饥饿"现象
  • 效率:在重负载下表现良好,适合高密度网络
  • 有序性:数据传输是有序的,避免了数据包的乱序问题

优点:

  • 避免冲突:通过令牌机制完全避免了冲突,提高了网络可靠性
  • 可预测性:传输延迟是可预测的,适合实时性要求高的应用
  • 公平性:保证所有节点都有平等的访问机会,避免了某些节点独占信道的问题
  • 稳定性:在高负载下性能稳定,不会出现CSMA类协议在高负载下效率急剧下降的问题

缺点:

  • 复杂性:实现较为复杂,需要维护令牌环的完整性
  • 单点故障:令牌丢失会导致网络瘫痪,需要额外的机制来处理令牌丢失问题
  • 延迟:在轻负载下可能存在不必要的延迟,令牌传递本身会带来一定的开销
  • 扩展性:随着网络规模扩大,令牌传递时间增加,可能影响整体性能

http://www.hkcw.cn/article/MrQqnURoub.shtml

相关文章

深度优先搜索(DFS)邻接矩阵实现

代码&#xff1a; // 访问标记数组&#xff0c;需要提前初始化为false bool visited[MAX_VERTEX_NUM]; void DFS(AMGraph G, int v) { // 图G为邻接矩阵类型&#xff0c;v是当前访问的顶点// 步骤1&#xff1a;访问顶点vcout << v; // 输出顶点编号…

将手机网络经USB数据线和本地局域网共享给华为AP6050DN无线接入点

引言 由于最近装毕的新家所在的小区未能及时通宽带,于是家中各类无线设备如何上网就成了首要要解决的问题。 鉴于家中要联网的设备多、类型杂、支持频段也不一,总是开手机热点不是回事儿,于是就想着把手机网络引至华为AP6050DN无线接入点中,让家中所有的无线设备都能快速高…

接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

1 、 API 分类特征 SOAP - WSDL OpenApi - Swagger RESTful - /v1/api/ 2 、 API 常见漏洞 OWASP API Security TOP 10 2023 3 、 API 检测流程 接口发现&#xff0c;遵循分类&#xff0c;依赖语言&#xff0c; V1/V2 多版本等 Method &#xff1a;请求方法 攻击方…

Python基础:常量、变量、变量类型、表达式、注释、输入输入、运算符

引言 手把手带你快速上手Python 一、常量和表达式 在Python中运行下面的代码&#xff1a; print(1 2 - 3) print(1 2 * 3) print(1 2 / 3)​​​​ 注意: print 是一个 Python 内置的 函数, 这个稍后详细介绍.可以使用 - * / ( ) 等运算符进行算术运算. 先算乘除, 后算加…

归一化相关

归一化相关问题 归一化方式Batch NormalizationLayer NormalizationInstance NormalizationGroup NormalizationRMSNorm(Root Mean Square Layer Normalization):RMSNorm 和 LayerNorm区别?归一化方式 Batch Normalization 在每一层的输入进行归一化处理,使其在每个批次内…

进阶日记(一)—LLMs本地部署与运行(更新中)

本项目资料主要来源&#xff1a;【知识科普】【纯本地化搭建】【不本地也行】DeepSeek RAGFlow 构建个人知识库_哔哩哔哩_bilibili 目录 一、背景知识 二、Ollma安装 三、Docker安装 接上一篇&#xff08;非科班大模型工程师进阶日记&#xff08;〇&#xff09;&#xff…

【论文解读】Deformable DETR | Deformable Transformers for End-to-End Object Detection

论文地址&#xff1a;https://arxiv.org/pdf/2010.04159 代码地址&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 摘要 DETR最近被提出&#xff0c;旨在消除物体检测中许多手工设计的组件的需求&#xff0c;同时展示出良好的性能。然而&#xff0c;由于T…

大语言模型的推理能力

2025年&#xff0c;各种会推理的AI模型如雨后春笋般涌现&#xff0c;比如ChatGPT o1/o3/o4、DeepSeek r1、Gemini 2 Flash Thinking、Claude 3.7 Sonnet (Extended Thinking)。 对于工程上一些问题比如复杂的自然语言转sql&#xff0c;我们可能忍受模型的得到正确答案需要更多…

PINN for PDE(偏微分方程)1 - 正向问题

PINN for PDE(偏微分方程)1 - 正向问题 目录 PINN for PDE(偏微分方程)1 - 正向问题一、什么是PINN的正问题二、求解的实际例子三、基于Pytorch实现的代码 - 分解3.1 引入库函数3.2 设置超参数3.3 设计随机种子&#xff0c;确保复现结果的一致性3.4 对于条件等式生成对应的训练…

Adobe LiveCycle ES、LiveCycle DS 与 BlazeDS 关系解析与比较

Adobe LiveCycle 系列产品是企业级解决方案的重要组成部分&#xff0c;但在命名和功能上常常造成混淆。 产品定义 Adobe LiveCycle ES (Enterprise Suite) LiveCycle ES是一个基于SOA的平台&#xff0c;部署在J2EE应用服务器上。它提供开发、部署、配置和执行服务的功能。基…

Redis最佳实践——性能优化技巧之监控与告警详解

Redis 在电商应用的性能优化技巧之监控与告警全面详解 一、监控体系构建 1. 核心监控指标矩阵 指标类别关键指标计算方式/说明健康阈值&#xff08;参考值&#xff09;内存相关used_memoryINFO Memory 获取不超过 maxmemory 的 80%mem_fragmentation_ratio内存碎片率 used_m…

使用 DeepSeek API 搭建智能体《无间》- 卓伊凡的完整指南 -优雅草卓伊凡

使用 DeepSeek API 搭建智能体《无间》- 卓伊凡的完整指南 -优雅草卓伊凡 作者&#xff1a;卓伊凡 前言&#xff1a;为什么选择 DeepSeek API&#xff0c;而非私有化部署&#xff1f; 在开始搭建智能体之前&#xff0c;我想先说明 为什么推荐使用 DeepSeek API&#xff0c;而…

lidar和imu的标定(三)平面约束的方法

看了一篇&#xff1a;基于平面特征的地面机器人雷达-惯性里程计外参标定方法&#xff1b; 它和GRIL-Calib不同之处&#xff0c;就是采用了平面优化和栅格优化。 栅格优化就不介绍了&#xff0c;感觉工程上不。 平面优化则很容易懂&#xff0c;就是标定出来了激光雷达到IMU之…

CppCon 2014 学习: C++ on Mars

主要介绍了如何在火星探测器的飞行软件中使用 C。&#xff1a; 介绍了火星探测器&#xff08;如 Sojourner, Spirit, Opportunity, Curiosity, Perseverance&#xff09;。强调其复杂性和自主性。 延迟的现实&#xff1a;地球与火星之间的通信时延 单程信号延迟为 4 到 22 分…

【MFC】初识MFC

目录 01 模态和非模态对话框 02 静态文本 static text 01 模态和非模态对话框 首先我们需要知道模态对话框和非模态对话框的区别&#xff1a; 模态对话框是一种阻塞时对话框&#xff0c;它会阻止用户与应用程序的其他部分进行交互&#xff0c;直到用户与该对话框进行交互并关…

C#数字图像处理(二)

文章目录 1.灰度直方图1.1 灰度直方图定义1.2 灰度直方图编程实例 2.线性点运算2.1线性点运算定义2.2 线性点运算编程实例 3.全等级直方图灰度拉伸3.1 灰度拉伸定义3.2 灰度拉伸编程实例 4.直方图均衡化4.1 直方图均衡化定义4.2 直方图均衡化编程实例 5.直方图匹配5.1 直方图匹…

SOC-ESP32S3部分:24-WiFi配网

飞书文档https://x509p6c8to.feishu.cn/wiki/OD4pwTE8Jift2IkYKdNcSckOnfd 对于WiFi类设备&#xff0c;最重要的功能之一就是联网&#xff0c;WiFi需要联网&#xff0c;就需要知道我们家里路由的账号和密码&#xff0c;像手机类型的高端设备没什么问题&#xff0c;我们可以直接…

使用langchain实现五种分块策略:语义分块、父文档分块、递归分块、特殊格式、固定长度分块

文章目录 分块策略详解1. 固定长度拆分&#xff08;简单粗暴&#xff09;2. 递归字符拆分&#xff08;智能切割&#xff09;3. 特殊格式拆分&#xff08;定向打击&#xff09;Markdown分块 4. 语义分割&#xff08;更智能切割&#xff09;基于Embedding的语义分块基于模型的端到…

(七)【Linux进程的创建、终止和等待】

1 进程创建 1.1 在谈fork函数 #include <unistd.h> // 需要的头文件// 返回值&#xff1a;子进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1调用fork函数后&#xff0c;内核做了下面的工作&#xff1a; 创建了一个子进程的PCB结构体、并拷贝一份相…

EMO2:基于末端执行器引导的音频驱动虚拟形象视频生成

今天带来EMO2&#xff08;全称End-Effector Guided Audio-Driven Avatar Video Generation&#xff09;是阿里巴巴智能计算研究院研发的创新型音频驱动视频生成技术。该技术通过结合音频输入和静态人像照片&#xff0c;生成高度逼真且富有表现力的动态视频内容&#xff0c;值得…