数据链路层(3)差错检测
作者:互联网
差错检测
比特差错
:实际的通信链路都不是理想的,比特在传输过程中
可能会产生差错: 1可能会变成0,而0也可能变成1
。
误码率BER
:在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate).
使用差错检测码
来检测
数据在传输过程中是否产生了比特差错
,是数据链路层所要解决的重要问题之一。
-
检查帧在传输过程中是否产生了误码,通过长度为两字节的帧检测序列FCS字段
奇偶校验
-
在待发送的数据后面
添加1位奇偶校验位
,使
整个数据(包括所添加的校验位在内)中"1”的个数
为奇数(奇校验)或偶数(偶校验)。 -
如果有
奇数个位发生误码
,则奇偶性发生变化,可以检查出误码
; -
如果有
偶数个位发生误码
,则奇偶性不发生变化,不能检查出误码(漏检)
;-
采用奇校验,着比特1的数量的奇性改变,可以检查出错误。
待发送的数据为:101101,假没收发双方约定采用奇校验,在数据后面添加的校验位应该为比特1,使得比特1的总数为奇数。数据变为:1011011
假设传输过程中产生了1位误码,我们用红色表示:
0
011011接收方对收到的比特流进行奇校验,发现此特1的总数为偶数而不是奇数,就知道传输过程中发生了误码。
-
采用奇校验,若比特1的数量的奇性不改变。是无法检查出错误的。
如果传输过程中产生了2位误码,接收方对收到的比特流进行奇校验,发现比特1的总数为奇数,就误认为传输过程中没有发生误码。
-
采用偶校验,如果比特1的数量的偶性改变,可以检查出错误。
假设接收发双方约定采用偶校验,那么。在数据后面添加的校验位应该为比特0,使得比特1的总数为偶数:1011010
如果传输过程中产生了一位误码…可以知道传输过程中发生了误码。
-
采用偶校验,若比特1的数量的偶性不改变,是无法检查出错误的。
如果传输过程中产生了两位误码…误认为传输过程中没有发生误码。
-
由于奇偶校验的漏检率比较高,因此计算机网络的数据链路层一般不会采用这种检测方法。
循环冗余校验CRC
循环冗余校验CRC(Cyclic Redundancy Check):是一种具有很强检錯能力的检错方法,漏检率极低。
步骤:
- 收发双方
约定
好一个生成多项式G(x)
; - 发送方基于待发送的数据和生成多项式
计算
出差错检测码(冗余码
),将其添加到待传输数据的后面一起传输
; - 接收方
通过生成多项式来计算
收到的数据是否产生了误码
;
发送方的处理:
-
使用哪除法中来计算冗余码;
-
待发送的数据作为被除数的一部分,后面添加生成多项或最高次个0以构成被除数;
-
生成多项武各项系数构成的比特串作为除数;
-
进行除法,得到商和余数。余数就是航计算出的冗余码,将其添加到待发送数据的后面一起发送。
冗余码的长度与生成多项武最高次数相同,而商液作为标记。防止计算过程中对错位。
接收方的处理:
- 做除法
- 被除数就是接收到的数据,除数仍是生成多项武各项系数构成的比特串。
- 进行除法,得到商和余数。
- 如果余数0,可判定传输过程没有产生误码;否则,可判定传输过程产生了误码。
总结
检错码
只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
。- 要想纠正传输中的差错,可以
使用
冗余信息更多的纠错码进行前向纠错
。但纠错码的开销比较大,在计算机网络中较少使用
。 - 循环冗余校验
CRC
有很好的检错能力(漏检率非常低
),虽然计算比较复杂,但非常易于用硬件实现
,因此被广泛应用于数据链路层
。 - 在计算机网络中通常采用我们后续课程中将要讨论的
检错重传方式来纠正传输中的差错
,或
者仅仅是丢弃检测到差错的帧
,这取决于
数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务
。
标签:传输,检测,比特,校验,误码,差错,冗余,链路层 来源: https://blog.csdn.net/yyuggjggg/article/details/120810006