保证TCP数据包大小

2 embedded tcp

我们使用嵌入式设备通过串口转以太网转换器将数据包从串口发送到服务器.我们使用的一家制造商Moxa将始终以与构建它们相同的方式发送数据包.这意味着,如果我们构造一个255的数据包大小,它将始终以255长度发送数据包.另一个制造商Tibbo,如果我们发送数据包大小为255,如果它大于128,它将打破数据包.这是我当时收到Tibbo工程师的答案:

"根据我的理解和工程师的说法,即使其他设备为您提供正确的数据包大小,现在并不能保证在其他网络中实现同样的情况.这就是我们认为基于数据包大小的数据的原因通过TCP传输是不可靠的,因为它不是TCP的设计方式."

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

那么,是否可以保证合理的TCP数据包大小?

dty*_*dty 11

不.TCP不是分组协议,它是流协议.它保证您发送的字节全部到达,并且顺序正确,但没有别的.特别是,TCP不会为您提供任何类型的消息或数据包边界.如果您需要这些东西,则需要通过协议在更高级别实施.

  • 一个设备发送一个255字节的数据包而另一个发送两个128字节数据包的事实是无关紧要的,它只是设备的一个功能.这么小的数据包不太可能被网络碎片化 - 实际上,有一个最小的数据包大小,但我不记得它是什么在我的头顶.无论哪种方式,服务器代码都需要能够应对这种情况,因为它对TCP的性质做出了错误的假设. (2认同)