解决网络速度问题——古老的疑问

解决网络速度问题——古老的疑问

我正在寻求帮助,解决一个我确信是老问题的问题。我发现自己渴望更清楚地了解网络吞吐量,但我似乎找不到让它“点击”的信息

我们有几台服务器分布在不同地区,运行着各种版本的 Windows。假设我们始终使用一台主机(台式机)作为源,当将数据从该主机复制到全国各地的其他服务器时,我们发现速度差异很大。在某些情况下,我们可以以 12MB/s 的速度持续复制数据,而在其他情况下,我们看到的速度为 0.8 MB/s。值得注意的是,在测试了 8 个目的地后,我们的速度似乎始终为 0.6-0.8MB/s 或 11-12 MB/s。在我们主要关注的建筑物中,我们与 ISP 建立了 OC-3 连接。

我知道有很多变量在起作用,但我希望这里的专家可以帮助回答一些基本问题,以增强我的理解。

1.) 对于运行 Windows XP、Server 2003 等的老旧机器,配备 100Mbps 以太网卡和 72 毫秒的典型延迟,0.8 MB/s 听起来合理吗?或者您认为这个速度慢到足以表明存在问题?

2.) 经典的“数学上最快的速度”“吞吐量 = TCP 窗口 / 延迟”,在我们的例子中,计算为 0.8 MB/s (64Kb / 72 ms)。我的理解是,这是一个上限;您永远不会期望达到(由于开销)更不用说超过该速度了。但在某些情况下,我们看到的速度为 12.3 MB/s。网络上散布着 Steelhead 加速器,它们能解释如此高的传输速率吗?

3.) 有人认为,使用 SMB 与使用 SMB2 可以解释速度差异。事实上,正如我们所料,数据包捕获显示,根据操作系统版本,两者都在被使用,正如我们所料。我知道是什么决定了是否使用 SMB2,但我很好奇,使用 SMB2 可以带来什么样的性能提升。

我的问题似乎只是缺乏经验,更重要的是,缺乏对合理网络速度和不合理网络速度的认识。有人能帮我提供背景/观点吗?

答案1

您提到的数学公式实际上是确定 TCP 最有效传输窗口大小设置的方法,而不是实际可用带宽。TCP 使用一种称为滑动窗口的机制,允许根据网络条件调整传输速度。其理念是 TCP 发送方将发送越来越多的数据,而无需接收方确认。如果数据丢失,则确认之间发送的数据量会减少,从而也会降低有效带宽。

所讨论的公式实际上是根据给定主机对之间的延迟和往返延迟来确定 TCP 传输窗口的理想大小。其想法是确定窗口的大小,使得“传输中”的数据量与所谓的带宽延迟乘积相对应。例如,如果您的速率为 50 兆比特每秒 (6.25 兆字节),平均往返延迟为 100 毫秒,那么您将拥有 6.25 * 0.1 = 625 千字节的数据。这将是 TCP 协商的值(如果配置正确)。随着链接的延迟和带宽特性的变化,窗口大小也会发生变化。

您需要的是一个带宽管理工具,例如 iperf(免费),在源和各个目标上运行。这应该可以让您了解实际可能的吞吐量(独立于其他应用程序),同时还可以提供一些关于延迟的见解。在主机之间运行扩展 ping 还将提供延迟特征的一般概念。当您拥有这些数据时,您将更好地了解您应该看到的吞吐量。

顺便说一句 - 任何类型的 LAN 优化器的使用通常都会包含数据压缩、TCP 优化、缓存等。虽然很方便,但它可能会掩盖底层链接的性质。一旦您了解了原始带宽/延迟(以及可能的数据包丢失),您就可以仔细查看以确保您的各个主机都已设置为充分利用可用带宽。

答案2

尝试“ping -l 8092”或 FTP 或 HTTP 来检查是否是 SMB 问题。

首先:您使用什么介质连接计算机?什么是“100mpbs”?以太网?您不能将它用于“地理上分散”的计算机,对吗?

如果使用“通过互联网建立 VPN”,您计算机之间的路由器可能会使用不同的链接:一个链接速度快,另一个则慢。它们可能会根据许多参数选择链接。

请描述您的网络。

这也可能是一个 MTU 问题:多个链接可能具有不同的 MTU。

答案3

这里有很多评论和用户提供了很好的建议。其中一些非常接近我想要的,但我也很幸运地遇到了我们公司的一位网络资深人士,他帮助我澄清了一些事情。我想在这里发布我的发现/理解,以造福他人。如果其中任何内容似乎不正确,请随时纠正我:

1.) 具有 72ms 延迟和 64K 窗口的单个 TCP 会话的最大吞吐量约为 0.8 MB/s,这使得该速度对于单线程、单会话复制(例如我们使用 robocopy 执行的复制)来说是合理的。

2.) 这种速度差异似乎归结于传输方法的有效性。在我们的例子中,我们使用了 Robocopy 和 Repliweb。我发现 robocopy 使用单个 TCP 会话,而 Repliweb 可以打开多个会话来发送数据。

3.) 微软网站的研究确实表明,SMB2 的性能比 SMB1 有显著提升。然而,在某些情况下,操作系统在协商使用哪种协议方面存在问题,因此应该注意以下两点:a.) 哪些情况下 SMB2可能被使用,以及 b.) 根据网络捕获,是否实际使用了 SMB2。

目前,Wire-shark 似乎可以确定 SMB2 协议的使用情况。

希望对您有所帮助。再次重申,我的理解还很初级,欢迎您随时扩展。

相关内容