Azure 关闭空闲网络连接

NoC*_*ier 9 timeout azure

我在单实例 Windows Server 2k8R2 azure VM 上运行专有客户端/服务器应用程序。

客户端非常依赖与服务器的连接。但是,如果我花几分钟没有任何活动,Azure 端的某些东西会强行关闭连接(据我从日志中可以看出)。如果这是 azure 本身或 windows 的功能,我并不肯定。

缺少实现某种保活功能(我不能,因为软件是专有的),无论如何我可以延长这个超时吗?

我已经看到了一些关于在负载平衡情况下更改 idletimeout 的参考,但这只是一个实例。

提前致谢!

Ped*_*rez 10

您正在使用虚拟机前面的软件负载平衡器的设计功能。默认情况下,它将在 4 分钟后关闭所有空闲连接,但您可以将超时配置为 4 到 30 分钟之间的任何时间:

Azure 负载均衡器的可配置空闲超时

然而,在基础设施和应用程序方面都有某种保活是一种很好的做法。它将为您节省更多的麻烦。

编辑添加 Azure 现在支持空闲连接上的 TCP 重置

  • 它不会关闭连接。相反,就发送方而言,它对数据包进行了黑洞处理,连接仍然打开,但 ACK 需要很长时间。当路由信息丢失时发送 RST 可以解决这个问题。 (2认同)
  • 是的。另一个增加零值的“功能”,同时也是完全非标准的,甚至没有优雅地处理连接断开(没有连接重置?) (2认同)

小智 5

Azure VM 的 TCP 设置

Azure VM 使用 NAT(网络地址转换)与公共 Internet 进行通信。NAT 设备将公共 IP 地址和端口分配给 Azure VM,允许该 VM 建立套接字以与其他设备进行通信。如果数据包在特定时间后停止流经该套接字,则 NAT 设备将终止映射,并且该套接字可供其他虚拟机自由使用。

这是一种常见的 NAT 行为,可能会导致基于 TCP 的应用程序出现通信问题,这些应用程序希望套接字在超时期限后得到维护。对于处于已建立连接状态的会话,需要考虑两种空闲超时设置:

通过 Azure 负载均衡器入站。此超时默认为 4 分钟,最多可调整为 30 分钟。使用 SNAT(源 NAT)出站。此超时设置为 4 分钟,并且无法调整。为了确保超过超时限制后连接不会丢失,您应该确保您的应用程序保持会话处于活动状态,或者您可以配置底层操作系统来执行此操作。Linux 和 Windows 系统要使用的设置有所不同,如下所示。

对于 Linux,您应该更改以下内核变量。net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 8

对于 Windows,您应该更改以下注册表值。KeepAliveInterval = 30 KeepAliveTime = 120 TcpMaxDataRetransmissions = 8

上述设置可确保在 2 分钟(120 秒)空闲时间后发送保持活动数据包,然后每 30 秒发送一次。如果其中 8 个数据包失败,会话就会被丢弃。

来源: https: //github.com/wbuchwalter/azure-content/blob/master/includes/guidance-tcp-session-timeout-include.md