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

0 tcp

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

我的 LwIP 嵌入式系统是客户端,我有 server1 和 server2。我连接到 server1 并在连接到 server2 之前结束连接。

流程的进一步细分:

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

然而,有时服务器2没有响应客户端的SYN数据包,这是在步骤9中。它只是有时会发生。我检查了几个论坛,例如:

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

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

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

作为客户我可以做什么来解决这个问题?

小智 5

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

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

可能有很多事情会导致服务器不应答 SYN 数据包。

我将要做的 :

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