【问题标题】:How to keep TCP connections alive on AWS network loadbalancer如何在 AWS 网络负载均衡器上保持 TCP 连接处于活动状态
【发布时间】:2020-02-07 20:57:56
【问题描述】:

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

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

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

问题:

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

【问题讨论】:

    标签: tcp amazon-elb aws-load-balancer


    【解决方案1】:

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

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

    最后,我们在应用层实现了keep alive特性(周期性地向客户端发送一条空消息。)

    【讨论】:

      【解决方案2】:

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

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

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

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

      TLS 侦听器不支持 TCP keepalive 数据包。

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

      【讨论】:

        猜你喜欢
        • 2019-09-01
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 2021-12-04
        • 2018-04-02
        • 2019-12-30
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多