我们正在开发一个应用程序,它将通过蓝牙使用SPP (串行端口配置文件),开发人员正在讨论使用某种类型的协议和数据包传送,而不是仅仅在没有任何形式的ACK、序列或大小信息的情况下流式传输数据。
蓝牙是否提供了有保证的传输和数据完整性,以便我们不需要数据包协议设计的开销?我们能仅仅依靠蓝牙来确保数据的传送吗?
发布于 2017-07-21 23:07:40
送货有保证吗?
交货的顺序是有保证的。这是由于蓝牙协议的较低层中内置的确认/序列编号方案。因此,在较低层,分组被重传,直到它被确认。请注意,这等同于停止并等待ARQ方案。如果超过一个超时时间,则认为连接丢失(通常为30秒)
数据完整性是否得到保证?
蓝牙4.2引入了BT secure connection.This,每个发送的数据包都包含一个消息完整性检查( MIC ),接收端的MIC不匹配将触发重新传输,并且许多MIC不匹配可能会断开连接。
因此,如果您没有使用安全连接功能,那么完整性将得不到保证。存在用于保护数据的16位CRC方案,但众所周知,在很长一段时间内将存在CRC转义(位翻转使得CRC保持正确)。但这种情况相对较少,而且发生在嘈杂的环境中。如果您的应用程序需要非常高的数据完整性,那么可以使用SecureConnection或引入应用程序级完整性检查。
请注意,SPP配置文件本身没有任何错误/序列检查,RFCOMM具有检查报头损坏的8位FCS (帧检查序列)。L2CAP流/重传模式有一个可选的16位FCS,它覆盖了L2CAP报头和数据,请注意,基本L2CAP模式根本没有FCS。
如果您可以选择启用RFCOMM,那么在较低级别的16位L2CAP + L2CAP层的16位FCS +RFCOMM级别的8位FCS将提供足够好的数据完整性,适用于大多数应用程序。但是,如前所述,如果确实很关键,则需要引入额外的应用程序级完整性检查。
发布于 2017-07-21 04:10:22
从本质上讲,BT有自己的安全转移机制。然而,这一点同样重要-我想让您知道数据开始和结束的时间,您应该使用数据包类型的传输,例如STX和ETX来分隔每个数据包。有些加密狗有这样的坏习惯,即在传输过程中出现延时时会重复最后发送的字节,但遇到ETX或EOT时会停止。而且,为了您的系统安全,您也可以在数据包的末尾包含一个校验和。那你就很确定。
https://stackoverflow.com/questions/33397802
复制相似问题