蓝牙-协议基础

RFCOMM + TCP

RFCOMM协议提供了与TCP大致相同的服务和可靠性保证。尽管规范明确地声明它是为模拟RS-232串行端口而设计的(使制造商更容易向其现有串行端口设备添加蓝牙功能),但在许多与TCP相同的场景中使用它非常简单。
通常,使用TCP的应用程序关心的是拥有一个点对点连接,在这个连接上它们可以可靠地交换数据流。如果数据的一部分不能在固定的时间限制内交付,则连接将终止并交付错误。RFCOMM与它的各种串行端口模拟属性(在大多数情况下,这些属性与网络程序员无关)一起提供了与TCP相同的主要属性。
从网络程序员的角度来看,TCP和RFCOMM之间的最大区别是端口号的选择。TCP在一台机器上最多支持65535个开放端口,而RFCOMM只允许30个。这对如何为服务器应用程序选择端口号有很大的影响,我们将很快对此进行讨论。

L2CAP + UDPUDP

通常用于每个数据包的可靠传递不是至关重要的情况,有时还用于避免TCP引起的额外开销。特别地,选择UDP是为了它的最佳努力,简单的数据报语义。这些都是L2CAP作为通信协议所满足的相同的标准。

默认情况下,L2CAP提供面向连接的协议,该协议可靠地发送固定最大长度的各个数据报。 L2CAP可以完全自定义,因此可以配置为具有不同级别的可靠性。 为了提供这项服务,基于L2CAP的传输协议采用了传输/确认方案,在该方案中,未确认的数据包被重新传输。 应用程序可以使用三种策略:

  • 永远不会重新发送
  • 重新传输直到完全连接失败(默认)
  • 如果在指定的时间限制(0-1279毫秒)之后数据包没有得到确认,则丢弃一个数据包并转移到排队的数据。当数据必须以及时的方式传输时,这是有用的。

虽然蓝牙允许应用程序使用最佳努力通信而不是可靠通信,但有几点需要注意。其原因是,调整到另一个设备的单个L2CAP连接的传递语义会影响到到该设备的所有L2CAP连接。如果一个程序调整到另一个设备的L2CAP连接的传递语义,它应该注意确保没有到该设备的其他L2CAP连接。此外,由于RFCOMM使用L2CAP作为传输,因此到该设备的所有RFCOMM连接也会受到影响.

除了放宽L2CAP的传递语义的限制外,当应用程序不需要RFCOMM的开销和基于流的特性时,它可以作为一种合适的传输协议,并且可以在许多使用UDP的相同情况下使用。

RequirementInternetBluetooth
Reliable, streams-basedTCPRFCOMM
Reliable, datagramTCPRFCOMM or L2CAP with infinite retransmit
Best-effort, datagramUDPL2CAP (0-1279 ms retransmit)
tips
  • L2CAP规范实际上允许无连接和基于连接的通道,但是在实践中很少使用无连接通道。由于向设备发送“无连接”数据需要加入它的piconet(一个只需要在较低级别建立连接的耗时过程),因此无连接L2CAP通道与面向连接的通道相比没有任何优势。
  • 默认的最大长度是672字节,但是最多可以协商为65535字节
  • 异步无连接逻辑传输

端口号和服务发现协议

一旦知道了数字地址和传输协议,弄清如何与远程计算机进行通信的第二部分是选择端口号。 几乎所有常用的Internet传输协议都是以端口号的概念设计的,因此同一主机上的多个应用程序可以同时使用传输协议。 蓝牙也不例外,但使用的术语略有不同。 在L2CAP中,端口称为协议服务多路复用器,并且可以采用1到32767之间的奇数值。在RFCOMM中,可以使用通道1-30。 除了这些差异之外,协议服务多路复用器和通道都达到与端口在TCP / IP中相同的目的。 与RFCOMM不同,L2CAP具有一定范围的保留端口号(1-1023),这些端口号不用于自定义应用程序和协议。 表2-2中汇总了此信息。 在本文档的其余部分中,为清楚起见,使用端口一词代替协议服务多路复用器和通道。

Table 2-2
protocolterminologyreserved/well-known portsdynamically assigned ports
TCPport1-10241025-65535
UDPport1-10241025-65535
RFCOMMchannelnone1-30
L2CAPPSModd numbered 1-4095odd numbered 4097 - 32765

在Internet编程中,服务器应用程序通常使用众所周知的端口号,这些端口号是在设计时选择并同意的。 客户端应用程序将使用相同的知名端口号连接到服务器。 这种方法的主要缺点是无法运行两个使用相同端口号的服务器应用程序。 由于TCP / IP相对较年轻,并且有大量可用的端口号可供选择,因此这尚未成为一个严重的问题。

但是,蓝牙传输协议的可用端口号要少得多,这意味着我们不能在设计时选择任意的端口号。虽然这个问题对于L2CAP来说没有那么严重,L2CAP有大约15,000个未保留端口号,但RFCOMM只有30个不同的端口号。这样做的结果是,只有7个服务器应用程序发生端口号冲突的几率超过50%。在这种情况下,应用程序设计人员显然不应该任意选择端口号。蓝牙对这个问题的回答是服务发现协议。

蓝牙方法不是在应用程序设计时商定要使用的端口,而是在运行时分配端口,并遵循发布-订阅模型。主机操作一个服务器应用程序,称为SDP服务器,它使用少数L2CAP保留端口号之一。其他服务器应用程序在运行时动态分配端口号,并向SDP服务器注册它们自己和它们提供的服务(以及分配给它们的端口号)的描述。然后,客户端应用程序将查询特定a上的SDP服务器(使用定义良好的端口号)。

这就提出了一个问题,客户如何知道哪一种描述是他们正在寻找的。在蓝牙中做到这一点的标准方法是在设计时分配一个128位的数字,称为通用唯一标识符(UUID)。遵循选择该编号的标准方法,可以保证从遵循相同方法的其他人所选择的UUID中选择唯一的UUID。因此,使用相同UUID设计的客户机和服务器应用程序可以将这个数字作为搜索词提供给SDP服务器。

与RFCOMM和L2CAP一样,此处仅描述了SDP的一小部分-与网络程序员最相关的那些部分。 使用SDP的其他方式包括描述服务器使用的传输协议,提供信息(例如对提供的服务的人可读描述以及提供服务的人)以及在UUID以外的字段上进行搜索(例如 服务名称。 值得一提的另一点是,创建蓝牙应用程序甚至不需要SDP。 完全有可能恢复到在设计时分配端口号并希望避免端口冲突的TCP / IP方式,这通常可以节省一些时间。 在计算机科学实验室等受控环境中,这是相当合理的。 但是,最终,要创建可在大多数情况下运行的便携式应用程序,该应用程序应使用动态分配的端口和SDP。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝牙协议栈BTstack是一种为蓝牙设备开发的基础框架。它旨在为使用低功耗蓝牙协议(BLE)和传统蓝牙协议(BR / EDR)的设备提供通用接口。 BTstack提供了一组API,使开发人员可以使用不同平台上的相同代码来处理蓝牙样式的应用程序。 BTstack提供的API包括协议栈初始化,L2CAP,RFCOMM,SDP,ATT / GATT等。 BTstack的另一个优点是它是一个开源项目,可以在许多平台上使用。它已被移植到多种硬件平台和操作系统中,例如ARM Cortex-M3 / M4(例如STM32),ATmega,Arduino,Raspberry Pi,Windows,Linux,macOS和iOS。 BTstack的应用广泛,包括智能手机,平板电脑,手表,耳机,音响,传感器和医疗设备。随着IoT设备的普及,BTstack将越来越受到重视。 总之,BTstack是一个功能强大、开源、跨平台的蓝牙协议栈,为开发人员提供了通用API,使他们可以在不同的平台上开发相同的应用程序。它是蓝牙设备开发者的重要工具之一。 ### 回答2: 蓝牙协议栈是指一套硬件和软件技术,用于使不同设备间的数据传输更加方便快捷。蓝牙协议栈的运行方式是通过多层协议交互实现的,向上层应用提供数据传输的支持,向下层硬件提供调用接口。 BTstack是一种开源的蓝牙协议栈,提供了高效、可靠和易于使用的终端设备的蓝牙连接。BTstack支持各种蓝牙协议,包括BLE、HFP、A2DP、AVRCP和SPP等,可以在不同的操作系统和硬件平台上使用。BTstack的优点在于它是可移植的,可以快速适应各种不同的蓝牙设备。 BTstack还支持多个蓝牙连接,并提供了稳定的设备连接,具备智能重连和设备发现功能,同时还支持多个蓝牙配置文件。BTstack还支持单片机,特别是ARM Cortex-M处理器,以及一些嵌入式系统平台。 总之,BTstack是一种强大的、稳定的、高度可移植的蓝牙协议栈,可以帮助开发者快速开发出高效、可靠的蓝牙连接应用。 ### 回答3: 蓝牙协议栈是用来实现蓝牙通信协议的软件模块,因此需要进行一系列的层次化操作,这些层次可以分为物理层,链路层,传输层,应用层。而btstack则是其中一个基于C语言的开源协议栈。 btstack采用了模块化的设计,每个模块之间相对独立,且易于扩展。可以在移植到不同平台上时,很容易添加某些特定的硬件驱动和操作系统。同时,btstack也提供了丰富的API接口,便于快速实现各种蓝牙应用,例如数据传输、音频传输、打印机、键盘/鼠标等等。 除此之外,btstack还支持免费开源的蓝牙协议栈,可供个人开源项目和商业开发者使用。同步提供了符合不同使用场景的两种许可证:BSD和GPLv2。且支持大部分操作系统,包括Windows、MacOS、Linux、Android、IOS 和Windows Phone等,在各个平台上表现出色。 总而言之,btstack是个高度模块化、可移植性高、及具有完整的特性和相同的性能的优秀蓝牙堆栈。它极大地推进了蓝牙技术的发展,且为蓝牙应用开发者提供了更多的灵活自由,是目前蓝牙通信领域应用很广泛的协议栈。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值