连续数据流TCP协议设计咨询:消息边界同步与分包实现疑问
TCP套接字连续数据流的分包与同步问题
核心需求
我需要在TCP套接字上传输连续数据流,且能控制服务器与客户端实现自定义协议。核心问题是数据流同步——理想状态是像发送数据包一样传输,但TCP是面向流的协议,没有数据包概念,所以必须在应用层处理字节流的分包。
已知方案与疑问
我了解到两种常见的应用层分包方案,但存在疑惑:
- 分隔符标记法:用特定分隔符标记消息的起止,但如果传输二进制数据,必须先编码避免数据中包含分隔符,这会增加额外开销。
- 定长消息/头部长度标识法:据说Modbus TCP采用类似方案,通过事务标识符等信息确定消息结束位置,但我搞不懂怎么确定消息起始位置?而且看到某博客的实现细节,感觉是依赖偶然接收完整数据包,完全不可靠。另外,有说法称Modbus TCP实现依赖调用OS的
recv函数指定长度来接收完整消息,但我信任的资料明确说不能这么做。
补充信息
系统运行在完全可控的LAN环境中。
背景
初期开发时,嵌入式服务器通过TCP发送我认为是“数据包”的数据,PC端用Python的socket.recv总能接收完整的“数据包”;但改用C++(Boost ASIO)实现接收时,才真正意识到TCP里根本没有数据包的概念。
内容的提问来源于stack exchange,提问作者René Becker
相关产品推荐
相关产品推荐

