介绍 NLB TCP 可配置的空闲超时 网络与内容交付

NLB TCP 可配置空闲超时介绍

关键要点

AWS 网络负载均衡器(NLB)现支持可配置 TCP 空闲超时。默认 TCP 连接的空闲超时为 350 秒,可根据需求设置为 60 到 6000 秒。新空闲超时设置仅影响新建连接,已建立的连接不受影响。

本文将指导您如何为传输控制协议 (TCP) 流配置 AWS 网络负载均衡器 (NLB) 的空闲超时设置。

NLB 是亚马逊网络服务 (AWS) 的一部分,属于 弹性负载均衡 家族,工作于开放系统互联 (OSI) 模型的第 4 层。它管理通过 TCP 或用户数据报协议 (UDP) 的客户端连接,将其分配到一组负载均衡器目标。

NLB 会跟踪从连接建立到关闭或由于非活动空闲超时而超时的连接。默认情况下,TCP 连接的空闲超时为 350 秒,而 UDP 连接为 120 秒。

现在,通过新的可配置 TCP 空闲超时,您可以修改此属性,适用于现有和新的 NLB TCP 监听器,并确定 NLB 在终止非活动连接之前需要等待的时间。

理解 TCP 连接建立

在深入探讨之前,我们简要回顾 TCP 协议的运作方式。如需更深入的了解,可以参考 TCP RFC。

图 1 TCP 连接建立的多个阶段

TCP 连接经历多个阶段,如建立、数据传输和优雅关闭。

半开状态:客户端发送 SYN,服务器响应,但客户端未完成握手。已建立:三方握手完成。数据传输:握手后,客户端与服务器之间可以交换数据。注意,此部分图示已进行调整以便更易阅读。关闭:客户端通过 FIN 数据包发起关闭,导致优雅关机。

NLB TCP 连接处理

NLB 作为一个第 4 层代理,跟踪每个建立的连接并将其保存在流表中。处于半开、优雅关闭或被客户端或服务器重置的连接不会被跟踪。

鲤鱼加速器每天签到

单个连接由五元组定义,包括协议TCP、源 IP 地址、源端口、目标 IP 地址和目标端口。

图 2 NLB 部署架构示例

默认情况下,如果客户端与目标之间在 350 秒内没有流量,则该连接将从 NLB 流表中移除。如果客户端在此连接已经不再被跟踪后试图发送流量,NLB 将响应一个 TCP RST,标志着需要建立新连接。

对于许多应用来说,连接超时可能是可以接受的,但在某些情况下,这可能会导致问题。例如,定期发送小数据量的物联网 (IoT) 设备在每次数据发送时重连,尤其是加密连接,会消耗资源并增加成本。

要防止连接超时,您可以设置 TCP keepalive,它会在已建立的连接上以预定义的间隔发送探测包。虽然这些探测包不包含数据,但足以重置中间系统,例如 NLB 的空闲计时器。有关设置 TCP keepalive 的更多信息,请参考我们 之前的帖子。

如果您的应用需要持久的 TCP 连接且无法使用 TCP keepalive,则可以修改 NLB 上的 TCP 空闲超时。

更新 TCP 空闲超时的注意事项

您可以将 NLB TCP 监听器的 TCP 空闲超时调整为 60 到 6000 秒之间的任何值。该更改只影响新建的 TCP 连接,而不会影响已经在进行中的连接。其他监听器类型例如 TLS、UDP当前不支持空闲超时调整。

在设置空闲超时值之前,请确保您理解应用程序的需求,并考虑 TCP keepalive 是否可能是替代方案。最好将 NLB TCP 空闲超时设置得高于您应用程序的 TCP 空闲超时。也就是说,使应用程序处理连接管理和超时,而不是 NLB。

将空闲超时设置得过高会增加流表填充的风险。如果表满了,将导致 NLB 无声拒绝新连接。您应通过新的 Amazon CloudWatch 指标监控被拒绝的连接情况,以了解需要降低 TCP 空闲超时值的情况。

介绍 NLB TCP 可配置的空闲超时 网络与内容交付

使用 AWS API/CLI 配置 TCP 空闲超时的步骤

AWS 在推出 TCP 空闲超时的同时引入了新的 API。以下示例展示了这些 API 的使用。

描述 NLB 监听器以找出当前的 TCP 空闲超时值

输入:

bashaws elbv2 describelistenerattributes listenerarn arnawselasticloadbalancinguseast1000011112222listener/network/NLBTest/123/123

输出:

json{ Attributes [ { Value 350 Key tcpidletimeoutseconds } ]}

修改 TCP 空闲超时的值

输入:

bashaws elbv2 modifylistenerattributes listenerarn arnawselasticloadbalancinguseast1000011112222listener/network/NLBTest/123/123 attributes Key=tcpidletimeoutsecondsValue=600

输出:

json{ Attributes [ { Value 600 Key tcpidletimeoutseconds } ]}

使用 AWS 管理控制台配置 TCP 空闲超时的步骤

以下步骤展示如何通过 AWS 管理控制台 更改超时值。

找到 NLB TCP 监听器。

图 3 NLB TCP 监听器

在 属性 部分查看当前的 TCP 空闲超时 值。

图 4 NLB 监听器属性

在 编辑监听器属性 部分输入新的 TCP 空闲超时 值。

监控

NLB TCP 空闲超时的推出引入了两个新指标:RejectedFlowCount由于流表满而拒绝的总流量和 RejectedFlowCountTCP因同样原因拒绝的 TCP 流。这些指标有助于您监控空闲超时设置对系统的影响。

我们建议设置 CloudWatch 警报,以便在 NLB 开始拒绝流量时通知您。RejectedFlowCount 的增加表明需要降低超时,以便 NLB 更早清除流量,防止流表填满。

现有 NLB 指标,如 NewFlowCount、NewFlowCountTCP、ActiveFlowCount 和 ActiveFlowCountTCP,保持不变。

结论

在 NLB 中配置 TCP 空闲超时提供了对连接管理的更大控制,尤其对于需要持久连接的应用。通过调整空闲超时并监控相关指标,您可以优化 NLB 性能,防止潜在的连接问题。

作者介绍

Milind Kulkarni

Milind 是亚马逊网络服务 (AWS) 的首席产品经理。他在网络、数据中心架构、SDN/NFV 和云计算方面拥有 20 多年的经验。他是九项美国专利的共同发明人,并共同撰写了三项 IETF 标准。

Tom Adamski

Tom 是一名专注于网络的首席解决方案架构师。他在各个行业从电信公司到小型初创企业拥有超过 15 年的网络和安全解决方案构建经验。过去 4 年,他帮助 AWS 客户构建其在 AWS 云的网络环境。在闲暇时间,Tom 常常在加利福尼亚海岸寻找冲浪的好地方。

标签:网络负载均衡器、网络

  • 2026-01-27 12:29:10
  • 5