2024年6月14日发(作者:)

FCS(Frame Check Sequence)帧

校验序列

帧检验序列即 frame check sequence

让接收帧的网卡或接口判断是否发生了错误。判断过程如下:发送网卡利

用多项式计算,称循环冗余校验(CRC),将计算结果写入FCS字段,接收方收

到这个帧,对其做相同的CRC计算。如果计算结果与接收的FCS字段相同,

则帧没有发生错误。如果不同,接收方就相信帧肯定发生了错误,并丢弃这个帧。

侦校验:

Frame Check Sequence:

这个字段包括4字节循环冗余校检码(CRC)用于检查错误.当一个原站组装一个

MAC帧,他在所有字节(从Destination MAC Address到Pad字段)执行一个CRC

计算,原站将计算的结果放入这个字段,并作为帧的一部分传输给目的站, 当

帧被目的站接受后,目的站进行同样的校检,如果校检和同字段中的值不同,目

的站将认为在传输中发生错误并丢弃这个帧.

***********************************************************************

***********************************************************************

***************

提供了三种实现方法。

方法一:按位计算CRC32校验码。

方法二:使用非翻转的查找表进行快速计算,按字节计算CRC32

校验码。但计算过程中有位翻转操作,计算速度慢。

方法三:使用翻转的查找表进行快速计算,按字节计算CRC校

验码。速度极快。

[cpp] view plaincopy

1. #include

2. #include

3. #include

4.

5.

6.

7.

8. #define alt_8 char

9. #define alt_u8 unsigned char

10. #define alt_32 int

11. #define alt_u32 unsigned int

12. #define alt_64 long long

13. #define alt_u64 unsigned long long

14.

15.

16. //位翻转函数

17. alt_u64 Reflect(alt_u64 ref,alt_u8 ch)

18. {

19. int i;

20. alt_u64 value = 0;

21. for( i = 1; i < ( ch + 1 ); i++ )

22. {

23. if( ref & 1 )

24. value |= 1 << ( ch - i );

25. ref >>= 1;

26. }

27. return value;

28. }

29.

30.

31. //标准的CRC32多项式

32. #define poly 0x04C11DB7