夜雨聆风学习资料网

ARTICLE · 1008889

数据包校验和硬件卸载

数据包校验和硬件卸载
TX Checksum Offload / RX Checksum Offload,是网卡硬件卸载的基础能力,常和 TSO/GSO、LRO/GRO 配套,ethtool 里对应的标识:tx-checksumming、rx-checksumming,支持IPv4/IPv6。ethtool的显示如下,注意不同的网卡支持能力可能不同,这里显示的也会存在差异。其中[fixed]代表不支持。

接收侧 RX Checksum Offload

  1. 网卡收到报文,硬件直接计算 IP/TCP/UDP 校验和;
  2. 校验正确:标记该包校验和 OK,把报文上交内核,内核不再重算校验和;
  3. 校验错误:打上校验错误标记,交给内核,内核会丢弃 / 计数错误包
接下来我们测试一下rx checksum功能。图1为关闭rx checksum功能
图1

从compute1,用scapy发送ipv4 checksum错误的报文,见图2。

图2

对端发送了10000个报文,在本端关闭rx校验和后,报文统计到了rx_packets中,见图3。

图3

开启rx checksum,从compute1,同上,用scapy发送ipv4 checksum错误的报文。我们看到10000个ip校验和错误报文都统计到rx_csum_offload_errors。见图4.

图4

rx checksum功能,支持ip, tcp,udp,sctp报文的校验和统计,协议上支持ipv4和ipv6,不再一一演示。注意不同厂商的网卡,可能支持程度不一样。

TX Checksum Offload(发送端校验和卸载)是一种性能优化技术,它将发送数据包时计算和插入校验和的任务从 CPU 转移到网卡(NIC)硬件上完成。

但它有一个常见的副作用需要注意:抓包时可能显示"错误"的校验和。像 tcpdump 和 Wireshark 这类工具是在网卡填入最终校验和之前捕获数据包的。这就是为什么你经常在本机捕获的出站流量中看到 TCP 校验和错误——它们通常是误报,并非真正的错误。

接下来验证一下,我们开启两端的tx checksum功能,发送tcp报文,图5为发送端的抓包截图,可以看到,tcp 的checksum字段,显示的是错误的值。此处要注意,如果是老版的wireshark,这个字段错误的话,这一行会变红。新版本的wireshark,不会标红,会在后面用小括号标出,校验和应该是多少。

图5

图6,是在接收端收到的同一个报文,可以看到这个报文的校验和字段是0xf905,与图5中的信息一致。
图6
同样,tx checksum也支持udp和sctp,支持ipv4和ipv6协议栈。看厂商的实现能力。

相关学习资料