【计算机网络】3数据链路层①
这篇笔记专门讲数据链路层的功能。
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️⃣确定检验位的分布
规定检验位在海明位号为
的位置上,其余各位为信息位,因此有:
的海明码位号为
,即
为
。
的海明码位号为
,即
为
。
相关文章:
【计算机网络】3数据链路层①
这篇笔记专门讲数据链路层的功能。 2.功能 数据链路层的主要任务是让帧在一段链路上或一个网络中传输。 2.1.封装成帧(组帧) 解决的问题:①帧定界②帧同步③透明传输 实现组帧的方法通常有以下种。 2.1.1.字符计数法 原理:在每个帧开头,用一个定长计数字段来记录该…...
Mysql--基础知识点--93--两阶段提交
1 两阶段提交 以update语句的具体执行过程为例: 具体更新一条记录 UPDATE t_user SET name ‘xiaolin’ WHERE id 1;的流程如下: 1.执行器负责具体执行,会调用存储引擎的接口,通过主键索引树搜索获取 id 1 这一行记录&#…...
Nginx底层架构(非常清晰)
目录 前言: 场景带入: HTTP服务器是什么? 反向代理是什么? 模块化网关能力: 1.配置能力: 2.单线程: 3.多worker进程 4.共享内存: 5.proxy cache 6.master进程 最后&…...
期货数据API对接实战指南
一、期货数据接口概述 StockTV提供全球主要期货市场的实时行情与历史数据接口,覆盖以下品种: 商品期货:原油、黄金、白银、铜、天然气、农产品等金融期货:股指期货、国债期货特色品种:马棕油、铁矿石等区域特色期货 …...
网页图像优化:现代格式与响应式技巧
网页图像优化:现代格式与响应式技巧 网页图像如果处理不好,很容易拖慢加载速度,影响用户体验。这篇文章聊聊怎么用现代图像格式和响应式技巧,让你的网站图片加载更快、效果更好。 推荐的图像格式 选对图像格式,能在保…...
Docker 设置镜像源后仍无法拉取镜像问题排查
#记录工作 Windows系统 在使用 Docker 的过程中,许多用户会碰到设置了国内镜像源后,依旧无法拉取镜像的情况。接下来,记录了操作要点以及问题排查方法,帮助我们顺利解决这类问题。 Microsoft Windows [Version 10.0.27823.1000…...
设计模式实践:模板方法、观察者与策略模式详解
目录 1 模板方法1.1 模板方法基本概念1.2 实验1.2.1 未使用模板方法实现代码1.2.2 使用模板方法的代码 2 观察者模式2.1 观察者模式基本概念2.2 实验 3 策略模式3.1 策略模式基本概念3.2 实验 1 模板方法 1.1 模板方法基本概念 定义:一个操作中的算法的骨架 &…...
Rockchip 显示架构
对于 Rockchip 平台,主要有以下几种显示架构可供选择: Qt + WaylandQt + EGLFSEGL program + X11WaylandNone多窗口的功能需求,选择: X11Wayland桌面的功能需求,选择: X114K 视频播放 + 全屏:Qt + WaylandQt + EGLFSX11Wayland4K 视频播放 + 多窗口: X11Qt + WaylandWa…...
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…...
【Leetcode 每日一题 - 补卡】1534. 统计好三元组
问题背景 给你一个整数数组 a r r arr arr,以及 a 、 b 、 c a、b 、c a、b、c 三个整数。请你统计其中好三元组的数量。 如果三元组 ( a r r [ i ] , a r r [ j ] , a r r [ k ] ) (arr[i], arr[j], arr[k]) (arr[i],arr[j],arr[k]) 满足下列全部条件ÿ…...
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…...
滑动窗口209. 长度最小的子数组
1.题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&…...
SQL(8):INSERT INTO SELECT与SELECT INTO,选数据出来,放到另一个表中
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中; SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中 想象一下你有两个本子(数据库里的表): 本子A (源头)&…...
DeepSeek 与开源:肥沃土壤孕育 AI 硕果
当 DeepSeek 以低成本推理、多模态能力惊艳全球时,人们惊叹于国产AI技术的「爆发力」,却鲜少有人追问:这份爆发力的根基何在? 答案,藏在中国开源生态二十余年的积淀中。 从倪光南院士呼吁「以开源打破垄断」…...
2025高频面试算法总结篇【动态规划】
文章目录 直接刷题链接直达编辑距离最长回文子串完全平方数最长递增子序列正则表达式匹配零钱兑换鸡蛋掉落单词拆分 直接刷题链接直达 动态规划(Dynamic Programming, DP)是一种通过拆解子问题并利用子问题的最优解来构建整体问题的最优解的方法&#x…...
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(xml版本)groupIdÿ…...
力扣刷题-热题100题-第35题(c++、python)
146. LRU 缓存 - 力扣(LeetCode)https://leetcode.cn/problems/lru-cache/?envTypestudy-plan-v2&envIdtop-100-liked 双向链表哈希表 内置函数 对于c有list可以充当双向链表,unordered_map充当哈希表;python有OrderedDic…...
Nautilus 正式发布:为 Sui 带来可验证的链下隐私计算
作为 Sui 安全工具包中的强大新成员,Nautilus 现已上线 Sui 测试网。它专为 Web3 开发者打造,支持保密且可验证的链下计算。Nautilus 应用运行于开发者自主管理的可信执行环境(Trusted Execution Environment,TEE)中&a…...
云服务器CVM标准型S5实例性能测评——2025腾讯云
腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CPU采用采用 Intel Xeon Cascade Lake 或者 Intel Xeon Cooper Lake 处理器,主频2.5GHz,睿频3.1GHz,CPU内存配置2核2G、2核4G、4核8G、8核16G等配置,公网带宽可选1M、3…...
优化方法介绍(二)——BFGS 方法介绍
优化方法介绍(二) 本博客是一个系列博客,主要是介绍各种优化方法,使用 matlab 实现,包括方法介绍,公式推导和优化过程可视化 1 BFGS 方法介绍 BFGS 的其实就是一种改良后的牛顿法,因为计算二阶导数 Hessian 矩阵所需的计算资源是比较大的,复杂度为 O ( 2 ⋅ n 2 ) …...
leetcode面试经典算法题——2
链接:https://leetcode.cn/studyplan/top-interview-150/ 20. 有效的括号 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足&#x…...
Ubuntu20.04安装企业微信
建议先去企业微信官网看一下有没有linux版本,没有的话在按如下方式安装,不过现在是没有的。 方案 1、使用docker容器 2、使用deepin-wine 3、使用星火应用商店 4. 使用星火包deepin-wine 5、使用ukylin-wine 本人对docker不太熟悉,现…...
在Ubuntu服务器上部署xinference
一、拉取镜像 docker pull xprobe/xinference:latest二、启动容器(GPU) 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. 前言 引用来自:微信小程序开发中的多线程处理与异步编程_微信小程序 多线程-CSDN博客 微信小程序是基于JavaScript开发的,与浏览器JavaScript不同,小程序运行在WebView内部,没有多线程的概念。小程序的 JavaScript 是单线程的…...
