概念定义
传统发文件要把数据两次穿过用户空间:内核页缓存到用户缓冲、用户缓冲再回套接字缓冲。零拷贝把搬运交给内核——描述符进、字节动——从每次发送里删掉两次复制与两个上下文切换。
工作机制
sendfile 在内核内于输入文件描述符与输出套接字间复制;splice 借管道在两个描述符间移动数据;mmap 把文件页映射进地址空间,应用无需显式复制即可读;kTLS 把密钥装进内核,加密直接作用于内核驻留数据。
使用场景
静态资源分发、日志复制、高吞吐批量传输。用 strace 与 perf 计数度量:每字节复制数下降会表现为 sys 时间骤降。
常见误区
“零拷贝消除一切复制”过头了:它消的是用户空间往返,校验与加密阶段照样碰数据。收益出现在大块顺序发送,小而碎的传输反付调用开销。用户态 TLS 历史上强制复制回用户空间——kTLS 解决了它,但密钥生命周期与密码套件支持各异;压缩管线与零拷贝组合时须实测压缩器是否把复制又加了回来。