使用 Wireshark 排除网络延迟故障

网络延迟,亦称网络滞后,指的是在网络环境中,数据从其起点传输到目的地的过程中所经历的时间延迟。让我们深入探讨如何有效地解决网络延迟问题。

任何需要网络参与的操作,比如浏览网页、点击链接、打开应用程序或进行在线游戏,都可视为一种活动。 用户的行为构成请求,而网络应用程序对这些请求的响应时间,则是衡量其性能的关键指标。

这种时间延迟还包括服务器处理请求所耗费的时间。 因此,我们可以将其定义为 往返时间——即请求被记录、处理、再到用户接收并解码所经历的完整过程。

“低延迟”表示数据传输的延迟相对较短。 反之,长时间的延迟则是不理想的,它会严重影响用户体验,导致操作滞后,甚至中断。

如何解决网络延迟问题?

互联网上提供了许多用于分析和排查网络故障的工具和软件。 其中既有付费的也有免费的。 值得一提的是 Wireshark,这是一个开源且基于 GPL 许可的应用程序,能够实时捕获网络数据包。 Wireshark 是全球最受欢迎且广泛使用的网络协议分析器。

它可以帮助你捕获网络数据包,并提供详细的分析视图。一旦捕获到网络数据包,你就可以使用这些数据进行实时或离线分析。这个应用就像一个网络流量的显微镜,让你能够过滤和深入研究,找出问题的根源,协助进行网络分析,最终确保网络安全。

网络延迟的成因

网络连接速度缓慢的几个主要原因包括:

  • 高延迟
  • 应用程序依赖性
  • 数据包丢失
  • 中间设备干扰
  • 窗口大小效率低下

在本文中,我们将逐一探讨这些网络延迟的原因,并介绍如何利用 Wireshark 来解决相关问题。

使用 Wireshark 进行检查

高延迟

高延迟是指数据从源头传送到目的地所花费的较长的时间。 高延迟对网络通信的影响显著。 以下图为例,展示高延迟路径上文件下载的往返时间。 往返时间常常超过一秒,这种情况是不可接受的。

  • 访问 Wireshark 的统计信息。
  • 选择 TCP 流图选项。
  • 选择往返时间图表,以了解文件下载耗时。

Wireshark 可用于计算路径上的往返时间,从而确定这是否是传输控制协议 (TCP) 通信网络性能不佳的根本原因。 TCP 广泛应用于各种应用,如网页浏览、数据传输和文件传输等。 在某些情况下,可以通过调整操作系统来提高在高延迟通道上的传输效率,尤其是在主机使用 Windows XP 时。

应用程序依赖

有些应用程序依赖于其他应用程序、进程或主机进行通信。 比如,你的数据库应用程序可能需要连接到其他服务器来获取数据项。 在这种情况下,这些服务器的性能瓶颈会直接影响本地应用程序的加载时间。

举例来说,一个目标服务器可能会指向多个网站,从而影响网页浏览体验。 例如,要加载 www.espn.com 的主页,你需要先访问 16 个为该主页提供广告和内容的主机。

上图显示了 Wireshark 中 HTTP 负载分布窗口,其中列出了 www.espn.com 主页所使用的所有服务器。

数据包丢失

网络中最常见的问题之一就是数据包丢失。 当数据包在从发送方传送到接收方的过程中未能通过 Internet 正确传递时,就会发生数据包丢失。 当用户访问网站并开始下载页面元素时,丢失的数据包会导致重新传输,这会增加下载网络文件的时长,并减慢整个过程。

此外,当应用程序使用 TCP 时,丢失的数据包会产生特别不利的影响。 当 TCP 连接检测到数据包丢失时,吞吐率会自动降低以补偿网络问题。

吞吐率会逐步提高到一个较为可接受的水平,直到下一个数据包再次丢失,导致数据吞吐量显著下降。 对于原本应在网络中轻松流动的大文件下载,数据包丢失会造成严重的阻碍。

那么,数据包丢失看起来是什么样子呢? 这取决于具体情况。 如果程序通过 TCP 运行,数据包丢失可能以两种形式出现。 在一种情况下,接收方会根据数据包的序列号来监视数据包,并检测丢失的数据包。 客户端会针对丢失的数据包发送三个请求(重复确认),要求重新发送。 在另一种情况下,如果发送方观察到接收方未确认收到数据包,则发送方会超时并重传数据包。

Wireshark 会通过颜色编码显示重新传输,从而指示已发生网络拥塞。 大量的重复确认则表明网络中存在数据包丢失和显著的延迟。

为了提高网络速度,精确定位数据包丢失的发生位置至关重要。 当数据包丢失发生时,我们沿着网络路径使用 Wireshark 进行追踪,直到不再出现数据包丢失现象。 此时,我们就定位到了数据包丢失点的“上游”,从而明确了问题排查的重点。

中间设备

网络流量中的中间设备(如交换机、路由器和防火墙)负责做出转发决策。 当数据包丢失发生时,应该将这些设备作为潜在的原因进行调查。

这些设备可能会增加传输路径的延迟。 例如,如果启用了流量优先级,我们可以观察到具有低优先级的流量会产生额外的延迟。

窗口大小效率低下

除了 Microsoft 操作系统之外,TCP/IP 网络中还存在其他一些“窗口”。

  • 滑动窗口
  • 接收窗口
  • 拥塞控制窗口

这些窗口共同决定了基于 TCP 的网络通信性能。 让我们从定义每个窗口及其对网络带宽的影响开始。

滑动窗口

滑动窗口用于通过网络广播下一个 TCP 段,直到数据被确认。 发送方收到对传输数据片段的确认后,滑动窗口会扩大。 只要网络上没有数据包丢失,就可以传输更大数量的数据。 当数据包丢失时,滑动窗口会缩小,因为网络无法管理线路上增加的数据量。

接收窗口

TCP 栈的接收窗口是一个缓冲空间。 接收到的数据会临时存储在此缓冲空间中,直到应用程序对其进行处理。 当应用程序的接收处理速度跟不上接收速率时,接收窗口就会填满,最终导致“零窗口”场景。 当接收方宣布零窗口状态时,所有到达该主机的数据传输都必须停止。 吞吐率降至零。 一种称为窗口缩放 (RFC 1323) 的机制允许主机增加接收器窗口的大小,从而降低出现零窗口情况的可能性。

上图显示了由于零窗口场景导致的网络通信延迟长达 32 秒。

拥塞窗口

拥塞窗口定义了网络能够处理的最大数据量。 发送方的数据包传输速率、网络丢包率以及接收方的窗口大小都会影响这个数值。 在健康的通信期间,拥塞窗口会稳步增大,直到传输完成或达到网络健康状况所建立的“上限”——即发送方的传输能力或接收方的窗口大小。 每个新的连接都会重新开始窗口大小的协商过程。

健康网络的小提示

  • 了解如何使用 Wireshark 作为首要响应工具,快速有效地找出性能问题的根源。
  • 确定网络路径延迟的来源,并在可能的情况下将其降低到可接受的水平。
  • 定位并解决数据包丢失的问题。
  • 检查数据传输窗口的大小,并在可能的情况下对其进行优化。
  • 检查中间设备的性能,看它们是否增加了延迟或丢弃了数据包。
  • 优化应用程序,使其能够传输更大数量的数据,并尽可能快地从接收器窗口检索数据。

总结👨‍🏫

我们已经探讨了网络性能问题的主要成因。然而,不容忽视的一点是,对网络通信行为的了解不足也会导致问题。 Wireshark 提供了一种类似于 X 光的网络可见性,就像 CAT 扫描提供人体可见性,从而进行准确而及时的诊断。 该工具已经成为定位和诊断网络问题的强大帮手。

现在,你应当能够运用 Wireshark 及其多种过滤器和工具,来检测并解决网络性能问题。 👍