注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

TCP/IP校验和计算以及一些想法  

2014-03-25 09:14:30|  分类: 原理分析 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

参考:http://www.cnblogs.com/xy-kidult/archive/2013/05/06/3063800.html

设置检验和或许有许多方法,目前,最为流行的一种方法是这样的。首先在发送端计算检验和,将其与IP数据包一起发出,接收端对该数据包头部进行相应的处理,得到检验和大小,从而判断数据包头部是否完整。

    检验和算法可以分成两步来实现。首先在发送端,有以下三步:

  1. 把即将发送的IP头部中的检验和设置为0,然后以16位为一个间隔,将IP头部分成许多个16位的字段;
  2. 将第1步获得的所有字段进行二进制相加求和;
  3. 把最终结果取反,就得到检验和,再将该值填充到IP头部。

    其次在接收端,也有相应的三步:

  1. 把接收到的IP头部分成16位一个间隔的字段集合;
  2. 所有字段进行二进制相加求和;
  3. 将最终结果取反,判断该结果是否为0,若为0,则说明检验和正确,若不为0,则协议栈会丢掉这个包。(你没看错,这一步还是要取反)

 

昨天测试的ARP欺骗冒名顶替那个程序有个问题就是效率低下,导致速度很慢很慢以至于没法实用。

一个问题是引用的tcp.h里面计算tcp检验和的函数里面用了动态函数,而且还没释放,导致内存泄漏。

另一个问题就是用了太多的内存复制操作,导致速度变慢。

解决方法:

最好的方法就是利用原有的检验和,因为改变的只是MAC和IP这几个数据。而MAC的改变不会引起

检验和的变化,只有IP的改变会引起IP头里面的检验和以及TCP里面的检验和错误。

通过上面接收端校验检验和的原理,我们可以计算几个改变的数据然后修正原有的检验和即可,这样的

效率是最高的。

昨天晚上用IRIS修改了IP最后一个字节试了下,它的检查和与IP最后一个字节呈相反增长,也就是

你IP增加1他检查和减少1,这个规律可以用来简化检验和计算,但是没有理论上的论证,因为奇偶字节

是影响检查和计算的,还有进位也是影响检查和的。

如果上面不行的话,那就要改变TCP头的检验和算法,要减少内存复制操作,这样也能提高效率。

 

其他参考:

TCP头校验和计算算法详解

TCP校验和计算以及伪真报头--转

IP/UDP/TCP/ICMP的校验和
TCP校验和
  评论这张
 
阅读(92)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017