Jos*_*ton 12 windows-server-2008 tcp
我们有一个服务器应用程序,它在大约 4000 个连接时面临 TCP 耗尽问题。这将每 3 或 4 周(大约)发生一次。创建此服务器应用程序的供应商在检查 netstat -b 的输出后告诉我们,即使客户端已断开,某些连接仍保持打开状态。
我的任务是调查特定客户端应用程序为什么没有正确关闭 TCP 连接。我相信如果客户端计算机关闭,它可能无法从服务器报告仍与该客户端建立 TCP 连接。不幸的是,我找不到任何信息来验证我的观点。我不想再浪费时间调查一个我认为根本不是问题的潜在问题。
tldr;
服务器是否可以报告与已关闭计算机的已建立连接?
Dav*_*rtz 13
除了在传输数据的一侧之外,TCP 不会努力检测死连接。调用 TCP 堆栈的应用程序代码负责执行此操作。这里涉及什么协议?(TCP 之上的那个。)
这是一个非常丑陋的“解决方案”,但您可以启用TCP keepalives。本文中还有更多内容。
对的,这是可能的。正如大卫和保罗在他们的回答中所说的那样,TCP 中没有任何机制(除了 TCP 保持连接,这是可选的)来检测半开连接。由应用程序供应商决定连接的状态并相应地采取适当的措施。
就 TCP 而言,半开连接和长空闲连接之间没有检测或区别。
您将不得不从 OSI 模型的第 1 层(物理)到第 7 层(应用程序)开始对此进行故障排除,以找出问题发生的位置。我的建议是在受影响的客户端之一上安装并运行数据包捕获程序,直到出现问题,然后分析捕获以尝试确定导致客户端无法关闭连接的原因。
当工作站想要关闭与服务器的连接时,它会发送一个 TCP FIN。如果客户端行为不正常并且没有关闭其连接,它们实际上可以在服务器上保持建立。您可以为服务器上的打开连接设置超时以清除它们 - 尽管最好找到原因。打开的连接进入哪个端口?一旦您知道正在访问什么服务,您就可以识别正在访问服务器的客户端应用程序。
| 归档时间: |
|
| 查看次数: |
5838 次 |
| 最近记录: |