IP Header Checksum计算c实现

发布时间:2017-6-29 10:06:48编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"IP Header Checksum计算c实现",主要涉及到IP Header Checksum计算c实现方面的内容,对于IP Header Checksum计算c实现感兴趣的同学可以参考一下。

原文连接 http://blog.csdn.net/yhangleo/article/details/8508003


一直有疑问,计算checksum的时候 ,自身算不算进去计算,下面的文章告诉你


关于IP Header Checksum的计算在RFC791中有比较完整的描叙,

 Header Checksum: 16 bits

A checksum on the header only. Since some header fields change

(e.g., time to live), this is recomputed and verified at each point

that the internet header is processed.


The checksum algorithm is:


The checksum field is the 16 bit one's complement of the one's

complement sum of all 16 bit words in the header. For purposes of

computing the checksum, the value of the checksum field is zero.


This is a simple to compute checksum and experimental evidence

indicates it is adequate, but it is provisional and may be replaced

by a CRC procedure, depending on further experience.


大致意义如下:

Checksum只是和IP头相关的,当头中的数据被改变时才需要重新计算Checksum。

  Checksum是IP头中,第0位开始所有16位数据的和。在计算前需要将Checksum本身的值设置为0。


代码:

[cpp] view plain copy
  1. _Int16 GetIpCheckSum( Byte *ptr, int size)  
  2. {  
  3.     int cksum = 0;  
  4.     int index = 0;  
  5.       
  6.     *(ptr + 10) = 0;  
  7.     *(ptr + 11) = 0;  
  8.   
  9.     if(size % 2 != 0)  
  10.         return 0;  
  11.       
  12.     while(index < size)  
  13.     {          
  14.         cksum += *(ptr + index + 1);  
  15.         cksum += *(ptr + index) << 8;  
  16.   
  17.         index += 2;  
  18.     }  
  19.   
  20.     while(cksum > 0xffff)  
  21.     {  
  22.         cksum = (cksum >> 16) + (cksum & 0xffff);  
  23.     }  
  24.     return ~cksum;  
  25. }  

ps:发送前需要将结果转换为网络序


上一篇:OpenGL ES3.0 《学习笔记 六》 Vertex Attributes, Vertex Arrays, and Buffer Objects
下一篇:Spring 集成 Axis2 1.7.5

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款