没有来自服务器的 SYN-ACK 数据包

没有来自服务器的 SYN-ACK 数据包

我有两台服务器,我使用自己的带有 LwIP 的嵌入式系统来连接这些服务器。

我的带有 LwIP 的嵌入式系统是客户端,我有服务器 1 和服务器 2。我连接到服务器 1 并在连接到服务器 2 之前结束连接。

进一步细分流程:

  1. 客户端与服务器 1 创建新的套接字
  2. 客户端发送 DNS 数据包以获取服务器 1 的 IP 地址;收到来自 AP 的 ACK
  3. 客户端发送TCP SYN数据包;
  4. Server1 发送 TCP SYN-ACK 并执行一些数据传输
  5. 客户端通过发送 TCP RST 数据包结束与服务器 1 的连接;并关闭套接字
  6. 客户端与服务器2创建新的套接字
  7. 客户端发送 DNS 数据包以获取服务器 2 的 IP 地址;收到来自 AP 的 ACK
  8. 客户端向服务器2发送TCP SYN数据包
  9. Server2 发送 TCP SYN-ACK 并执行一些数据传输
  10. 客户端通过发送 TCP RST 数据包结束与服务器 2 的连接;并关闭套接字

但是,有时 server2 没有响应客户端的 SYN 数据包(步骤 9)。这种情况只会偶尔发生。我查看了几个论坛,例如:

[1]为什么服务器不会发送 SYN/ACK 数据包来响应 SYN 数据包

[2]服务器未发送 SYN/ACK 数据包来响应 SYN 数据包

我的代码没有启用窗口缩放。我无法检查服务器,因为它是私人服务器,所以我不确定它是否被丢弃。我的环境非常嘈杂,而且有很多路由器和通信设备。这个问题只发生在嘈杂的环境中,而不会发生在干净的环境中。

作为客户我应该怎么做才能解决这个问题?

答案1

关于为什么有时你的服务器不以 SYN-ACK 应答的一些想法:

  • 发送 SYN 数据包时,服务器上的应用程序停止:这可能会导致崩溃,然后通过程序的自动重启机制设法再次运行。当服务器应用程序停止或崩溃时,tcp 监听套接字会关闭,因此操作系统不会响应。
  • 您的服务器在找回客户端时遇到了一些麻烦。这可能是路由问题或非对称路由(这会破坏防火墙)。
  • 如果客户端和服务器在同一个网络上,这可能是第 2 层问题,如生成树协议或 ARP。
  • 网络中的数据包丢失:您的 SYN 或 SYN ACK 数据包被丢弃。
  • 服务器不堪重负,有时无法回答您的 SYN 数据包。

可能有大量的事情导致服务器不应答 SYN 数据包。

我将要做的 :

  • 在服务器上执行一些 tcpdump 来验证网络:服务器是否收到 SYN 数据包,或者网络事先是否存在问题?服务器是否生成并发送 SYN ACK 数据包?然后从那里开始工作。
  • 如果您无法访问服务器,请在最近的路由器/防火墙上执行相同的操作。
  • 联系有权访问该服务器的人员。

相关内容