802.11s标准:无线Mesh网络的MAC与PHY协议详解

需积分: 10 24 下载量 148 浏览量 更新于2024-08-14 收藏 2.68MB PPT 举报
第9章《S对Mesh结构的支持》详细探讨了无线Mesh网络在无线通信中的重要角色。无线Mesh网络(WMN)作为一种新兴的无线网络技术,其核心在于利用移动AdHoc网络的基础,通过多跳传输方式提供无处不在的无线连接。相比于传统的基站无线通信系统,它具有显著的优势: 1. 网络拓扑结构:WMN采用了Mesh结构,每个节点既可以作为接收者也可以作为转发器,增强了网络的冗余性和可靠性,自愈能力较强。这使得网络能够在单个节点故障时自动重新路由数据,提高了服务的连续性和稳定性。 2. MAC与PHY层协议:IEEE 802.11s标准为WMN定义了专门的MAC和物理层协议,使得接入点能够像路由器一样进行信息转发,极大地扩展了无线网络的覆盖范围。 3. 路由协议:不同于点对点的WLAN,Mesh网络需要高效的路由算法,如动态路由协议,以确保数据包在多跳路径上的有效传输。 4. 应用模式:WMN不仅用于城市和商业区的热点覆盖,还在灾难恢复、公共安全、物联网(IoT)等领域找到广泛应用,如提供临时网络连接、应急通信等。 5. 与移动AdHoc网络的关系:WMN的发展是在移动AdHoc网络的基础上,结合WLAN和WiMAX等成熟技术,构建出大规模、可扩展的无线网络,预示着下一代无线网络将融合多种技术,形成多级网络结构。 6. 与蜂窝网络的区别:WMN在可靠性、传输速率、成本效益和部署便利性上超越了传统的蜂窝网络,尤其在偏远地区或难以铺设固定基础设施的地方表现突出。 7. 与WLAN的区别:除了点对多点的连接方式不同,WMN提供了更广泛的覆盖范围和更强的网络扩展性,适合大规模场景。 第9章深入解析了无线Mesh网络如何通过创新的架构和标准化协议,解决无线通信领域的一些关键挑战,使之成为未来无线通信的重要组成部分。

下列代码出现nan int错误,请解决:float smoothCot() { float err = -1; cogs.clear(); v_end = mesh.vertices_end(); // for (v_it = mesh.vertices_begin(); v_it != v_end; ++v_it) { cog[0] = cog[1] = cog[2] = valence = 0.0; //cout << valence<<"1" << endl; for (vv_it = mesh.vv_iter(*v_it); vv_it.is_valid(); ++vv_it) { double cot_weight = 0.0; MyMesh::HalfedgeHandle heh = mesh.find_halfedge(*v_it, *vv_it); if (!mesh.is_boundary(heh)) { MyMesh::HalfedgeHandle prev_heh = mesh.prev_halfedge_handle(heh); MyMesh::HalfedgeHandle next_heh = mesh.next_halfedge_handle(heh); MyMesh::VertexHandle prev_vh = mesh.to_vertex_handle(prev_heh); MyMesh::VertexHandle next_vh = mesh.to_vertex_handle(next_heh); MyMesh::Point prev_p = mesh.point(prev_vh); MyMesh::Point curr_pi = mesh.point(*v_it); MyMesh::Point curr_pj = mesh.point(*vv_it); MyMesh::Point next_p = mesh.point(next_vh); double cot_alpha = cot(curr_pi - prev_p, curr_pj - prev_p); double cot_beta = cot(curr_pi - next_p, curr_pj - next_p); cot_weight = cot_alpha + cot_beta; //cout << cot_weight<<"2" << endl; } cog += cot_weight *( mesh.point(*vv_it)-mesh.point(*v_it)); valence += cot_weight; //cout << valence<<"3" << endl; } cogs.push_back(cog / valence); } for (v_it = mesh.vertices_begin(), cog_it = cogs.begin(); v_it != v_end; ++v_it, ++cog_it) { if (!mesh.is_boundary(*v_it)) { MyMesh::Point p = mesh.point(*v_it); //*cog_it += mesh.point(*v_it); err = max(err, (p - *cog_it).norm()); mesh.set_point(*v_it, *cog_it); } } return err; }

2023-06-11 上传