首页 > 解决方案 > 如果我打开 TCP 连接但不发送数据,空闲超时似乎要长得多,为什么?

问题描述

我有两台服务器,一台服务 HTTP,另一台服务 HTTPS。

我打开了到 HTTP 服务器的 TCP 连接

nc http.server 80

它保持打开很长时间,我不得不CTRL + C。我可以验证使用打开和关闭的连接tcpdump

但是如果我发送一个HTTP请求,连接会在空闲10s后关闭,我也可以看到服务器发起了FIN握手。

GET / HTTP1.1
Host: http.server

我对 HTTPS 服务器做了同样的事情

openssl s_client -connect https.server:443 -servername https.server

类似的事情发生了,如果我不发送任何请求,连接将打开很长时间,一旦我发送请求,连接将在 10 秒后关闭。

所以我的问题是你如何解释这种行为?我只知道两台服务器都有 HAProxy 设置。

标签: tcpconnectiontls1.2haproxy

解决方案


在等待请求开始时有相当长的超时时间并不少见。这对于保持请求之间的 TCP 连接活动以加快对后续请求的响应非常有用。保持 TCP 连接以防万一您很快需要它是有意义的。

但是,在请求中间暂停是不常见的。这更有可能表明连接无法正常工作。如果他们不打算发送整个请求,为什么客户端会开始发送请求?此外,服务器正在使用更多资源,因为它必须存储已发送的请求部分。所以在这里使用更短的超时是有意义的。

总而言之,在新的 TCP 连接的情况下,您将获得“等待请求开始”超时,将其设置得相当长是有意义的。在部分任务的情况下,您将获得“在请求中间停止”超时,保持相当短是有意义的。


推荐阅读