我们正在开发一个将通过蓝牙使用SPP(串行端口配置文件)的应用程序,开发人员正在使用某种类型的协议和数据包传输进行辩论,而不是仅使用任何形式的ACK,序列或大小信息来传输数据
蓝牙是否提供有保证的传输和数据完整性,以便我们不需要数据包协议设计的开销?我们可以仅依靠蓝牙来确保数据的交付吗?
答案 0 :(得分:1)
本质上,BT有自己的转移安全机制。但是,这同样重要 - 我命令您知道数据何时开始和结束,您应该使用数据包类型传输(例如STX和ETX)来划分每个数据包。如果传输中有时间间隔,有些加密狗会遵守重复最后发送字节的坏习惯,但是当遇到ETX或EOT时它们会停止。 而且,为了您的系统安全,您还可以在数据包末尾包含校验和。那你很确定。
答案 1 :(得分:1)
是保证交货吗?
保证交货顺序。这是由于内置于蓝牙协议的较低层的确认/序列编号方案。所以在较低层,一个数据包被重新传输,直到它被确认。请注意,这相当于停止和等待ARQ方案。如果超过超时,则认为连接丢失(通常为30秒)
是否保证数据完整性?
蓝牙4.2引入了BT安全连接。这包括每个传输的数据包的消息完整性检查(MIC)和接收端的MIC不匹配将触发重新传输,并且许多MIC不匹配可能会断开连接。
因此,如果您不使用安全连接功能,则无法保证完整性。存在用于保护数据的16位CRC方案,但是已知在长时间段内将存在CRC转义(位翻转以CRC保持正确的方式)。但这是相对罕见的,发生在嘈杂的环境中。如果您的应用程序需要非常高的数据完整性,则使用SecureConnection或引入应用程序级完整性检查。
请注意,SPP Profile本身没有任何错误/序列检查,RFCOMM有一个8位FCS(帧校验序列),用于检查报头是否损坏。 L2CAP流/重传模式有一个可选的16位FCS,涵盖L2CAP报头和数据。请注意,基本的L2CAP模式根本没有FCS。
如果您可以选择启用L2CAP FCS,那么您在L2CAP层的低级+ 16位FCS处具有16位CRC,而RFCOMM级别的8位FCS将提供足以满足大多数应用的数据完整性。但是如前所述,如果它非常重要,那么您需要引入额外的应用程序级完整性检查。