TCP RST之前收到的数据是否有定义的行为?

Zebra内部打印服务器在ZE500等新型标签打印机上的devise存在问题。 在本说明中,打印服务器是Zebra的打印机以太网接口术语。

我们发现打印机并不总是打印所有要求的标签。 问题是当内部打印服务器收到TCP RST数据包时将转储其缓冲区。 他们的外部打印服务器没有这种行为。

这是情况。 打印服务器基本上是一个以太网到并行转换器。 内部卡连接到并行端口的内部接口。 当数据被发送到打印服务器时,将其caching,然后将其传送到打印机的内存缓冲区。

打印机缓冲区满时,打印服务器将继续接收数据,直到其缓冲区也已满。 此时发送者被告知接收者处于零窗口状态。

发件人完成打印作业时出现问题。 它将一个FIN数据包发送到打印服务器。 打印服务器发送一个带有ZeroWindow的ACK作为响应。 如果打印服务器缓冲区中没有数据,或者此后不久,打印服务器将发送自己的FIN数据包给发件人。

但是,如果数据保留在缓冲区中,发送方将最终发送RST数据包,从而导致连接中断。 这是正常的,但较新的内部打印服务器将重置缓冲区,从而丢失没有进入打印机的任何标签。

外部打印服务器和原始内部模型不。 在这些情况下打印所有的标签。

Zebra表示,新的行为是基于TCP标准的正确行为。

我的问题是,在TCP RST之前接收的数据会发生什么样的定义行为?

对于应用程序背景,操作是客户将X个单独的标签发送到打印机以运行X托盘。 每个托盘都有一些独特的信息,例如当前计数。 托盘可能需要30秒或更长的时间到达打印机,所以当发送者发送打印作业的最后一个包时,他们有2分钟时间清空以太网卡的缓冲区或丢失最后几个标签。