数据链路层-----差错检测
一、奇偶校验
奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。
用单个奇偶校验位可检测出链路发生的单个比特差错。
发送方发送的信息由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 的概率认为这些帧在传输过程中没有产生差错”。
即:“凡是接收端数据链路层接受的帧均无差错”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现