![e8be887f0bcfe2e7f2d18e949e9904e5.png](https://i-blog.csdnimg.cn/blog_migrate/c973b2da99a0b1302e672fb17059d455.jpeg)
序言
关于Wi-Fi路由最大能够连接多少个节点,也是Wi-Fi常常讨论的一个问题。这个答案也众说纷纭。本文就关注于一个Wi-Fi路由究竟能够连接多少个节点,给出“标准”中的答案。不过,“标准”的答案实际上是协议的上限,但是在现实场景中,是远远达不到该上限的,据我目前的了解,在实际上的路由产品中,目前最高的产品可能能带到100台左右的设备,但是也并不是跑纯的CSMA./CA的工作模式了,需要引入很多中心调度的设计。
Associate过程
802.11的路由和节点连接的时候,首先要进行关联操作。关联操作具体如下:
![03aad537be3cfde6db3978e25469c426.png](https://i-blog.csdnimg.cn/blog_migrate/f5ac75c0670c26fd0434b509faf22b31.png)
上图是参考权威指南里面的图。在802.11的基础架构工作模式下(也就是家用路由器工作的模式),节点需要连接上AP,必然要经历Assocation的过程。这个过程包含两个部分。
1)节点需要向AP发送关联请求,Associateion Request。
![d15e62455a86a7f331a393b30143ba0f.png](https://i-blog.csdnimg.cn/blog_migrate/f22f8c69b1db7e6f931d3d8408993751.png)
Associateion Request的帧结构如上,这个是一个典型的管理帧。用户需要向指定AP进行关联(即指定SSID),并且需要跟AP告知一些自己的工作能力(Capability Info等),这是信息是节点有义务告知AP,AP会利用这一些信息完成该BSS内的配置,比如说是否要开启兼容模式(参考前802.11b/g兼容的文章)。并且AP还需要去判断,该节点是否能够关联到本BSS下,如果节点的速率不适配,或者其他的原因(比如说用户自定义做的限制),那么节点会被拒绝连接。
2)AP在接收到节点的关联请求后,需要反馈Associateion Response。
![a4f501233324ceff55c663fc6fbc9316.png](https://i-blog.csdnimg.cn/blog_migrate/bf1695ff753b1e1eb95648152b1ee678.png)
无论AP是允许节点加入到该BSS,还是拒绝,都需要反馈Associateion Response。成功还是失败会在Status Code里面标明。并且AP会反馈一些AP认同的参数给节点(Capability Info等),可以认为节点发送给AP的是希望的参数,但是最终节点能够采用什么参数,还是要看AP的反馈。
这里我们另外需要关注的就是Associateion ID。Associateion ID简称AID,这个是节点加入BSS后,AP给节点所取的一个别名。我们知道节点有MAC地址,即BSSID。但是在很多环境下,比如为每一个节点分配缓存,那么就需要设置一个索引index。这个index如果用BSSID来设置的话,那么会太长,而且比较复杂。所以AP需要为节点取一个别名。AID的序号是AP决定的,一般情况下默认从0开始,根据节点的关联顺序依次加一。
这里记录一点抓包记录
关联过程:
![fc9fb8c505ad46654d19d8f1ce92551f.png](https://i-blog.csdnimg.cn/blog_migrate/9ee95917e0a623ed52d2bd9974c92967.png)
Association Request:
![a61fd45ee33242af7548783b8901d2ad.png](https://i-blog.csdnimg.cn/blog_migrate/bece3e82cd3308fc778d8f219008717a.jpeg)
Associate Response:
![37931bd6f06ce2a4cc4d9ec6cbcd6484.png](https://i-blog.csdnimg.cn/blog_migrate/3aebe40e9dc5925251cf20c93551d4e5.jpeg)
以上的内容我们需要知道,在Wi-Fi工作模式下,每一个节点都需要被分配一个AID,所以AID的数目上限实际上就是Wi-Fi路由的“标准”最大关联数。
Duration/ID(AID字段)
AID的限制实际上是出现在Duration/ID字段中,该field是一个复用的field,在一个标准的MAC层头部中都包含Duration字段。
![4caec1ec3856f61d8c70cae652032cb0.png](https://i-blog.csdnimg.cn/blog_migrate/778e1250480048b76da75d8db4855767.jpeg)
Duration字段全称是Duration/ID字段,在协议中有三种用法:
![11e9ff1c220cb317663c2e11d27d55c0.png](https://i-blog.csdnimg.cn/blog_migrate/80824a2ef4968a037f8213a5d2ff0cf9.jpeg)
用法1:用作NAV设置,其包含15位,所以大小是从0到2^15-1=32767。
用法2:用法2实际上也是NAV,被用作在CFP(即PCF)模式下。此时第15位会被设置为1。为什么要设置这样的NAV最大值(即最大值为32768),需要理解倒数第二位是一个标志位,如果设置为1,那么是标志的意义,所以在解析成NAV的时候,其不能够设置为1。这也是为什么Duration字段为什么是16位,但是最大值只有32768,是标志位的原因,不是有符号整形的原因。
用法3:当14位和15为被设置为1的时候,此时Duration/ID就被认为是AID字段。这种用法一般出现在PS-Poll帧中。
![af64d6ea7970c503298be377e3d2e73b.png](https://i-blog.csdnimg.cn/blog_migrate/5e96e74188133e19c232d4ad2a9d1762.jpeg)
可以看到在PS-Poll帧中,该字段就直接会被解析成AID字段。工作机理可以参考前面写过的《802.11协议精读10:节能模式(PSM)》。
AID的数量限制
本节我们主要就关注一下AID的限制数目,对应前面说的,最大连接数的标准答案就是AID的最大数目。我们看一下协议中对于AID字段的解析:
在802.11ac以前(包含802.11ac)的版本中,该字段解析如下:
![1965e4393e026527fd0000486e14799a.png](https://i-blog.csdnimg.cn/blog_migrate/d7d8f37cfca7e2f08bdec1fd9692bc6e.jpeg)
我们可以看到,AID的范围是1-2007,虽然AID有14位,但是有很多高位是用作保留位不使用的。这里不适用主要是为了以后扩展功能。就好比我们知道,IP地址和MAC地址都有组播的区分的,所以AID将来也可能会有这样的功能,所以要设置保留位。
然后我们看下在802.11ax中(即Wi-Fi 6)中的字段解析:
![fca778da195fffdc99ce0948f0dcb432.png](https://i-blog.csdnimg.cn/blog_migrate/ce8b05e5ed9c71965566daf0e9342dce.jpeg)
Wi-Fi 6的OFDMA接入过程中,Trigger帧里面为每一个RU分配接入节点也是通过AID参数完成的。由于Wi-Fi 6还支持OFDMA下的随机接入UORA,所以需要设置特殊的AID字段。所以协议中就设置了两个特殊的AID,即2045和2046,还有AID=0的时候赋予了新的意义。这里相关意义可以参考《Wi-Fi 6(802.11ax)解析17:UORA上行随机接入机制(UL-OFDMA)》。
前面描述的常用802.11标准下的AID范围,我们现在可以得出一个答案,就是标准802.11的场景下,最大理论连接数实际上限是2007。
但是802.11还有一个“大连接”的版本802.11ah,802.11ah的设计目标和NB-IoT,5G下的mMTC(Massive Machine Type Communications)场景目标是一样的。都是支持大规模的节点数关联。所以我们还有必要关注下802.11ah(即Wi-Fi Hallow)的AID范围。
![15e4fd422aec4acd5ba2d9db866cfcc9.png](https://i-blog.csdnimg.cn/blog_migrate/572a3f315dc626e6ff51e8657ac0de7c.jpeg)
这里我们看出来,802.11ah将AID的范围从2007扩展到8191,但是这个范围不是用前面说的PS-Poll帧,而是S1G PS-Poll帧,S1G是sub-1G的意思。即802.11ah的场景下,最大连接数是8191。
结语
我们总结下前面的最大连接数,在802.11的主体标准中,“标准”最大的理论连接数是2007,不过在802.11ah这一个专门为大连接优化的协议中,最大理论连接数是8191。
实际上这个数值还是非常大的,现实中我们目前不太可能发现一个路由能够挂2007个节点。实际上据我目前所了解到,单个AP最大连接数应该是可以做到100左右的,但是能够做到100左右的都不是像家用路由这样单纯的跑DCF(即CSMA/CA)的,单纯跑CSMA/CA的话能到30,40就已经非常不错了,跑到100左右的其实都是跑调度,类似PCF的一种TDMA工作模式。802.11协议其实是提供很多调度接口的,实际上每一次协议演进 时候,最大关联用户数实际上是不断增加的,所以其设置2007这个数字,确实需要设置大一些,确保协议还有发展空间。
另外,不仅仅在无线的Wi-Fi场景下有最大理论用户上限,实际上早期的支持CSMA/CD的repeaters也是由于协议有最大客户端数限制的,所以由于协议导致的极限并不是第一次出现,如下图即是在《Ethernet: The Definitive Guide》中所述(注:第416页):
![932a159bedd5b211e2292889a0ba23e0.png](https://i-blog.csdnimg.cn/blog_migrate/f782c030f9f077b53e4c9ee810607f43.png)
那么基于CSMA/CD的repeaters,最大用户数目是1024,该1024实际上是基于CSMA/CD的BEB最大回退10次所导致(第0~10次会指数增加回退窗口,第11~16次不增加),而若采用包交换的交换机,则没有这个限制。
本文为原创文章,如需转载须注明出处和原文链接。
![b58b8e63e578457b68ec7050118a35d4.png](https://i-blog.csdnimg.cn/blog_migrate/3e4a2e43cad6bc29c8fae185184531bf.png)
欢迎大家关注我们的微信公众号:无线技术大讲堂,请搜索公众号(must_wireless)。