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
发布评论