zoukankan      html  css  js  c++  java
  • TCP/IP bad check sum

    wireshark/tcpdump 抓到的包, 总会显示本机发送的 TCP包(和/或 IP包)校验和错误。这是由于现在网卡硬件会自动填充校验和以减轻CPU负荷,所以操作系统在TCP包的校验和中随便填充一个数字,留给网卡硬件去填充。而wireshark抓包是属于系统层,所以抓到的往外发发的TCP包校验值总是错的。
     
    下面是intel官方对网卡驱动参数的解释:
     
    IPv4 校验和分载 允许适配器验证接收到信息包(Rx) 上的 TCP/IP 校验和,并计算被传输的信息包 (Tx) 上的校验和 。IPv4 校验和分载在安装了 Windows* 设备管理器英特尔® PROSet 的情况下在 TCP/IP 分载选项 属性下配置。启用此功能可以提高 TCP/IP 传输性能,并降低 CPU 使用量。禁用分载时,操作系统将计算并验证 TCP/IP 校验和。
     
     
    TCP 校验和分载传输 (IPv4)  TCP 校验和分载传输 (IPv6) 使适配器能计算 (Tx) 或验证 (Rx) 数据包的 TCP 校验和。TCP 校验和分载在安装了 Windows* 设备管理器英特尔® PROSet 的情况下在 TCP/IP 分载选项 属性下配置。此功能可提高性能,并降低 CPU 使用量。启用分载时,适配器进行计算或校验操作系统的校验和。
     
    解决办法:
    1)如果对抓包,要求很高,可以对禁用掉硬件自动计算校验和。让操作系统去计算即可。
    windows下:
     
    linux下:
    查看
    [root@localhost src]# ethtool -k eth0
    Offload parameters for eth0:
    Cannot get device udp large send offload settings: Operation not supported
    rx-checksumming: on
    tx-checksumming: on
    scatter-gather: on
    tcp segmentation offload: on
    udp fragmentation offload: off
    generic segmentation offload: off
    generic-receive-offload: off
     
    关闭
    [root@localhost src]# ethtool -K eth0 tx off rx off
    2)抓到包后使用工具 tcprewrite 重新计算 TCP/IP 包校验和
    tcprewrite -C -i input.pcap -o output.pcap
  • 相关阅读:
    Bash Shell 快捷键
    vector-swap
    vector-swap
    vector-size
    Android网络篇
    应用 Valgrind 发现 Linux 程序的内存问题
    树莓派初学者?先做做这十个项目吧
    树莓派 (为学习计算机编程教育设计的一种微型电脑)
    微软windows10 IOT支持PI3之后,树莓派3更是将获得Android官方原生支持
    Linux基金会宣布JS Foundation基金会成立 前身为jQuery团队
  • 原文地址:https://www.cnblogs.com/JesseFang/p/3106019.html
Copyright © 2011-2022 走看看