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

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

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 的具体细节和计算方法可能有所不同,但基本原理相似。

目录
相关文章
|
6月前
|
网络架构
RIP----求更新后的路由表
RIP----求更新后的路由表
104 1
|
5月前
|
网络协议 网络性能优化 网络架构
运输层---概述
运输层---概述
49 2
|
6月前
|
芯片
I/O口接口扩展----82C55
I/O口接口扩展----82C55
149 1
|
缓存 网络协议 算法
不一样的网络协议-------KCP协议
不一样的网络协议-------KCP协议
227 0
|
设计模式 缓存 网络协议
Linux网络编程 --- 以太网帧格式简析
Linux网络编程 --- 以太网帧格式简析
144 0
|
网络协议 网络架构
以太网帧结构与ip报文格式详解
以太网帧结构与ip报文格式详解
1920 0
以太网帧结构与ip报文格式详解
|
缓存 网络协议 网络架构
【计算机网络】网络层 : 网络层设备 ( 路由器 | 输入端口处理 | 输出端口处理 | 物理层、数据链路层、网络层 设备对比 | 路由表 与 路由转发 )
【计算机网络】网络层 : 网络层设备 ( 路由器 | 输入端口处理 | 输出端口处理 | 物理层、数据链路层、网络层 设备对比 | 路由表 与 路由转发 )
183 0
|
网络协议 网络架构