Azure虚拟机出站TCP连接中断几个步骤后

问题描述:

我有一台在Azure云中运行Windows Server 2012 R2的虚拟机。本机具有静态分配的私有和公共IP地址。在那台机器上,我正在运行客户端应用程序(Jenkins Agent是特定的)。该客户端打开TCP连接到其在​​服务器(Jenkins Master)上运行,该服务在Azure云之外运行(位于某个公共IP地址后面)。 TCP连接建立正常。Azure虚拟机出站TCP连接中断几个步骤后

为了保持这种连接活动,同时在客户端和服务器都“查验”对方每4-5分钟。这个“ping”是通过交换几个TCP包通过打开的TCP连接完成的。

一些随机的时间间隔后,客户端不能再到达服务器和服务器不能再到达客户端。因此,客户端和服务器端都会引发连接超时异常。

为了分析这个问题,我正在使用Wireshark跟踪此通信,Wireshark在Azure云(客户端应用程序正在运行)的Windows Server上运行。虽然通信效果很好,Wireshark的显示TCP流量之间交换: - 客户私人 IP地址/ 本地端口 - 服务器的公网IP地址/端口

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

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

问:有没有人有任何想法,为什么TCP响应发送到Azure的机器(客户端)的公网IP地址,并公开可见的端口有时达到机器本身没有NAT转换应用到这些内容?

+0

这个问题似乎要由工作,围绕**缩短执行ping时间间隔**。现在客户端和服务器每隔30秒交换一次数据,并且连接在过去的2小时内看起来很健康。如果这仍然存在,我可以*地断定TCP会话不活动时间正在引发问题... –

后跟踪状态3天,没有问题再发生已经注意到了!所以我正在解决这个问题的结论:更频繁的客户端/服务器ping(即保持连接活跃)绝对可以解决这个Azure问题。