在接收端把接收到的数据以帧为单位进行CRC检验
发布时间:2014/8/23 18:57:12 访问次数:2438
在接收端把接收到的数据以LM2596S-12帧为单位进行CRC检验:把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到的余数尺。
如果在传输过程中无差错,那么经过CRC检验后得出的余数R肯定是O(读者可以自己验算一下。被除数现在是101001001,而除数是尸- 1101,看余数尺是否为0)。
但如果出现误码,那么余数R仍等于零的概率是非常非常小的(这可以通过不太复杂的概率计算得出,例如,可参考[TANE11])。
总之,在接收端对收到的每一帧经过CRC检验后,有以下两种情况:
(1)若得出的余数R-O,则判定这个帧没有差错,就接受(accept)。
(2)若余数R≠0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差错),就丢弃。
一种较方便的方法是用多项式来表示循环冗余检验过程。在上面的例子中,用多项式P∞=∥+ X2 +1表示上面的除数P=1101<最高位对应于X3,最低位对应于P)。多项式P()O称为生成多项式。现在广泛使用的生成多项式P(X)有以下几种:
在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。
从以上的讨论不难看出,如果我们在传送数据时不以帧为单位来传送,那么就无法加入冗余码以进行差错检验。因此,如果要在数据链路层进行差错检验,就必须把数据划分为帧,每一帧都加上冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。
最后再强调一下,在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受,即:“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。以上所述的可以近似地表述为(通常都是这样认为):“凡是接收端数据链路层揍受的帧均无差错”。
请注意,我们现在并没有要求数据链路层向网络层提供“可靠传输”的服务。所谓“可靠传输”就是:数据链路层的发送端发送什么,在接收端就收到什么。传输差错可分为两大类:一类就是前面所说的最基本的比特差错,而另一类传输差错则更复杂些,这就是收到的帧并没有出现比特差错,但却出现了帧丢失、帧重复或帧失序。
在接收端把接收到的数据以LM2596S-12帧为单位进行CRC检验:把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到的余数尺。
如果在传输过程中无差错,那么经过CRC检验后得出的余数R肯定是O(读者可以自己验算一下。被除数现在是101001001,而除数是尸- 1101,看余数尺是否为0)。
但如果出现误码,那么余数R仍等于零的概率是非常非常小的(这可以通过不太复杂的概率计算得出,例如,可参考[TANE11])。
总之,在接收端对收到的每一帧经过CRC检验后,有以下两种情况:
(1)若得出的余数R-O,则判定这个帧没有差错,就接受(accept)。
(2)若余数R≠0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差错),就丢弃。
一种较方便的方法是用多项式来表示循环冗余检验过程。在上面的例子中,用多项式P∞=∥+ X2 +1表示上面的除数P=1101<最高位对应于X3,最低位对应于P)。多项式P()O称为生成多项式。现在广泛使用的生成多项式P(X)有以下几种:
在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。
从以上的讨论不难看出,如果我们在传送数据时不以帧为单位来传送,那么就无法加入冗余码以进行差错检验。因此,如果要在数据链路层进行差错检验,就必须把数据划分为帧,每一帧都加上冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。
最后再强调一下,在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受,即:“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。以上所述的可以近似地表述为(通常都是这样认为):“凡是接收端数据链路层揍受的帧均无差错”。
请注意,我们现在并没有要求数据链路层向网络层提供“可靠传输”的服务。所谓“可靠传输”就是:数据链路层的发送端发送什么,在接收端就收到什么。传输差错可分为两大类:一类就是前面所说的最基本的比特差错,而另一类传输差错则更复杂些,这就是收到的帧并没有出现比特差错,但却出现了帧丢失、帧重复或帧失序。