【问题标题】:Does RFCOMM use threeway handshake?RFCOMM 是否使用三向握手?
【发布时间】:2017-01-16 11:46:28
【问题描述】:
我现在有一个任务来评估 android 上蓝牙通信的 RTT,但是由于 L2CAP is no longer supported on android 我必须使用 RFCOMM 计算 RTT,据我了解,这基本上是一个可靠的实现,很像蓝牙的 TCP。
我的问题是 RFCOMM 是否使用与 TCP (SYN/SYN-ACK/ACK) 相同的三次握手?
如果是这样,从蓝牙客户端到蓝牙服务器的 RTT大概是建立连接所花费的时间乘以 2/3(因为 RTT 只是 SYN/SYN-ACK 所花费的时间,而连接所花费的时间是 SYN/SYN-ACK/ACK )?
【问题讨论】:
标签:
android
bluetooth
rfcomm
【解决方案1】:
RFCOMM 连接建立没有三次握手。
RFCOMM 基于 ETSI 标准GSM 07.10 并在 HDLC 异步平衡模式下工作。
RFCOMM 规范可见here
通信大致可以分为控制通道连接(即通道0)、端口配置和数据通道连接(可选包括Authentication),然后是数据交换。
连接拒绝方案更清楚地显示了 SABM 框架的使用。
注意连接建立中的 SABM-UA 和连接拒绝中的 SABM-DM。
连接本身是由SABM(set Asynchronous Balanced Mode)帧和UA(用户确认)建立的。端口协商通过 PN 帧完成。UIH 帧用于在已建立的通道上交换数据。
【解决方案2】:
我的问题是 RFCOMM 是否使用与 TCP 相同的三次握手
(SYN/SYN-ACK/ACK)?
没有。
蓝牙上的RFCOMM是在L2CAP之上的,也就是说我们可以看到L2CAP通道是一个可靠的通道(如果没有flush配置)并且RFCOMM只占用一个L2CAP通道,基于这个通道,我们划分了一个信号通道和一些数据通道(可能还有30多个?我记不太清楚了)。要打开一个 RFCOMM 数据通道,只需在信号通道上处理一些请求,然后上层(例如 SPP、HFP)就可以通过分配的数据通道进行通信。
没有 ACK/SYN-ACK/ACK 则建立 RFCOMM,但它们有信用可用于通道建立后的流量控制。