链路层----差错检测方法

简介: 链路层----差错检测方法

1 奇偶校验(Parity Check

6b6b10c0ce9e45268bbeb575686c2503.png

奇偶校验是最简单的差错检测方法,在每个数据帧中添加一个附加位,使得整个帧中1的个数为奇数或偶数,接收端通过计算接收到的帧中1的个数来检测差错。

更好的方法:二维奇偶校验

6893d4614dc34eadbc484b04c0dc406f.png

2 检验和方法
  1. 校验和(Checksum):校验和是通过计算数据帧中所有字节的累加和,并将结果添加到帧的尾部。接收端同样计算接收到的帧的校验和,然后将两者进行比较,若不一致则说明帧中存在错误。
  2. cc0f292064d54474b58ffdfac8cda577.png
  3. 3 循环冗余检测  (  重点!!!)

循环冗余检测(CRC,Cyclic Redundancy Check):CRC 是一种更强大的差错检测方法,通过对数据帧进行除法运算,生成一个固定长度的冗余码。发送端将生成的冗余码添加到数据帧的尾部,接收端也进行同样的除法运算,将计算出的余数与接收到的冗余码进行比较,若不一致则存在差错。


下面举例

假设发送端要传输以下数据:110101。我们选择一个生成多项式 G(x) = x^3 + x + 1 作为校验多项式。


首先,我们确定生成多项式的位数。由于 G(x) 是一个 3 次多项式,所以需要用 3 位二进制数来表示。


接下来,在要传输的数据后面添加 3 个零作为校验位。于是,发送端实际上发送的是:110101000。


现在,我们使用除法运算来进行 CRC 计算。


步骤 1:将发送的数据(包括附加的 3 个零)作为被除数。


                ________________________

G(x) | 110101000                

                | 1011

                ------------------

                |


步骤 2:进行第一次除法运算。将生成多项式 G(x) 与被除数的最高位对齐,并执行异或操作。


                ________________________

G(x) | 110101000                

                | 1011

                ------------------

                      11101


步骤 3:将得到的结果作为新的被除数,并重复上述步骤,直到完成所有运算。


                ________________________

G(x) | 110101000                

                | 1011

                ------------------

                      111010    

                      1011

                ------------------

                          1001

             

                ________________________

G(x) | 110101000                

                | 1011

                ------------------

                      111010    

                      1011

                ------------------

                         1001

                         1011

                ------------------

                          111


步骤 4:完成所有运算后,得到的余数就是校验位。在这个例子中,余数为 111。


最后,将计算得到的校验位附加到原始数据后面,发送端实际发送的数据为:110101000111。


接收端在接收到数据后,进行相同的 CRC 运算。如果计算得到的余数为零,说明数据未被损坏;如果余数不为零,说明数据可能存在差错。


接收端进行的操作

在接收端进行循环冗余检测(CRC)时,接收到的数据包括传输的原始数据和附加的校验位。


接收端需要执行与发送端相同的除法运算步骤,使用生成多项式 G(x) 对接收到的数据进行除法运算。如果最终得到的余数为零,说明数据未被损坏;如果余数不为零,说明数据可能存在差错。


让我们以前面提到的例子为例:发送端发送的数据为 110101000111,生成多项式为 G(x) = x^3 + x + 1。


接收端使用相同的生成多项式 G(x) 进行除法运算:


步骤 1:将接收到的数据作为被除数。


                ________________________

G(x) | 110101000111                

                | 1011

                ------------------

                |


步骤 2:进行第一次除法运算。将生成多项式 G(x) 与被除数的最高位对齐,并执行异或操作。


                ________________________

G(x) | 110101000111                

                | 1011

                ------------------

                      11101


步骤 3:将得到的结果作为新的被除数,并重复上述步骤,直到完成所有运算。


                ________________________

G(x) | 110101000111                

                | 1011

                ------------------

                      111010    

                      1011

                ------------------

                          1001

             

                ________________________

G(x) | 110101000111                

                | 1011

                ------------------

                      111010    

                      1011

                ------------------

                         1001

                         1011

                ------------------

                          111


步骤 4:完成所有运算后,得到的余数为 111。如果余数为零,则说明数据未被损坏;如果余数不为零,则说明数据可能存在差错。


在这个例子中,接收端计算得到的余数也为 111,与发送端相同。因此,接收端可以确认数据未被损坏。


这是一个简单的循环冗余检测(CRC)的检验过程。请注意,实际中 CRC 的具体细节和计算方法可能有所不同,但基本原理相似。

目录
相关文章
|
Oracle 关系型数据库 MySQL
Oracle通过DBLink连接MySQL
Oracle通过创建DBLink连接MySQL,查看修改MySQL表数据
9057 0
|
8月前
|
存储 SQL 安全
【赵渝强老师】达梦数据库的物理存储结构
本文介绍了达梦数据库的存储结构及各类物理文件的作用。达梦数据库通过逻辑和物理存储结构管理数据,包含配置文件(如dm.ini、sqllog.ini)、控制文件(dm.ctl)、数据文件(*.dbf)、重做日志文件(*.log)、归档日志文件、备份文件(*.bak)等。配置文件用于功能设置,控制文件记录数据库初始信息,数据文件存储实际数据,重做日志用于故障恢复,归档日志增强数据安全性,备份文件保障数据完整性,跟踪与事件日志辅助问题分析。这些文件共同确保数据库高效、稳定运行。
409 0
|
10月前
|
缓存 架构师 Java
Maven实战进阶(01)面试官:Maven怎么解决依赖冲突?| 有几种解决方式
本文介绍了Maven的核心功能和依赖管理技巧。Maven是基于项目对象模型(POM)的构建工具,具备跨平台、标准化、自动化等特性。其三大核心功能为依赖管理、仓库管理和项目构建。依赖管理通过pom.xml文件引入第三方组件并自动下载;仓库管理涉及中央仓库、私服和本地仓库;项目构建则通过生命周期管理编译、测试、打包等流程。文章还详细讲解了依赖冲突的解决方法,包括默认规则、手工排除和版本指定等策略。
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
219 4
【赵渝强老师】基于Redis的旁路缓存架构
|
存储 数据采集 数据挖掘
Python数据分析实验一:Python数据采集与存储
Python数据分析实验一:Python数据采集与存储
506 1
|
缓存 监控 安全
计算机网络 第六章 数据链路层(习题)
计算机网络 第六章 数据链路层(习题)
491 1
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解
401 4
|
小程序 前端开发 JavaScript
ssm+vue基本微信小程序的购物商城系统
随着互联网的趋势的到来,各行各业都在考虑利用互联网将自己的信息推广出去,最好方式就是建立自己的平台信息,并对其进行管理,随着现在智能手机的普及,人们对于智能手机里面的应用购物平台小程序也在不断的使用,本文首先分析了购物平台小程序应用程序的需求,从系统开发环境、系统目标、设计流程、功能设计等几个方面对系统进行了系统设计。开发出本购物平台小程序,主要实现了管理员后端:首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理,用户前端:首页、商品信息、商品资讯、我的等功能。总体设计主要包括系统功能设计、该系统里充分综合应用Mysql数据库、JAVA等相关知识。网页界面的
335 0
|
存储 弹性计算 安全
阿里云服务器2核4G、4核8G、8核16G实例选型指南:经济型、通用算力型和计算型选择参考
2核4G/4核8G/8核16G配置的云服务器在阿里云目前的活动中有经济型e、通用算力型u1和计算型c7、计算型c8y、计算型c7a等计算型实例可选,虽然配置相同,但是这些实例规格之间的性能和价格差别是很大的,因此,我们有必要弄清楚他们之间的差别,这样才能根据自己的需求选择最适合自己的实例。
阿里云服务器2核4G、4核8G、8核16G实例选型指南:经济型、通用算力型和计算型选择参考
|
自然语言处理 网络协议 算法
UDP协议和报文格式,校验和,CRC的含义
UDP协议和报文格式,校验和,CRC的含义