
(检错编码)
大家好,很高兴又和大家见面啦!! 在上一篇内容中我们介绍了数据链路层的第一个功能——封装成帧。 数据链路层可以通过4种方式实现组帧:
但是因为字符计数法中的计数字段的脆弱性和字节填充法实现上的复杂性与不兼容性,所以目前较常用的 组帧 方法是 零比特填充法 和 违规编码法。 在今天的内容中,我们将会介绍数据链路层的第二个功能——差错控制。 实际通信链路都不是理想的,比特在传输过程中可能产生差错,如:
1 变成 00 变成 1这种就是 比特差错。比特差错 是传输差错中的一种,在本小节中我们仅讨论比特差错。 数据链路层通常利用编码技术进行 比特差错控制,主要有两类:
因此差错控制又可分为 检错编码 和 纠错编码。 从本篇内容开始,我们将会依次介绍这两种编码,下面就让我们直接进入今天的内容;
检错编码 都采用 冗余编码技术,其核心思想是在有效数据(信息位)被发送前,按某种关系附加一定的冗余位(检验位),构成一个符合某一规则的码字后发送。 当要发送的有效数据变化时,相应的冗余位也随之变化,使得码字遵从不变的规则。接收方根据收到的码字是否符合原规则来判断是否出错。常见的检错编码有 奇偶校验码 和 循环冗余码。 下面我们就来了解一下奇偶校验码;
奇偶校验码 是 奇校验码 与 偶校验码 的统称,是一种最基本的检错码。它由 n - 1 位数据和 1 位检验位组成,检验位的取值(0 或 1)将使整个检验码中 1 的个数为奇数或偶数:
对于 奇偶校验码 ,在硬件层面,可以通过简单的 异或门 实现。所谓的 异或门 是指:数字逻辑电路中的一种基本逻辑门,它的独特之处在于能够检测两个输入信号是否不同。其运算规则为:相同为0,相异为1。 那么对于 奇校验码 和 偶校验码 其最终的异或值为:
这里我们以一个简单的例子进行说明; 对于一个 7 位数据 1001 101 ,通过 异或门 ,我们可以得出该数据异或值:
$$ \begin{align*} 1 \oplus 0 &= \bm{\textcolor{red}{1}} \ \bm{\textcolor{red}{1}} \oplus 0 &= \bm{\textcolor{red}{1}} \ \bm{\textcolor{red}{1}} \oplus 1 &= \bm{\textcolor{red}{0}} \ \bm{\textcolor{red}{0}} \oplus 1 &= 1 \ \bm{\textcolor{red}{1}} \oplus 0 &= 1 \ \bm{\textcolor{red}{1}} \oplus 1 &= \bm{\textcolor{blue}{0}} \end{align*} $$
从上面的运算过程我们可以看到 1001 101 这个数据的异或值为 \bm{\textcolor{blue}{0}} ,这表明数据中含有 偶数 个 1 ,那么其对应的 奇偶校验码 中的 检验位 分别为:
将该检验位加入到数据中后,我们就得到了最终的 奇偶检验码:
PS: 在 奇偶校验码 中,检验位 可以放在不同的位置,构成不同的 校验码:
上面所展示的是 信息位 + 检验位
通信双方可以根据具体使用的 校验码 所得到的 异或值 来判断数据是否存在错误:
因此,不管是 奇校验码 还是 偶校验码 ,当接收方将接收到的 校验码 通过 异或 运算获取的 异或值 与规定的 校验码 所得到的 异或值 不相等时,则表示该数据中发生了 比特差错;
奇偶校验码 虽然能够检测比特在传输的过程中是否存在问题,但是也仅限于该功能,因此 奇偶校验码 在具体的使用过程中会存在以下问题:
这两个问题也很好理解: 奇偶校验码 判断是否发生 比特差错 的原理是通过比较 校验码 最终的 异或值 ,而对于 校验码 中间的比特值并不关心,因此该 检错编码 无法确定具体发生差错的比特位; 对于 异或值 的获取,当发生 比特差错 的比特位为 奇数位 时,才会改变整个 校验码 最终的 异或值,因此该 检错编码 也无法检错出 偶数位 比特发生差错的情况;
至此,我们对数据链路层差错控制中的检错编码进行了一次深入的探索。今天旅程的核心,在于掌握了其“防患于未然”的智慧:
我们聚焦于奇偶校验码,揭示了其如何通过精巧的设计,将复杂的检错任务简化为对数据中“1”的个数的奇偶性判断。这种利用简单硬件(如异或门)即可实现高效检错的思路,体现了工程学的优雅。 然而,任何技术都有其边界。这道“安检门”的能力是有限的:
因此,奇偶校验码更像是一位忠诚但能力有限的哨兵,适合在对可靠性要求并非极致的场景下站岗。它为我们清晰地勾勒了检错编码的基本范式,同时也引出了一个更具挑战性的问题:
这将是我们下一篇内容要解答的谜题——功能更强大、在现实网络世界中应用极其广泛的「循环冗余码(CRC)」。 我们将一起探索 CRC 是如何通过一种名为 生成多项式 的“精密模具”和 模2除法 的数学运算,以极小的冗余开销,实现远超奇偶校验码的、接近决定性的检错可靠性。
互动与分享
感谢您的耐心阅读! 关注博主,不错过更多技术干货。我们下一篇再见!