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

news2025/6/6 11:28:02

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)
    ----------------------
           100010100000000
           100000111       <-- 除数右移对齐 (位置4)
    ----------------------
               10110000000
               100000111   <-- 除数右移对齐 (位置7) (注意前面补了3个0)
    ----------------------
                 110011100
                 100000111 <-- 除数右移对齐 (位置8)
    ----------------------
                  100110110
                  100000111 <-- 除数右移对齐 (位置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)
    ----------------------
         1010000101100100
          100000111       <-- 对齐下一个1 (位置3)
    ----------------------
           1000101001100100
           100000111      <-- 对齐 (位置4)
    ----------------------
               10110010100100
               100000111  <-- 对齐 (位置7)
    ----------------------
                 1100010000100
                 100000111    <-- 对齐 (位置8)
    ----------------------
                  100011110100
                  100000111   <-- 对齐 (位置9)
    ----------------------
                       110001100
                       100000111 <-- 对齐 (位置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类协议在高负载下效率急剧下降的问题

缺点:

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

5.ARP协议

Question:在同一个LAN内,如何在已知目的IP地址的情况下确定其MAC地址?

地址解析协议(Address Resolution Protocol,ARP):是一种用于解析网络层地址(如IP地址)和数据链路层地址(如MAC地址)的协议。它工作在网络层与数据链路层之间,通过广播请求单播响应实现地址解析
ARP表:LAN中的每一个节点都会维护一张ARP表,用于存储该LAN中节点的IP地址MAC地址的映射关系<IP地址;MAC地址;TTL>

  • TTL(Time to Live):表中每个条目/映射关系的有效时间(Windows系统默认值为120秒)

ARP工作原理:

  • 请求阶段:当主机A需要与主机B通信时,若主机A的ARP缓存中没有主机B的MAC地址,主机A会发送一个ARP广播请求,询问“谁拥有IP地址X?”
  • 响应阶段:主机B收到请求后,若IP地址匹配,会单播(利用单播帧)回复自己的MAC地址。主机A将这一映射存入ARP缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VuePress完美整合Toast消息提示

VuePress 整合 Vue-Toastification 插件笔记 记录如何在 VuePress 项目中整合使用 vue-toastification 插件&#xff0c;实现优雅的消息提示。 一、安装依赖 npm install vue-toastification或者使用 yarn&#xff1a; yarn add vue-toastification二、配置 VuePress 客户端增…

adb 连不上真机设备问题汇总

问题一、无法弹出 adb 调试授权弹窗 详细描述&#xff1a; 开发者选项中已打开 usb 调试&#xff0c;仅充电模式下 usb 调试也已打开&#xff0c;电脑通过 usb 连上手机后&#xff0c;一直弹出 adb 调试授权弹窗&#xff0c;尝试取消授权再次连接&#xff0c;还是无法弹出问题…

[yolov11改进系列]基于yolov11引入注意力机制SENetV1或者SENetV2的python源码+训练源码

本文给大家带来的改进机制是SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型Q&#xff0c;而是一个可以和现有的任何一个模型相结合的模块&#xff08;可以看作是一种…

鸿蒙仓颉语言开发实战教程:商城搜索页

大家好&#xff0c;今天要分享的是仓颉语言商城应用的搜索页。 搜索页的内容比较多&#xff0c;都有点密集恐惧症了&#xff0c;不过我们可以从上至下将它拆分开来&#xff0c;逐一击破。 导航栏 搜索页的的最顶部是导航栏&#xff0c;由返回按钮和搜索框两部分组成,比较简单…

图像去雾数据集总汇

自然去雾数据集 部分的数据清洗可以看这里&#xff1a;图像去雾数据集的下载和预处理操作 RESIDE-IN 将ITS作为训练集&#xff0c;SOTSindoor作为测试集。训练集13990对&#xff0c;验证集500对。 目前室内sota常用&#xff0c;最高已经卷到PSNR-42.72 最初应该是dehazefo…

网络攻防技术十四:入侵检测与网络欺骗

文章目录 一、入侵检测概述二、入侵系统的分类三、入侵检测的分析方法1、特征检测&#xff08;滥用检测、误用检测&#xff09;2、异常检测 四、Snort入侵检测系统五、网络欺诈技术1、蜜罐2、蜜网3、网络欺骗防御 六、简答题1. 入侵检测系统对防火墙的安全弥补作用主要体现在哪…

C++笔记-C++11(一)

1.C11的发展历史 C11 是 C 的第⼆个主要版本&#xff0c;并且是从 C98 起的最重要更新。它引⼊了⼤量更改&#xff0c;标准化了既有实践&#xff0c;并改进了对 C 程序员可⽤的抽象。在它最终由 ISO 在 2011 年 8 ⽉ 12 ⽇采纳前&#xff0c;⼈们曾使⽤名称“C0x”&#xff0c;…

JVM 类初始化和类加载 详解

类初始化和类加载 类加载的时机 加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的&#xff0c;类型的加载过程必须按照这种顺序按部就班地开始&#xff0c;而解析阶段则不一定&#xff1a;它在某些情况下可以在初始化阶段之后再开始&#xff08;懒解析&#xff09;&am…

B站缓存视频数据m4s转mp4

B站缓存视频数据m4s转mp4 结构分析 结构分析 在没有改变数据存储目录的情况下&#xff0c;b站默认数据保存目录为&#xff1a; Android->data->tv.danmaku.bili->download每个文件夹代表一个集合的视频&#xff0c;比如&#xff0c;我下载的”java从入门到精通“&…

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

【机器学习】主成分分析 (PCA)

目录 一、基本概念 二、数学推导 2.1 问题设定&#xff1a;寻炸最大方差的投影方向 2.2 数据中心化 2.3 目标函数&#xff1a;最大化投影后的方差 2.4 约束条件 2.5 拉格朗日乘子法 ​编辑 2.6 主成分提取 2.7 降维公式 三、SVD 四、实际案例分析 一、基本概念 主…

二叉树-104.二叉树的最大深度-力扣(LeetCode)

一、题目解析 这里需要注意根节点的深度是1&#xff0c;也就是说计算深度的是从1开始计算的 二、算法原理 解法1&#xff1a;广度搜索&#xff0c;使用队列 解法2&#xff1a;深度搜索&#xff0c;使用递归 当计算出左子树的深度l&#xff0c;与右子树的深度r时&#xff0c;…

物料转运人形机器人适合应用于那些行业?解锁千行百业的智慧物流革命

当传统物流设备困于固定轨道&#xff0c;当人力搬运遭遇效率与安全的天花板&#xff0c;物料转运人形机器人正以颠覆性姿态重塑产业边界。富唯智能凭借GRID大模型驱动的"感知-决策-执行"闭环系统&#xff0c;让物料流转从机械输送升级为智慧调度——这不仅是工具的革…

时序预测模型测试总结

0.背景描述 公司最近需要在仿真平台上增加一些AI功能&#xff0c;针对于时序数据&#xff0c;想到的肯定是时序数据处理模型&#xff0c;典型的就两大类&#xff1a;LSTM 和 tranformer 。查阅文献&#xff0c;找到一篇中石化安全工程研究院有限公司的文章&#xff0c;题目为《…

第四十五天打卡

知识点回顾&#xff1a; tensorboard的发展历史和原理 tensorboard的常见操作 tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 效果展示如下&#xff0c;很适合拿去组会汇报撑页数&#xff1a; 作业&#xff1a;对resnet18在cifar10上采用微调策略下&#xff0c;用tensor…

springboot mysql/mariadb迁移成oceanbase

前言&#xff1a;项目架构为 springbootmybatis-plusmysql 1.部署oceanbase服务 2.springboot项目引入oceanbase依赖&#xff08;即ob驱动&#xff09; ps&#xff1a;删除原有的mysql/mariadb依赖 <dependency> <groupId>com.oceanbase</groupId> …

npm install 报错:npm error: ...node_modules\deasync npm error command failed

npm install 时报错如下&#xff1a; 首先尝试更换node版本&#xff0c;当前node版本20.15.0&#xff0c;更换node版本为16.17.0。再次执行npm install安装成功

Filebeat收集nginx日志到elasticsearch,最终在kibana做展示(二)

EFK 项目需求是要将 一天或15分钟内 搜索引擎抓取网站次数做个统计&#xff0c;并且 如 200 301 404 状态码 也要区分出来, 访问 404 报错的 url 也要截取出来 前期 收集数据 看这篇文章&#xff0c;点击跳转 收集数据完成之后&#xff0c;使用下面方法做展示 创建一个 仪表…

halcon c# 自带examples报错 Matching

最近开始学习halcon与C#的联合编程&#xff0c;打开Matching例程时遇到了下面的问题 “System.TypeInitializationException”类型的未经处理的异常在 halcondotnet.dll 中发生 “HalconDotNet.HHandleBase”的类型初始值设定项引发异常。 System.TypeInitializationExceptio…

服务器重启后配置丢失怎么办?

服务器重启后配置丢失是一个常见问题&#xff0c;特别是在云服务器或容器环境中&#xff0c;若未正确保存或持久化配置&#xff0c;系统重启后就会恢复默认状态。下面是问题分析 解决方案&#xff1a; &#x1f9e0; 一、常见原因分析 原因描述❌ 配置保存在临时目录如 /tmp、…