2.4 差错控制
2.4.1 差错产生的原因与基本对策
在数据传输中,接收到的数据与原来发送的数据不一致称为传输差错。信
道噪声引起传输信号的畸变是产生差错的主要原因。如图2.33所示,信道噪声
· 5 4 · 第2章 链路上的通信技术
将在数据信号上叠加一些高次谐波,从而引起接收端判断错误。
通信信道的噪声分为两类:热噪声和冲击噪声。
热噪声是内部噪声,由介质中电子热运动而引起,随机产生,强度与频率无
关,频谱很宽,产生随机差错;
冲击噪声是外部噪声,由外界干扰引起,其幅值较大,呈突发性,产生突发性
差错。
在数据通信中,差错的基本应对策略有3个:
(1)提高信道质量
�使用高质量的信道,即使用具有热噪声小、信号屏蔽能力强等优点的信道;
�使用中继器,中继器的作用是每经过一定的传输距离将数据信号重新复
制一次。
(2)提高数据信号的健壮性
�纠错码,为传输的数据信号增加冗余码,以便能自动纠正传输差错;
�检错码,为传输的数据信号增加冗余码,以便查出哪一位出错。
(3)采用合适的差错控制协议
与检错码相比,纠错码具有自动纠错功能,但实现复杂、造价高、传输效率
低。通常是采用检错码检查出差错,由合适的差错控制协议来补救。
2.4.2 循环冗余码校验
目前,主要的检错技术是奇偶校验(Odd-EvenCheck)和循环冗余码校验
(CRC,CyclicRedundancyCheck)。
奇偶校验码分为垂直奇偶校验码、水平奇偶校验码和水平垂直奇偶校验码。
它们的冗余位少、方法简单,但纠错能力差,一般只用于要求较低的通信场合。
这里只介绍循环冗余码校验CRC。
循环冗余码是一种能力相当强的检错、纠错码,并且实现编码和检码的电路
比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器
与主机的数据通信和计算机网络中。
循环码通过某种数学运算实现有效信息与校验位之间的循环校验。
1.编码步骤
①将待编码的n位信息码组Cn-1Cn-2…Ci…C2C1C0表达为一个n-1阶
的多项式
M(x)=Cn-1x
n-1
+Cn-2x
n-1
+…+Cix
i
+…+C1x
1
+C0x
0
②将信息码组左移k位,形成M(x)·x
k
,即n+k位的信息码组
· 6 4 · 第1篇 计算机网络组成原理
Cn-1+kCn-2+k…Ci+k…C2+kC1+kCk00…00
③用k+1位的信息码组生成多项式G(x)对M(x)·x
k
作模2除,得到一
个商Q(x)和一个余数R(x)。显然,有
M(x)·x
k
=Q(x)·G(x)+R(x)
生成多项式G(x)是预先选定的,关于它稍后再进行介绍,这里先介绍一下
模2除。
模2运算指以按位模2加为基础的四则运算,运算时不考虑进位和借位。
模2加的规则为:两数相同为0,两数相异为1。模2除,就是求用2整除所得到
的余数,每求1位商应使部分余数减少1位。取商的原则是:当部分余数为1
时,商取1;当部分余数为0时,商取0。如:
④将左移k位的待编码有效信息与余数R(x)作模2加,即形成循环冗余
校验码。
例2.2 对4位有效信息1100作循环冗余校验码,选择生成多项式G(x)为
1011(k=3)。
①M(x)=x
3
+x
2
=1100
②M(x)·x
3
=x
6
+x
5
=1100000 (k=3,即加了3个0)
③模2除,M(x)·x
k
/G(x)=1100000/1011=1110+010/1011,即R(x)=010
④模2加,得到循环冗余校验码M(x)·x
3
=Q(x)·G(x)+R(x)=1100000
+010=1100010
2.纠错原理
由于M(x)·x
k
=Q(x)·G(x)+R(x),根据模2加的规则
M(x)·x
k
+R(x)=M(x)·x
k
-R(x)=Q(x)·G(x)
所以合法的循环冗余校验码应当能被生成多项式整除,如果循环冗余校验
码不能被生成多项式整除,就说明出现了信息差错。并且,有信息差错时,循环
冗余校验码被生成多项式整除所得到的余数与出错位有对应关系,因而能确定
出错位置。表2.5为例2.2所得到的循环冗余校验码的出错模式。
· 7 4 · 第2章 链路上的通信技术
表2.5 循环冗余校验码的出错模式
D7D6D5D4D3D2D1 余数 出错位
正确 1 1 0 0 0 1 0 000 —
错
误
1 1 0 0 0 1 1
1 1 0 0 0 0 0
1 1 0 0 1 1 0
1 1 0 1 0 1 0
1 1 1 0 0 1 0
1 0 0 0 0 1 0
0 1 0 0 0 1 0
001
010
100
011
110
111
101
1
2
3
4
5
6
7
进一步分析还会发现,当循环冗余校验码有1位出错时,用生成多项式作模
2除,将得到一个不为0的余数,将余数补0继续作模2除,又得到一个不为0的
余数,再补0再作模2除……于是余数形成循环。如上例,最终形成001,010,
100,011,110,111,101;001,010,100,011,110,111,101……的余数循环,这也就是
“循环码”的来历。
3.生成多项式
并不是任何一个多项式都可以作为生成多项式。从检错和纠错的要求出
发,生成多项式应能满足下列要求:
�任何一位发生错误都应使余数不为0;
�不同位发生错误应使余数不同;
�对余数继续作模2运算应使余数循环。
生成多项式的选择主要靠经验。有3种多项式已经成为标准,具有极高的
检错率,即
CRC-12=x
12
+x
11
+x
3
+x
2
+x+1
CRC-16=x
16
+x
15
+x
2
+1
CRC-ITU-T=x
16
+x
12
+x
5
+1
2.4.3 差错控制协议
差错控制协议ARQ(AutomaticRequestforRepeat)是链路层的一种传输控制
协议,它具有流量控制和差错控制等功能。ARQ的差错控制原理是反馈重发,
按具体的实现方法可以分为停等ARQ和连续ARQ。
1.停等ARQ
停等ARQ的工作原理如图2.34所示。当主机A发送一个数据帧到主机B
· 8 4 · 第1篇 计算机网络组成原理
时,若B正确地收到,便会立即发一个确认应答帧ACK给A,A接到确认应答
帧,就可以再发下一个数据帧;若B收到的数据帧不正确,便立即发一个否认应
答帧NAK给A,A接到否认应答帧,就将数据帧重发一次。
图2.34 停等ARQ的工作原理
这里还有两个问题要解决:
�一是当A发出的数据帧丢失,B收不到时是不会发任何应答帧的。这时
A一直等待,当等待时间超过一个限度tOUT时,就将数据帧重新发送一次。
�二是B虽然收到了A发来的数据帧,也发出了应答帧(可能是ACK,也可
能是NAK),A却没有收到。这种情况下,A等待超过一定时限时,也要将数据帧
重新发送一次。
停等ARQ协议简单,但系统效率较低。
2.连续ARQ
连续ARQ是在发完一个数据帧后,不再等待,而是连续地发送若干个数据
帧,具体实现方式有拉回方式和选择重发方式。
(1)拉回连续ARQ
拉回连续ARQ的工作原理如图2.35所示。在发送方A连续地发送数据帧
的同时,接收方对接收到的数据帧进行校验,并向A方发送应答帧;当A接收到
一个数据帧对应的应答帧为NAK时,就从这个数据帧开始将此后所发送过的数
据帧重发一遍。例如,A方发送了1~5号数据帧,其中第2号数据帧出错,B将
其后已收到的帧(2~5号)丢弃,A收到NAK2后,要进行拉回重发。出现超时
时,也要拉回重发,如3号帧丢失后,要将已发送的3~6号帧拉回重发。
(2)选择重发连续ARQ
选择重发连续ARQ与拉回连续ARQ的不同之处在于它只重发出错的数据
帧。
· 9 4 · 第2章 链路上的通信技术
图2.35 连续ARQ的工作原理
2.5 流量控制与滑动窗口协议
在链路上进行流量控制的目的,主要是根据链路的传输水平协调发送端与
接收端的关系,使发送端的发送在接收端的控制下进行,使发送能力与接收能力
相适应。目前,典型的流量控制技术是采用滑动窗口协议。
滑动窗口协议是从发送和接收两方来限制用户资源需求,并通过接收方来
控制发送方的发送数量。其基本思想是:某一时刻,发送方只能发送编号在规定
范围内,即落在发送窗口内的几个数据单元,接收方也只能接收编号在规定范围
内,即落在接收窗口内的几个数据单元。这不仅可以用于流量控制,还兼有差错
控制的功能。
使用滑动窗口协议,要涉及到两个方面的问题:
�数据单元的编号问题(这与数据单元中用于编号的位数有关);
�窗口的大小,即缓冲区大小问题。
下面用数据单元3位进行数据单元的编码(即数据单元采用模8编码),发
送窗口的大小为5,接收窗口的大小为4,来说明滑动窗口协议的工作原理。
2.5.1 发送器窗口的工作原理
发送器窗口的大小(宽度)规定了发送方在未接到应答的情况下允许发送的
数据单元数。也就是说,窗口中能容纳的逻辑数据单元数就是该窗口的大小。
图2.36说明了发送窗口移动的规则,其窗口大小为5。
2.5.2 接收器窗口的工作原理
图2.37说明了接收窗口的移动规则,其窗口大小为4。
· 0 5 · 第1篇 计算机网络组成原理
图2.36 发送器窗口的工作原理
图2.37 接收器窗口的工作原理
前面介绍了用滑动窗口进行流量控制的基本原理,具体实现时还有一些问
题要处理,如:
�窗口宽度的控制是预先固定,还是可适当调整;
�窗口位置的移动控制是整体移动,还是顺次移动;
�接收方的窗口宽度与发送方相同还是不同。