2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原

【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原

时间:2018-07-19 21:15:43

相关推荐

【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原

文章目录

一、 "海明码" 工作原理二、 "海明码" 工作流程三、 确定校验码位数四、 确定校验码和数据位置0、 确定校验码位置1、 引入二进制位2、 P1 校验位 计算3、 P2 校验位 计算4、 P3 校验位 计算5、 P4 校验位 计算6、 最终海明码结果五、 检错纠错1、 P1 校验位 校验2、 P2 校验位 校验3、 P3 校验位 校验4、 P4 校验位 校验5、 纠错

一、 “海明码” 工作原理

海明码可以 发现 双比特错误 , 但只能纠正 单比特错误 ;

海明码 工作原理 :

① 添加校验码 :发送数据 , 在数据中加入 冗余信息 ( 冗余码 / 校验码 ) ;

② 校验码作用 :每个 校验码 不仅可以校验本身的信息 , 还可以同时校验多为信息 ;

③ 比特位 多重校验 :某些 比特位 可以 同时被多个校验码校验 ;

④ 检查差错 :如果这个被多位校验码校验的比特位 出现错误 , 那么多个校验码校验时 , 就会知道数据 出现差错 ;

⑤ 定位差错 :每个校验码逐个校验 , 最终能 定位出是哪个比特位出现了差错 , 从而将其纠正 ;

二、 “海明码” 工作流程

"海明码" 工作流程 :

确定校验码位数确定校验码位置 和 数据位置求校验码值检错纠错

三、 确定校验码位数

海明不等式 :2r≥k+r+12^r \geq k+r+12r≥k+r+1

rrr 是冗余信息位kkk 是信息位

根据信息位位数 , 求出满足 海明不等式 最小的 r ;

确定校验码位数示例 :发送数据 101101101101101101 , 求海明码位数 ;

① 数据位数 :k=6k = 6k=6 ;

② 将数据位数代入海明不等式 :2r≥6+r+12^r \geq 6+r+12r≥6+r+1

③ 满足海明不等式最小 rrr 计算 :2r≥7+r2^r \geq 7+r2r≥7+r , 依次从 111 开始代入 , 获取满足不等式最小的 rrr 的值为 444 ;

④ 发送数据 :发送的数据 海明码 是 101010 位 , 其中 原始数据有 666 位 , 校验码有 444 位 ;

四、 确定校验码和数据位置

0、 确定校验码位置

确定校验码和数据位置 :发送数据 101101101101101101 , 海明码位数 为 101010 位 ;

① 校验码 444 位 :P1P_1P1​ , P2P_2P2​ , P3P_3P3​ , P4P_4P4​ ;

② 数据位 666 位 :D1D_1D1​ , D2D_2D2​ , D3D_3D3​ , D4D_4D4​ , D5D_5D5​ , D6D_6D6​ ;

③ 校验码位置 :校验码 只能放在 222 的幂次方位置 , 如 20=12^0 = 120=1 , 21=22^1 = 221=2 , 22=42^2 = 422=4 , 23=82^3 =823=8 , 2n2^n2n等位置 ;

④ 数据位置 :数据位 按照顺序依次 放在 非校验码位置上 ;

⑤ 最终生成的数据位 :

1、 引入二进制位

求校验码值 :

在表格中引入二进制位 :二进制的位数 就是 以 能代表 最大的序列索引的位数为准 , 如 该 数据 有 101010 位 , 最大索引值是 101010 , 对应二进制时 101010101010 , 需要 444 位二进制数表示 , 这里的二进制位数是 444 ;

2、 P1 校验位 计算

P1P_1P1​ 校验的位 计算 :P1P_1P1​ 对应的二进制位是 000100010001 , 第一位是 111 , 查看 哪些 二进制位 的数据位 第 111 位是 111 ;

数据位索引 333 : 001001001111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;数据位索引 555 : 010010010111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 000 ;数据位索引 777 : 011011011111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;数据位索引 999 : 100100100111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;

令所有要校验的位 异或 ( ⊕\oplus⊕ ) 计算后为 000 ;

异或计算 ⊕\oplus⊕ :同 000 , 异 111 , 两个位不同时为 111 , 两个位相同时为 000 ;

D1⊕D2⊕D4⊕D5⊕P1=01⊕0⊕1⊕0⊕P1=01⊕1⊕0⊕P1=00⊕0⊕P1=00⊕P1=0\begin{array}{lcl}D_1 \oplus D_2 \oplus D_4 \oplus D_5 \oplus P_1 &=& 0 \\\\ 1 \oplus 0 \oplus 1 \oplus 0 \oplus P_1 &=& 0 \\\\ 1 \oplus 1 \oplus 0 \oplus P_1 &=& 0 \\\\ 0 \oplus 0 \oplus P_1 &=& 0 \\\\ 0 \oplus P_1 &=& 0 \end{array}D1​⊕D2​⊕D4​⊕D5​⊕P1​1⊕0⊕1⊕0⊕P1​1⊕1⊕0⊕P1​0⊕0⊕P1​0⊕P1​​=====​00000​

P1=0P_1 = 0P1​=0 才能使上述式子成立 , 因此 校验位 P1=0P_1 = 0P1​=0 ;

3、 P2 校验位 计算

P2P_2P2​ 校验的位 计算 :P2P_2P2​ 对应的二进制位是 001000100010 , 第二位是 111 , 查看 哪些 二进制位 的数据位 第 222 位是 111 ;

数据位索引 333 : 000000111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;数据位索引 666 : 010101111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;数据位索引 777 : 010101111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;数据位索引 101010 : 101010111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D1⊕D3⊕D4⊕D6⊕P2=01⊕1⊕1⊕1⊕P2=00⊕1⊕1⊕P2=01⊕1⊕P2=00⊕P2=0\begin{array}{lcl}D_1 \oplus D_3 \oplus D_4 \oplus D_6 \oplus P_2 &=& 0 \\\\ 1 \oplus 1 \oplus 1 \oplus 1 \oplus P_2 &=& 0 \\\\ 0 \oplus 1 \oplus 1 \oplus P_2 &=& 0 \\\\ 1 \oplus 1 \oplus P_2 &=& 0 \\\\ 0 \oplus P_2 &=& 0 \end{array}D1​⊕D3​⊕D4​⊕D6​⊕P2​1⊕1⊕1⊕1⊕P2​0⊕1⊕1⊕P2​1⊕1⊕P2​0⊕P2​​=====​00000​

P2=0P_2 = 0P2​=0 才能使上述式子成立 , 因此 校验位 P2=0P_2 = 0P2​=0 ;

4、 P3 校验位 计算

P3P_3P3​ 校验的位 计算 :P3P_3P3​ 对应的二进制位是 010001000100 , 第 333 位是 111 , 查看 哪些 二进制位 的数据位 第 333 位是 111 ;

数据位索引 555 : 000111010101 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 000 ;数据位索引 666 : 000111101010 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;数据位索引 777 : 000111011011011 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;

D2⊕D3⊕D4⊕P3=00⊕1⊕1⊕P3=01⊕1⊕P3=00⊕P3=0\begin{array}{lcl}D_2 \oplus D_3 \oplus D_4 \oplus P_3 &=& 0 \\\\ 0 \oplus 1 \oplus 1 \oplus P_3 &=& 0 \\\\ 1 \oplus 1 \oplus P_3 &=& 0 \\\\ 0 \oplus P_3 &=& 0 \end{array}D2​⊕D3​⊕D4​⊕P3​0⊕1⊕1⊕P3​1⊕1⊕P3​0⊕P3​​====​0000​

P3=0P_3 = 0P3​=0 才能使上述式子成立 , 因此 校验位 P3=0P_3 = 0P3​=0 ;

5、 P4 校验位 计算

P4P_4P4​ 校验的位 计算 :P4P_4P4​ 对应的二进制位是 100010001000 , 第 444 位是 111 , 查看 哪些 二进制位 的数据位 第 444 位是 111 ;

数据位索引 999 : 111001001001 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;数据位索引 101010 : 111010010010 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D5⊕D6⊕P4=00⊕1⊕P4=01⊕P4=0\begin{array}{lcl}D_5 \oplus D_6 \oplus P_4 &=& 0 \\\\ 0 \oplus 1 \oplus P_4 &=& 0 \\\\ 1 \oplus P_4 &=& 0 \end{array}D5​⊕D6​⊕P4​0⊕1⊕P4​1⊕P4​​===​000​

P4=1P_4 = 1P4​=1 才能使上述式子成立 , 因此 校验位 P4=1P_4 = 1P4​=1 ;

6、 最终海明码结果

计算出的四个校验码 :

P1=0P_1 = 0P1​=0P2=0P_2 = 0P2​=0P3=0P_3 = 0P3​=0P4=1P_4 = 1P4​=1

将上述校验码填写到表格中 :

最终海明码为 :000000111000011011011111010101 , 蓝色是数据位 , 红色是校验位 ;

五、 检错纠错

发送的正确的海明码数据是 :000000111000011011011111010101 , 蓝色是数据位 , 红色是校验位 ;

海明码数据表格是 :

假设 海明码 第 555 位出现错误 , D2D_2D2​ 数据原来是 000 , 出现错误变成 111 ;

正确海明码 :000000111000011011011111010101

错误海明码 :000000111000111111111111010101 , 第 555 位 的 000 变成了 111 ;

检错过程 :444 个检验位 , 每个检验位 , 令所有要校验的位进行异或 ⊕\oplus⊕ 运算 ;

错误海明码数据表格是 :

1、 P1 校验位 校验

P1P_1P1​ 校验的位 计算 :P1P_1P1​ 对应的二进制位是 000100010001 , 第一位是 111 , 查看 哪些 二进制位 的数据位 第 111 位是 111 ;

数据位索引 333 : 001001001111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;数据位索引 555 : 010010010111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 111 ;数据位索引 777 : 011011011111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;数据位索引 999 : 100100100111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;

令所有要校验的数据位 和 校验位 , 异或 ( ⊕\oplus⊕ ) 计算后为 000 ;

异或计算 ⊕\oplus⊕ :同 000 , 异 111 , 两个位不同时为 111 , 两个位相同时为 000 ;

D1⊕D2⊕D4⊕D5⊕P1=1⊕1⊕1⊕0⊕0=0⊕1⊕0⊕0=1⊕0⊕0=1⊕0=1\begin{array}{lcl} &&D_1 \oplus D_2 \oplus D_4 \oplus D_5 \oplus P_1 \\\\ &=& 1 \oplus 1 \oplus 1 \oplus 0 \oplus 0 \\\\ &=& 0 \oplus 1 \oplus 0 \oplus 0 \\\\ &=& 1 \oplus 0 \oplus 0 \\\\ &=& 1 \oplus 0 \\\\ &=& 1 \end{array}​=====​D1​⊕D2​⊕D4​⊕D5​⊕P1​1⊕1⊕1⊕0⊕00⊕1⊕0⊕01⊕0⊕01⊕01​

P1P_1P1​ 校验位 校验出错 ; D1,D2,D4,D5D_1 , D_2, D_4, D_5D1​,D2​,D4​,D5​ 位中 , 有错误出现 ;

2、 P2 校验位 校验

P2P_2P2​ 校验的位 计算 :P2P_2P2​ 对应的二进制位是 001000100010 , 第二位是 111 , 查看 哪些 二进制位 的数据位 第 222 位是 111 ;

数据位索引 333 : 000000111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;数据位索引 666 : 010101111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;数据位索引 777 : 010101111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;数据位索引 101010 : 101010111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D1⊕D3⊕D4⊕D6⊕P2=1⊕1⊕1⊕1⊕0=0⊕1⊕1⊕0=1⊕1⊕0=0⊕0=0\begin{array}{lcl} &&D_1 \oplus D_3 \oplus D_4 \oplus D_6 \oplus P_2 \\\\ &=& 1 \oplus 1 \oplus 1 \oplus 1 \oplus 0 \\\\ &=& 0 \oplus 1 \oplus 1 \oplus 0 \\\\ &=& 1 \oplus 1 \oplus 0 \\\\ &=& 0 \oplus 0 \\\\ &=& 0 \end{array}​=====​D1​⊕D3​⊕D4​⊕D6​⊕P2​1⊕1⊕1⊕1⊕00⊕1⊕1⊕01⊕1⊕00⊕00​

P2P_2P2​ 校验位 校验正确 ; D1,D3,D4,D6D_1 , D_3, D_4, D_6D1​,D3​,D4​,D6​ 位数据正确 ;

3、 P3 校验位 校验

P3P_3P3​ 校验的位 计算 :P3P_3P3​ 对应的二进制位是 010001000100 , 第 333 位是 111 , 查看 哪些 二进制位 的数据位 第 333 位是 111 ;

数据位索引 555 : 000111010101 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 111 ;数据位索引 666 : 000111101010 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;数据位索引 777 : 000111011011011 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;

D2⊕D3⊕D4⊕P3=1⊕1⊕1⊕0=0⊕1⊕0=1⊕0=1\begin{array}{lcl} &&D_2 \oplus D_3 \oplus D_4 \oplus P_3 \\\\ &=& 1 \oplus 1 \oplus 1 \oplus 0 \\\\ &=& 0 \oplus 1 \oplus 0 \\\\ &=& 1 \oplus 0 \\\\ &=& 1 \end{array}​====​D2​⊕D3​⊕D4​⊕P3​1⊕1⊕1⊕00⊕1⊕01⊕01​

P3P_3P3​ 校验位 校验出错 ; D2,D3,D4D_2 , D_3, D_4D2​,D3​,D4​ 位中 , 有错误出现 ;

4、 P4 校验位 校验

P4P_4P4​ 校验的位 计算 :P4P_4P4​ 对应的二进制位是 100010001000 , 第 444 位是 111 , 查看 哪些 二进制位 的数据位 第 444 位是 111 ;

数据位索引 999 : 111001001001 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;数据位索引 101010 : 111010010010 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D5⊕D6⊕P4=0⊕1⊕1=1⊕1=0\begin{array}{lcl} &&D_5 \oplus D_6 \oplus P_4 \\\\ &=& 0 \oplus 1 \oplus 1 \\\\ &=& 1 \oplus 1 \\\\ &=& 0 \end{array}​===​D5​⊕D6​⊕P4​0⊕1⊕11⊕10​

P4P_4P4​ 校验位 校验正确 ; D5,D6D_5, D_6D5​,D6​ 位数据正确 ;

5、 纠错

校验结果 :

P1P_1P1​ 校验位 校验出错 ; D1,D2,D4,D5D_1 , D_2, D_4, D_5D1​,D2​,D4​,D5​ 位中 , 有错误出现 ;P2P_2P2​ 校验位 校验正确 ; D1,D3,D4,D6D_1 , D_3, D_4, D_6D1​,D3​,D4​,D6​ 位数据正确 ;P3P_3P3​ 校验位 校验出错 ; D2,D3,D4D_2 , D_3, D_4D2​,D3​,D4​ 位中 , 有错误出现 ;P4P_4P4​ 校验位 校验正确 ; D5,D6D_5, D_6D5​,D6​ 位数据正确 ;

综合上面 444 次校验结果 , 发现 D2D_2D2​ 数据错误 , 将下面的表格中的 D2D_2D2​ 错误纠正 , 由 111 纠正成 000 即可 ;

错误海明码数据表格是 :

正确海明码数据表格是 :

最终将错误的海明码 000000111000111111111111010101 ( 第 555 位 的 000 变成了 111 ) , 纠正 为 正确的海明码 000000111000011011011111010101 ;

【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。