【问题标题】:Connection loses on data-send. Server receives RST, ACK after handshake数据发送时连接丢失。握手后服务器收到RST、ACK
【发布时间】:2013-06-01 23:10:42
【问题描述】:

我有一个简单的 TCP 服务器托管在 64 位 windows server 2008 r2 上。 TCP 服务器只接收连接并使用收到的消息(回声)回复传入数据。大约有 600-700 个客户端尝试连接并发送一些信息。问题是:当数据从客户端发送到服务器时,服务器几乎丢失了所有连接(大约 90%)(前 15-20 个连接已正常执行)。我已经用 Whireshark 嗅探了 TCP 流量。 从服务器端日志是:

 +--------------+--------------+--------------------------------+
 | Source       | Destination  | Info                           |
 +--------------+--------------+--------------------------------+
 | 1. client ip | server ip    | [SYN] **Handshake step1**      |
 | 2. server ip | client ip    | [SYN, ACK] **Handshake step2** |
 | 3. client ip | server ip    | [ACK] **Handshake step3**      |
 | 4. client ip | server ip    | [RST, ACK] **Loses connection**|
 +--------------+--------------+--------------------------------+

来自客户端的日志是:

 +--------------+--------------+--------------------------------+
 | Source       | Destination  | Info                           |
 +--------------+--------------+--------------------------------+
 | 1. client ip | server ip    | [SYN] **Handshake step1**      |
 | 2. server ip | client ip    | [SYN, ACK] **Handshake step2** |
 | 3. client ip | server ip    | [ACK] **Handshake step3**      |
 | 4. client ip | server ip    | [PSH, ACK] Message             |
 | 5. client ip | server ip    | [PSH, ACK] CRLF message        |
 | 6. server ip | client ip    | [RST, ACK] **Loses connection**|
 +--------------+--------------+--------------------------------+

在这两种情况下,«重置原因»都是:\000\000\000......\000 当我们从本地网络连接时,连接没有丢失。

【问题讨论】:

    标签: sockets networking tcp windows-server-2008 wireshark


    【解决方案1】:

    我认为这与您的代码无关,但我确实有几个问题: 1、客户端和服务器之间的网速是多少?其他应用程序是否有任何数据包丢失?从客户端发送的消息的大小是多少? 2. 从收到 RST 到握手完成(服务器)或发送消息(客户端)之间的时间是多长时间? 3、你知道客户端和服务器之间有没有防火墙吗?你还说它在局域网上运行良好。中国GFW经常这样做。

    【讨论】:

    • 1.服务器网络容量 1 Gbit/s。其他应用程序不会丢失包。消息大小约为 100-150 字节(短消息)。 2. 连接立即丢失。 3.只有windows防火墙,但我已经禁用了。
    • 现在似乎由于某些限制而被删除。当您说下降 90% 时,这些连接是否会在很短的时间内出现?您是否尝试等待一段时间,看看是否会成功?另一个问题是成功案例,服务器响应后你关闭连接了吗?
    • 是的,我试图等待一段时间 - 结果是一样的。服务器响应后我没有关闭连接,应该打开连接进行消息交换。
    • 我的意思是——停止客户端,等待一段时间(30分钟),然后让客户端发送连接请求。
    • 我们无法阻止客户。它们是自治且地理分布的
    【解决方案2】:

    我找到了解决方案。问题是,供应商在没有任何通知的情况下更改了资费计划。新的资费计划限制了最大连接数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2019-04-04
      • 2012-08-18
      • 2016-02-17
      • 2013-03-06
      • 2017-10-09
      相关资源
      最近更新 更多