【计算机网络】3数据链路层①

news2025/5/19 11:55:19

这篇笔记专门讲数据链路层的功能。

2.功能

数据链路层的主要任务是让帧在一段链路上或一个网络中传输。

2.1.封装成帧(组帧)

解决的问题:①帧定界②帧同步③透明传输

实现组帧的方法通常有以下种。

2.1.1.字符计数法

原理:在每个帧开头,用一个定长计数字段来记录该帧所含的字节数(包含计数字段自身所占用的字节)。

问题:任何一个计数字段出错,都会导致后续所有帧无法定界。

2.1.2.Byte填充法

原理:使用特定字节来定界一帧的开始与结束。控制字符表示帧的开始;控制字符表示帧的结束。

信息位中如果出现特殊字符(控制字符,控制字符,转义字符),则发送方要在转义字符之前填充一个转义字符来加以区分,接收方要做逆处理。

2.1.3.0bit填充法

在数据链路层早期使用的协议中,便是采用这种比特填充的首尾标志法来实现透明传输的。

原理:零比特填充法允许数据帧包含任意个数的比特。它使用一个特定的比特串来标志一帧的开始和结束。

为了不使数据字段中出现的比特流被误判为帧的首尾标志,需要对数据部分做一些处理:发送方需要对帧的数据部分进行处理,每当遇到连续,就填充;接受方需要对帧的数据部分进行逆处理,每当遇到连续,就删掉后面的

2.1.4.违规编码法

在物理层进行比特编码时,常采用违规编码法。

局域网 标准就采用了这种方法。

原理:使用“违规信号”,表示帧的开头、结尾。

例如,采用曼彻斯特编码时,使用“中间不跳变”作为“违规信号”,标记帧的开头、结尾。

2.2.差错控制

差错控制的目标是发现并解决一个帧内部的“位错”。

这里的“位错”指的是比特差错(传输差错中的一种),即比特在传输过程中可能产生差错,可能变成也可能变成


常利用编码技术进行差错控制。

差错控制机制 编码技术(实现差错控制机制的具体技术方法)
自动重传请求(Automatic Repeat reQuest,ARQ):当接收方检测到差错时,就设法通知发送方重发,直到收到正确的数据为止。 检错编码
向前纠错(Forword Error Correction,FEC):接收方不但能发现差错,而且能确定错误的位置并加以纠正。 纠错编码

2.2.1.检错编码

检错编码都采用冗余编码技术,核心思想是在信息位(帧的“数据部分”)被发送前,按某种关系附加一定的校验位(为了给帧的“数据部分”检错/纠错而附加的一些冗余比特,在信息位的首部或尾部添加),构成一个符合某一规则的码字后发送。

当要发送的有效数据变化时,相应的冗余位也随之变化,使得码字遵从不变的规则。接收方根据收到的码字是否仍符合原规则来判断是否出错。常见的检错编码有奇偶检验码和循环冗余码。

奇偶校验码是奇校验码和偶校验码的统称。

1️⃣组成

奇偶校验码由位信息位和位校验位组成。检验位的取值()将使整个检验码中的个数为奇数或偶数。

2️⃣约定

发送方和接收方先共同约定是采用奇校验还是偶校验。

3️⃣发送方求校验位

奇校验码:附加一个检验位后,位的码字中的个数为奇数。

偶校验码:附加一个检验位后,位的码字中的个数为偶数。

4️⃣接收方检错

如果发送方和接收方共同约定采用奇校验的规则,那么接收方的数据链路层收到帧之后会检查这个帧的校验位和信息位里含有的是不是奇数个。如果是奇数个,就认为没有错误;如果不是奇数个,就认为有错误。

如果发送方和接收方共同约定采用偶校验的规则,那么接收方的数据链路层收到帧之后会检查这个帧的校验位和信息位里含有的是不是偶数个。如果是偶数个,就认为没有错误;如果不是偶数个,就认为有错误。

5️⃣硬件实现

在现实应用中,偶校验码要比奇校验码更常用,原因是偶校验很容易用简单的异或门实现。

偶校验的硬件实现:各信息进行异或(模加)运算,得到的结果即为偶校验位。

⊕:异或(模2加)    0 ⊕ 0 = 0       0 ⊕ 1 = 1        1 ⊕ 0 = 1          1 ⊕ 1 = 0

求偶校验位:

1⊕0⊕0⊕1⊕1⊕0⊕1=0  

1⊕0⊕1⊕0⊕1⊕1⊕1=1  

进行偶校验(所有位进行异或,若结果为1说明出错):  

0⊕1⊕0⊕0⊕1⊕1⊕0⊕1=0

1⊕1⊕0⊕1⊕0⊕1⊕1⊕1=0   

1⊕1⊕0⊕1⊕0⊕1⊕1⊕0=1  (可以检测出奇数位错误)

1⊕1⊕0⊕1⊕0⊕1⊕0⊕0=0  (无法检测出偶数位错误)

6️⃣奇偶校验码仅能检测出奇数位错误,无纠错能力。

数据链路层广泛使用循环冗余码(Cyclic Redundancy Code,CRC)检错技术。

1️⃣循环冗余校验码由位信息位和位校验位组成。

2️⃣发送方和接收方先共同约定一个生成多项式(要求最低位必须为)

生成多项式可用位位串【除数】表示,位位串可视为阶数为的多项式的系数序列。

=信息码的长度

=生成式多项式最高次幂=

3️⃣发送方求校验位:生成

发送方基于待发送的位信息位和,计算出位校验位(帧检验序列)。


信息码左移位,低位补

对移位后的信息码,用生成多项式进行模除法,产生余数。

由于除数有位,所以我们会取被除数的高位与除数先“商”一次。

除法取商的方式比较特别,我们只看被除数的最高位,如果是,就先商

之后再对后位进行模减(效果与模加相同)的运算,得到余数。

再将被除数的后面一位补到余数的低位。此时的余数最高位是,商

以此类推。

最后得到的余数为校验位。

对应的码为

4️⃣接收方检错:检验

接收方收到数据和冗余码后,通过来计算收到的数据和冗余码是否产生差错。

收到位数据,与生成多项式模除,计算位余数。

余数为,说明无错误;余数非,说明出错。


发送:        记为

接收:        用进行模除,余数为,代表没有出错。

接收:        用进行模除,余数为,代表可能是出错。

5️⃣检错纠错能力

①可检测出所有奇数个错误;

②可检测出所有双比特的错误;

③可检测出所有小于等于校验位长度的连续错误;

④若选择合适的生成多项式,且,则可纠正单比特错。

对于确定的生成多项式,出错位与余数是相对应的。


为什么叫循环冗余码?

因为将对应的位串,会发现得到的余数在循环。


循环冗余码(CRC)是具有纠错功能的,只是数据链路层仅使用了它的检错功能,检测到帧出错则直接丢弃,是为了方便协议的实现,因此本节不介绍CRC的检错功能。 

2.2.2.纠错编码

海明校验码

奇偶校验码只有个校验位,只能携带种状态信息(对/错)。

海明码有多个校验位,能携带多种状态信息(对/错,错在哪)

海明码的设计思路是将信息位分组进行偶校验→多个校验位→多个校验位标注出错位置

1️⃣确定海明码的位数

为有效信息的位数,为检验位的位数,则信息位和检验位应满足

海明码位数 成立,则满足条件。

设信息位为,共位;检验位为,共位;

对应的海明码为

2️⃣确定检验位的分布

规定检验位在海明位号为的位置上,其余各位为信息位,因此有:

的海明码位号为 ,即

的海明码位号为,即

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

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

相关文章

Nginx底层架构(非常清晰)

目录 前言: 场景带入: HTTP服务器是什么? 反向代理是什么? 模块化网关能力: 1.配置能力: 2.单线程: 3.多worker进程 4.共享内存: 5.proxy cache 6.master进程 最后&…

Docker 设置镜像源后仍无法拉取镜像问题排查

#记录工作 Windows系统 在使用 Docker 的过程中,许多用户会碰到设置了国内镜像源后,依旧无法拉取镜像的情况。接下来,记录了操作要点以及问题排查方法,帮助我们顺利解决这类问题。 Microsoft Windows [Version 10.0.27823.1000…

Edge 浏览器推出 Copilot Vision:免费实时解析屏幕内容;Aqua Voice:极速 AI 语音输入工具丨日报

开发者朋友们大家好 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看…

async-profiler火焰图找出耗CPU方法

事情起于开发应用对依赖的三方包(apache等等)进行了升级后(主要是升级spring),CPU的使用率较原来大幅提升,几个应用提升50%-100%。 查找半天,对比每次版本的cpu火焰图,看不出有什么…

@Autowird 注解与存在多个相同类型对象的解方案

现有一个 Student 类,里面有两个属性,分别为 name 和 id;有一个 StuService 类,里面有两个方法,返回值均为类型为 Student 的对象;还有一个 StuController 类,里面有一个 Student 类型的属性&am…

WordPiece 详解与示例

WordPiece详解 1. 定义与背景 WordPiece 是一种子词分词算法,由谷歌于2012年提出,最初用于语音搜索系统,后广泛应用于机器翻译和BERT等预训练模型。其核心思想是将单词拆分为更小的子词单元(如词根、前缀/后缀),从而解决传统分词方法面临的词汇表过大和未知词(OOV)处…

PVE+CEPH+HA部署搭建测试

一、基本概念介绍 Proxmox VE ‌Proxmox Virtual Environment (Proxmox VE)‌ 是一款开源的虚拟化管理平台,基于 Debian Linux 开发,支持虚拟机和容器的混合部署。它提供基于 Web 的集中管理界面,简化了计算、存储和网络资源的配置与监控。P…

ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱

系列文章目录 目录 系列文章目录 前言 三、标定目标 3.1 使用自定义标定目标 四、数据处理 4.1 相机数据中的标定目标检测 4.2 激光雷达数据中的标定目标检测 输入过滤器: 正常估算: 区域增长: 尺寸过滤器: RANSAC&a…

android rtsp 拉流h264 h265,解码nv12转码nv21耗时卡顿问题及ffmpeg优化

一、 背景介绍及问题概述 项目需求需要在rk3568开发板上面,通过rtsp协议拉流的形式获取摄像头预览,然后进行人脸识别 姿态识别等后续其它操作。由于rtsp协议一般使用h.264 h265视频编码格式(也叫 AVC 和 HEVC)是不能直接用于后续处…

熊海cms代码审计

目录 sql注入 1. admin/files/login.php 2. admin/files/columnlist.php 3. admin/files/editcolumn.php 4. admin/files/editlink.php 5. admin/files/editsoft.php 6. admin/files/editwz.php 7. admin/files/linklist.php 8. files/software.php 9. files…

DeepSeek 与开源:肥沃土壤孕育 AI 硕果

当 DeepSeek 以低成本推理、多模态能力惊艳全球时,人们惊叹于国产AI技术的「爆发力」,却鲜少有人追问:这份爆发力的根基何在? 答案,藏在中国开源生态二十余年的积淀中。 从倪光南院士呼吁「以开源打破垄断」&#xf…

Maven中clean、compil等操作介绍和Pom.xml中各个标签介绍

文章目录 前言Maven常用命令1.clean2.vaildate3.compile4.test5.package6.verify7.install8.site9.deploy pom.xml标签详解格式<?xml version"1.0" encoding"UTF-8"?>(xml版本和编码)modelVersion&#xff08;xml版本&#xff09;groupId&#xff…

力扣刷题-热题100题-第35题(c++、python)

146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/lru-cache/?envTypestudy-plan-v2&envIdtop-100-liked 双向链表哈希表 内置函数 对于c有list可以充当双向链表&#xff0c;unordered_map充当哈希表&#xff1b;python有OrderedDic…

Nautilus 正式发布:为 Sui 带来可验证的链下隐私计算

作为 Sui 安全工具包中的强大新成员&#xff0c;Nautilus 现已上线 Sui 测试网。它专为 Web3 开发者打造&#xff0c;支持保密且可验证的链下计算。Nautilus 应用运行于开发者自主管理的可信执行环境&#xff08;Trusted Execution Environment&#xff0c;TEE&#xff09;中&a…

云服务器CVM标准型S5实例性能测评——2025腾讯云

腾讯云服务器CVM标准型S5实例具有稳定的计算性能&#xff0c;CPU采用采用 Intel Xeon Cascade Lake 或者 Intel Xeon Cooper Lake 处理器&#xff0c;主频2.5GHz&#xff0c;睿频3.1GHz&#xff0c;CPU内存配置2核2G、2核4G、4核8G、8核16G等配置&#xff0c;公网带宽可选1M、3…

leetcode面试经典算法题——2

链接&#xff1a;https://leetcode.cn/studyplan/top-interview-150/ 20. 有效的括号 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#x…

Ubuntu20.04安装企业微信

建议先去企业微信官网看一下有没有linux版本&#xff0c;没有的话在按如下方式安装&#xff0c;不过现在是没有的。 方案 1、使用docker容器 2、使用deepin-wine 3、使用星火应用商店 4. 使用星火包deepin-wine 5、使用ukylin-wine 本人对docker不太熟悉&#xff0c;现…

在Ubuntu服务器上部署xinference

一、拉取镜像 docker pull xprobe/xinference:latest二、启动容器&#xff08;GPU&#xff09; docker run -d --name xinference -e XINFERENCE_MODEL_SRCmodelscope -p 9997:9997 --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0 # 启动一个新的Docker容…

异步编程——微信小程序

1. 前言 引用来自&#xff1a;微信小程序开发中的多线程处理与异步编程_微信小程序 多线程-CSDN博客 微信小程序是基于JavaScript开发的&#xff0c;与浏览器JavaScript不同&#xff0c;小程序运行在WebView内部&#xff0c;没有多线程的概念。小程序的 JavaScript 是单线程的…

STM32 四足机器人常见问题汇总

文章不介绍具体参数&#xff0c;有需求可去网上搜索。 特别声明&#xff1a;不论年龄&#xff0c;不看学历。既然你对这个领域的东西感兴趣&#xff0c;就应该不断培养自己提出问题、思考问题、探索答案的能力。 提出问题&#xff1a;提出问题时&#xff0c;应说明是哪款产品&a…