【问题标题】:RST, ACK after sending huge portion of data发送大量数据后的 RST、ACK
【发布时间】:2012-08-18 07:26:35
【问题描述】:

我有一个 IMAP 服务器 (Dovecot),我试图在其上创建 1,200 个邮箱(用于性能测试)。服务器成功创建邮箱。

在此操作之后,我想列出所有创建的文件夹。服务器发送一些数据,但是,在一段时间(近 1 秒)之后,客户端向服务器发送RSTACK,以响应服务器响应 IMAP 协议关于创建文件夹列表的命令。

这是我的 Wireshark 转储 sn-p:

IMAP: Src Port: imap (143), Dst Port: 56794 (56794), Seq: 29186, Ack: 20533, Len: 24
IMAP: Src Port: 56794 (56794), Dst Port: imap (143), Seq: 20533, Ack: 29210, Len: 15
IMAP: Src Port: imap (143), Dst Port: 56794 (56794), Seq: 29210, Ack: 20548, Len: 16384
TCP: 56794 > imap [ACK] Seq=20548 Ack=45594 Win=49408 Len=0 TSV=3940902 TSER=3940902
IMAP: Src Port: imap (143), Dst Port: 56794 (56794), Seq: 45594, Ack: 20548, Len: 16384
TCP: 56794 > imap [RST, ACK] Seq=20548 Ack=61978 Win=49408 Len=0 TSV=3940902 TSER=3940902

编辑:好吧,我想我知道为什么客户端会发送 RST 标志了。原因是服务器超出了我的 loopback 接口的 MTU 值。我已经检查了示例 Mina 服务器的类似行为 - 那里一切正常,即 TCP/IP 协议抑制了巨大的数据包。所以 Dovecot 无法明智地管理数据包。但是我有自己的 IMAP 服务器(基于 MINA),问题仍然存在!

那么为什么 TCP/IP 协议只对某些应用程序而不是对所有应用程序明智地管理发送的数据包(根据 MTU 值拆分)?

【问题讨论】:

  • 您能否分享 Wireshark 最后几行的更多详细信息?很难弄清楚为什么 RST 是根据迄今为止的信息生成的。
  • 请看我的编辑。我只分享了来自 Wireshark 的有价值的信息 - 你需要什么信息?

标签: tcp imap reset wireshark mtu


【解决方案1】:

您对发送 TCP 重置的原因的假设是不正确的。如果你已经超过了 MTU,那不是由 TCP 管理的。它在 IP 层进行管理,并且将向客户端发送 ICMP“需要分段”消息。这样的消息应该然后导致客户端在 IP 层对数据包进行分段。根据您分享的信息,您的情况并没有发生这种情况。

关于loopback接口,这个流量不会到loopback接口附近的任何地方,不是两个独立的设备吗?

遗憾的是,您的跟踪文件仍然没有提供任何有关此数据包原因的见解 -

IMAP: Src Port: imap (143), Dst Port: 56794 (56794), Seq: 45594, Ack: 20548, Len: 16384

导致 TCP 重置。我无法从这些信息中推断出更多信息。

TCP 有一个名为 Maximum Segment size 的选项,它相似但也不同 :) TCP/IP 堆栈独立于应用程序,不会对每个应用程序应用不同的设置,它是系统范围的。

编辑:查看您的数据包捕获,没有任何迹象表明 MTU 问题。任何地方都没有 ICMP 流量,所以我怀疑这不是问题。如果存在 MTU 问题,它应该在上一个响应中发生,因为来自 IMAP 服务器的两个 LIST 响应大小相同,并且窗口大小没有问题。

我唯一能看到的是最终响应的第一个元素(在 RST 之前),其中部分回复看起来格式不正确(见附件)。 IMAP 应用程序出了点问题,它用来回复的数据格式不正确。 - 查看与 pcap 中所有其他 LIST 响应一致的底部两个响应的差异。

【讨论】:

  • 1) 同样,您想在我的 Wireshark 转储中看到什么?我已经提供了谈话的结束。请查看所有转储4shared.com/file/yE60EDK9/rst.html。 2)我不假装学术术语-是TCP还是IP负责观看MTU,但我认为问题出在MTU附近。当我更改 MTU - 超过此值后发送 RST 标志。 3) 是的,我在 localhost 上有客户端和服务器,这就是我在这里谈论 lo 接口的原因。
  • 1) 我想要完整转储以查看应用程序级别发生了什么。 2) MTU - 分段在IP 标头中,与此问题无关。 3)谢谢,不清楚。碎片化无关紧要的另一个原因。 - 感谢您的完整转储!
  • 从 IMAP 服务器发送的数据格式不正确,因为客户端在服务器响应时发送 RST :) 如果您确定 MTU 不是这里的问题 - 您如何解释在更改 MTU 值后服务器发送最后一个数据包长度几乎等于新的 MTU 值,但在此客户端发送 RST 之后?
  • 在RST之前发送格式错误的数据,再看转储。我没有显示 MTU 更改的转储。如果您只使用本地主机,我看不出 MTU 更改如何影响它。 MTU 的增加会影响你的 MSS,你看过吗?
  • 好的,这是显示 MTU 更改的转储:4shared.com/file/ymJ90Y1s/rst_mtu_555.html。我已将其设置为 555。您可以看到响应比我之前的转储更早中断。你将如何解释这一点?
猜你喜欢
  • 2018-01-03
  • 2020-04-24
  • 1970-01-01
  • 2016-02-17
  • 2013-06-01
  • 2021-05-16
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多