ip数据报首部校验和的计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ip数据报首部校验和的计算相关的知识,希望对你有一定的参考价值。
ip数据报首部校验和的计算
网络层间的数据传送特点是:
不可靠: 分组可能丢失,乱序等,不做确认;
无连接: 每个分组都独立对待;
尽力投递: 不随意放弃分组;
点到点。
因为在传输过程中会受到很多的干扰,ip数据包会发生改变,这时接受着收到这个ip数据包毫无意义。在这种情况下应把这样的数据包丢掉。那么怎样确定数据包发生了变化,这就用到了首部校验和。就是发送者把Ip首部的校验和外的数据全部相加再取反再放到校验和位置(如果高位有溢出的就把溢出数据加到低位)。接收者只要把整个ip数据报首部数据相加,判断是否为0,如果是0就收下,如果不是的话就扔提。
具体实现的代码是:
/*求校验和函数*/
USHORT CheckSum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while (size > 1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if (size)
{
cksum += *(UCHAR*)buffer;
}
/*对每个16bit进行二进制反码求和*/
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
不可靠: 分组可能丢失,乱序等,不做确认;
无连接: 每个分组都独立对待;
尽力投递: 不随意放弃分组;
点到点。
以上是关于ip数据报首部校验和的计算的主要内容,如果未能解决你的问题,请参考以下文章