当我们快速打开到同一主机的多个连接时 TCP 重新传输

网络工程 tcp 故障排除 包分析
2022-02-15 17:31:07

当连接到外部主机时,我们在 LAN 上的某些计算机上遇到了重新传输问题。当命令在与https://api.typings.org/npm typings install的某些连接上超时时,我首先开始尝试跟踪问题

前两个或三个连接会很快返回,但后续连接会出现 3 秒或 9 秒的连接延迟,或者超时并失败。但是这种行为在网络上的不同机器上有所不同。我们在整个客户端机器上运行 Windows 10。某些计算机会在 3 或 4 次成功连接后开始看到延迟连接。但是,有些人只会在 9 或 10 次连接后才开始看到延迟。几台计算机根本没有显示任何延迟。

我最初在命令中添加了一些诊断日志记录,typings install以尝试查看问题是否与节点或类型或 api.typings.org 相关,这似乎不太可能。日志记录只是列出了尝试的连接并显示了经过的时间。您可以看到时间在增加:

> ....@1.0.0 typings C:\....
> typings "install"

  popsicle https://api.typings.org/entries/dt/zone.js/tags/0.0.0%2B20160316155526 +0ms
  popsicle https://api.typings.org/entries/dt/es6-promise/tags/0.0.0%2B20160423074304 +3s
  popsicle https://api.typings.org/entries/dt/es6-collections/tags/0.5.1%2B20160316155526 +6s
  popsicle https://api.typings.org/entries/dt/node/tags/6.0.0%2B20160514165920 +11s
typings ERR! message Unable to connect to "https://api.typings.org/entries/dt/node/tags/6.0.0%2B20160514165920"
typings ERR! caused by connect ETIMEDOUT 104.24.113.177:443

typings ERR! cwd C:\....
typings ERR! system Windows_NT 10.0.10586
typings ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\....\\node_modules\\typings\\dist\\bin.js" "install"
typings ERR! node -v v4.4.4
typings ERR! typings -v 0.8.1
typings ERR! code EUNAVAILABLE

typings ERR! If you need help, you may report this error at:
typings ERR!   <https://github.com/typings/typings/issues>

这是不确定的,所以我尝试观察与 Wireshark 的连接,此时能够将这些延迟与 TCP 重传相关联。随后,我能够使用一个用 Delphi 编写的简单程序重现该行为,该程序打开多个 HTTP 或 HTTPS 连接到我们 LAN 外的任何站点,尽可能接近同时(使用多个线程)。

Wireshark 跟踪(在线:https ://dl.dropboxusercontent.com/u/4943090/retransmission.pcap,38kb)显示 11 个连接中有 3 个连接快速成功,但其他 8 个连接在 3 秒后重新传输。然后只有最后一个重传成功,再过 6 秒,剩下的 7 个连接再次重传,再一次,只有最后一个成功。在此之后,客户端应用程序放弃了,但我假设,该模式将继续以更长的超时时间,直到所有连接完成。

开始连接尝试

3秒后的第一批重传:

第一批重传

6秒后第二批重传:

第二批重传

我扩展了测试应用程序以尝试多达 100 个同时连接,并且对于小批量没有出现问题的计算机也完成了这些,而无需重新传输。

网络上的更多细节:

  1. 内部千兆网络,外部100/40mbit光纤连接。
  2. 通过 Watchguard XTM-25 防火墙的 NAT。
  3. 24 端口 Linksys SRW2024P 1Gbit 交换机。
  4. Windows 10 客户端、10.0.10586 - 10.0.14342、Windows Server 2012 服务器

我已经在网络上的各种计算机上运行了一堆测试。有些我能够重新配置以尝试各种网络选项。大多数台式机和所有服务器都插入 Linksys 1Gbit 交换机上的端口。

100mbit、1GB 和无线列反映了在给定的连接批次中未经历重传的大致连接数。也就是说,如果我在一台成功率 80% 的机器上尝试 10 个同时连接,其中 8 个将完成而无需重新传输。如果我尝试 20 次,大约 16 次将完成而无需重新传输。成功连接的数量各不相同,但平均显示百分比。

Computer     Wired Adapter                                100mbit  1GB  Wireless Adapter                        Wireless
========     =============                                =======  ===  ================                        ========
Desktop#1    Intel(R) Ethernet Connection I217-LM         100%     40%
Desktop#2    Realtek PCIe GBE Family Controller 1/10/2015 100%     80%  Dell Wireless 1703 802.11b/g/n (2.4GHz) 100%
Desktop#3    Intel(R) Ethernet Connection I219-V          100%     40%  Dell Wireless 1801 802.11bgn            100%
Server#1     Broadcom BCM5716C NetXtreme II GigE                  100%
Server#2     Broadcom NetXtreme Gigabit Ethernet                  100%
Notebook#1                                                              Broadcom 802.11ac Network Adapter       100%
Desktop#4    Realtek PCIe GBE Family Controller 5/04/2015 100%    100%
Desktop#5    Realtek PCIe GBE Family Controller                    80%

在 Desktop#1 上,我尝试了许多不同的网络适配器选项。请注意,当我们将桌面切换到 100mbit 时,它们从未经历过重新传输。

我将 Desktop#4 插入 Desktop#1 的端口,并确认问题不在于该特定端口。

我已重新启动防火墙并切换以确保那里没有暂时性问题。

连接到内部主机似乎没有任何问题,只有连接到我们 LAN 外部的那些。连接不一定都需要连接到同一主机,但是当连接到单个主机时,这个问题肯定会影响更高比例的数据包。仅使用 HTTP 和 HTTPS 进行了测试。

有任何想法吗?

更新了额外的配置细节

  • 该网络具有简单的拓扑结构:所有主机都连接到 24 端口 Linksys SRW2024P 1Gbit 交换机(无需配置)。
  • WatchGuard XTM-25 LAN口也连接到同一个交换机,WAN口(也连接千兆)连接到澳大利亚NBN光纤端点路由器(不确定这个设备的型号;它是封闭的,不是很容易接近,没有用户可配置的选项)。NBN 连接为 100/40mbit。
  • 无线流量通过 Netgear WNR1000 802.11abn 路由器,直接连接到单独端口上的 WatchGuard。
  • 所有传出流量均通过 1-1 NAT + 动态 NAT 防火墙策略配置,未配置 QoS 或速率限制;除此之外,还有我认为不相关的其他防火墙规则。WatchGuard 的配置非常简单,与出厂默认设置相比没有太大变化。
  • 网络适​​配器完全是出厂默认设置;我已经尝试在 Desktop#1 上调整适配器上的所有可访问设置,但没有效果 - 只有将速度降低到 100mbit 才有任何区别。
0个回答
没有发现任何回复~