当前位置: 首页 > news >正文

【计算机网络】考研408 | 数据链路层的“安全卫士”:探秘检错编码之奇偶校验码

检错编码

  • 导读
  • 一、定义
  • 二、奇偶检验码
    • 2.1 定义
    • 2.2 基本原理
    • 2.3 局限性
  • 结语

差错控制

导读

大家好,很高兴又和大家见面啦!!!

在上一篇内容中我们介绍了数据链路层的第一个功能——封装成帧

数据链路层可以通过4种方式实现组帧

  • 字符计数法
  • 字节填充法
  • 零比特填充法
  • 违规编码法

但是因为字符计数法中的计数字段的脆弱性和字节填充法实现上的复杂性与不兼容性,所以目前较常用的 组帧 方法是 零比特填充法违规编码法

在今天的内容中,我们将会介绍数据链路层的第二个功能——差错控制

实际通信链路都不是理想的,比特在传输过程中可能产生差错,如:

  • 1 变成 0
  • 0 变成 1

这种就是 比特差错比特差错 是传输差错中的一种,在本小节中我们仅讨论比特差错。

数据链路层通常利用编码技术进行 比特差错控制,主要有两类:

  • 自动重传请求Automatic Repeat re Quest, ARQ):当接收方检测到差错时,就设法通知发送方重发,直到收到正确的数据为止

  • 前向纠错Forward Error Correction, FEC):接收方不但能发现差错,而且能确定错误的位置并加以纠正

因此差错控制又可分为 检错编码纠错编码

从本篇内容开始,我们将会依次介绍这两种编码,下面就让我们直接进入今天的内容;

一、定义

检错编码 都采用 冗余编码技术,其核心思想是在有效数据(信息位)被发送前,按某种关系附加一定的冗余位(检验位),构成一个符合某一规则的码字后发送。

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

下面我们就来了解一下奇偶校验码

二、奇偶检验码

2.1 定义

奇偶校验码奇校验码偶校验码 的统称,是一种最基本的检错码。它由 n−1n - 1n1 位数据和 111 位检验位组成,检验位的取值(01)将使整个检验码中 1 的个数为奇数或偶数:

  • 奇检验码:附加一个检验位后,nnn 位的码字中 1 的个数为奇数;

  • 偶检验码:附加一个检验位后,nnn 位的码字中 1 的个数位偶数;

2.2 基本原理

对于 奇偶校验码 ,在硬件层面,可以通过简单的 异或门 实现。所谓的 异或门 是指:数字逻辑电路中的一种基本逻辑门,它的独特之处在于能够检测两个输入信号是否不同。其运算规则为:相同为0,相异为1

那么对于 奇校验码偶校验码 其最终的异或值为:

  • 奇校验码信息位 + 检验位 总共有 奇数个 1 ,其最终的 异或值1\bm{1}1
  • 偶校验码信息位 + 检验位 总共有 偶数个 1 ,其最终的 异或值0\bm{0}0

这里我们以一个简单的例子进行说明;

对于一个 7 位数据 1001 101 ,通过 异或门 ,我们可以得出该数据异或值:

1⊕0=11⊕0=11⊕1=00⊕1=11⊕0=11⊕1=0\begin{align*} 1 \oplus 0 &= \bm{\textcolor{red}{1}} \\ \bm{\textcolor{red}{1}} \oplus 0 &= \bm{\textcolor{red}{1}} \\ \bm{\textcolor{red}{1}} \oplus 1 &= \bm{\textcolor{red}{0}} \\ \bm{\textcolor{red}{0}} \oplus 1 &= 1 \\ \bm{\textcolor{red}{1}} \oplus 0 &= 1 \\ \bm{\textcolor{red}{1}} \oplus 1 &= \bm{\textcolor{blue}{0}} \end{align*} 101011011011=1=1=0=1=1=0

从上面的运算过程我们可以看到 1001 101 这个数据的异或值为 0\bm{\textcolor{blue}{0}}0 ,这表明数据中含有 偶数1 ,那么其对应的 奇偶校验码 中的 检验位 分别为:

  • 奇校验码1\bm{\textcolor{blue}{1}}1
  • 偶校验码0\bm{\textcolor{blue}{0}}0

将该检验位加入到数据中后,我们就得到了最终的 奇偶检验码

  • 奇检验码100110111001 101\bm{\textcolor{blue}{1}}10011011
  • 偶检验码100110101001 101\bm{\textcolor{blue}{0}}10011010

PS: 在 奇偶校验码 中,检验位 可以放在不同的位置,构成不同的 校验码

  • 检验位 放在 信息位 的前面,那么构成的 奇偶校验码 为:检验位 + 信息位
  • 检验位 放在 信息位 的后面,那么构成的 奇偶校验码 为:信息位 + 检验位

上面所展示的是 信息位 + 检验位

通信双方可以根据具体使用的 校验码 所得到的 异或值 来判断数据是否存在错误:

  • 当通信双方规定均使用 奇校验码 时,那么通过 异或 运算获取的 信息位 + 检验位 的异或值为:1\bm{1}1

  • 当通信双方规定均使用 偶校验码 时,那么通过 异或 运算获取的 信息位 + 检验位 的异或值为:0\bm{0}0

因此,不管是 奇校验码 还是 偶校验码 ,当接收方将接收到的 校验码 通过 异或 运算获取的 异或值 与规定的 校验码 所得到的 异或值 不相等时,则表示该数据中发生了 比特差错

2.3 局限性

奇偶校验码 虽然能够检测比特在传输的过程中是否存在问题,但是也仅限于该功能,因此 奇偶校验码 在具体的使用过程中会存在以下问题:

  • 无法确定比特在传输的过程中,具体是哪一位发生了差错
  • 当有 偶数 个比特发生差错时,通过 奇偶校验码 无法检测出 比特差错

这两个问题也很好理解:

奇偶校验码 判断是否发生 比特差错 的原理是通过比较 校验码 最终的 异或值 ,而对于 校验码 中间的比特值并不关心,因此该 检错编码 无法确定具体发生差错的比特位;

对于 异或值 的获取,当发生 比特差错 的比特位为 奇数位 时,才会改变整个 校验码 最终的 异或值,因此该 检错编码 也无法检错出 偶数位 比特发生差错的情况;

结语

至此,我们对数据链路层差错控制中的检错编码进行了一次深入的探索。今天旅程的核心,在于掌握了其“防患于未然”的智慧:

  • 通过为数据附加冗余的检验位,构建一道基础的“安检门”,从而为其在不可靠信道上的传输保驾护航。

我们聚焦于奇偶校验码,揭示了其如何通过精巧的设计,将复杂的检错任务简化为对数据中“1”的个数的奇偶性判断。这种利用简单硬件(如异或门)即可实现高效检错的思路,体现了工程学的优雅。

然而,任何技术都有其边界。这道“安检门”的能力是有限的:

  • 无法定位错误:它只能报警“有入侵”,却无法指出“入侵者”的具体位置。

  • 偶发错误盲区:当遇到偶数个比特同时出错的情况时,它会不幸地失效。

因此,奇偶校验码更像是一位忠诚但能力有限的哨兵,适合在对可靠性要求并非极致的场景下站岗。它为我们清晰地勾勒了检错编码的基本范式,同时也引出了一个更具挑战性的问题:

  • 当我们不仅需要知道“有错”,更想以极高的准确率发现错误时,该怎么办?

这将是我们下一篇内容要解答的谜题——功能更强大、在现实网络世界中应用极其广泛的「循环冗余码CRC)」。

我们将一起探索 CRC 是如何通过一种名为 生成多项式 的“精密模具”和 模2除法 的数学运算,以极小的冗余开销,实现远超奇偶校验码的、接近决定性的检错可靠性。

互动与分享

  • 点赞👍 - 您的认可是我持续创作的最大动力

  • 收藏⭐ - 方便随时回顾这些重要的基础概念

  • 转发↗️ - 分享给更多可能需要的朋友

  • 评论💬 - 欢迎留下您的宝贵意见或想讨论的话题

感谢您的耐心阅读! 关注博主,不错过更多技术干货。我们下一篇再见!

http://www.dtcms.com/a/613244.html

相关文章:

  • Oracle EBS 调用标准创建供应商地点包报错处理
  • 第40节:AR基础:Marker识别与跟踪
  • 新能源汽车动力系统在环(HIL)半实物仿真测试台架深度解析
  • 企业BI建议--数据治理平台
  • 锒川市住房和城乡建设局网站公告湖北省建设工程质量安全监督网站
  • 从裂变能力竞争到技术水平竞争:开源AI智能名片链动2+1模式S2B2C商城小程序对微商企业竞争格局的重塑
  • 09-mcp-server案例分享-即梦MCP-Server实战教程-让Claude直接调用AI生图视频能力
  • SpringBoot18-redis的配置
  • PHP 表单 - 必需字段
  • python爬虫入门案例day05:Pexels
  • android studio Gradle 打包任务配置
  • 【AI学习-comfyUI学习-1批量抠图换背景工作流+2视频抠图工作流-各个部分学习-第十节】
  • Redis(124)Redis在电商系统中的应用有哪些?
  • [Dify 实战案例] 用 Dify 做一个多语种文档翻译工具:支持 TXT / DOCX / XLSX / PPTX 全格式
  • 自然语言编程:从一段Perl程序说起
  • OpenAI Whisper:技术、实战、生态
  • 【ZeroRange WebRTC】DTLS(Datagram Transport Layer Security)技术深度分析
  • 南京本地网站合肥建网站要多少钱
  • 从丝印判断ESP32-WROOM-32E模组Flash容量
  • react 学习
  • 语言模型(Language Model)介绍
  • 基于协同过滤推荐算法的求职招聘推荐系统u1ydn3f4(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
  • 在 Ubuntu 中把系统字符集从英文改成支持中文
  • PyTorch实战:从零搭建CV模型
  • 网站权重不够高 导致友情链接批量查询
  • 如何在校园网让虚拟机联网并固定IP
  • 5. Qt深入 线程例子
  • 虚拟服务器和如何创建网站网站 注册模块怎么做
  • 【Linux日新月异(二)】CentOS 7用户与用户组管理深度指南:保障系统安全的基石
  • 大模型-提示工程