Azure VM 出站 TCP 连接在几分钟后中断

标签 azure networking jenkins tcp nat

我有一个在 Azure 云中运行 Windows Server 2012R2 的虚拟机。该机器静态分配其专用和公共(public) IP 地址。在那台机器上,我正在运行客户端应用程序(具体来说是 Jenkins Agent)。此客户端打开与其服务器(Jenkins Master)的 TCP 连接,该服务器在 Azure 云外部运行(在某个公共(public) IP 地址后面)。 TCP 连接建立良好。

为了保持此连接处于事件状态,客户端和服务器每 4-5 分钟就会互相“ping”一次。这种“ping”是通过通过打开的 TCP 连接交换多个 TCP 数据包来完成的。

经过一段随机时间间隔后,客户端无法再连接到服务器,服务器也无法再连接到客户端。因此客户端和服务端都会抛出连接超时异常。

为了分析该问题,我跟踪了与 Wireshark 的通信,该通信在 Azure 云中的 Windows Server 上运行(客户端应用程序在其中运行)。虽然通信运行良好,但 Wireshark 显示 TCP 流量在以下各项之间交换: - 客户端的私有(private) IP 地址/本地端口 - 服务器的公共(public)IP地址/端口

这似乎完全合乎逻辑,因为 Azure 计算机(客户端)不知道其公共(public) IP 地址和公共(public)可见端口(应用 NAT 后)。

当问题开始发生时,我看到客户端和服务器都在发送 TCP 重传数据包,这意味着它们都没有收到先前发送的 TCP:PSH 数据包的 TCP:ACK 数据包。最奇怪的是客户端机器正在从服务器接收这些 TCP 重传,但问题是:这些包没有发送到客户端的私有(private) IP/本地邮件。这些包在 Wireshark 中显示为发送到客户端的公共(public) IP 和公开可见的端口!显然,客户端应用程序不会收到这些包,因为机器的 NIC/驱动程序会丢弃它们(这也是预期的)。

问题:有谁知道为什么发送到 Azure 计算机(客户端)公共(public) IP 地址和公共(public)可见端口的 TCP 响应有时会到达计算机本身,而无需将 NAT 转换应用于该内容?!

最佳答案

经过 3 天的状态跟踪,没有发现问题再次发生!所以我用结论来解决这个问题:更频繁的客户端/服务器 ping(即保持连接事件)肯定可以解决这个 Azure 问题。

关于Azure VM 出站 TCP 连接在几分钟后中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45980516/

相关文章:

c# - 如何验证 Azure AD 安全 token ?

linux - 在 Linux 中丢弃 IP 数据包的能力

java - 在 Android 应用程序中存储和检索用户数据?

wordpress - 如何从远程设备(例如 iPhone)测试本地开发的网站?

java - 关于 Selenium 和 WebDrivers 的困惑

redirect - 如何将所有 http 流量重定向到 https

maven - 如何配置 pom.xml 文件以使用 Nexus Repository manager

python-3.x - 用于 DataFactory 的 Azure Python SDK 指向特定的 GIT 分支

Azure AD : Fetch Tenant ID using Client Details

c# - Azure 服务总线序列化类型