Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164385
  • 博文数量: 24
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 237
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-08 14:48
文章分类

全部博文(24)

文章存档

2013年(21)

2012年(3)

我的朋友

分类: 网络与安全

2013-02-20 14:31:24

 这几天用Wireshark(以前叫Ethereal)抓包时发现很多包都有checksum error,后来随便归纳了一下,做个记录。
        通过计算checksum可以检验网络上传输的数据包(TCP/UDP)在传输中有没有出错,以前这个计算是有系统来做的,因此网络数据量大的时候就比较消耗CPU,现在很多网卡都可以自己计算这个值了,这样就减轻了CPU的负担,提高了网络性能。这样一来有时候某些抓到的数据包就会有checksum error,因为有的包还没经过网卡来处理,未计算checksum就被抓包工具截获了,这个时候就会显示checksum error,实际上这个就是假error了。但是这种情况只是在某些情况下会出现,如何判断到底是不是假error,从2个方面来验证:首先看你的网络功能是否正常,比如你http访问一个网站,抓包工具在抓本机的http包,如果你能正常的完全打开这个网站,并确定这个网站没有被浏览器缓存,但是抓包工具上显示的http包有checksum error,那就是假error。其次你可以在同一网络的其他节点上抓你自己机器上的数据包,这样假error就不会存在了,因为你在其他节点上抓的(非本机)数据包是一定经过了机器网卡处理的,就是说checksum已经计算过了,如果这个时候还有checksum error,那就是真有丢包了。
         关掉网卡的自身的checksum计算也可以避免这个问题,但是这样网络性能会降低,因为所有的checksum计算都会丢给系统的CPU去做。
         Windows平台下关掉checksum计算:设备管理器->网卡配置->高级,在这个对话框里面就可以设置RX checksum Offload/TX checksum offload。
         UNIX/Linux平台下关掉checksum计算:/sbin/ethtool -K(大写) eth0(网卡名) rx off tx off。查看网卡该选项是否打开:/sbin/ethtool -k(小写) eth0(网卡名)。
阅读(3070) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~