1. 前言

蓝牙是个奇葩的家伙:它总是以后来者的身份出现,很喜欢打仗,而且还不落下风(有点像某讯的风格)。90年代末期和Wi-Fi的无线标准之争如此,当前和802.15.4系(ZigBee、RF4CE、Thread等)的IoT之争,也如此。

90年代末期,蓝牙刚出道的时候,就曾叫嚣着把Wi-Fi(802.11)从地球上抹去。反过来,1999年Wi-Fi 802.11b标准发布后,也宣称会把蓝牙干掉。最终,二者划江而治,瓜分了天下,Wi-Fi占据了家庭和办公室中的电脑网络,而蓝牙成为了广受欢迎的电脑和外设之间的连通性工具。

与此同时,在IoT的战场上,以ZigBee(2001年)为代表的802.15.4技术,苦心经营近15年,依旧不愠不火、默默无闻,而蓝牙BLE技术问世(2010年)至今,短短5年左右的时间,已经红遍大江南北,装机量爆棚。于是,硝烟再起。

标准之争,不是本文的议题,我们要思考的问题是:蓝牙有何长处,可以支撑它四处征战?答案是“灵活性”。本文将以用于支持IPv6的IPSP(Internet Protocol Service Profile)为例,说明这个特性。

2. IPSP(Internet Protocol Service Profile)

我们知道,ZigBee等基于802.15.4标准衍生出的无线标准,有4大杀手锏:低功耗、低成本、IP组网(基于6LoWPAN)和自组网(Mesh network)。蓝牙在2010年推出Bluetooth4.0(BLE)之后,低功耗和低成本方面,已经旗鼓相当了。那IP组网和自组网呢?

抛开自组网技术不谈(Bluetooth® Smart Mesh工作组已经成立,标准草稿已经讨论到第7版,今年有望发布),先看看在BLE的基础上,增加IPv6的支持,需要新增多少工作量。

如果我告诉你,仅需不超过5页的规范文档、不超过50行的代码,你相信吗?

蓝牙技术联盟(Bluetooth SIG)为支持基于BLE的IPv6,仅仅做了一件事情:在Bluetooth4.1推出之后,发布了一份总页数为14页、有效内容不足5页的Profile规范----Internet Protocol Support Profile[1],用于支持Internet Protocol(IPv6)。该Profile在BLE协议栈中的定义如下:

图片1 IPSP协议栈

看似复杂,但仅仅左上角那个小小的红色block(IPSS)属于新增内容,具体如下。

2.1 IPSP profile

IPSP是Internet Protocol Support Profile的缩写,它是一个蓝牙profile,规定了“IPv6 over BLE”这样一个应用场景,要怎么实现。主要包括:

1)定义两个角色,IPSP Node和IPSP Router。IPSP Router是用来转发IPv6 packet的设备,IPSP Node只能产生或者消费IPv6 packet。如果某一个Router需要连接其它Router,它可以同时实现Node和Router两种角色。

2)Node需要提供一个用于服务发现(Service discovery)的功能,以便让Router发现它。由“蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍”中的描述可知,BLE使用GATT作为服务发现。因此,Node基于GATT,提供了IPSS(Internet Protocol Support Service),用于服务发现。

3)IPv6 packets在Node和Router之间通过面向连接的L2CAP传输,并使用LE_PSM_IPSP(0x0023)作为协议识别码(需要在连接建立的时候提供)[3],同时规定MTU为1280。

4)在L2CAP之上,依次是6LoWPAN、IPv6、UDP、TCP等网络协议栈,不过已经和蓝牙无关了。

2.2 IPSS service

IPSS(Internet Protocol Support Service)提供了一个名称为IP Support Service UUID(0x1820[6])的GATT service[5],用于服务发现。

2.3 6LoWPAN、IPv6、UDP、TCP等网络协议栈

6LoWPAN是IPv6 over Low power Wireless Personal Area Networks的缩写,是为了在802.15.4网络上传输IPv6 packet而提出的一个标准,包括了帧格式的定义、地址的自动配置、IP header的压缩算法等。

IPv6、UDP、TCP等都是标准协议,就不多说了。

3. IETF RFC7668[2]

IPSP规范发布之后,IETF(Internet Engineering Task Force,互联网工程任务组)便发布了名称为“IPv6 over BLUETOOTH(R) Low Energy”的RFC7668标准[2],该标准详细规定了基于蓝牙BLE的IPv6组网方式,以及一些实现细节。

下面是摘录的两种组网方式,可以看出,已经和传统的IP网络没有什么区别了:

注:6LN是6LoWPAN Node缩写,对应IPSP中的IPSP Node,6LBR是6LoWPAN Board Router的缩写,对应IPSP中的IPSP Router。

4. 参考文档

[1] IPSP SPEC, 1.0, https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=296307

[2] IETF RFC7668, IPv6 over BLUETOOTH(R) Low Energy, https://datatracker.ietf.org/doc/rfc7668/?include_text=1

[3] LE_PSM_IPSP, https://www.bluetooth.com/specifications/assigned-numbers/logical-link-control

[4] http://embedded-computing.com/articles/bluetooth-smart-and-zigbee-if-you-cant-beat-them-join-them/

[5] 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍

[6] https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx

[7] IETF RFC4944, https://tools.ietf.org/html/rfc4944

原创文章,转发请注明出处。蜗窝科技,www.wowotech.net。

蓝牙协议分析(4)_IPv6 Over BLE介绍的更多相关文章

  1. 蓝牙协议分析(3)_BLE协议栈介绍

    1. 前言 通过“蓝牙协议分析(2)_协议架构”的介绍,大家对蓝牙协议栈应该有了简单的了解,但是,肯定还有“似懂非懂.欲说还休”的感觉.有这种感觉太正常了,毕竟蓝牙协议是一个历史悠久又比较庞大的协议, ...

  2. 蓝牙协议分析(7)_BLE连接有关的技术分析

    转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connec ...

  3. 蓝牙协议分析(11)_BLE安全机制之SM

    1. 前言 注1:此SM是Security Manager的缩写,非彼SM,大家不要理解歪了! 书接上文,我们在“蓝牙协议分析(10)_BLE安全机制之LE Encryption”中介绍了BLE安全机 ...

  4. 蓝牙协议分析(10)_BLE安全机制之LE Encryption

    1. 前言 前面文章介绍了两种BLE的安全机制:白名单[4]和LL privacy[3].说实话,在这危机四伏的年代,这两种“捂着脸讲话(其它人不知道是谁在讲话,因而不能插话.不能假传圣旨,但讲话的内 ...

  5. 蓝牙协议分析(9)_BLE安全机制之LL Privacy

    1. 前言 在上一篇文章[1]中,我们介绍了BLE的白名单机制,这是一种通过地址进行简单的访问控制的安全机制.同时我们也提到了,这种安全机制只防君子,不防小人,试想这样一种场景: A设备表示只信任B. ...

  6. 蓝牙协议分析(8)_BLE安全机制之白名单

    1. 前言 在万物联网的时代,安全问题将会受到非常严峻的挑战(相应地,也会获得最大的关注度),因为我们身边的每一个IOT设备,都是一个处于封印状态的天眼,随时都有被开启的危险.想想下面的场景吧: 凌晨 ...

  7. 蓝牙协议分析(5)_BLE广播通信相关的技术分析

    1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广播通信(Advertising)的支持和利用.关于广播通信,通过“玩转BLE(1)_Eddystone beacon” ...

  8. 蓝牙协议分析(6)_BLE地址类型

    1. 前言 也许关注BLE的同学都注意到了,BLE设备有多种类型的设备地址,如Public Device Address.Random Device Address.Static Device Add ...

  9. 蓝牙协议分析(12)_LQ和RSSI的原理及应用场景

    在蓝牙协议栈的物理层,有这样两个比较有用的参数:LQI和RSSI.它们都是通过接收端,判断当前无线环境的质量(链路质量),以指导后续的动作.但这两个数值的计算原理和使用场景又有很大的差别. LQI ( ...

随机推荐

  1. PostgreSQL在Update时使用Substring函数截取字符串并且加上CASE WHEN THEN条件判断

    --更新 UPDATE wp_order_detail SET layout_type = ( SELECT CASE THEN ) ELSE '' END FROM wp_catalog_size ...

  2. axios、ajax、fetch三者的区别

    1.ajax:是指一种创建交互式网页应用的网页开发技术,并且可以做到无需重新加载整个网页的情况下,能够更新部分网页,也叫作局部更新 优缺点: 1)局部更新 2)原生支持,不需要任何插件 3)原生支持, ...

  3. 面试神体验之:get和post的区别

    由于本文是用markdown在本地编辑的,粘贴到本地的时候出现了一些页面bug,所以只好贴进代码里面,一些链接失效,望见谅 Get和POST的区别 都9102年了,你们还在问get和post的区别?是 ...

  4. Spring 学习——Spring注解——Autowiring(自动装配)

    装配方式 方式一:默认 方式二:byName:根据属性名称自动装配.会查找Bean容器内部所有初始化的与属性名成相同的Bean,自动装配.(需要通过set方法注入,注入Bean的id名称需要和实体类的 ...

  5. Qt Windows打开指定文件注意替换双斜杠为单斜杠

    QProcess::startDetached(QString("explorer %1").arg(strFilePath)); 其中,在windows上使用时,strFileP ...

  6. python学习-----协程

    一.协程的引入 对于单线程下,我们不可避免程序中出现io操作,但如果我们能在自己的程序中(即用户程序级别,而非操作系统级别)控制单线程下的多个任务能在一个任务遇到io阻塞时就切换到另外一个任务去计算, ...

  7. $set()的正确使用方式

    vue给对象新增属性,并触发视图更新 如下代码:给student对象新增age属性 data () { return { student: { name: '', sex: '' } } } 众所周知 ...

  8. gitlab备份还原

    断电后gitlab报500错误 查看日志 tail -f /var/log/gitlab/gitlab-rails/production.log ActionView::Template::Error ...

  9. Redhat配置yum源(使用阿里云yum Repo)

    1. 查看版本号和系统类别: cat /etc/redhat-release archor cat /etc/issue && arch 2.检查yum是否安装,以及安装了哪些依赖源并 ...

  10. 解决跨域No 'Access-Control-Allow-Origin' header is present on the requested resource.

    用angular发起http.get(),访问后端web API要数据,结果chrome报错:跨域了 Access to XMLHttpRequest at 'http://127.0.0.1:300 ...