1,首先是校验错误的宏定义
/*
define checksum error flags
*/
#define
CSE_IP 0x01
#define
CSE_TCP 0x02
#define
CSE_UDP 0x04
#define
CSE_ICMP 0x08
#define
CSE_IGMP 0x10//Internet Group Management Protocol
2,接着是校验IP,TCP,UDP,ICMP的四个函数,四个全部为static inline的函数。我现在还不知道静态内联函数的好处,呵呵,在本文的最后我Google后再说明吧。
IP数据报的检验和:
为了计算一份数据报的I P检验和,首先把检验和字段置为0。然后,对首部中每个16 bit
进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当
收到一份I P数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过
程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,
那么接收方计算的结果应该为全1。
关于static inline的函数----------------------------------------------------------------
inline指示符指示编译器用函数体代码去替换函数调用,这种替换叫“联编扩展”(有时称为“联编”)联编扩展在更大的代码的潜在代价上减少函数调用的费用。