本文主要是介绍数据链路层纠错研究一次学神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 的持续时间,而这是非常罕见的情况,一般的噪音信号都比这个时间要长。
- 突发性差错
突发性差错 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春秋”的心理交锋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!