一尘不染

禁用TCP延迟的ACK

linux

我有一个应用程序可以通过TCP接收相对稀疏的流量,而没有应用程序级别的响应。我认为TCP堆栈正在发送延迟的ACK(基于对网络数据包捕获的浏览)。建议为单个套接字禁用网络堆栈中的延迟ACK的推荐方法是什么?我看过了TCP_QUICKACK,但看来堆栈还是会改变我的脚下。

它运行在Linux 2.6内核上,我不担心可移植性。


阅读 687

收藏
2020-06-03

共1个答案

一尘不染

你可以setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int))以后每次recv执行。看来TCP_QUICKACK只有在发送或接收数据时才复位;如果您不发送任何数据,则只有在接收到数据后它才会被重置,在这种情况下,您只需重新设置即可。

您可以在第14 个字段中进行检查/proc/net/tcp;如果不是1,则应立即发送ACK …如果我正确读取了TCP代码。(我也不是专家。)

2020-06-03