4

我正在设备之间传输数据,我必须将协议编程为字节数组。

在低级别构建协议时有什么技巧吗?.. 例如:

  • 使用 2 字节标头,在数据字节之前发送消息的长度。
  • 使用 CRC/数据验证方案。(我该怎么做?任何简单的校验和?)
4

4 回答 4

2

它取决于底层传输层的 QoS(服务质量)特性。

如果底层通道是可靠的,那么 CRC 可能是多余的(假设某种形式的完整性检查是在较低的协议层完成的)。

如果您询问如何从字节流中描述您的有效负载,那么有几种可能性,其中一种可能只是对您的流进行 BASE64 编码/解码。再说一次,根据您的要求,BASE64 可能会转化为过多的开销。

当然,您始终可以使用在有效负载中出现概率较低的 HEADER(唯一序列+有效负载长度+CRC),但随后您需要在有效负载上应用加扰器以最大限度地减少重复您的 HEADER 等的可能性。


如果您正在寻找为不可靠的面向字节流的协议构建协议,那么为什么要重新发明轮子呢?为什么不使用 PPP 之类的东西?

于 2009-11-14T20:37:19.743 回答
1
  1. 在设置结构之前,请明智地考虑所有情况。
  2. 使标头更大一点,即使在其中发送零字节也是如此。
  3. 将标题分成几个部分。这当然取决于您的要求,例如控制字节、消息长度字节、格式字节...等

关于校验和,取决于底层协议。但是你可以自己实现一个。Encrypt, Hash, Crunch, Flip, 2s 补全消息并将结果存储在一个校验字节中

于 2009-11-14T21:17:01.193 回答
0

仔细考虑您是否可以拥有人类可读的协议
然后考虑是否可以使用压缩而不是原始二进制文件

于 2009-11-14T20:37:50.850 回答
0

重要部分取决于较低层提供的内容。以下是解释我认为重要的原因的示例:

  • 我曾经参与过ITU H.223协议的实现。最糟糕的是,数据流甚至可能是基于字节或比特流的,而低层除了原始比特之外什么都没有。根据上层的传输可靠性和功能要求,协议有几个可能的层。

  • 另一个例子是基于 TCP 的 ITU H.225 协议,其中传输是可靠的,但它是字节流。所以它必须是良好的消息定界逻辑实现。

  • 好吧,基于 UDP 的 SIP。数据报。很有用。但是有很多麻烦与消息传递的可靠性有关。所以排序和请求/响应跟踪(事务,腿......)非常重要。

  • 好的,由于某些原因,我们使用了 RPC 协议。如果你很懒,那是好事。一些与应用程序逻辑相关的限制,但我建议你看看这个,即使只是为了学习。

  • NASA IPC 是我不久前关注的东西。很好,与上层相关的非常简单。但它是集中的什么是限制。

另一个关键点是:您应该首先考虑您的需求来设计协议分析上层需求)。如果你真的需要这样做(例如),你会用知识 CRC-32 提供什么是保护数据完整性而不是分析的最佳方法?

好吧,我认为这些提及可能会帮助您以稍微不同的观点思考主题。

于 2009-11-14T20:50:12.650 回答