1905协议详解(一)概述

IEEE 1905.1协议旨在统一有线和无线家庭网络技术,提供一个抽象层,简化网络管理和用户使用。该协议支持Wi-Fi、以太网、MoCA等多种接口,实现负载均衡、QoS、安全性和自组网功能,提高网络的稳定性和用户体验。1905.1通过在LLC和MAC层间插入中间层,抽象各接口细节,促进设备间的无缝集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 概述

1.1 现实需求

1.2 1905简介

1.3 1905优点

1.4 1905架构

1.5 1905抽象层

2 缩略语


1 概述

本章节主要从现实需求引出为何需要1905协议,同时对1905进行简单的介绍,包括:定义,优点,架构等。

1905是定义在LLC和MAC层中间的一个逻辑抽象层。可以理解为一个适配层。

1.1 现实需求

随着带宽的增加、密集的家庭网络应用程序和消费者对服务的无尽需求,家庭网络技术已成为服务提供发展的最新前沿。

由于有线和无线家庭网络技术为终端用户创造的价值,它们都具有重要的市场价值。无线网络提供可移动性,而有线技术提供大带宽或出口的多元性。有线和无线技术相互补充,提供全面的家庭覆盖。

为了解决各种各样的应用程序、区域、环境和拓扑问题,需要多种连接技术。在过去的10年里,市场上已经部署了超过10亿台家庭网络设备,因此,任何拟议的解决方案都必须兼容这些已经部署的家庭网关网络。

1.2 1905简介

IEEE Std 1905.1定义了一个抽象层,为以下几种家庭网络技术提供了公共接口(图1-2-1):

  1. IEEE1901
  2. 无线的WI-FI/IEEE802.11
  3. 双绞线的以太网
  4. 同轴电缆的moca1.1

1905.1抽象层支持对传输来自任何接口或应用程序的数据包的连接选择。它不需要修改底层网络技术,因此也不会改变现有家庭网络技术的行为或实现。

IEEE Std 1905.1的目标是定义一个跨越已建立的家庭网络技术的通用结构,并定义一个通用的数据和控制服务接入点。数据包可以通过任何已定义的接口到达和传输,而不管上层协议层或底层网络技术如何。

 图1-2-1

具体来说,IEEE Std 1905.1在逻辑链路控制(LLC)层2(L2)子层和底层网络技术MAC子层之间引入了一个中间子层,该子层抽象了每个接口的各个细节,聚合了可用带宽,并促进了无缝集成。该层简化了设置,例如,通过消除了用户需要输入不同的密码来访问每个链接。ieeestd1905.1还支持端到端qos,同时简化新设备引入网络,建立安全连接,扩展网络覆盖,并提供高级网络管理功能,包括发现和接口选择。

1.3 1905优点

  1. 易用性:网络设置和使用对消费者来说相对简单。IEEE Std1905.1提供了常见的设置程序,用于添加设备到网络、建立安全链路、实现qos和管理网络
  2. 健壮性:当链接质量暂时下降或拥挤时,有其他路线可供选择。这减少了用户所遇到的问题和中断的数量,同时也减少了服务提供商必须管理的支持调用的数量
  3. 更大的吞吐量:
  4. 负载均衡:该网络可以平衡不同接口上的带宽使用,以限制拥塞和保持可靠性
  5. QOS:IEEE Std1905.1支持端到端qos,而不影响其运行的任何协议或介质的内部完整性。
  6. 后向兼容:
  7. 安全:IEEE Std1905.1为非1905.1设备启用了一致的密码和认证程序。
  8. 强大的诊断:IEEE Std1905.1允许整个网络进行监控,以帮助确保可靠和不间断的运行
  9. 自组网:IEEE Sd1905.1允许设备通过一个简单的按钮进行相同的配置。通过一个标准的按钮或nfc机制来保持配对的简单,从而避免了复杂的配置
  10. 链接的通用性:支持在从一个房间移动时,根据需要从一个网络接口切换到另一个网络接口。
  11. 绿色节能:

1.4 1905架构

1905.1抽象层是LLC L2层和底层MAC层之间的中间层,如图1-4-1所示

图1-4-1

1905.1抽象层通过在各自网络技术的底层MAC/PHY上创建一个虚拟mac,抽象了聚合家庭网络的异构MAC和PHY技术。 

如图1-4-2所示,1905.1网络是由1905.1设备通过1905.1链路连接组成的。

图1-4-2

CMDUs在1905.1个抽象层之间进行交换。所有的CMDUs都被邻近的1905.1个抽象层接收。一些类型的接收CMDU被传递到其他1905.1抽象层

以太网逻辑链路控制数据单元(LLCDUs)在1905.1个抽象层之间进行交换,如果存在一个可选的1905.1转发实体,那么基于1905.1抽象层转发实体中的转发规则,以太网LLCDUs被转发到LLC和/或转发到其他1905.1抽象层

1.5 1905抽象层

1905.1设备中的1905.1抽象层使用EUI-48 value(1905.1AL MAC地址)进行识别。该1905.1AL MAC地址可分别用作1905.1设备的数据和CMDUs的源或目的地址。

每个1905.1AL应在本地管理其1905.1AL MAC地址,使其不与其连接到的1905.1网络中的任何其他MAC地址或1905.1AL MAC地址发生冲突。

2 缩略语

AL    abstraction layer
ALME  abstraction layer management entity
AP    access point
CMDU  control message data unit
DSNA  device-based security network
KCD   key carrying device
HLE   higher layer entity
L2    layer 2
LLC   logical link control
LLCDU logical link control data unit
LLDP  link layer discovery protocol
LLDPDULLDP data unit
MAC   media access control
MPDU  MAC protocol data unit
MSDU  MAC service data unit
NDEF  near-field communication data exchange format
NFC   near-field communication
NFCNK near-field communication network key
NMK   network membership key
PDU   protocol data unit
PHY   physical layer
PSNA  pairwise security network
SAP   service access point
SME   station management entity
SSID  service set identifier
TLV   type length value
WPA ® wireless protected access 17
WPA2  wireless protected access II
WSC   Wi-Fi simple configuration

<think>好的,我现在要解决用户在IAR编译器中遇到的错误:“incomplete type is not allowed”。首先,我需要理解这个错误的含义和常见原因。根据我的知识库,这个错误常发生在代码中使用了未完全定义的类型,比如结构体或联合体声明了但未定义,或者前向声明了某个类型但没有提供完整的定义。 首先,我应该检查用户代码中是否有结构体或联合体的声明但没有定义的情况。比如,如果有一个结构体声明为`struct MyStruct;`,但没有后续的完整定义,那么在需要该结构体大小或成员的地方,编译器就会报这个错误。这时候,需要用户补全结构体的定义,包括成员变量。 其次,检查是否在头文件中只声明了类型而没有包含定义。例如,如果在头文件中使用前向声明,但在使用该类型的源文件中没有包含实际的定义头文件,这也会导致错误。此时,需要确保在使用类型的地方包含了正确的头文件,或者将前向声明替换为完整的定义。 另外,还要考虑typedef的问题。如果用户使用了typedef创建别名,但原始类型未完全定义,同样会引发错误。例如,`typedef struct MyStruct MyType;`之后,如果尝试使用MyType但MyStruct尚未定义,就会出错。需要确保在使用typedef之前,原始类型已经被完整定义。 此外,数组声明中的类型不完整也是一个常见原因。比如声明数组时,如果元素类型未完全定义,编译器无法确定数组的大小,导致错误。需要检查数组声明中的类型是否已经完整定义。 可能还有其他情况,比如在C和C++混合编程时,如果没有正确使用extern "C",或者在头文件中遗漏了必要的包含,也可能导致类型不完整。需要用户检查这些方面。 接下来,我需要将这些可能的原因整理成清晰的解决步骤,并给出具体的代码示例,帮助用户理解如何修改。同时,根据用户提供的引用内容,虽然引用[1]和引用[2]是关于其他错误的,但用户可能希望看到类似的结构,即分点说明解决方案,并引用相关资源。 最后,生成相关问题,帮助用户进一步了解可能相关的编译错误,比如类型未定义、前向声明问题等。这样用户可以有更全面的认识,预防其他类似错误的发生。</think>### IAR编译器错误'incomplete type is not allowed'解决方案 该错误表示代码中使用了**未完全定义的类型**,编译器无法确定其内存布局或成员信息。以下是具体原因及解决方法: #### 1. 结构体/联合体未定义完整 若声明了结构体但未定义成员,在实例化时会报错: ```c struct MyStruct; // 前向声明不完整 struct MyStruct var; // 错误:使用未完成类型 ``` **解决方案**:补全类型定义 ```c struct MyStruct { int id; char name[20]; }; ``` #### 2. 头文件包含缺失 当跨文件使用类型时,需确保定义可见: ```c // file.h struct Data; // 前向声明 // file.c struct Data { // 实际定义 int value; }; ``` **解决方案**:在使用该类型的文件中包含定义头文件 ```c #include "file.c" // 包含实际定义 ``` #### 3. typedef别名问题 使用typedef时原始类型必须完整: ```c typedef struct Node NodeT; // 前向声明 NodeT* ptr; // 允许指针声明 NodeT instance; // 错误:不完整类型 ``` **解决方案**:先完成类型定义再typedef ```c struct Node { int data; struct Node* next; }; typedef struct Node NodeT; ``` #### 4. 数组声明不完整 数组元素类型必须完全定义: ```c struct Element; struct Element arr[10]; // 错误:元素类型未定义 ``` **解决方案**: ```c struct Element { int type; float value; }; struct Element arr[10]; // 合法 ``` #### 调试建议 1. 在IAR工程中搜索错误行号定位问题代码 2. 使用Go to Definition功能追踪类型定义 3. 检查所有头文件包含链 4. 确认没有循环依赖的头文件 编译器需要知道类型的完整信息才能: - 计算sizeof大小 - 分配内存空间 - 访问成员变量 - 进行类型对齐 [^1]: 类似类型转换错误可参考浮点转整型的类型适配问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值