我有一个在Azure云中运行Windows Server 2012R2的虚拟机。本机具有静态分配的私有和公共IP地址。在那台机器上,我正在运行客户端应用程序(Jenkins Agent是特定的)。此客户端打开与其服务器(Jenkins Master)的TCP连接,该连接在Azure云之外运行(在某些公共IP地址之后)。 TCP连接建立得很好。
为了使这个连接保持活跃,客户端和服务器都是" ping"每4-5分钟一次。这个" pinging"通过打开的TCP连接交换多个TCP包来完成。
经过一段随机时间间隔后,客户端无法再访问服务器,服务器无法再到达客户端。因此,客户端和服务器端都会抛出连接超时异常。
为了分析这个问题,我正在跟踪与Wireshark的通信,Wireshark在Azure云中的Windows Server上运行 (客户端应用程序正在运行)。虽然通信运行良好,但Wireshark显示TCP流量在以下之间交换: - 客户的私人 IP地址/ 本地端口 - 服务器的公共IP地址/端口
这似乎完全合乎逻辑,因为Azure机器(客户端)不知道其公共IP地址和公共可见端口(在应用NAT之后)。
当问题开始时,我看到客户端和服务器都在发送TCP重传数据包,这意味着它们都没有收到TCP:ACK数据包到某些先前发送的TCP:PSH数据包。最奇怪的是客户端机器正在从服务器接收这些TCP重传,但问题是:这些包不会被发送到客户端的私有IP /本地帖子。这些包在Wireshark中显示为发送到客户端的公共IP和公共可见端口!显然客户端应用程序没有收到这些软件包,因为机器的NIC /驱动程序会丢弃它们(这也是预期的)。
问题:有没有人知道为什么发送到Azure机器(客户端)的公共IP地址和公开可见端口的TCP响应有时会到达机器本身,而不将NAT转换应用于该内容? !
答案 0 :(得分:0)
在跟踪状态3天后,没有发现任何问题再次发生!所以我正在解决这个问题并得出结论:更频繁的客户端/服务器ping(即保持连接活动)肯定能解决这个Azure问题。