服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

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

Zebra内部打印服务器在ZE500等新型标签打印机上的devise存在问题。 在本说明中,打印服务器是Zebra的打印机以太网接口术语。 我们发现打印机并不总是打印所有要求的标签。 问题是当内部打印服务器收到TCP RST数据包时将转储其缓冲区。 他们的外部打印服务器没有这种行为。 这是情况。 打印服务器基本上是一个以太网到并行转换器。 内部卡连接到并行端口的内部接口。 当数据被发送到打印服务器时,将其caching,然后将其传送到打印机的内存缓冲区。 打印机缓冲区满时,打印服务器将继续接收数据,直到其缓冲区也已满。 此时发送者被告知接收者处于零窗口状态。 发件人完成打印作业时出现问题。 它将一个FIN数据包发送到打印服务器。 打印服务器发送一个带有ZeroWindow的ACK作为响应。 如果打印服务器缓冲区中没有数据,或者此后不久,打印服务器将发送自己的FIN数据包给发件人。 但是,如果数据保留在缓冲区中,发送方将最终发送RST数据包,从而导致连接中断。 这是正常的,但较新的内部打印服务器将重置缓冲区,从而丢失没有进入打印机的任何标签。 外部打印服务器和原始内部模型不。 在这些情况下打印所有的标签。 Zebra表示,新的行为是基于TCP标准的正确行为。 我的问题是,在TCP RST之前接收的数据会发生什么样的定义行为? 对于应用程序背景,操作是客户将X个单独的标签发送到打印机以运行X托盘。 每个托盘都有一些独特的信息,例如当前计数。 托盘可能需要30秒或更长的时间到达打印机,所以当发送者发送打印作业的最后一个包时,他们有2分钟时间清空以太网卡的缓冲区或丢失最后几个标签。