链路层
链路层从网络层接受下传的数据报,并沿着链路将链路层分组帧(frame) 传递给下一个结点。
5.2 差错检测和纠正技术
奇偶校验
差错检测最简单的方式是使用单个奇偶校验位。在偶(奇)校验方案中,发送方只需包含一个附加的比特,使得初始信息加上一个校验比特中 1 的总数是偶(奇)数。接收方只需重新计数并比对即可。然而,很显然,奇偶校验只能检测出奇数个比特差错。
在二维奇偶校验方案中,初始信息被划分为 i 行 j 列,对每行每列计算奇偶值,共产生 i+j+1 个校验比特。这样,包含差错比特的行和列的校验值都将会出现差错。因此,接收方不仅可以检测到单个比特差错,还可以利用存在奇偶校验差错的行和列的索引,来实际识别发生差错的比特,并纠正它。接收方还能够检测,一个分组中的两个比特差错的任何组合,但不能纠正它。除此之外,校验比特本身的单个比特差错也是可检测和可纠正的。
检验和
在检验和中,d 比特数据被当作一个 k 比特整数的序列处理。一个简单检验和方法就是将这 k 比特整数累加,并用得到的和作为差错检验比特。互联网检验和就基于这种方法,见 TCP/UDP 检验和字段。
循环冗余检测
循环冗余检测(CRC)编码,也叫多项式编码。考虑 d 比特的数据 D,发送方和接收方首先必须协商一个 r+1 比特模式,称为生成多项式 G,G 的最高有效位必须是 1。然后,发送方要选择 r 个附加比特 R,并将它们附加到 D 上,使得 d+r 比特模式(被解释为一个二进制数)用模 2 算术恰好能被 G 整除。接收方用 G 去除接收到的 d+r 比特,如果余数为 0,说明出现了差错,否则数据正确。其中,模 2 算术除法就是用异或(XOR)代替减法的除法。
G 在不同的发送数据间可以通用(由国际标准定义),而 R 必须针对发送的不同数据分别求出。求 R 的方法是 R = r e m a i n d e r ( D ⋅ 2 r / G ) R = remainder(D·2^r/G) R=remainder(D⋅2r/G) 。
D ⋅ 2 r ⊕ R = n G D·2^r \oplus R = nG D⋅2r⊕R=nG --> D ⋅ 2 r = n G ⊕ R D·2^r = nG \oplus R D⋅2r=nG