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
  • 相关阅读:
    Navicat连接mysql1862错误your password has expired.To log in you must change itusing a client that supports expired passwords
    机器学习听课 | 目录 | 00
    Git实战 | 其他 | 04
    练手SQL数据 | 目录 | 00
    练手SQL数据 | 区域自关联 | 02
    蓝桥杯训练 | 数学和简单DP | 03
    Python基础 | linux下Python的安装 | 03
    Java基础 | 目录 | 00
    初级-MySQL经典练习题及答案,常用SQL语句练习50题
    MYSQL必知必会-SQL语句查询
  • 原文地址:https://www.cnblogs.com/JesseFang/p/3106019.html
Copyright © 2011-2022 走看看