ChinaUnix.net
相关文章推荐:

IP校验和

原文见my blog:http://blog.chinaunix.net/u3/94771/showart.php?id=1993908 ip校验详解 一、校验算法 之前一直只知道ip校验算法反码求相关的,但具体细节不清楚,今天了解了下。 ip校验主要是用来保证数据(ip包头)的完整性的.它用的算法非常简单,就是反码求校验.需要注意的是反码求又叫1的补码(one'scomplement),而2的补码就是我们通常说的补码求了.校验算法具体如下. 1、发送方 i)将校验字段置为0,然后...

by bripengandre - C/C++ - 2009-07-13 10:23:34 阅读(1558) 回复(2)

相关讨论

ip校验详解 一、 校验算法 之前一直只知道ip校验算法反码求相关的,但具体细节不清楚,今天了解了下。 ip校验主要是用来保证数据(ip包头)的完整性的.它用的算法非常简单,就是反码求校验.需要注意的是反码求又叫1的补码(one's complement),而2的补码就是我们通常说的补码求了.校验算法具体如下. 1、发送方 i)将校验字段置为0,然后将ip包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填...

by bripengandre - 网络技术文档中心 - 2009-07-12 13:57:05 阅读(1038) 回复(0)

原文见my blog:http://blog.chinaunix.net/u3/94771/showart.php?id=1993908 ip校验详解 一、校验算法 之前一直只知道ip校验算法反码求相关的,但具体细节不清楚,今天了解了下。 ip校验主要是用来保证数据(ip包头)的完整性的.它用的算法非常简单,就是反码求校验.需要注意的是反码求又叫1的补码(one'scomplement),而2的补码就是我们通常说的补码求了.校验算法具体如下. 1、发送方 i)将校验字段置为0,然后...

by bripengandre - 网络技术 - 2012-04-21 20:03:27 阅读(23880) 回复(12)

unsigned short csum(unsigned char *addr, int count) { /* Compute Internet Checksum for "count" bytes * beginning at location "addr". */ register long sum = 0; while( count > 1 ) { /* This is the inner loop */ sum += * (unsigned short) addr++; count -= 2; } /* Add left-over byte, if any */ if( c...

by LZHWWY - 网络技术文档中心 - 2009-11-02 23:26:39 阅读(1614) 回复(0)

为了计算一份数据报的ip检验,首先把检验字段置为0。然后,对首部中每个16bit进行二进制反码求(整个首部看成是由一串16bit的字组成),结果存在检验字段中。当收到一份ip数据报后,同样对首部中每个16bit进行二进制反码的求。由于接受方在计算过程中包含了发送方存在首部中的校验。因此,如果首部在传输过程中没有发生任何差错,那么接受方计算的结果应该为全1。如果结果不是全1(即检验错误),那么ip就丢弃收到的...

by rainballdh - C/C++ - 2008-10-09 15:49:41 阅读(1780) 回复(3)

本帖最后由 proudlife80s 于 2010-10-29 15:24 编辑 这是我学计算机网络的时候老师发给我的,方便大家了解ip数据报具体的算法,是挺不错的读物~~ ip数据报的校验算法 在发送数据时,为了计算ip数据报的校验。应该按如下步骤: (1) 把ip数据报的校验字段置为0。 (2) 把首部看成以16位为单位的数字组成,依次进行二进制反码求 (3) 把得到的结果存入校验字段中。 在接收数据时,计算数据报的校验相对简单,按如下步...

by proudlife80s - 网络技术 - 2010-10-29 15:23:09 阅读(1933) 回复(0)

在发送数据时,为了计算数ip据报的校验。应该按如下步骤: (1) 把ip数据报的校验字段置为0。 (2) 把首部看成以16位为单位的数字组成,依次进行二进制反码求 (3) 把得到的结果存入校验字段中。 在接收数据时,计算数据报的校验相对简单,按如下步骤: (1)把首部看成以16位为单位的数字组成,依次进行二进制反码求,包括校验字段。 (2)检查计算出的校验的结果是否等于零。 (3)[color="#800000"]如果等于零,说...

by rainballdh - Linux文档专区 - 2010-01-21 15:09:48 阅读(978) 回复(0)

看了一个源代码,里面有个关于tcp/ip首部校验的算法,不太明白啊,望大家解释下原理 tcp->check=check_sum((unsigned short *)tcp,sizeof(struct tcphdr)); unsigned short check_sum(unsigned short * addr, int len) { register int nleft=len; register int sum=0; register short *w=addr; short answer=0; while(nleft>1) { sum=sum+*w++; nleft=nleft-2; } if(nleft==1) { ...

by wheniwasyoung - C/C++ - 2009-09-04 23:27:06 阅读(5994) 回复(8)

将分组划分为K部分,每部分都是n比特长 用反码算术运算将所有这些部分相加 将最终结果取反码就得出检验 01000101 00000000 00000000 00011100 00000011 10000110 -------------------------------- 结果是什么?

by xi2008wang - C/C++ - 2007-12-06 22:44:50 阅读(1142) 回复(0)

怎么个计算方法? 我查了一下,但是理解上有点问题. 大家给详细解释下下。 是不是把数据中每个16相加,然后赋值给一个32位数. 然后对该32位数高位+低位(16位), 然后求反呢? unsigned short csum(unsigned char *addr, int count) {            /* Compute Internet Checksum for "count" bytes             *...

by guhan010 - C/C++ - 2007-11-06 12:52:57 阅读(6873) 回复(5)

unsigned short cksum (struct ip *ip, int len) { long sum = 0; /* assume 32 bit long, 16 bit short */ while ( len >1 ) { sum += *((unsigned short *) ip)++; if (sum & 8x00000000) /* if high-order bit set, fold */ sum = (sum & 0xFFFF) + (sum>> 16) ; len -= 2; } if ( len ) /* take care of left over byte */ sum +...

by shenfeng128 - C/C++ - 2013-03-27 16:46:26 阅读(1990) 回复(2)