如果我打开一个 TCP 连接但不发送数据,空闲超时似乎要长得多,为什么?
If I open a TCP connection and don't send data, idle timeout seems to much longer, why?
我有两台服务器,一台提供 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
等待请求开始时出现相当长的超时并不少见。这对于在请求之间保持 TCP 连接有效以加快对后续请求的响应非常有用。保持 TCP 连接是有意义的,以备不时之需。
但是,在请求中间暂停是不常见的。这更有可能表明连接工作不正常。如果客户不打算发送整个请求,为什么他们会开始发送请求?此外,服务器正在使用更多资源,因为它必须存储已发送的请求部分。所以在这里使用更短的超时是有意义的。
总而言之,在新的 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
等待请求开始时出现相当长的超时并不少见。这对于在请求之间保持 TCP 连接有效以加快对后续请求的响应非常有用。保持 TCP 连接是有意义的,以备不时之需。
但是,在请求中间暂停是不常见的。这更有可能表明连接工作不正常。如果客户不打算发送整个请求,为什么他们会开始发送请求?此外,服务器正在使用更多资源,因为它必须存储已发送的请求部分。所以在这里使用更短的超时是有意义的。
总而言之,在新的 TCP 连接的情况下,您将获得“等待请求开始”超时,将其设置得相当长是有意义的。在部分任务的情况下,您会遇到“在请求中间停止”超时,保持相当短的时间是有意义的。