我有一个 IMAP 服务器 (Dovecot),我正在尝试在其上创建 1,200 个邮箱(用于性能测试)。服务器成功创建邮箱。
在此操作之后,我想列出所有创建的文件夹。服务器发送一些数据,但是,在一段时间(近 1 秒)后,客户端发送RST
,ACK
到服务器,以响应服务器响应 IMAP 协议关于创建的文件夹列表的命令。
这是我的 Wireshark 转储片段:
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标志是由客户端发送的。原因是服务器超出了我的环回接口的MTU值。我已经检查了示例 Mina 服务器的类似行为 - 那里一切正常,即 TCP/IP 协议抑制了巨大的数据包。所以Dovecot不能明智地管理数据包。但是我有自己的 IMAP 服务器(基于 MINA),问题仍然存在!
那么,为什么 TCP/IP 协议只对某些应用程序而不是对所有应用程序明智地管理发送的数据包(根据 MTU 值拆分它们)呢?