---
title: TCP checksum优化
description: "TCP校验和（checksum）是一个端到端的校验和，由发送端计算，然后由接收端验证。其目的是发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错，则TCP段会被直接丢弃。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/tuningtip/kunpengtuning_12_0031.html
sourcePath: /source/zh/perftuning/tuningtip/kunpengtuning_12_0031.html
indexId: 0ef01b4fae7fce057a59e7cd13d7aa5002f660ed5e62967ec7aba769f6ed487358
---
# TCP checksum优化

#### 原理

TCP校验和（checksum）是一个端到端的校验和，由发送端计算，然后由接收端验证。其目的是发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错，则TCP段会被直接丢弃。

通常TCP checksum是由内核网络驱动来实现的，而且在5.6之前的内核版本是使用普通的算法实现。

部分网卡驱动是支持TCP校验和功能的，可以通过ethtool -k <网卡名称> | grep checksumming查看是否支持。

如果网卡驱动不支持，且内核态do_csum函数热点占用过高的情况下，可以通过修改内核并合入checksum优化算法来提升性能。

网络通信中do_csum占用过高时的热点函数图如下图1所示：

图1 do_csum占用过高时的热点函数图


#### 修改方式

5.6之前的内核可以通过合入checksum优化算法补丁(https://lore.kernel.org/linux-arm-kernel/44e00660247f8f39354ba8918071d6cff0d90612.1579106209.git.robin.murphy@arm.com/T/)提升性能，修改后需要重新编译内核（详情可参考内核源码编译安装(https://bbs.huaweicloud.com/forum/thread-24362-1-1.html)）。
