这里一个简单的网络校验,让我感到很迷惑:
USHORT checksum(USHORT *buffer, int size)
|
校验的原理是:把各个字段的值相加,然后对他的和进行取反!假设和为SUM,则结果为 ~SUN
一般书上说:如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该全是1.
其实就是在收到数据后对各个字段进行相加,然后和校验值相加,这里假设为SUM_RECV。如果没有错误,应该和前面的~SUM相等。他们相加的话各字段自然为1
UDP中,参与计算CHEKCSUM的数据包括三部分: UDP头部+数据部分+(4byte源IP地址 + 4byte目的IP地址 + 0x00 + 1byte协议 + UDP长度(2byte))