问题标签 [retransmit-timeout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
113 浏览

windows - Winsock - 重传序列递增

与自定义客户端通信时,我得到以下信息。对于定制客户端,我的意思是带有运行三速以太网英特尔 FPGA IP 的 FPGA 的自制 PCB。如果在 PC 和 PCB 之间切换,则没有区别。

从服务器(Windows PC)看到的工作流程,我用wireshark检测到这种行为:

  1. 连接到客户端 (Syn - Syn/Ack - Ack) Winsock2.connect
  2. 使用 Winsock2.WSASend 发送数据 > MTU(4088 字节 MTU 上的 4092 字节)
  3. 数据包被“分段”成 2 个数据包 - 不设置分段位
  4. 发生重传(因为客户端回答太慢?)

我正在使用 delphi 10.4 并使用 Winsock2 函数。在每次发送之前,如果 FD_Isset 设置了 fdwrite,我会使用 select 检查。Nagle 已停用。

“重传”并非每次都发生,当它们发生时我无法检测到任何类型的模式。除了大多数情况下,客户端需要超过 30 毫秒来发送他的 ACK。

当“重传”发生时,重新发送的不是数据包 1 或数据包 2,而是数据包 1 的偏移量为 60,这是数据包 2 的有效负载。数据包 1 的序列号也增加了 60。即使数据是正确的,它也正确地增加了 60。当我发送 6000 字节时,我得到相同的行为,增加的 seq 为 1968,这也是正确的。这里发生了什么?我可以用winsock2检测到这个吗?我可以用winsock设置RTO吗?为什么序列号增加而不是数据包1,因为它是,重新传输?

发送函数源码:

线鲨

Edit1 数据包设置了不分段位。我试图用 Windows 管理中心检测这种“重新传输”,但我没有看到任何弹出。 性能监视器

0 投票
0 回答
90 浏览

tcp - 为什么 azure vm 中的 TCP 重传过多

我们在 Azure Ubuntu VM 上运行我们的应用程序 (Apache)。此 VM 位于 Azure 负载均衡器后面。在过去的几周里,我们收到了一些关于 TCP 重传的警报。

主机正在经历异常数量的 TCP 重新传输。TCP 重传现在占所有 TCP 数据包的 14.0%,使主机处于错误级别。这开始于 2021-12-06 19:25:57 MST。这可能是由于此主机与其客户端/服务器之间的网络性能不佳或终端系统中的问题造成的。

有人可以帮我找出原因以及如何解决这个问题吗?