差错从何而来?
概括来说,传输中的差错都是由于噪声引起的。
全局性. 由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。
解决办法:提高信噪比来减少或避免干扰。(对传感器下手)
局部性.外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。
解决办法:通常利用编码技术来解决。
差错又分为位错和帧错。
链路层为网络层提供服务:无确认无连接服务(通信质量好、有线传输链路),有确认无连接服务,有确认面向连接服务(后面两种是 针对通信质量差的无线传输链路)。
数据链路层的错误主要是比特错,对于 这些有检错编码(奇偶校验码、循环冗余码CRC)、纠错编码(海明码)
1 奇偶校验码
只能检查出奇数个错误,检错能力50%。
2 CRC循环冗余码
例:要发送的数据为1101 0110 11 ,采用CRC校验,生成多项式是10011,那么最终发送的数据是?
解答:
最终发送的数据是:要发送的数据+FCS帧检验序列
计算冗余码的步骤是:
(1)加0,假设生成多项式G(x)的阶为r,则加 r 个0 (多项式N位,阶为N-1)
(2)模2除法,数据加0后除以生成多项式,余数为冗余码(又叫FCS、CRC校验码)的比特序列。
那么接收端如何检错呢?
把收到的每一个帧都除以同样的除数,然后检查得到的余数R。
1.余数为0,判定这个帧没有差错,接受。
2.余数为不为0,判定这个帧有差错(无法确定到位),丟弃。
FCS的生成以及接收端CRC检验都是由硬件实现,处理很迅速,因此不会延误数据的传输。
在数据链路层仅仅使用循环冗余检验CRC差错检测技术,只能做到对帧的无差错接收,即“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但是最终还是因为有差错被丢弃。“ 凡是接收端数据链路层接收的帧均无差错”。
“可靠传输”:数据链路层发送端发送什么,接收端就收到什么。
链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。