TCP 窗口大小分配和 TCP 零窗口错误

网络工程 tcp 监控 线鲨
2022-02-09 07:43:37

大家好!

我的头脑快要爆炸了,因为每个人都在指责网络人员断开网络和网络速度缓慢,但 Solarwinds 报告说网络设备和链接的所有利用率都很好。所以我尝试嗅探然后我得到“零窗口”错误。所以如果我可以问:

1.) TCP 窗口大小是如何分配的?(如果您打开了 1 个应用程序(Mozilla Firefox)和 5 个选项卡,那么是否是每个 TCP 对话,然后操作系统为每个选项卡分配窗口大小?)

2.)什么原因以及如何解决“TCP 零 - 窗口”问题?(股票交易服务器很难处理突发流量并将 TCP 零窗口消息发送给交易者,但基于 Solarwinds 和性能监控中的网络利用率(网络设备的 CPU、内存和链接利用率)(股票交易服务器和数据库服务器中的 CPU、磁盘空间、内存、网卡利用率),这表明这是完全正常的,甚至没有得到充分利用!)

3.)是否可能在交易服务器的设置中?(32 GB 内存,但仅使用 64 MB 的默认 tcp 窗口分配大小)

4.)或者交易应用程序处理数据的速度有多慢有什么问题吗?(我计划将 TCP 缓冲区大小从 64KB 增加到大概 256KB,但如果交易应用程序服务器本身处理数据缓慢,这可能无济于事。)

5.)此外,所有交易者都遇到“无法连接到交易服务器”和“间歇性连接”错误。(但没有关于“下行链路”或“充分利用的链路”等网络问题的报告。我什至尝试将轮询数据更改为每 1 分钟一次以捕获短暂的断开连接,但我仍然认为没有问题)所以我认为有可能是延迟问题

6.)你如何有效地测量网络通信的延迟?您推荐哪些免费和付费软件解决方案?(Traceroute 报告 4ms,即使我将 ping 数据包增加到 1mb,它也会显示 1-3ms 延迟,所以我认为这没有帮助)

7.)如果源端口和目标端口相同并且数据被加密,你如何整理每个 TCP 线程/会话?(例如,如果 Stock Trading Server 和 SQL Server 使用相同的端口号进行通信,但有多个事务正在进行。)

抱歉,我刚接触网络世界,所以有很多我不知道的东西,也无法在书籍和其他资源中找到。我认为这种事情是通过经验学到的,所以请分享你的智慧。

谢谢你,有一个美好的一天!:)

2个回答

好吧,我认为你很幸运,因为有一个 wireshark 论坛会议可以完全解决这个问题,并描述你的情况。

https://ask.wireshark.org/questions/2365/tcp-window-size-and-scaling

基本上,这不是网络,更有可能是您的交易者都试图访问的服务器。服务器无法以获取它们的速率(即,从消防软管中饮用)处理它获取的数据包,因此该消息就是结果。

询问工具,好吧,wireshark ;)

您需要网络监控以实现长期带宽和错误图形/跟踪。Cacti 和 Nagios(或 Icinga)是在任何 unix/linux 平台上运行的免费应用程序。对于 Windows,您最好从 SolarWinds 购买一些东西(您在一家贸易公司工作,因此他们应该能够在这方面花费少量);What's Up Gold 将是一个不错的起点。不是来自 SolarWinds 但非常好的是 PRTG。

对于即时工具,请阅读更多关于 windows 中的 ping 和 traceroute 的信息。这些命令的默认值绝对是可怕的,调整它们可以给你更好更快的结果。如果您有可用的 unix/linux 系统,mtr 是网络管理员的首选跟踪/路径性能工具。

如果没有关于客户端/服务器配置、硬件和数据包捕获的更多详细信息,这个问题有点过于宽泛,无法回答。

当一侧(可以是客户端或服务器,但通常是服务器)接收的数据多于它可以处理的数据时,就会发生 TCP 窗口零。TCP Window 基本上是一个接收缓冲区,数据在接收时放入并等待处理。如果缓冲区已满,则发送 TCP 窗口零条件以停止数据传输,直到处理完缓冲区。

默认情况下,缓冲区相当小,但这可以通过双方(客户端/服务器)同意在 TCP 握手期间使用窗口缩放来克服。如果双方不同意使用它,则使用较小的默认缓冲区大小。重要的是要注意,沿路径互连的设备可能会出现故障并在握手期间更改选项(因此即使双方都想使用它,也会导致窗口缩放等选项不会发生)。

缓冲区可能已满的原因有很多,但请确保打开窗口缩放。然后,我将研究服务器应用程序和服务器本身的问题。