校验和(Checksum)或称检查和,通常用于对数据块的校验,它把数据块中的每一个字节都按二进制加法求和,然后把所求得的和作为监督位。
由于加法求和所得的值可能超出1字节,因此就有各种变通方法,如扩大监督位所占的字节数,这样就有1字节校验和、2字节校验和、3字节校验和之分。但是,扩大监督位所占的字节数并不能解决根本问题。因此,在各字节校验和的基础上又有下面两种方法。
1)按模加,不考虑高位的进位。以2字节校验和为例,加法所得的和不会超过65535,即以65535为模进行加法。
2)循环进位,把高位的进位当做最低位再加进去。
下面以传送字符串“CA”的ASCII码为例,说明校验和的形成方法。例中采用1字节校验和、循环进位法。
校验和方法是因特网网络协议TCP/IP使用的校验方法,不过采用了一些变通处理。IP数据报、TCP报文段和UDP包均采用16位相加,循环进位,其和再取反的方法。(www.daowen.com)
IP数据报的格式如图3-4所示,各字段的含义这里不作介绍。不包括数据字段的其他所有字段组成了IP数据报的首部。为方便计算,首部校验和字段的初始值先设置为0,然后对整个首部求和,不包括数据字段。计算方法是将首部按16bit一组(将整个首部看成是由一串16bit的字组成的)进行二进制求和,采用循环进位,最后所得的结果取反后放入16位的首部校验和字段中。结果取反的好处是,接收方收到IP数据报后,对其首部进行校验和计算,结果为0则正确,结果不为0则错误。处理器判断0要比两个数的比较运算快捷,尽管微不足道,但对路由器的性能提高有些帮助,因为每个路由器收到IP数据报后都要进行校验和运算,而路由器是网络的瓶颈。
图3-4 IP数据报中的首部采用校验和进行校验
计算IP数据报校验和的程序实例如下。IP首部的长度不固定,而且可能不是16bit的整数倍,实际长度由首部长度字段给出,在程序中用size表示。整个IP数据报放在由指针buffer指向的缓冲区。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。