【问题标题】:TCP Connection Reset by peer and Transport End Point is not connectedTCP Connection Reset by peer and Transport End Point 未连接
【发布时间】:2014-04-04 06:18:51
【问题描述】:

我们在同一台机器上运行 TCP 服务器客户端架构,客户端连接 127.0.0.1:30008 上的服务器。我们看到的是有一段时间 TCP 连接被服务器重置。我们可以清楚地看到,在 tcpdump 跟踪中,RST 标志是由服务器发送的。客户端代码是python,服务端代码是C。

  1. 是什么导致服务器发送这个 RST 平面? ,这个设置已经运行了几个月没有任何问题,所以我们很惊讶地看到现在发生了什么。

  2. TCP 服务器通过另一个 UDP 端口从其他服务器获取数据,并通过 TCP 端口 30008 传输到客户端,客户端在 while 循环中侦听服务器端口。想知道,UDP 连接不会发生这种 Connection RST 问题吗?

  3. 有时我们可以看到服务器正在关闭套接字,因此客户端收到异常“传输端点已关闭”,是什么导致了这种情况发生。客户与此问题有任何关系吗?

我查看了互联网以查看解决方案,我只能看到这可能是由于服务器和客户端之间存在一些路由器,但在我的情况下,情况并非如此。

请帮我弄清楚服务器发生了什么。

EDIT- 这是示例 tcptrace(“tcpdump -r actuall_trace.pcap”的输出)。 tcpdump.log - 您可以在文件末尾看到 RST 标志。此文件包含一个完整的从开始到结束的通信跟踪。

谢谢。

【问题讨论】:

  • 您能否发布一个净化版本(即没有个人或机密信息)在导致 RST 期间的数据包捕获?
  • 我不能把 tcpdump 跟踪文件放在这里,我可以添加屏幕截图或“tcpdump -r dump.pcap”的输出。够了吗?
  • 上传到某个网站并在此处发布链接可能吗?确保其中没有任何机密内容!
  • @cnicutar 更新了问题的链接到已清理的跟踪文件,它只有元数据。

标签: python sockets tcp udp


【解决方案1】:

您的客户端 localhost.36291 正在响应大小为零的接受窗口,向服务器 localhost.30008 表明它无法接收任何数据。

15:52:59.766558 IP localhost.30008 > localhost.36291: Flags [P.], seq 218350:227950, ack 23328, win 768, options [nop,nop,TS val 2017821166 ecr 2017821158], length 9600
15:52:59.767766 IP localhost.36291 > localhost.30008: Flags [P.], seq 23328:23362, ack 227950, win 0, options [nop,nop,TS val 2017821167 ecr 2017821166], length 34

这可能是因为您已填满客户端中的接收缓冲区,也可能是因为您直到空了才从接收缓冲区中读取数据。

在您的 python 代码中,当 select 表示文件描述符上有数据时,您必须从文件描述符中读取,直到没有数据返回(缓冲区清空)。设置socket非阻塞,读到EAGAIN/EWOULDBLOCK

【讨论】:

  • 是的,我们首先检查要从套接字读取的数据的长度(ASN1协议),并读取那么多数据,所以套接字有可能有更多的数据,我们是在下一次迭代中读取剩余数据。我需要尝试这个解决方案并让你知道。谢谢。
  • 如前所述,您应该从 TCP 套接字读取直到清空到代码中的缓冲区并从那里解析 ASN1。准备好存在多个或部分数据结构。显然,如果有部分,你就等着收到更多。
  • 它已经运行了一个星期。目前,我们从 python while 循环中移除了一些开销,以提高客户端获取速度。 C 中的新实现需要一些时间,所以在此之前希望 python 代码对我们有用。谢谢你。我接受你的回复作为一个好的答案。
  • 我测试了你提到的方法并写了一篇关于它的博客文章。它有示例 TCP 服务器和 Python 客户端来模拟这个问题以及修复它的替代方法。请看一下 - haridas.in/… 感谢您的意见。
猜你喜欢
  • 2019-11-04
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 2012-01-18
  • 1970-01-01
  • 2018-08-15
相关资源
最近更新 更多