posts - 188,comments - 0,views - 22270

数据链路层-----差错检测

一、奇偶校验

奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。

用单个奇偶校验位可检测出链路发生的单个比特差错。

发送方发送的信息由n-1位信息元和1位校验元组成,可以表示成为(n,n-1)。

如果是奇校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为奇数个;

如果是偶校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为偶数个。

二、检验和方法

思想:将传输的所有字节当做整数加起来,其和作为检验和,然后将这个检验和连同数据传输到接收方,接收方对收到的数据执行相同的计算,再把得到的结果与收到的检验和进行比较。

互联网检验和就基于这种方法。

三、循环冗余检验

1、为了提供很强的差错检测能力,现代计算机网络普遍在链路层用硬件芯片实现了基于循环冗余检验(CRC—Cyclic Redundancy Check)编码的差错检验技术。

2、循环冗余检验 CRC (Cyclic Redundancy Check) 原理

在发送端,先把数据划分为组。假定每组 k 个比特。

CRC 运算在每组 数据M 后面再添加供差错检测用的 n 位冗余码,然后构成一个帧发送出去。一共发送 (k + n) 位。

假设待传送的数据 M = 1010001101(共k bit)。

发送方和接收方协商一个m

bit的除数P 即可确定我们在数据M的后面添加的供差错检测用冗余码的长度为n bit(n=m-1)。

3、CRC 冗余码的计算

1),用二进制的模 2 运算进行 2^n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。

2),得到的 (k + n) 位的数除以事先选定好的长度为 m 位的除数 P,得出商是 Q ,余数是 R,余数 R 比除数 P至 少 少1 位。

3),将余数 R 在不改变其值的情况下,补充若干个0使其为n位(余数R实为n位,则无需补充0),作为冗余码拼接在数据 M 后面,一起发送出去。

这种为了进行检错而添加的冗余码常称为帧检验序列 FCS (Frame Check Sequence)。

4、帧检验序列 FCS

在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。

循环冗余检验 CRC 和帧检验序列 FCS 并不等同。

CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。

FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。

注:

仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受 (accept)。

即:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。

即:“凡是接收端数据链路层接受的帧均无差错”。

 

posted on   辰逸1  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示