4.3 差错控制技术
物理层的任务是接收一个原始的比特流,并准备将它传输到目的地。在传输过程中传输的比特流个数和内容可能会发生变化,即产生差错,但目前已有的物理层协议对传输的比特流并不进行任何检测和纠错,即物理层并不保证这个比特流的正确传输,物理层传输产生的差错将由数据链路层负责检测和纠错。
4.3.1 差错产生的原因
差错是指通信接收方收到的数据与发送方实际发出的数据不一致的现象。这种差错一般是由通信信道的噪声产生的,通信信道的噪声分为热噪声和冲击噪声两种。热噪声是由传输介质导体的电子热运动产生的,它的特点是:时刻存在,幅度较小且强度与频率无关,但频谱很宽,是一类随机噪声。由热噪声引起的差错称为随机差错。与热噪声相比,冲击噪声幅度较大,是引起传输差错的主要原因。冲击噪声的持续时间要比数据传输中的每个比特发送时间长(如外界磁场的变换、电源开关的跳变等),因而冲击噪声可能会引起相邻多个数据位出错。冲击噪声引起的传输差错称为突发差错,它的特点是:差错呈突发状,影响一批连续的数据位。计算机网络中的差错主要是指突发差错。
4.3.2 差错控制方法
差错控制是指在数据通信过程中能发现或纠正差错,将差错限制在尽可能小的允许范围内。常用的差错控制方法有反馈检测、自动重传请求(Automatic Repeat reQuest,ARQ)和前向纠错(Forward Error Correction,FEC)。
1.反馈检测
反馈检测方法又称回送校验法,双方在进行数据传输时,接收方将接收到的数据重新发回发送方,由发送方检查是否与原始数据完全相符。如不相符,则发送方发送一个控制信息通知接收方删去出错的数据,并重新发送该数据;如相符,则发送下一个数据。其原理如图4-5所示。反馈检测的特点是:原理简单,实现容易,可靠性强,但开销大,信道利用率低。
图4-5 反馈检测原理
a)无差错情况 b)出错情况
2.自动重传请求
自动重传请求是计算机网络中较常采用的差错控制方法。自动重传请求的原理是:发送方将要发送的数据附加上一定的冗余检错码一并发送,接收方则根据检错码对数据进行差错检测,如发现差错,则接收方返回重传请求的信息,发送方在收到请求重传的信息后,重新传送数据;如没有发现差错,则发送下一个数据帧,如图4-6所示。为保证通信正常进行,还需引入计时器(防止整个数据帧或反馈信息丢失)和帧编号(以防止接收方多次收到同一帧并递交给网络层)。自动重传请求的特点是:使用检错码(常用的有奇偶校验码和CRC码等),必须是双向信道,发送方需设置缓冲器。
图4-6 自动重传请求原理
a)无差错情况 b)出错情况
3.前向纠错
前向纠错的原理是发送方将要发送的数据附加上一定的冗余纠错码一并发送,接收方则根据纠错码对数据进行差错检测,如发现差错,由接收方进行纠正。前向纠错的特点是使用纠错码(纠错码编码效率低且设备复杂),单向信道,发送方无须设置缓冲器。
4.3.3 差错控制编码
差错控制编码的原理是:发送方对准备传输的数据进行抗干扰编码,即按某种算法附加上一定的冗余位,构成一个码字后再发送。接收方收到数据后进行校验,即检查信息位和附加的冗余位之间的关系,以检查传输过程中是否有差错发生。差错控制编码分检错码和纠错码两种,检错码是能自动发现差错的编码,纠错码是不仅能发现差错而且能自动纠正差错的编码。计算机网络中常用的差错控制编码是奇偶校验码、循环冗余码和海明码。
1.奇偶校验码
奇偶校验码是一种通过增加冗余位使得码字中“1”的个数恒为奇数或偶数的编码方法。在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等。
1)垂直奇偶校验。垂直奇偶校验又称为纵向奇偶校验,它是将要发送的整个信息块分为定长
p
位的若干段(比如说
q
段),在每段后面按“1”的个数为奇数或偶数的规律加上一位奇偶校验位,如图4-7所示。在信息(
I
11
,
I
21
,…,
I
p
1
,
I
12
,
I
22
,…,
I
p
2
,…,
I
1
q
,…,
I
pq
)中,每
p
位构成一段(即图4-7中的一列),共有
q
段(即共有
q
列)。每段加上一位奇偶校验冗余位,即图中的
r
i
。
图4-7 垂直奇偶校验
r
i
的编码规则为:
偶校验:
r
i
=
I
1
i
+
I
2
i
+…+
I
pi
(i=1,2,3,…,q)
奇校验:
r
i
=
I
1
i
+
I
2
i
+…+
I
pi
+1 (
i
=1,2,3,…,
q
)
说明:式中的“+”为模2加,即异或运算,只求本位和,进位丢弃。
图4-7中箭头给出了串行发送的顺序,即逐位先后次序为
I
11
,
I
21
,…,
I
p
1
,
r
1
,
I
12
,
I
22
,…,
I
p
2
,
r
2
,…,
I
1
q
,
I
2
q
,…,
I
pq
,
r
q
。在编码和校验过程中,用硬件方法或软件方法很容易实现上述连续半加运算,而且可以边发送边产生冗余位;同样,在接收方也可以边接收边进行校验后去掉校验位。
垂直奇偶校验方法能检测出每列中的所有奇数位错,但检测不出偶数位错。对于突发错误,奇数位错与偶数位错的发生概率接近于相等,因而对差错的漏检率接近于1/2。
2)水平奇偶校验。为了降低对突发错误的漏检率,可以采用水平奇偶校验方法。水平奇偶校验又称为横向奇偶校验,它是对各个信息段的相应位横向进行编码,产生一个奇偶校验冗余位,如图4-8所示。
图4-8 水平奇偶校验
r
i
编