客户端发送延迟FIN ACK(〜500ms的)到服务器(Client sends delayed F

2019-06-26 15:17发布

我有一个客户端的Node.js(10.177.62.7)从服务器(10.177.0.1)请求从http休息服务的一些数据。 客户端被简单地使用的node.js http.request()方法(代理人= FALSE)。 客户端是在Ubuntu 11.10盒。

为什么客户端发送FIN ACK 475ms后? 为何这么慢? 他应该立即发送FIN ACK。 我有很多这样的情况。 约1%全流量与延迟FIN ACK请求。

在客户端上的CPU空闲大约是99%,所以没有什么是排水CPU。

如何调试呢? 会是什么呢? 是否有我需要调整任何sysctl的选择吗?

截图上的第2列是数据包之间所经过的时间。

链接到更大的图片。

Answer 1:

此行为的延迟确认功能RFC1122 TCP堆栈 。

通常你应该将添加TCP_QUICKACK选项,你的Linux TCP套接字来禁用延迟确认 ,但我想是不是用JavaScript的Node.js API明显(我只看到socket.setNoDelayTCP_NODELAY选项)。

所以,你的想法应用在TCP堆栈系统范围内的变化似乎不错,但我没有发现sysctl匹配此套接字选项行为。 这里是另一个与解释完整列表 。



文章来源: Client sends delayed FIN ACK (~500ms) to server