阅读:1525回复:5
各位大虾帮忙看一下这个计算tcp校验和的函数到底行不行啊?
short checksum(short *buffer, int size)
{ unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(short); } if(size ) { cksum += *(char*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16); return (short)(~cksum); } 用这个函数计算ip校验和正确,但一计算tcp校验和就出问题。计算的结果总是和原始的包的校验和不一样。在计算前我一将tcp得校验和设为0了。谢谢了! |
|
沙发#
发布于:2007-10-15 23:06
函数没问题,你的做法有问题!计算TCP的校验和,还要算上伪TCP头才行的。。具体的,你查一下文档。或者去看那本老外的<windows网络编程>
|
|
|
板凳#
发布于:2007-10-28 18:22
两个函数不一样
|
|
|
地板#
发布于:2007-12-27 15:09
tcp头+伪头 是32字节 你如果光算tcp头 是不对的
tcp/udp算校验 都得加上 伪头 |
|
地下室#
发布于:2007-12-27 22:03
引用第3楼yellowzzp于2007-12-27 15:09发表的 : UDP不用加伪头计算的 |
|
|
5楼#
发布于:2007-12-29 10:32
我刚刚去看了 tcp/ip详解 验证了下 11章里面说了得+啊 不过校验是可选的
|
|