社区
网络编程
帖子详情
关于IP校验算法的疑惑
leaber
2004-12-10 12:49:23
IP的校验算法:
置0把被校验的数据16位进行累加,然后取反码,若数据字节长度为奇数,则数据尾部补一个字节的0以凑成偶数。
但是实现代码对为奇数的情况,好象并没有补零,只是转为BYTE后累加。代码如下:
if( nleft==1)
{ *(unsigned char *)(&answer)=*(unsigned char *)w;
sum+=answer;
所以很困惑,为什么理论和实现不一致? 是不是理解错了。
请各位指点
...全文
113
4
打赏
收藏
关于IP校验算法的疑惑
IP的校验算法: 置0把被校验的数据16位进行累加,然后取反码,若数据字节长度为奇数,则数据尾部补一个字节的0以凑成偶数。 但是实现代码对为奇数的情况,好象并没有补零,只是转为BYTE后累加。代码如下: if( nleft==1) { *(unsigned char *)(&answer)=*(unsigned char *)w; sum+=answer; 所以很困惑,为什么理论和实现不一致? 是不是理解错了。 请各位指点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
leaber
2004-12-11
打赏
举报
回复
结帐了,自己搞清楚了。要考虑网络字节顺序, 所以最好还是自己抓包分析一下!
leaber
2004-12-10
打赏
举报
回复
顶一下。
leaber
2004-12-10
打赏
举报
回复
上面的也是一样的,并没有在后面补0来实现。难道是理论错误码了!
不过这样算出来的却是正确的。 真是想不明白..
Hendy_So
2004-12-10
打赏
举报
回复
经典的检验函数:
unsigned short checksum(USHORT *buffer,int size)
{
unsigned long cksum=0;
while(size>1)
{
cksum+=*buffer++;
size-=sizeof(unsigned short);
}
if(size)
cksum+=*buffer;
cksum=(cksum>>16)+(cksum & 0xffff);
cksum+=(cksum>>16);
return (unsigned short)(~cksum);
}
反码求和
校验
和
算法
本文深入探讨了ICMP协议中的
校验
和
算法
,解释了为何采用二进制反码求和而非直接求和或补码求和,以及在发送和接收数据包时如何计算
校验
和。同时对比了
IP
、ICMP、UDP和TCP报文头的
校验
和字段的不同作用范围。
校验
和的计算方法
本文详细介绍了
IP
、ICMP、UDP和TCP报文头中
校验
和字段的计算方法及其实现原理,重点阐述了二进制反码求和
算法
,并通过实例展示了
IP
头部
校验
和的具体计算过程。
c语言tcp
校验
和
算法
,
IP
、ICMP、UDP、TCP
校验
和
算法
分享
本文详细探讨了TCP/
IP
协议中
校验
和的计算方法,尤其是二进制反码求和的原理和优势。通过实例解释了反码求和如何避免依赖系统的字节序,并在计算和验证过程中提供便利。同时,文章指出,反码求和在
IP
报文传输过程中允许路由器仅更新变化的字段,提高效率。
IP
、ICMP、UDP、TCP
校验
和
算法
本文深入探讨了TCP/
IP
协议中
校验
和的计算方法,特别是16位字的二进制反码和的实现细节及其优点。文章通过示例解释了反码和的计算过程,并比较了它与原码和补码的不同之处。
TCP UDP
校验
算法
本文详细解释了
IP
、ICMP、UDP和TCP报文头
校验
和的计算方法,包括二进制反码求和的过程及其实现代码,并探讨了使用二进制反码求和的原因。
网络编程
18,356
社区成员
64,164
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章