【问题标题】:Windows 7 or Vista TCP behavior changesWindows 7 或 Vista TCP 行为更改
【发布时间】:2011-06-14 20:02:12
【问题描述】:

各种分辨率

显示此问题的客户端计算机安装了 Trend Micro Security。该安全套件在系统中的每个网络适配器之上放置了一个服务或驱动程序。一旦这个旧版应用重新开始工作,我就不再费心进一步调试了。

更新 1

我在 Win7 上禁用了 TCP 窗口比例自动调整。

在 Windows 7 上,如果我拔下直接连接到服务器的以太网电缆,大约 5 秒后会断开连接,但客户端进程会崩溃。 服务器上的 netstat 向客户端报告两个不再有效的 TCP 连接,因为客户端进程没有正常关闭和关闭连接。

在物理断开后将服务器置于这种奇怪的状态后,如果我重新启动客户端进程,它会在连接到服务器时挂起(正如原文所述)

如果我在 XP 端执行物理断开连接,断开连接发生的速度比在 Win7 上要快。 XP 上的某种保活值或行为是不同的。虽然 ssh'd(通过 Putty)在 XP 上 ssh 连接断开的速度也比 Win7 快。

原创

我有一个旧的 TCP 客户端/服务器应用程序,它似乎只在客户端是 Windows 7 计算机时才会破坏服务器。

服务器是运行 2.6.11 的 OpenEmbedded Linux。

Windows 7 客户端连接了一会儿,最终进入客户端在一两秒后断开连接的状态。

一旦服务器处于这种状态,如果我立即连接Windows XP客户端,XP客户端也无法连接。

我似乎无法通过单独连接 XP 客户端使服务器进入错误状态。

我想知道从 Vista 或 Windows 7 开始对 TCP/IP 堆栈进行了哪些更改,以便更好地调试旧代码。

我还想知道我可以在 Linux 服务器上运行哪些命令,这可能更好地帮助我理解连接失败的原因。

【问题讨论】:

    标签: networking windows-7 tcp windows-vista


    【解决方案1】:

    也许你能做的最好的事情是在linux下启动tcpdumpwireshark并分析Windows XP和Windows 7发送的TCP SYN。Wireshark允许你逐位破解TCP发送选项...例如,这是您从建立 TCP 连接的 debian lenny 盒子中看到的:

    Transmission Control Protocol, Src Port: 58456 (58456), Dst Port: 23 (23), Seq: 0, Len: 0
        Source port: 58456 (58456)
        Destination port: 23 (23)
        Sequence number: 0    (relative sequence number)
        Header length: 40 bytes
        Flags: 0x02 (SYN)
            0... .... = Congestion Window Reduced (CWR): Not set
            .0.. .... = ECN-Echo: Not set
            ..0. .... = Urgent: Not set
            ...0 .... = Acknowledgment: Not set
            .... 0... = Push: Not set
            .... .0.. = Reset: Not set
            .... ..1. = Syn: Set
            .... ...0 = Fin: Not set
        Window size: 5840
        Checksum: 0x8b77 [correct]
            [Good Checksum: True]
            [Bad Checksum: False]
        Options: (20 bytes)
            Maximum segment size: 1460 bytes
            SACK permitted
            Timestamps: TSval 136991740, TSecr 0
            NOP
            Window scale: 6 (multiply by 64)
    

    我怀疑您会看到 RFC 1323 窗口缩放的差异,但我没有方便的 XP 机器来验证这一点。

    我在this answer中详细回答了如何在linux下使用tcptrace分析TCP连接... How can I measure the performance and TCP RTT of my server code?

    【讨论】:

      【解决方案2】:

      我还怀疑是窗口缩放问题。我目前找不到链接,但是当 Vista 首次出现报告某些路由器出现问题时有人抱怨(如果我记得是贝尔金斯)。他们将其追溯到 Vista(以及 Windows 7)默认更改的窗口大小之一的问题。路由器会挂断,需要每隔几分钟重置一次。

      您可以发出一些命令来关闭窗口缩放,看看您的问题是否消失。 From Here:

      netsh interface tcp set global autotuninglevel=disabled
      

      编辑:

      尝试在 Windows 7 上禁用 IPv6。Link 了解如何做到这一点。对于 IPv4,它的行为应该与 windows XP 相同。在两个系统上加载wireshark并比较差异

      【讨论】:

      • 感谢您的确切命令。我试过了,但问题仍然存在。
      • 那么它可能与窗口缩放无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2011-05-28
      • 2011-10-05
      • 2011-02-25
      • 1970-01-01
      • 2014-12-30
      相关资源
      最近更新 更多