我是靠谱客的博主 冷酷手链,最近开发中收集的这篇文章主要介绍Wifi隔离的原理及实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、wifi隔离是什么

无线隔离又称客户端隔离(client isolation),也称AP隔离,指的是阻止连接路由器的设备之间互相访问,多见于无线通信方面,常见于路由器设置中。

AP隔离非常类似有线网络的VLAN(虚拟局域网),将所有的无线客户端设备之间完全隔离,是客户端只能访问AP接入的固定网络。通俗来讲,就是各个连接无线的客户机(如手机、电脑等)之间无法互相通讯的,即你无法在两台同时连接AP的电脑间使用类似共享文件等功能。因此,在开启该功能之后,可以保护不同用户间的数据安全,有利于抵御外部攻击。

2、wifi隔离的应用场景

(1)、非常适合大型的会议室、酒店、机场等公共场所的无线网络建设,让各个接入的无线客户端之间相互保持隔离,提供彼此间更加安全的接入。
(2)、对于家庭用户来说没有太多的实际意义,但企业用户在一些特殊的场合可以采用这种方式来加强无线网络的安全性。例如有客户或外单位人员参加的会议等公共活动。
(3)、用于对酒店和机场等公共热点Hot Spot的架设,让接入的无线客户端保持隔离,提供安全的Internet接入。

3、wifi隔离的原理

对接收到的数据报文进行解析,如果目的地址是单播地址,且目的地址位于无线系统中,则此时根据“无线隔离”的关键字的值来做相应处理,如果开启无线隔离,则将收到的包直接丢弃。

4、realTek芯片厂商在无线芯片8192cd中的实现

在8192cd_rx.c中,对接收到的数据报文进行解析,如果目的地址是单播地址,且目的地址位于无线系统中,则此时根据block_relay的值来做相应处理,如果开启无线隔离,block_relay=1,则将收到的包直接丢弃;如果block_relay=2,则不再中继到目的地址,而是将此包转发到桥;如果block_relay=3,则做其他一些特殊处理。
(1)、通过字段“block_relay”来配置,默认关闭;可以通过getmib block_relay来获取当前状态,打开WiFi隔离可以通过以下命令实现:setmib block_relay 1
在这里插入图片描述
(2)、在8192cd_rx.c中,函数process_datafrme(struct rtl8192cd_priv *priv, struct rx_frinfo *pfrinfo)中确定指定数据包的转法或是丢弃。
在这里插入图片描述

代码流程图如下:
在这里插入图片描述

5、MTK芯片厂商在无线芯片mtk7603中的实现

(1)、MTK的无线隔离是通过关键字”NoForwarding“来配置
在这里插入图片描述
(2)、在ap_data.c中,函数INT ap_rx_foward_handle(RTMP_ADAPTER *pAd, struct wifi_dev *wdev, PNDIS_PACKET pPacket)中确定数据包的转法还是丢弃。
在这里插入图片描述
(3)、当NoForwarding==1时,to_air为FALSE,不进行转发。
在这里插入图片描述

6、BRCOM芯片厂商在无线芯片bcm96848中的实现

(1)、BRCOM的无线隔离是通过关键字”ap_isolate”来配置默认值为0,也即不开启该功能。
net/wl/impl20/dhd/dhd/sys/dhd_common.c
在这里插入图片描述
博通通过该命令开启/关闭客户端隔离:wl ap_isolate 1/0
net/wl/impl20/wl/exe/wlu.c
在这里插入图片描述
(2)、在net/wl/impl20/wl/exe/wlu.c中,函数static void BCMFASTPATH wlc_recvdata_sendpkt(
wlc_info_t *wlc, void *p, wlc_if_t *wlcif)中确定数据包的转法还是丢弃。

处理发送到BSS中的数据包,决定是转发还是丢弃。通过下面宏定义来确定隔离发生区域范围。

/* ap_isolate bitmaps */
#define AP_ISOLATE_DISABLED		0x0
#define AP_ISOLATE_SENDUP_ALL		0x01
#define AP_ISOLATE_SENDUP_MCAST		0x02

在这里插入图片描述
上述函数处理的是fast path过程的数据转发流程,此外,在函数void
dhd_rx_frame(dhd_pub_t *dhdp, int ifidx, void *pktbuf, int numpkt, uint8 chan)中,直接处理rx数据帧。
在这里插入图片描述

7、小结

综合对上面客户端隔离代码的分析可知,整体处理流程大致相似,所有隔离发生在rx数处理过程中,博通芯片的处理考虑了(BSS)基本服务集,隔离只发生在同一服务集下的sta。在realtek的芯片中,对各种数据报文的处理大多集中在process_datafrme函数中,对各种报文进行特定的处理,对于定制化的需求,可以在该模块中实现。

最后

以上就是冷酷手链为你收集整理的Wifi隔离的原理及实现的全部内容,希望文章能够帮你解决Wifi隔离的原理及实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(105)

评论列表共有 0 条评论

立即
投稿
返回
顶部