Debian12默认启用了Nagle‘s Algorithm,我的net 7 c# 程序在采用httpclient请求httplisstener 的服务器的时候,总是发送大约40ms 的延时。经过几天的排查,确认是linux系统存在 TCP 的 ACK延迟确认。网络资料显示:/proc/sys/net/ipv4 下 有 tcp_no_delay 的设定,而我确认了Debian12 不存在此文件。
想求助,我还可以通过其他方式关闭 ACK确认吗?
Debian12默认启用了Nagle‘s Algorithm,我的net 7 c# 程序在采用httpclient请求httplisstener 的服务器的时候,总是发送大约40ms 的延时。经过几天的排查,确认是linux系统存在 TCP 的 ACK延迟确认。网络资料显示:/proc/sys/net/ipv4 下 有 tcp_no_delay 的设定,而我确认了Debian12 不存在此文件。
想求助,我还可以通过其他方式关闭 ACK确认吗?
设置 TCP_NODELAY
和 TCP_QUICKACK
选项啦。
TCP_NO_DELAY 是一个 sockopt,通过调用setsockopt()
设置一下就好了。
因为某些原因,我不能从代码里面改 Socket 相关参数。有没有 从系统层面 统一设置的可能性?
我在网络上百度寻找的答案基本也是设置 TCP_NODELAY
和 TCP_QUICKACK
,但是我不确定这2个选项是否是针对Sokcet的设定?还是debian12 的系统上的设定?这点我有些不清楚
setsockopt 啦。文档见 man 7 tcp
。
大概没有,除非你改内核。代码的 bug 就该改代码解决啦(
我理解了。感谢了。