数据链路层纠错研究一次学神and农夫and“i春秋”的心理交锋

本文主要是介绍数据链路层纠错研究一次学神and农夫and“i春秋”的心理交锋,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据链路层纠错研究)

请添加图片描述

请添加图片描述
请添加图片描述故事的起因是因为在白天学完农夫的计算机网络,晚上进行写笔记和复习的时候发现学神和i春秋的教程,和农夫的起了冲突
农夫:
数据链路层:为物理链路提供可靠的数据传输,包括错误的检测和修正
链路层的主要功能: 链路层的功能是实现系统实体间二进制信息块的正确传输 。 为网络层提供可靠无错误的数据信息 在数据链路中解决信息模式、操作模式、差错控制、流量控制、信息交换过程和通信控制规程的问题链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现。 链路层应具备如下功能: 链路连接的建立,拆除,分离。 帧定界和帧同步。 链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界。 数据链路层的典型设备:二层交换机、网桥、网卡请添加图片描述学神:
数据链路层:将分组拆分为字节,并将字节组合成帧,使用MAC地址提供介质访问,执行错误检测,但不纠错请添加图片描述i春秋:
数据链路层:
不同的网络类型,发送数据的机制不同,数据链路层就是将数据包封装成能够在不同网络传输的帧。能够进行差错检查,但不纠错,检测出错丢掉帧。请添加图片描述
我对比了一下,一看不对呀,
农夫写着数据链路层为物理链路提供可靠的数据传输,包括错误的检测和修正
学神写着数据链路层使用MAC地址提供介质访问,执行错误检测,但不纠错
i春秋写着数据链路层能够进行差错检查,但不纠错,检测出错丢掉该帧
首先农夫是确认修正,学神是不纠错但是前面有MAC前提,i春秋是不纠错首先这里有着三个知识点
接下来我们就围绕这三点一步一步来进行分析
1、错误检测
2、修正
3、纠错

1、什么是错误检测

在了解什么是错误检测之前我们先了解一下错误的产生
无论何时,在位流从一点流动到另一点时,由于干扰 (interference) 的存在,都可能经受到不可预测的变化,这些干扰可能会改变信号的波形。在单个位差错中,就是由 0 0 0 变成 1 1 1 或是由 1 1 1 变成 0 0 0 。在突发性差错中,可能有多个位的改变。例如,在一个具有 1200 bps 1200\textrm{bps} 1200bps 速率的传输中,一个 0.01 s 0.01s 0.01s 的脉冲噪声突发,可能要改变 12 12 12 位信息中一些位或所有位。1. 单个位差错
单个位差错 single-bit error 一词的意思是,在给定的数据单元(例如一个字节、字符或分组)中仅有一位发生从 1 1 1 到 0 0 0 或从 0 0 0 到 1 1 1 的变化。![请添加图片描述](https://img-blog.csdnimg.cn/52a3d1af6907446c8bf6bdc36d471578.png)图10.1说明在一个数据单元中单个位差错的影响。为了理解这一变化的影响,设想每一个 8 8 8 位组是一个左边加一个 0 0 0 位的ASCII码字符。在图10.1中,发送 00000010 00000010 00000010(ASCII的 STX ) ,表示文本的开始,但是接收方接收的是 00001010 00001010 00001010(ASCII的 LF ) ,表示换行。
图10.1 单个位差错
单个位差错在串行数据传输中很少出现。要了解为什么,可以想像以 1 Mbps 1\textrm{Mbps} 1Mbps 发送数据的情况。这意味着每一位仅持续 1 / 1000000 s 1/ 1 000 000s 1/1000000s 即 1 μ s 1μs 1μs 。要出现单个位差错,噪音信号必须只有 1 μ s 1μs 1μs 的持续时间,而这是非常罕见的情况,一般的噪音信号都比这个时间要长。
  1. 突发性差错
    突发性差错 burst error 是指在数据单元中有两位或更多位发生 1 1 1 到 0 0 0 或 0 0 0 到 1 1 1 的变化。请添加图片描述图10.2说明在数据单元中的一个突发性差错的影响。在这种情况下,发送的是 0100010001000011 01000 10001 00001 1 0100010001000011 ,但是接收的却是 0101110101100011 01011 10101 100011 0101110101100011 。注意:突发性差错并不意味着差错在连续位上出现。突发性差错的长度按从第一个差错位到最后一个差错位的长度计算,其间的某些位也可能未产生差错。
突发性差错比单个位差错更容易发生。噪声的持续时间要大于一个位的持续时间,这就意味着在噪声影响数据时,它要影响许多位。受影响的位的数量取决于数据速率和噪声的持续时间。例如,如果以 1 Kbps 1\textrm{Kbps} 1Kbps 的速率发送数据,一个 1 / 100 s 1/ 100s 1/100s 的噪声就会影响 10 10 10 位;而如果我们以 1 Mbps 1\textrm{Mbps} 1Mbps 的速率发送数据,同样的噪声就会影响 10000 10000 10000 位。

图10.2 长度为8位的突发性差错
冗余
检错或纠错的核心概念是冗余 redundancy 。为了能检测或纠正差错,我们除了数据外,还需要发送一些额外的位。这些冗余位由发送方添加、并由接收方除去。它们的存在允许接收方检测或纠正被破坏的位。

检错和纠错

差错的纠正比检测更难。在检错 error detection 中,只看是否发生差错。回答是简单的是或否,甚至对差错个数都不感兴趣。对我们来说,单个位差错和突发性差错是一样的。

在纠错 error correction 中,需要知道被破坏的位的个数,更重要的是知道它们在报文中的位置。差错个数和报文长度是重要的因素。如果需要纠正 8 8 8 位数据单元中的单个位差错,则需要考虑 8 8 8 个可能的差错位置。如果需要纠正相同长度数据单元中的两个差错,则需要考虑 28 28 28 种可能。可以想像,要在 1000 1000 1000 位数据单元中查找 10 10 10 个差错,是多么难了。

差错检测

在数据链路层检测数据传输错误的方法一般是通过对差错编码进行校验来实现,常见的有奇偶校验码(PCC)和循环冗余校验(CRC)。

PCC就不用多说了,在最后设置一个奇偶校验位。

循环冗余校验是一种根据传输或保存的数据而产生固定位数校验码的方法,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收端进行检验确定数据是否发生变化。

差错控制

由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。通常,这些错误可分为位错和帧错。

位错指帧中某些位出现了差错。通常采用循环冗余校验(CRC)方式发现位错,通过自动重传请求(Automatic Repeat reQuest,ARQ)方式来重传出错的帧。

具体做法是:让发送方将要发送的数据帧附加一定的CRC冗余检错码一并发送,接收方则根据检错码对数据帧进行错误检测,若发现错误则丢弃,发送方超时重传该数据帧。这种差错控制方法称为ARQ法。ARQ法只需返回很少的控制信息就可有效地确认所发数据帧是否被正确接收。

帧错指帧的丢失、重复或失序等错误。在数据链路层引入定时器和编号机制,能保证每一帧最终都能有且仅有一次正确地交付给目的结点。

结论:
差错纠正类似于差错检测,区别在于接受方不仅能检测帧中出现的比特差错,而且能够准确地确定帧中的差错出现的位置(并因此纠正这些差错)
意思就是在传输中出现错误,能够准确的知道哪里出现了错误,并且进行纠正
帧中某些位出现了差错。通常采用循环冗余校验(CRC)方式发现位错,通过自动重传请求(Automatic Repeat reQuest,ARQ)方式重传出错的帧
就是出现了错误ARQ法只需返回很少的控制信息就**可有效地确认所发数据帧是否被正确接收,给服务器发送有没有正确的接收到,然后让服务器重新发送

那么到底数据链路层到底有没有纠错,检测和纠正是一样的吗?
希望能得到各位的解答,谢谢大家。
微信:CNHKchenjiabao

参考链接:https://blog.csdn.net/FriendshipTang/article/details/119673074
参考链接:https://blog.csdn.net/weixin_41563161/article/details/104622668
参考链接:https://blog.csdn.net/myRealization/article/details/123102281
参考书籍:计算机网络自顶向下方法

这篇关于数据链路层纠错研究一次学神and农夫and“i春秋”的心理交锋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

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

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

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名