AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 561241
Accepted
pQd
pQd
Asked: 2013-12-14 11:02:15 +0800 CST2013-12-14 11:02:15 +0800 CST 2013-12-14 11:02:15 +0800 CST

偶尔 Windows / .net 应用程序会忽略 tcp fin 标志

  • 772

我遇到了无法解决的网络问题。在一些运行 Windows 8.1 并与 linux http 服务器通信的计算机上,tcp 连接在 Windows 端悬空,而不是被正确关闭。

在响应 [分成几个,由 windows 确认,tcp 数据包] linux 服务器 - 10.14.11.59 - 发送一个包含 FIN 和 ACK 标志集的 tcp 数据包。 在此处输入图像描述

这是由 Windows 机器确认的 - 10.14.10.195 - 数据包只设置了 ACK 标志。 在此处输入图像描述

linux在windows机器上多次重新发送带有FIN和ACK标志的数据包——由于某种原因仍然保持连接打开;windows机器永远不会发送带有RST标志的数据包。 在此处输入图像描述

如果发生这种情况,Windows 应用程序会等待并最终超时。这在 10-50% 的尝试中随机发生。

两台机器之间的流量未经过滤;基于主机的防火墙已关闭。为了避免潜在的问题,我在 linux 和 windows 上禁用了 tcp 卸载。另外在 Windows 上运行以下程序并重新启动机器:

netsh int tcp set global chimney=disabled
netsh int tcp set global autotuninglevel=disabled
netsh int tcp set global rss=disabled

数据包捕获:这里。

任何想法将不胜感激!

tcp
  • 2 2 个回答
  • 1324 Views

2 个回答

  • Voted
  1. Best Answer
    pQd
    2013-12-19T05:49:09+08:002013-12-19T05:49:09+08:00

    我们发现在客户端机器上运行的 eset 端点安全是罪魁祸首。

    禁用防火墙功能是不够的;但卸载它完全解决了这个问题。

    我的同事在这里找到了类似问题的描述;显然升级到最新版本的 eset 也解决了这个问题。

    • 3
  2. Mathias R. Jessen
    2013-12-14T18:01:06+08:002013-12-14T18:01:06+08:00

    我假设您的 tcpdump 中的第一段前面是FIN来自客户端的 a。

    我相信这是正确的客户端行为,如原始 RFC 中的 ASCII 图表所示

    关闭的客户端,在收到FIN,ACK来自服务器的 a 后,套接字从FIN-WAIT1to转换TIME-WAIT并在此状态下保持 2 倍于网络中的 Maximum Segment Lifetime,此时它发送FIN回一个以关闭连接。

    TIME-WAITWindows使用注册表值名称TcpTimedWaitDelay覆盖持续时间,最初使用默认值 240 秒(MSL 默认为 120 秒)实现。在 Windows XP/Server 2003 及更高版本中,默认值降低到 120 秒。

    我相信您可以通过在提供响应后关闭服务器上的底层套接字来解决此问题,但请务必阅读此答案,大致相同的问题,但从服务器的角度来看

    • 2

相关问题

  • 使用 TOAD 客户端通信配置保活

  • ping 尝试中的“TTL 在传输中过期”是什么意思?

  • 在自写的 tcp 服务器上使用哪些端口

  • 将文本文件输出到 TCP 端口

  • 使用多个 NIC 增加带宽

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve