提问者:小点点

客户端向服务器发送延迟的FIN确认字符(〜500ms)


我有一个node. js客户端(10.177.62.7)从服务器(10.177.0.1)请求超文本传输协议rest服务的一些数据。客户端只是使用node.js http.request()方法(agent=false)。客户端在Ubuntu 11.10盒子上。

为什么客户端在475ms后发送FIN确认字符?为什么这么慢?他应该立即发送FIN确认字符。我有很多这样的情况。大约1%的整个流量是延迟FIN确认字符的请求。

客户端上的cpu空闲率约为99%,因此没有任何东西耗尽CPU。

如何调试这个?可能是什么?我需要调整任何sysctl选项吗?

屏幕截图第二列是数据包之间经过的时间。

链接到更大的图片。


共1个答案

匿名用户

此行为是RFC1122TCP堆栈的延迟确认字符功能。

通常你应该添加TCP_QUICKACK选项到LinuxTCP套接字禁用延迟确认字符,但我认为这是不明显的JavaScript Node. jsAPI(我只看到socket.setNoDelayTCP_NODELAY选项)。

所以你在堆栈上应用系统范围TCP更改的想法似乎很好,但是我没有发现与这个套接字选项行为匹配的sysctl。这是另一个完整的列表和解释。