我们怀疑两台服务器之间的防火墙在没有通知服务器的情况下过早断开了TCP连接,我们想知道是否有可能使用PowerShell来这样做。我们知道有时会断开连接,我们的应用程序会尝试使用它认为是活动套接字的方式,但是在一段时间延迟后,它将关闭它并打开一个新的套接字,这会导致延迟。
要获得一个大致的概念,我们尝试将Get-NetTcpConnection
的输出传递给Test-Connection
,但显然没有用。
是否可以使用PowerShell获取“已建立”连接的列表并发送PING或任何测试请求以获取套接字的实际状态或查看其是否存在?
答案 0 :(得分:0)
首先,计算机上的本地套接字不提供有关防火墙途中该连接状态的任何信息。此外,尽管您可以在本地枚举已建立的连接,然后对其进行探测,但这不会产生您想要的结果。 Test-Connection
不仅不是正确的工具(它发送ICMP探针,也不发送TCP探针,即在错误的层中操作),即使使用Test-NetConnection
(支持TCP探针),它也会建立一个正确的工具。 new 连接,而不是重复使用您的应用程序正在使用的连接。
基本上,检查防火墙上的连接状态的唯一方法是检查防火墙上的连接状态。
话虽如此,至少根据我的经验,防火墙过早断开连接的最可能原因是在防火墙和连接端点上的TCP保持活动设置不同。 Windows的默认TCP keepalive time为2小时,而许多防火墙的默认存活时间较短(例如30分钟)。Windows系统的Keepalive时间可以在注册表中更改,例如通过导入具有以下内容的.reg文件(0x493e0 == 300000ms == 6min):
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "KeepAliveTime"=dword:000493e0