活动介绍

非基于IP的无线个人区域网络技术解析

立即解锁
发布时间: 2025-08-30 02:06:36 阅读量: 9 订阅数: 25 AIGC
### 非基于 IP 的无线个人局域网技术解析 #### 蓝牙 5 的特性 蓝牙 5 具有诸多显著特性。其消息大小可达 255 字节,新的广告通道被称为二级广告通道。通过在报头中定义特定的蓝牙 5 扩展类型,确保了与旧版蓝牙 4 设备的向后兼容性。若蓝牙主机接收到指示存在二级广告通道的信标广告,便会知晓需在数据通道中查找更多数据。此时,主广告数据包的有效负载不再包含信标数据,而是一个通用的扩展广告有效负载,用于标识数据通道编号和时间偏移。主机随后会在指定的时间偏移从该特定数据通道读取,以检索实际的信标数据,数据还可能指向另一个数据包,即多二级广告链。 这种传输超长信标消息的新方法,能够向客户智能手机发送大量数据。同时,还启用了其他用例和功能,例如广告可用于传输同步数据,如音频流。当游客在博物馆参观艺术品时,信标可以向智能手机发送音频讲座。 广告还可以进行匿名化处理,即广告数据包无需绑定发射器地址。这样,设备发出匿名广告时,不会传输自身设备地址,有助于提高隐私性并降低功耗。 蓝牙 5 还能几乎同时传输多个单独的广告(具有独特数据和不同间隔),这使得蓝牙 5 信标无需重新配置,就能几乎同时传输 Eddystone 和 iBeacon 信号。此外,蓝牙 5 信标可以检测是否被主机扫描,当检测到用户接收到广告后,信标可以停止传输以节省电量。 #### 蓝牙 5 的范围和速度提升 蓝牙信标的强度受到限制,为了延长电池寿命,制造商通常会限制发射器功率。一般来说,为了获得最佳的信标范围和信号强度,需要有视线传播。典型的蓝牙 4.0 视线通信中,信号强度会随距离增加而下降,通常 30 英尺的范围是可用的信标距离。 蓝牙根据设备分类具有不同的功率级别、范围和传输功率,具体如下表所示: | 类别编号 | 最大输出电平 (dBm) | 最大输出功率 (mW) | 最大范围 | 使用场景 | | ---- | ---- | ---- | ---- | ---- | | 1 | 20 dBm | 100 mW | 100 m | USB 适配器、接入点 | | 1.2 | 10 dBm | 10 mW | 30 m(典型 5 m) | 信标、可穿戴设备 | | 2 | 4 dBm | 2.5 mW | 10 m | 移动设备、蓝牙适配器、智能卡读取器 | | 3 | 0 dBm | 1 mW | 10 cm | 蓝牙适配器 | 蓝牙 5 在范围和数据速率方面都有显著提升,超越了旧版蓝牙的限制。它引入了一种名为 LE2M 的新无线电物理层(PHY),将蓝牙的原始数据速率从 1M 符号/秒提高到 2M 符号/秒。与蓝牙 4 相比,传输相同数量的数据,蓝牙 5 所需的传输时间更短,这对于使用硬币电池的物联网设备尤为重要。此外,新的 PHY 还将功率从 +10 dBm 提高到 +20 dBm,从而扩大了通信范围。 在范围方面,蓝牙 5 还为低功耗蓝牙(BLE)提供了另一种可选的 PHY,即 LE 编码 PHY。该 PHY 仍使用与蓝牙 4.0 相同的 1M 符号/秒速率,但将数据包编码降低到 125 Kb/s 或 500 Kb/s,并将传输功率提高了 +20dBm。这使得其范围比蓝牙 4.0 增加了 4 倍,并且在建筑物内具有更好的穿透性。不过,LE 编码 PHY 会增加功耗以换取更大的范围。 #### 蓝牙网状网络介绍 蓝牙技术联盟(SIG)在发布蓝牙 5 规范后,专注于规范蓝牙网状网络。2017 年 7 月 13 日,蓝牙 SIG 发布了网状网络配置文件、设备和模型规范 1.0,这是在蓝牙 5.0 规范发布六个月之后。在此之前,已经存在使用旧版蓝牙版本构建网状网络的专有和临时方案。蓝牙 SIG 发布的三个规范如下: - 网状网络配置文件规范 1.0:定义了实现可互操作网状网络解决方案的基本要求。 - 网状网络模型规范 1.0:规定了网状网络中节点的基本功能。 - 网状网络设备属性 1.0:定义了网状网络模型规范所需的设备属性。 目前尚不清楚蓝牙网状网络的规模是否存在限制,但规范中内置了一些限制。截至 1.0 规范,蓝牙网状网络中最多可以有 32,767 个节点和 16,384 个物理组,最大生存时间(TTL)为 127,它表示网状网络的深度。理论上,蓝牙 5 网状网络允许有 2^128 个虚拟组,但实际上,分组会受到更多限制。 蓝牙网状网络基于低功耗蓝牙(BLE),位于之前描述的 BLE 物理层和链路层之上。在此基础上,还有一系列特定于网状网络的层: - 模型层:在一个或多个模型规范上实现行为、状态和绑定。 - 基础模型层:负责网状网络的配置和管理。 - 访问层:定义应用程序数据的格式、加密过程和数据验证。 - 上层传输层:管理进出访问层的数据的认证、加密和解密,传输诸如友谊和心跳等控制消息。 - 下层传输层:必要时对分段的协议数据单元(PDU)进行分段和重组(SAR)。 - 网络层:确定消息输出的网络接口,管理各种地址类型并支持多种承载方式。 - 承载层:定义如何处理网状网络 PDU,支持两种类型的 PDU:广告承载和通用属性配置文件(GATT)承载。广告承载处理网状网络 PDU 的传输和接收,而 GATT 承载为不支持广告承载的设备提供代理。 - BLE 层:完整的蓝牙低功耗规范。 蓝牙网状网络可以集成网状网络或 BLE 功能。支持网状网络和 BLE 的设备可以与智能手机等其他设备通信,或具备信标功能。 #### 蓝牙网状网络拓扑 蓝牙网状网络采用泛洪网络的概念。在泛洪网络中,网状网络中的每个节点接收到传入数据包后,会通过除消息来源链路之外的每个传出链路发送该数据包。泛洪的优点是,如果数据包可以传递,它就会被传递(尽管可能会通过多条路由多次传递),并且会自动找到最短路径(在动态网状网络中,路径可能会因信号质量和距离而变化)。从路由协议的角度来看,这种算法是最简单的实现方式,并且不需要像基于中央路由器的 Wi-Fi 网络那样的中央管理器。 与之相比,其他类型的网状网络路由包括基于树的算法。使用树算法(或簇树算法)时,需要一个协调器来启动网络并成为父节点,但树不一定是真正的网状网络。其他网状网络路由协议包括主动路由(在每个节点上维护最新的路由表)和被动路由(仅在需要通过节点发送数据时更新每个节点的路由表)。Zigbee 是一种主动路由,称为按需自组网距离矢量(AODV)。
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

郑天昊

首席网络架构师
拥有超过15年的工作经验。曾就职于某大厂,主导AWS云服务的网络架构设计和优化工作,后在一家创业公司担任首席网络架构师,负责构建公司的整体网络架构和技术规划。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

iOSUI动画与效果全解析

# iOS UI 动画与效果全解析 ## 1. UIView 可动画属性 UIView 对象可以对以下属性进行动画处理: - Frame - Bounds - Center - Transform - Alpha - BackgroundColor UIView 的子类可能还有其他可动画的属性,你可以参考文档查看每个类的完整列表。 ## 2. 通过更改约束进行布局动画 随着设备屏幕分辨率和宽高比的多样化,使用约束来适应不同的屏幕变得尤为重要。如果你已经使用了约束,那么不应该对 frame 等与位置相关的属性进行动画处理,而应该对约束的更改进行动画处理。 ### 2.1 动画约束的步骤

RxSwift开发:跨平台应用构建与架构设计

### RxSwift开发:跨平台应用构建与架构设计 #### 跨平台视图模型复用与macOS视图控制器添加 在应用开发中,当点击右侧的栏项目时,应用会带你进入用户列表视图控制器。而且,视图模型具有跨平台的特性,它不依赖于具体的视图或视图控制器。例如`ListTimelineViewModel`,其仅依赖于`RxSwift`、`RxCocoa`和`Realm`数据库,这些库本身是跨平台的,所以该视图模型也能在不同平台使用。 若要添加一个macOS视图控制器,可按以下步骤操作: 1. 切换到Xcode项目的macOS目标,从Xcode的方案选择器中,选择`MacTweetie/My Mac`

探索Polkadot、Kusama与Substrate:构建区块链的全面指南

### 探索Polkadot、Kusama与Substrate:构建区块链的全面指南 #### 1. Substrate基础特性 在区块链开发领域,Substrate是一个功能强大的框架,它为开发者提供了构建定制化区块链的能力。其中,错误处理是Substrate的基础特性之一。在区块链逻辑执行过程中,可能会出现各种错误,Substrate提供了定义和管理这些错误的机制。通过使用自定义错误类型和错误传播机制,开发者能够有效地处理异常情况,确保基于Substrate的区块链的弹性和可靠性。 以下是Substrate中错误处理的关键要点: - 利用自定义错误类型和错误传播机制处理区块链逻辑中的错

Rust多线程与闭包:原理、应用与实践

### Rust多线程与闭包:原理、应用与实践 #### 1. 线程控制与共享变量 在多线程编程中,我们常常会遇到一些特殊情况,比如获取对象的引用可能会比直接使用对象带来更多问题。直接遍历处理程序可以保留所有权,从而避免共享访问的问题。 ##### 1.1 线程控制 在多线程编程中,`std::thread::yield_now()` 是一个重要的函数,它向操作系统发出信号,表明当前线程应被取消调度。这使得其他线程可以继续执行,而当前线程仍在等待特定的时间周期(如20ms)。以下是一个示例代码: ```rust while start.elapsed() < pause { thr

实现用户授权、JSON处理与API保护

# 实现用户授权、JSON 处理与 API 保护 ## 1. 用户授权实现 在信息安全领域,认证和授权是两个核心概念。认证用于验证实体身份,而授权则是赋予实体相应的权限。例如,不同实体可能具有不同的资源操作权限,如修改部分资源、修改所有资源或仅查看有限资源等。 ### 1.1 简单授权实现步骤 以下是实现简单授权的具体步骤: 1. **添加比较方法**:在 `src/guards/auth.rs` 中为 `CurrentUser` 添加比较方法,用于比较其实例与 UUID: ```rust impl CurrentUser { pub fn is(&self, uuid: &str

Warp框架:请求认证与数据处理全解析

# Warp框架:请求认证与数据处理全解析 ## 1. 请求认证 在处理HTTP请求时,为了确保请求的合法性,我们需要对请求进行认证。之前在不同框架中有不同的处理方式,而在Warp中,我们将采用一种新的方法:为视图添加额外的过滤器。具体步骤如下: 1. **添加头部提取过滤器**:在视图中添加头部提取过滤器,用于检查请求头中是否包含令牌。可以在`map`函数之前插入`and`函数来实现这一点。示例代码如下: ```rust let get_items = warp::path!("user" / i32) .and(warp::header("user-token")) .m

开启NEAR区块链开发之旅

### 开启NEAR区块链开发之旅 #### 1. 处理代币 NEAR SDK为开发者提供了在去中心化应用(dApps)中处理NEAR代币的功能。开发者可以进行代币转移、查询余额以及实现与代币相关的逻辑。以下是一个简单的示例: ```rust // 从一个账户向另一个账户转移代币 let sender = near.get_account("sender_account"); let recipient = near.get_account("recipient_account"); sender.transfer(&recipient, 100); // 检查代币余额 let balanc

iOS地图视图自定义与标注的全面解析

### iOS地图视图自定义与标注的全面解析 #### 1. 地图视图的其他自定义设置 在iOS开发中,`MKMapView` 提供了丰富的自定义选项,可通过设置布尔属性来控制地图元素的显示,如 `showsCompass`、`showsScale` 和 `showsTraffic`。从iOS 11开始,指南针和比例尺可以作为独立视图显示,分别是 `MKCompassButton` 和 `MKScaleView`。使用这些独立视图时,建议将对应的布尔属性设置为 `false`,避免出现重复显示。以下是相关属性和操作的详细介绍: - **指南针和比例尺视图**:这两个视图初始化时需要传入地图视

并发编程与外部函数接口:原理、技巧与工具

# 并发编程与外部函数接口:原理、技巧与工具 ## 1. 并发编程中的原子操作与性能优化 ### 1.1 原子操作的 fetch 方法 在并发编程中,线程池完成操作时,计数器的更新是一个常见问题。若两个线程同时完成任务,只要它们的增量都被计算,谁先更新计数器并不重要。fetch 方法实现了这类可交换操作,它在单个步骤中执行读取和存储操作,并保证存储操作是在原子变量持有该方法返回的确切值时执行的。 例如,`AtomicUsize::fetch_add(1, Ordering::Relaxed)` 总是会将 1 加到 `AtomicUsize` 的当前值上,并返回该线程的 1 被添加时 `At

AWS数据存储与处理:API修改、S3存储及缩略图生成

### AWS数据存储与处理:API修改、S3存储及缩略图生成 #### 1. 修改Get All Items API 原本从内存变量返回数据,现在要从数据库读取并返回数据列表。以下是查询解析器函数的变化: ```javascript const resolvers = { Query: { todos: async (ctx) => { const data = await dynamodbClient .scan({ TableName: "todos-dev", }) .promise();