Embedded 保证TCP数据包大小

Embedded 保证TCP数据包大小,embedded,tcp,Embedded,Tcp,我们使用嵌入式设备通过串行到以太网转换器将数据包从串行端口发送到服务器。我们使用的一个制造商,Moxa,总是以相同的方式发送数据包。也就是说,如果我们构造的数据包大小为255,它将始终以255的长度发送数据包。另一个制造商Tibbo,如果我们发送的数据包大小为255,那么如果数据包大小大于128,它就会将数据包分解。这是我当时从Tibbo工程师那里得到的答案: “从我的理解和 工程师们说,即使对方 设备为您提供正确的 数据包大小现在不能保证 当在其他国家实施时 同样的事情也会发生 这就是我们感觉

我们使用嵌入式设备通过串行到以太网转换器将数据包从串行端口发送到服务器。我们使用的一个制造商,Moxa,总是以相同的方式发送数据包。也就是说,如果我们构造的数据包大小为255,它将始终以255的长度发送数据包。另一个制造商Tibbo,如果我们发送的数据包大小为255,那么如果数据包大小大于128,它就会将数据包分解。这是我当时从Tibbo工程师那里得到的答案:

“从我的理解和 工程师们说,即使对方 设备为您提供正确的 数据包大小现在不能保证 当在其他国家实施时 同样的事情也会发生 这就是我们感觉到那包东西的原因 通过TCP进行基于大小的数据传输 不可靠,因为这不是方法 TCP的设计目的是为了使用。”

我知道这可能不是TCP的设计用途,但如果我创建了一个255字节的数据包,并且TCP允许,那么这怎么会超出TCP的工作方式呢?我知道,在某些时候,数据包可能会被破坏,但如果服务器期望某个数据包大小,并且Moxa的产品与Tibbo设备没有相同的问题


那么,有可能保证一个合理的TCP数据包大小吗?

没有。TCP不是一个数据包协议,它是一个流协议。它保证您发送的字节将全部到达,并且以正确的顺序到达,但没有其他内容。特别是,TCP不会给您任何类型的消息或数据包边界。如果您想要这些东西,则需要通过您的协议在更高级别上实现它们

这很奇怪,因为对于另一种产品,我们已经在许多不同的网络上使用了多年,没有出现任何问题,而且数据包的大小总是相同的。从来没有任何问题。一个设备发送一个255字节的数据包,另一个发送两个128字节的数据包这一事实与此无关,只是这些设备的一个功能。如此小的数据包不太可能被网络分割——事实上,有一个最小的数据包大小,但我记不起它是什么。无论哪种方式,服务器代码都需要能够应对这种情况,因为它对TCP的性质做出了错误的假设。@code Monkey:你看得不对。你使用它完全是出于运气。正如你所看到的,一个完全兼容的设备出现了,遵循了所有的规则,你的机制崩溃了。我正要问这个自我相同的问题,因为我有一个技术文档,其中声明“每个周期的所有数据都将在一个包中发送”,并暗示它可以以相同的方式接收。显然,这并非绝对正确。