#107 蓝牙

2016-01-06

蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由 2.4 至 2.485 GHz 的 ISM 频段来进行通信。1994 年由电信商爱立信(Ericsson)发展出这个技术。它最初的设计,是希望创建一个 RS-232 数据线的无线通信替代版本。它能够链接多个设备,克服同步的问题。
蓝牙技术目前由蓝牙技术联盟(SIG)来负责维护其技术标准,其成员已超过三万,分布在电信、电脑、网络与消费性电子产品等领域。IEEE 曾经将蓝牙技术标准化为 IEEE 802.15.1,但是这个标准已经不再继续使用。

蓝牙版本 发布时间 最大传输速度 传输距离
蓝牙 5.3 2021 2 Mbit/s 300 米
蓝牙 5.2 2020 2 Mbit/s 300 米
蓝牙 5.1 2019 2 Mbit/s 300 米
蓝牙 5.0 2016 2 Mbit/s 300 米
蓝牙 4.2 2014 24 Mbit/s 50 米
蓝牙 4.1 2013 24 Mbit/s 50 米
蓝牙 4.0 2010 24 Mbit/s 50 米
蓝牙 3.0+HS 2009 24 Mbit/s 10 米
蓝牙 2.1+EDR 2007 3 Mbit/s 10 米
蓝牙 2.0+EDR 2004 2.1 Mbit/s 10 米
蓝牙 1.2 2003 1 Mbit/s 10 米
蓝牙 1.1 2002 810 Kbit/s 10 米
蓝牙 1.0 1998 723.1 Kbit/s 10 米

根据上面这个表提供的数据,现在主流的蓝牙 4 和 5,传输速率均低于 2 Mbit/s,距离均低于 300 米。

蓝牙的高速传输需要借助 WiFi,非常鸡肋。

EDR(Enhanced Data Rate)
HS(High Speed)

参考资料与拓展阅读

附:蓝牙 1.0 到 6.0 解释:蓝牙版本彼此之间有何不同?

您的所有设备都需要最新的蓝牙版本吗?

由卡尔文·万赫德
10 月 6, 2024

https://www.androidauthority.com/bluetooth-versions-3488170/

在短短几十年的时间里,蓝牙已经从一个小众的无线协议发展成为一种无处不在的技术,我们每天都依赖它来连接从耳机到智能家居设备的所有设备。它现在是短距离无线通信的首选标准,也许只有 Wi-Fi 能超越它的实用性和普及性。

但是,虽然蓝牙表面上看起来是一项相当稳定且平淡无奇的技术,但多年来该协议实际上已经发生了几次重大变化。事实上,一些较旧的蓝牙版本的好处仍然没有进入我们的设备。

幸运的是,我们的设备支持多个蓝牙版本,并根据可用性和用例自动选择最佳版本。但是每个主要和次要蓝牙版本有什么区别,哪个是最新的呢?以下是您需要了解的一切。

蓝牙 1.0:为什么发明蓝牙?

无需深入研究蓝牙的历史,该技术最初是为了将蜂窝连接集成到笔记本电脑中而发明的。在 1990 年代后期,IBM 和 Ericsson 的工程师意识到,由于高功率要求,将手机直接集成到笔记本电脑中是不可行的。因此,他们决定依靠 Ericsson 自 1994 年以来一直在开发的低功耗通信协议。他们从理论上推测,这项技术将允许手机和笔记本电脑进行短距离通信。

IBM 和 Ericsson 向其他公司开放了这项技术,这导致了蓝牙特别兴趣小组 (SIG) 的诞生。SIG 于 1999 年推出了第一个蓝牙版本,随后推出了展示该技术的免提手机。然而,目前市场上没有手机支持该技术。第一款配备蓝牙的手机仅在两年后的 2001 年发布。

蓝牙 1.0 是作为串行电缆的无线替代品而开发的。
尽管如此,爱立信开发蓝牙 1.0 主要是作为 RS-232 标准的无线替代品,RS-232 标准是当时计算机的常见功能。RS-232 串行电缆用于鼠标和键盘等外围设备以及用于拨号互联网的调制解调器连接。然而,这些端口又大又笨重。

所有这些都表明,1999 年的蓝牙与今天的蓝牙相差不远——一种用于无线连接设备的多功能、低功耗解决方案。主要动机是便利,即使在今天,无线耳塞取代了智能手机上古老的耳机插孔,情况仍然如此。

第一个版本的蓝牙存在一些缺陷,例如传输速度有限和最大范围仅为 10 米。

蓝牙 2.0 – 2.1:安全配对和快速数据传输

蓝牙的第二个版本于 2004 年发布,带来了一些急需的升级,其中最主要的功能是增强数据速率 (EDR)。后者使该技术能够实现高达 3 Mbps 的速度,从而支持无线音频等新用例。它还使一台计算机能够同时连接到多个设备,这意味着您可以同时使用蓝牙键盘、鼠标和打印机。

蓝牙 2.0 还能够比第一个版本传输更远的距离。它的最大射程为 30m,是原始标准的三倍。

2007 年,蓝牙 2.1 引入了一种称为安全简单配对 (SSP) 的新配对机制,极大地改善了用户体验和连接安全性。如果您曾经在配对两个蓝牙设备时比较并确认过 PIN,您可能已经熟悉 SSP。这为不安全的固定 PIN (如 0000)提供了一种更安全的替代方案,在蓝牙 2.1 发布之前,这些 PIN 通常用于配对。

蓝牙 3.0:更快的速度,有一个 catch

蓝牙 3.0 于 2009 年推出,由于一项称为高速 (HS) 的可选功能,引入了显着的速度提升。这使得蓝牙设备能够实现高达 24 Mbps 的数据传输速率,但有一个很大的警告:快速的实际数据传输不会通过蓝牙链接本身进行。相反,蓝牙仅用于配对和通信,而实际的数据传输是通过 Wi-Fi 进行的。

当然,高速数据传输要求设备同时包含蓝牙和 Wi-Fi 硬件。虽然此类设备确实已经存在,但很少有制造商采用该功能。蓝牙规范将蓝牙 3.0 的 HS 部分设为可选部分也无济于事。

蓝牙 3.0 最终比其他版本鲜为人知,尽管它为技术带来了有意义的升级。例如,当设备处于不同范围时,增强的功率控制为改进电源管理铺平了道路,并减少了不必要的电池消耗。

蓝牙 4.0 – 4.2:低功耗与经典

Galaxy Watch 4 与 Galaxy A51 手机配对。
当蓝牙 4.0 宣布并被 Bluetooth SIG 接受时,该技术已在便携式设备上变得司空见惯。然而,随着该技术开始用于在设备之间长时间传输数据,电池寿命是一个大问题。那时,始终连接的可穿戴设备和蓝牙耳塞的概念刚刚出现。

为了支持这些应用,Bluetooth SIG 决定将该技术的开发分为两条不同的路径。第一个被称为 Classic Bluetooth,从以前的版本继续,没有对协议进行重大更改。但是,4.0 版本还引入了低功耗蓝牙 (BLE),专为低功耗设备设计,可在保持连接的同时消耗尽可能少的功率。

低功耗蓝牙为现代可穿戴设备和无线音频产品铺平了道路。
低功耗蓝牙适用于需要短时间传输数据的设备,例如当您的可穿戴设备与手机同步步数数据时。蓝牙 4.2 等后来的修订版还针对智能家居行业带来了隐私和安全增强功能,允许传感器传达运动检测等触发器。然而,后者从未真正起飞——当今绝大多数消费类智能家居产品都使用 Zigbee 等竞争性无线标准,而不是 BLE。

尽管如此,低功耗蓝牙仍然改变了游戏规则。该技术旨在在纽扣电池上运行数月甚至数年,从而将具有外形尺寸的新设备推向市场。更好的是,设备可以同时支持 Bluetooth Classic 和 LE 变体,并根据需要在它们之间切换。

蓝牙 5 – 5.4:LE Audio 等

蓝牙 5 于 2016 年发布,占据主导地位。SIG 继续分别开发 Bluetooth Classic 和 LE,每个分支都获得了有用的功能。

例如,通过蓝牙 5 低功耗链路的传输速度是上一代的两倍,最高可达 2 Mbps。设备还可以牺牲数据速度来获得四倍的距离,在理想条件下最高可达 240 米。蓝牙 5 率先提供带宽灵活性 — 设备可以选择优先考虑更远的距离、低能耗使用或高传输速度。这意味着可以开发新的蓝牙编解码器来提高音频质量,同时仍受益于 BLE 的低功耗。

2019 年,蓝牙 5.1 引入了测向功能,可以精确追踪到几厘米。虽然超宽带 (UWB) 技术已成为智能追踪器的行业标准,但蓝牙现在可用于粒度较小的跟踪应用。

LC3 编解码器和 Auracast

仅仅一年后,我们就看到了蓝牙 5.2 和 LE Audio 标准的发布。后者包括一个新的低复杂度通信编解码器 (LC3)。LC3 以较低的比特率提供卓越的音频质量,同时还利用了蓝牙 LE 的低功耗。

到 2020 年,像 Apple AirPods 这样的真无线耳塞已经获得了巨大的发展势头。然而,Bluetooth Classic 老化的 SBC 编解码器在音频质量方面还有很多不足之处。LC3 以较低的比特率提供更好的质量,同时在此过程中延长电池寿命。

蓝牙 5.2 引入了 LE Audio 和用于高质量无线音频的新编解码器。

蓝牙 5.2 还引入了对音频广播或 Auracast 的支持。该功能允许一个蓝牙源将音频流式传输到多个接收器。这意味着您可以同时将手机的音频输出到朋友的耳塞和您自己的耳塞。该版本还增加了对助听器的支持——想象一下使用 Auracast 将音频从单个来源输出到分布在剧院或体育场的多个助听器。

蓝牙 5.3 和 5.4 分别于 2021 年和 2023 年发布,带来了稳定性和连接性的改进。虽然这些版本没有为该技术带来任何华丽的新功能,但蓝牙 5.4 引入了对带响应的定期广告 (PAwR) 的支持。该功能允许单个蓝牙信标同时向多达 7,000 台设备广播消息。这在哪些方面有用?在采用电子货架标签(通常是电子墨水)的大型商店中。以前的蓝牙版本需要每个标签的往返通信,这会导致大型商店的更新延迟。

蓝牙 6.0:新标准

智能手机上 AirTag Stock 照片 1 旁边的 Apple Find My 徽标
经过近十年的小版本更新,Bluetooth SIG 终于在 2024 年 8 月 27 日宣布了下一代主要蓝牙。这使得蓝牙 6.0 成为当今可用的最新版本,尽管您必须等待一段时间才能让消费设备采用它。

蓝牙 6.0 的亮点新功能是蓝牙信道探测,它允许设备准确测量彼此之间的物理距离。前几代人依靠信号强度来估计距离,这对于智能锁和车钥匙来说不够准确。蓝牙信道探测使用往返时间 (RTT) 和基于相位的测距 (PBR) 进行精确的距离测量,类似于 UWB。

蓝牙 6.0 从 UWB 的工资簿中汲取了一个诀窍。

在其他地方,蓝牙 6.0 为音频应用带来了更多的安全性和效率改进以及更低的延迟。第一批支持蓝牙 6.0 的设备应该会在 2025 年出现。

#106 ab 报告解析

2016-01-02

安装

CentOS 下的安装:

sudo yum install -y httpd-utils

Debian/Ubuntu 下的安装:

sudo apt install -y apache2-utils

使用

ab -n 请求数 -c 并发书 URL

常用参数:

  • -n 请求数
  • -c 并发数
  • -t 持续测试时间
  • -k 启用 HTTP KeepAlive
  • -H 设置请求头
  • -m 请求方式
  • -T 设置 Content-Type
  • -p 设置 POST 数据文件

如果 POST 请求:

echo 'key1=value1&key2=value2' > /tmp/postdata
-T 'application/x-www-form-urlencoded' -p postdata

echo '{"key1":"value1","key2":"value2"}' > /tmp/postdata
-T 'application/json' -p postdata

报告解读

执行 ab -n100 -c10 https://www.baidu.com/ 可以得到以下结果:

ab result image

需要重要关注的数据做了标记,分别是:

  • 失败数 Failed requests
    应该尽最大可能保证失败数为 0, 也就是成功数 100%
  • 吞吐量(QPS/TPS) (Requests per second)
  • 平均响应时间 (第一个 Time per request)
    应该等于:测试持续时间 / 请求数
    应该等于:并发数 / 吞吐量
  • 最长响应时间 (最后面那行,100% longest request)
    80%, 90%, 95% 响应时间, 也可作为重要参考。

测试方案

Update @ 2021-12-29

url="https://www.baidu.com/"

rm -rf /tmp/httpbench-*.log
for c in {1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,150,200,250,300,350,400,450,500,600,700,800,900,1000};
do echo "==== Concurrency Level: $c ===="; let n=$((c * 100)); ab -n $n -c $c $url > /tmp/httpbench-$c.log; sleep 10; done;

然后用 Python 脚本解析 ab 输出生成报告。

Python 代码就不贴了, 如果感兴趣可以打开看看: abReport.py

如果觉得我的方案不妥当,非常欢迎提出意见或建议。

Update @ 2021-12-30:

又对 abReport.py 做了调整 (abReport2.py),现在可以输出一个 ECharts 图表了(尽整些花里胡哨的东西)。

doge

#105 时区

2016-01-01

时间是客观存在的,但我们对时间的认识却是主观的。
我们的计时方法深受我们的语言和文化的影响。

#104 Python 文件压缩方式汇总

2015-12-31
  • zlib — Compression compatible with gzip
  • gzip — Support for gzip files
  • bz2 — Support for bzip2 compression
  • lzma — Compression using the LZMA algorithm
  • zipfile — Work with ZIP archives
  • tarfile — Read and write tar archive files

#101 一则耐克广告

2015-11-30

这其实只是耐克嵌入影片的一段软广告,不过广告文案写得确实很赞,甩开国内那些硬插式广告几万光年了吧!

#100 为 CentOS 升级 Linux 内核

2015-11-19

查看内核版本

  • cat /proc/version
  • uname -a-r 参数可以只查看内核版本号

查看发行版版本

  • lsb_release -a
  • cat /etc/redhat-release(CentOS)

升级

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh https://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-lt -y  # long-term 长期支持版本
# yum --enablerepo=elrepo-kernel install kernel-ml -y  # mainline 主线版本

参考

#99 转载:jQuery 插件开发全解析

2015-11-09

jQuery 插件的开发包括两种:
一种是类级别的插件开发,即给 jQuery 添加新的全局函数,相当于给 jQuery 类本身添加方法(jQuery 的全局函数就是属于 jQuery 命名空间的函数)。
另一种是对象级别的插件开发,即给 jQuery 对象添加方法。下面就两种函数的开发做详细的说明。

#98 冰与火之歌

2015-10-14

这部剧,原先也是看过的。里面的人物关系实在复杂,看了第一季,就放弃了。
这种大剧,若是不弄清楚人物关系、背景、势力,甚至地图,很多情节就看不出味道来,就像是牛嚼牡丹了。
为了继续看下去,我特意花了点时间来了解这些。