蓝牙协议(RFCOMM、L2CAP和ACL)

20

根据我阅读的《面向程序员的蓝牙基础知识》一书,这本书提到了一些我不太理解的地方。

RFCOMM是一种可靠的基于流的协议。L2CAP是一种基于数据包的协议,可以配置不同程度的可靠性。

L2CAP实际上作为RFCOMM的传输协议,因此每个RFCOMM连接实际上都被封装在一个L2CAP连接中。

这真的让我很困惑,因为这两个协议是不同类型的协议(一个是基于流的,而另一个是基于数据包的)。所以根据它的解释,我有以下问题。

  1. 由于RFCOMM连接被封装,那么串口配置文件(SPP)如何使用RFCOMM连接?它也应该使用L2CAP。

  2. A2DP使用L2CAP连接。对我来说,这意味着与RFCOMM一样,L2CAP和RFCOMM都被封装在ACL连接中,这是否意味着A2DP使用ACL连接?我知道这是不正确的,但在这里如何解释。

感谢任何这里的解释。


9
谢谢。我认为这些问题也与蓝牙编程有关。如果您能解释上述问题,那将是很好的。 - Sam
封装可以在“设备”驱动程序层进行,因此对您来说是不可见的,就像您从未“创建”以太网数据包一样,但仍然可以原生地使用TCP/IP,为什么?在这里也是一样,RFCOMM使用L2CAP,但并不意味着您需要了解L2CAP才能使用。 - Noam Rathaus
好的,你的意思是程序员只需要创建rfcomm,我们不需要知道RFCOMM被封装在L2CAP中。感谢您的解释。根据您提到的和我从书中读到的内容,我不明白为什么RFCOMM需要封装在L2CAP中。比如SPP,它可以纯粹使用RFCOMM连接。这种封装有什么优势呢? - Sam
你好,能否在答案部分回复而不是在这里添加评论呢? 这样我就可以将您的回复作为此问题的答案进行检查。 所以您的意思是封装的基本设计思想是帮助RFCOMM在这种情况下不会出现任何信号问题。这是一个很好的解释,但您能否更详细地解释一下或者举个例子说明为什么需要封装呢?非常感谢。 - Sam
1
嘿,@nrathaus有时扮演警察会适得其反,这取决于在你上面的评论后面的点赞数量。如果不是因为Stack Overflow,我就不会对L2CAP的查询有如此显著的命中率,而我对此很感兴趣,因为我想开始编写蓝牙堆栈的代码。所以感谢SO和发布问题的Sam。 - clearlight
显示剩余3条评论
1个回答

9
封装可以在"设备"驱动程序级别进行,这样对你来说就是不可见的,就像你从未"创建"过以太网数据包一样,但你仍然能够本地使用TCP/IP,为什么?同样的道理,在这里RFCOMM使用L2CAP,但并不意味着你需要了解L2CAP才能使用。
通常情况下,封装用于当你不想处理其他事情时,就像在这种情况下它们不想处理串行接口的信令问题一样,RFCOMM用于串行接口。

你好,能否再提供一个关于为什么需要封装的例子?你能详细地解释一下吗?谢谢。 - Sam
很好的回答@nrathaus。面向对象编程封装了各种东西,而类使机制不透明。您甚至可以有两个相同类的对象通过通信协议进行通信,而从未看到底层协议的实际操作,但能够利用派生服务。 - clearlight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接