服务器发送TCP数据包而不从客户端接收ACK

时间:2017-08-18 03:09:02

标签: linux sockets tcp

我有一个iOS聊天应用程序通过TCP套接字与java XMPP聊天服务器通信。服务器机器(机器1)正在运行redhat linux。最近我将聊天服务器移动到具有类似配置的另一台Linux机器(机器2),除了它有更多的处理器。服务器工作的方式是,一旦它从客户端(data1)接收到特定数据,它就会向客户端发送2 xml数据包(data2和data3)。看看wireshark中的数据包,我看到下面的内容 machine1中的一致行为。

iOS App          Java server
  SYN      -->
           <--   SYN,ACK
  ACK      -->
TCP handshake ends here 

  data1     -->   
          <--    ACK

          <--    data2
  ACK      -->
          <--    data3
  ACK      -->

但是在机器2中,它的工作原理如下。(并非总是如此)

iOS App          Java server
  SYN      -->
           <--   SYN,ACK
  ACK      -->
TCP handshake ends here

  data1     -->   
          <--    ACK

          <--    data2
          <--    data3
  ACK      -->
  ACK      -->

如上所述,客户端一次性发送2个数据包的ACK。 为什么行为会发生这样的变化。由于应用程序在两种情况下都是相同的,因此可能使服务器发送数据3而不接收数据2的ACK。我已经验证了这些机器中的大多数TCP套接字相关属性,如发送缓冲区,TCO_NODELAY等,但所有这些看起来都是一样的。如果需要行为在机器1中,我该怎么办。

我也注意到这种行为主要是通过wifi连接时看到的。

0 个答案:

没有答案