IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> CRC校验原理思考 -> 正文阅读

[网络协议]CRC校验原理思考

前言

考研狗,读计组,读至CRC,惑之。
花了些查找资料和了解,先写个大概有时间再补齐。

基础知识

① 带余除法

f ( x ) = p ( x ) q ( x ) + r ( x ) , ?? deg ? ( r ) < deg ? ( p ) f(x)=p(x)q(x)+r(x),~~ \deg(r)<\deg(p) f(x)=p(x)q(x)+r(x),??deg(r)<deg(p)

② Galois域
G F ( 2 ) : ( Z 2 , ? + , ? ? ) GF(2):(\mathbb Z_2,~+,~\cdot) GF(2):(Z2?,?+,??)

操作过程概述

回顾整个过程:
① 有一个需要传输的二进制串,记为 D D D,它所对应的多项式为 d ( x ) d(x) d(x)(在模2多项式环中),顺便记 deg ? d ( x ) = n \deg d(x)=n degd(x)=n
② 有一个事先决定好的生成多项式 p ( x ) p(x) p(x),这个多项式对于发送方和接收方是已知的,记 deg ? p ( x ) = m \deg p(x)=m degp(x)=m
③ 将二进制串 D D D左移 m m m位,得到新的二进制串 D ′ D' D,对应的多项式为 f ( x ) = d ( x ) ? x m f(x)=d(x)\cdot x^m f(x)=d(x)?xm
④ 对 f ( x ) f(x) f(x)关于模2除以生成多项式 p ( x ) p(x) p(x),得到余数 r ( x ) r(x) r(x),这里具体的商我们并不关心。
⑤ 把 r ( x ) r(x) r(x)对应的二进制串连接在串 D D D后面,得到 D 1 D_1 D1? D 1 : = D R  ̄ D_1:=\overline{DR} D1?:=DR.这个 D 1 D_1 D1?正是信息 D D D对应的CRC码
⑥ 当接收端接收到二进制串 D ′ D' D时,会将它与生成多项式在模2下进行除法,若所得的余数为0,则在很大概率下可以确定传输过程没有发生错误。

最后一步检验模2整除后为何余0

延用前面多项式的符号,我们有第③步的
f ( x ) = d ( x ) ? x m (1) f(x)=d(x)\cdot x^m\tag{1} f(x)=d(x)?xm(1)
第④步的
f ( x ) = p ( x ) q ( x ) + r ( x ) (2) f(x)=p(x)q(x)+r(x)\tag{2} f(x)=p(x)q(x)+r(x)(2)
在第⑤步操作中,存在如下关系式:
d 1 ( x ) = d ( x ) ? x m + r ( x ) (3) d_1(x)=d(x)\cdot x^m+r(x)\tag{3} d1?(x)=d(x)?xm+r(x)(3)
由(1)&(3),有
d 1 ( x ) = f ( x ) + r ( x ) (4) d_1(x)=f(x)+r(x)\tag{4} d1?(x)=f(x)+r(x)(4)
因为该多项式环是GF(2),因此,加一个数等同于减一个数,故有
d 1 ( x ) = f ( x ) ? r ( x ) (5) d_1(x)=f(x)-r(x)\tag{5} d1?(x)=f(x)?r(x)(5)
联合(2),最终得到
d 1 ( x ) = p ( x ) q ( x ) (6) d_1(x)=p(x)q(x)\tag{6} d1?(x)=p(x)q(x)(6)
d 1 ( x ) d_1(x) d1?(x)不就正好对应我们接收端接收到的二进制串吗?由(6),我们知道余数为0

在只错一位的情况下,余数只与多项式结构有关

接下来我们讨论检错功能,这里只讨论传输过程中之多错一位的情形。先举个例子:
假设传输多项式为 M ( x ) = x 3 + 1 M(x)=x^3+1 M(x)=x3+1,生成多项式为 G ( x ) = x 3 + x + 1 G(x)=x^3+x+1 G(x)=x3+x+1,对应的二进制串就分别为1001和1011。用左移3位得到的1001000模2除以1011,可以得到余数110,将110连接到1001后面,得到 M ( x ) M(x) M(x)对应的CRC码位1001110.
发送端发送的信号对应的多项式是 d 1 ( x ) d_1(x) d1?(x),设接收端接收到的信号对应的多项式为 d 2 ( x ) d_2(x) d2?(x),简单计算,有下表:

d_2(x)对应的二进制串与生成多项式模2后的余数
1001110000
0001110101
1101110111
1011110110
1000110011
1001010101
1001100010
1001111001

(听说这也是“循环”二字的由来)
我们自然而然的想问一个问题,在固定生成多项式下,只要传输的多项式最高项阶数相同,那么出错位对应的余数会不会改变?
答案是不会改变。延用前面符号,假设出错位在第 k k k位( 1 ≤ k ≤ n + m + 1 1\le k\le n+m+1 1kn+m+1),则
d 2 ( x ) = d 1 ( x ) + x k ? 1 (7) d_2(x)=d_1(x)+x^{k-1}\tag{7} d2?(x)=d1?(x)+xk?1(7)
x k ? 1 x^{k-1} xk?1 进行带余除法
x k ? 1 = p ( x ) s ( x ) + t ( x ) (8) x^{k-1}=p(x)s(x)+t(x)\tag{8} xk?1=p(x)s(x)+t(x)(8)
可以看到(8)对 d ( x ) d(x) d(x) 是什么并不关心。

最后还剩一个我未解决的问题:在满足式 2 m ≥ n + m + 1 2^m\ge n+m+1 2mn+m+1 的条件下,错一位所对应的余数是不是各不相同?好像是各不相同,但具体的推导我还没证出来,证出来再补坑。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:18:35  更:2022-01-24 11:20:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:37:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码