如何在 AWS 网络负载均衡器上保持 TCP 连接处于活动状态



架构:
我们有一堆物联网设备通过AWS网络负载均衡器(NLB(连接到我们的后端服务器。 这是一个双向通道(不是请求响应样式,而是从任何一方传递到另一方的消息(。

目标:
如何在不活动期间保持连接(NLB的两端(处于活动状态。

描述: 客户端经常进入非活动模式,并且不向服务器发送(或接收(任何内容。如果此状态持续超过 350 秒(NLB 的连接空闲超时值(,则 LB 将以静默方式终止连接。这很糟糕,因为我们到处都看到很多RST数据包。

问题:

  1. 我知道SO_KEEPALIVE功能,可以在我们的后端服务器上启用它。这使后端服务器和 NLB 之间的连接保持活动状态。但是客户呢?NLB 是否将 TCP 保持活动状态数据包转发给另一方?(这里它说它没有(。如果没有,如何保持客户端连接打开?(在他们那一刻,我想发送一条空消息来保持连接。
  2. 此行为是特定于 AWS NLB 还是负载均衡器通常以这种方式工作?

AWS 文档说 NLB TCP 侦听器能够通过 TCP 保持活动数据包保持连接活动:链接

对于 TCP 侦听器,客户端或目标可以使用 TCP 保持连接数据包来重置空闲超时。

根据我的测试,客户端正在接收服务器发送的TCP保持活动状态数据包并正确响应。 服务器不会中断连接,这意味着它从客户端接收响应。 这意味着 NLB TCP 侦听器实际上转发保持活动状态的数据包。

基于相同的文档,NLB TLS 侦听器不应对 TCP 保持活动状态数据包做出相同的反应。

TLS 侦听器不支持 TCP 保持连接数据包。

但是当 Wireshark 显示通过 TLS 侦听器连接的客户端上收到的保持活动数据包时,实际测试结果让我感到震惊。 我之前在 2 个月前进行的测试结果与我现在所经历的不符,我认为行为可能会改变。 (以前,即使在客户端以意外方式不可用后,服务器也会保持连接(

不是答案,只是为了记录我的发现/所做的事情:

  1. NELB 不转发保持活动状态的数据包。这意味着您必须在服务器和客户端上启用它们。
  2. NELB 的超时无法更改。它是 350 秒
  3. 我找不到任何方法来伪造一个空的TCP数据包来欺骗LB将其转发到LB的另一端。

最后,我们在应用层实现了保持活动状态功能(定期向客户端发送空消息(。

相关内容

最新更新