排查 TCP/IP 连接问题

试用我们的虚拟代理 - 它可以帮助你快速识别和修复常见的 Active Directory 复制问题。

             适用于:Windows 10

可能会在应用程序端遇到连接错误或超时错误。 下面是最常见的方案:

  • 与数据库服务器的应用程序连接
  • SQL 超时错误
  • BizTalk 应用程序超时错误
  • 远程桌面协议 (RDP) 失败
  • 文件共享访问失败
  • 常规连接

如果怀疑问题出在网络上,请收集网络跟踪。 然后,将筛选网络跟踪。 在排查连接错误期间,你可能会在网络捕获中遇到 TCP 重置,这可能指示网络问题。

  • TCP 定义为面向连接的可靠协议。 TCP 确保可靠性的方法之一是通过握手过程。 建立 TCP 会话从三向握手开始,然后是数据传输,然后是四向关闭。 发送方和接收方同意关闭会话的四向关闭称为正常关闭。 四向关闭后,服务器将允许 4 分钟的时间 (默认) ,在此期间,将处理网络上的任何挂起的数据包,此时间段是TIME_WAIT状态。 TIME_WAIT状态完成后,将释放为此连接分配的所有资源。
  • TCP 重置是会话的突然关闭;它会导致立即释放分配给连接的资源,并清除有关该连接的所有其他信息。
  • TCP 重置由 TCP 标头中的 RESET 标志标识,该标志设置为 1。

源和目标上的网络跟踪可帮助你确定流量流,并查看在哪个点观察到故障。

以下部分介绍一些你将看到 RESET 的方案。

数据包丢弃

当一个 TCP 对等方发送没有从另一端接收响应的 TCP 数据包时,TCP 对等方最终会重新传输数据,如果没有收到响应,它将通过发送 ACK RESET 来结束会话, (此 ACK RESET 意味着应用程序确认到目前为止交换的任何数据, 但由于数据包丢弃,连接) 关闭。

源和目标上的同时网络跟踪将帮助你验证此行为,在源端,你将看到正在重新传输的数据包,在目标上看不到这些数据包。 此方案表示源和目标之间的网络设备正在丢弃数据包。

如果初始 TCP 握手因数据包丢弃而失败,则会看到 TCP SYN 数据包仅重新传输三次。

在端口 445 上连接的源端:

网络监视器中帧摘要的屏幕截图。

目标端:应用同一筛选器时,看不到任何数据包。

网络监视器中带有筛选器的帧摘要的屏幕截图。

对于其余数据,TCP 将重新传输数据包五次。

源 192.168.1.62 侧跟踪:

显示数据包端跟踪的屏幕截图。

目标 192.168.1.2 侧跟踪:

你不会看到上述任何数据包。 Engage网络团队使用不同的跃点进行调查,并查看其中是否有任何跃点可能导致网络中断。

如果看到 SYN 数据包正在到达目标,但目标仍未响应,请验证尝试连接到的端口是否处于侦听状态。 (Netstat 输出将有助于) 。 如果端口正在侦听,但仍没有响应,则可能是粮食计划计划删除。

TCP 标头中的参数不正确

当中间设备在网络中修改数据包,并且接收端的 TCP 无法接受数据包(例如正在修改的序列号),或者中间设备通过更改序列号重播数据包时,会看到此行为。 同样,源和目标上的同时网络跟踪将能够告诉你是否修改了任何 TCP 标头。 首先比较源跟踪和目标跟踪,你将能够注意到数据包本身是否有变化,或者是否有任何新数据包代表源到达目标。

在这种情况下,你将再次需要网络团队的帮助来识别正在修改数据包或将数据包重播到目标的任何设备。 最常见的是 RiverBed 设备或 WAN 加速器。

应用程序端重置

如果确定重置不是由于重新传输或不正确的参数或数据包在网络跟踪的帮助下被修改,则已将其缩小到应用程序级别重置。

应用程序重置是你看到确认标志设置为 1 以及重置标志的重置标志。 此设置意味着服务器确认已收到数据包,但出于某种原因,服务器将不接受连接。 此阶段是接收数据包的应用程序不喜欢它收到的内容。

在以下屏幕截图中,可以看到源和目标上看到的数据包相同,没有任何修改或任何删除,但你会看到目标向源发送的显式重置。

源端

网络监视器中源端数据包的屏幕截图。

在目标端跟踪上

网络监视器中目标端数据包的屏幕截图。

在发送 TCP 建立数据包 SYN 的情况下,还会看到 ACK+RST 标志数据包。当客户端想要在特定端口上进行连接时,将发送 TCP SYN 数据包,但如果目标/服务器出于某种原因不想接受数据包,则会发送 ACK+RST 数据包。

带有 ACK RSK 标志的数据包的屏幕截图。

应调查导致重置 (由端口号) 标识的应用程序,以了解导致其重置连接的原因。

注意

上述信息是从 TCP 的角度来看重置的,而不是 UDP。 UDP 是无连接协议,数据包发送不可靠。 使用 UDP 作为传输协议时,不会看到重新传输或重置。 但是,UDP 使用 ICMP 作为错误报告协议。 在端口上发送 UDP 数据包并且目标未列出端口时,你将看到目标发送 ICMP 目标主机无法访问:UDP 数据包后立即发送了无法访问的端口消息。

10.10.10.1  10.10.10.2  UDP UDP:SrcPort=49875,DstPort=3343
 
10.10.10.2  10.10.10.1  ICMP    ICMP:Destination Unreachable Message, Port Unreachable,10.10.10.2:3343

在排查连接问题期间,你可能还会在网络跟踪中看到计算机收到数据包但未响应。 在这种情况下,服务器级别可能会下降。 若要了解本地防火墙是否正在丢弃数据包,请在计算机上启用防火墙审核。

auditpol /set /subcategory:"Filtering Platform Packet Drop" /success:enable /failure:enable

然后,可以查看安全事件日志,查看特定端口 IP 上的数据包丢弃以及与该端口关联的筛选器 ID。

包含筛选器 ID 的事件属性的屏幕截图。

现在,运行 命令 netsh wfp show state,此执行将生成 wfpstate.xml 文件。 打开此文件并筛选在上述事件 (2944008) 中找到的 ID 后,你将能够看到与此 ID 关联的防火墙规则名称,该 ID 阻止连接。

wfpstate xml 文件的屏幕截图,其中包含与阻止连接的筛选器 ID 关联的防火墙规则名称。