【问题标题】:Guarantee TCP Packet Size保证 TCP 数据包大小
【发布时间】:2011-04-18 23:46:08
【问题描述】:

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

“根据我的理解和 工程师说,即使其他 设备为您提供权利 数据包大小现在不能保证 当在其他实施时 网络同样会发生。这 是我们感觉到那个包的原因 通过 TCP 进行基于大小的数据传输 不可靠,因为它不是这样 TCP 是为使用而设计的。”

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

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

【问题讨论】:

    标签: embedded tcp


    【解决方案1】:

    没有。 TCP 不是数据包协议,它是流协议。它保证您发送的字节都会以正确的顺序到达,但仅此而已。特别是,TCP 不给您任何类型的消息或数据包边界。如果你想要这样的东西,它们需要由你的协议在更高级别上实现。

    【讨论】:

    • 这很奇怪,因为对于其他产品,我们已经在许多不同的网络上使用它多年,没有任何问题,而且数据包的大小始终相同。从来没有任何问题。
    • 一个设备发送一个 255 字节的数据包,另一个发送两个 128 字节的数据包这一事实无关紧要,只是设备的功能。这么小的数据包不太可能被网络分割——事实上,有一个最小的数据包大小,但我不记得它是什么。无论哪种方式,服务器代码都需要能够应对这种情况,因为它对 TCP 的性质做出了错误的假设。
    • @Code Monkey:你看错了。纯粹靠运气,您可以毫无问题地使用它。如您所见,出现了完美兼容的设备,遵循所有规则,您的机制崩溃了。
    • 我正要问这个同一个问题,因为我有一份技术文档,其中指出“每个周期的所有数据都将在一个数据包中发送”并暗示可以以相同的方式接收它。显然,这不是完全正确的。
    猜你喜欢
    • 2016-03-19
    • 2020-05-25
    • 2010-09-28
    • 1970-01-01
    • 2010-12-23
    • 2021-03-10
    • 2015-08-26
    • 2011-08-13
    相关资源
    最近更新 更多