介绍 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 空闲超时值的情况。

使用 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 常常在加利福尼亚海岸寻找冲浪的好地方。
标签:网络负载均衡器、网络