【计算机网络篇】数据链路层(3)差错检测

2024-03-24 12:28

本文主要是介绍【计算机网络篇】数据链路层(3)差错检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 🥚误码
  • 🍔两种常见的检错技术
    • ⭐奇偶校验
    • ⭐循环冗余校验
      • 🎈例子

在这里插入图片描述

🥚误码

误码首先介绍误码的相关概念
在这里插入图片描述

🍔两种常见的检错技术

⭐奇偶校验

奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数奇数
偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数偶数


我们来看下面的例子

奇校验
在这里插入图片描述
偶校验
在这里插入图片描述

于是我们得到了下面的结论

在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码。
在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,无法检测出误码(漏检)

⭐循环冗余校验

数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。
循环冗余校验CRC的基本思想:

收发双方约定好一个生成多项式G(X)
发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输。
接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。

发送方CRC操作
如下图所示
在这里插入图片描述进行除法,将待发送的数据作为被除数的一部分,后面添加生成多项式最高次个0以构成被除数。
生成多项式各项系数构成的比特串作为除数,进行除法,得到商和余数
在这里插入图片描述

将余数添加到发送数据的后面,一起发送。

注意:
商仅作为标记,防止计算过程对错位
余数的长度应与生成多项式最高次数相同,作为冗余码
这里的除法是指:二进制模2除法,二进制模2除法既不向上进位,也不比较除数和被除数的对应位数值的大小,只要以相同位数进行相除即可,相当于对应位进行逻辑异或运算

接收方CRC操作
如下图所示
与发送方类似,也要进行除法。
收到的数据和冗余码作为被除数,生成多项式各项系数构成的比特串作为除数,进行除法,得到商和余数。
如果余数为0,就可判定数据和冗余码中没有出现误码,否则出现了误码在这里插入图片描述生成多项式举例
在这里插入图片描述

🎈例子

发送方
在这里插入图片描述

将冗余码添加到待发送数据的后面进行发送
在这里插入图片描述
接收方
在这里插入图片描述

注意:在这里插入图片描述

数据链路层的差错检测通常通过循环冗余检验(CRC)来实现。CRC是一种基于多项式除法的技术,用于对数据帧进行检验,以确定数据在传输过程中是否发生了错误。

在数据链路层,发送方在发送数据帧之前会计算出一个CRC码,并将其附加到数据帧的尾部。接收方在接收数据帧后,也会计算接收到的数据帧中的CRC码,然后与接收到的CRC码进行比较。如果两者不一致,则表明数据帧在传输过程中发生了错误。

通过CRC的差错检测,数据链路层能够及时发现数据帧中的比特错误,从而提高数据传输的可靠性。

这篇关于【计算机网络篇】数据链路层(3)差错检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841597

相关文章

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查