• 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
  • 相关阅读:
    员工管理系统————员工删除模块
    员工管理系统————员工管理模块
    员工管理系统————登陆验证模块
    员工管理系统————首页登陆模块
    为什么大多数编程语言中的数组都从0开始
    C/C++大数库简介
    一个比较全面的java随机数据生成工具包
    Linux环境下JDK/Eclipse一键安装脚本
    OOAD与UML笔记
    Cache模拟器(CacheSim)
  • 原文地址:https://www.cnblogs.com/JesseFang/p/3106019.html
Copyright © 2020-2023  润新知