gpt4 book ai didi

c++ - tcp数据包重组

转载 作者:可可西里 更新时间:2023-11-01 02:51:06 25 4
gpt4 key购买 nike

我正在解析一个包含大量需要解析的 tcp 数据包的文件。问题是它们被分割了,我找不到任何迹象表明它们何时何地这样做。没有标志或任何其他指示,当前数据包的中间可能包含下一个数据包的开头。 tcp 之上的协议(protocol)是 FIX(用于在线交易),但我希望我的代码能够使用任何协议(protocol)(或者至少了解它是哪个协议(protocol))。我正在用 C++ 编写代码,不能使用任何其他库。那么,我如何弄清楚 tcp 之上的协议(protocol)是什么以及它在何处分段?

最佳答案

你不能。 TCP/IP 在概念上是一个流,而不是一个消息序列(它最终实现为一个数据包序列的事实是无关紧要的)。当您将字节序列写入 TCP/IP 流时,该序列将添加到流中;它不被视为应保持其自身身份的消息。消息开始/结束的概念不会随流一起传输,除非您在自己的协议(protocol)中自己这样做。

如果您觉得这难以置信,请考虑它是如何用于文件的:如果您将一个字节序列写入一个文件,该序列不会以某种方式成为您以后可以识别和检索的记录。如果你想要那种结构,你必须自己添加它。 TCP/IP 也是如此。

用于实现 TCP/IP 的传输数据包与您通过 API 调用指定的数据 block 无关;它们只是实现 TCP/IP 流的一种方式。对于某些用例,似乎存在映射,但这是偶然的。

将 TCP/IP 流拆分回单独的消息的唯一方法是使用运行在 TCP/IP 之上的协议(protocol)的知识。在您的情况下,这是 FIX。我假设你知道它是如何工作的;您可以使用该知识将 FIX 数据正确拆分回其原始消息。无法制作通用的 TCP/IP 消息拆分器。

关于c++ - tcp数据包重组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38562127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com