MCS and Microsoft Windows

Ā·

MCS, or Modulation and Coding Scheme, is a way to ā€œā€¦ [evaluate] the quality of the RF environment – the RF media that devices are working in, which is reflected in every single transmissionā€ (from MCS Table and How To Use it).

The matrix of those various measurements is called an MCS table. From that matrix, you can derive the MCS index of a given radio network configuration. An excellent table can be found at mcsindex.com. Whenever I refer to ā€œlooking at the tableā€ in this post, that’s what I’m referring to, so if you haven’t clicked to open that link, do so now!

Windows doesn’t show you your MCS index. The quickest text-based format to show Wi-Fi data in Windows comes courtesy of the ā€œnetshā€ command:

> netsh wlan show interface

The problem is that Windows will show you your raw data rate, but it’s missing certain information. Here’s some Windows output:

Name                   : Wi-Fi
Description            : Intel(R) Wi-Fi 6 AX201 160MHz
GUID                   : f6cbd34e-3469-46c4-b6f8-47c02af70e48
Physical address       : 94:e2:3c:83:c8:27
Interface type         : Primary
State                  : connected
SSID                   : Starbucks WiFi
AP BSSID               : e2:cb:ac:92:24:ff
Band                   : 5 GHz
Channel                : 149
Network type           : Infrastructure
Radio type             : 802.11ac
Authentication         : Open
Cipher                 : None
Connection mode        : Auto Connect
Receive rate (Mbps)    : 400
Transmit rate (Mbps)   : 400
Signal                 : 96% 
Profile                : Starbucks WiFi
QoS MSCS Configured         : 0
QoS Map Configured          : 0
QoS Map Allowed by Policy   : 0

I see that my Receive rate (aka Rx, aka DL/downlink) and Transmit rate (aka Tx, aka UL/uplink) are both 400 Mbps. But what does that mean? Looking at the MCS table, it indicates that a rate of 400 can mean only one thing… I’m using:

  • 2 spatial streams (NSS, or ā€œNumber of Spatial Streamsā€)
  • 256-QAM
  • 5/6 coding
  • 40 MHz channel
  • 400μs guard interval (GI)

… therefore my MCS index is 9… easy! The only information I need from Windows here is the fact that my ā€œRadio typeā€ is 802.11ac, which means I’m using VHT (Wi-Fi 5), not HE (802.11ax/Wi-Fi 6) or EHT (802.11be/Wi-Fi 7).

Here’s another example:

Name                   : Wi-Fi
Description            : Intel(R) Wi-Fi 6 AX201 160MHz
GUID                   : f6cbd34e-3469-46c4-b6f8-47c02af70e48
Physical address       : 94:e2:3c:83:c8:27
Interface type         : Primary
State                  : connected
SSID                   : Flowers By Irene
AP BSSID               : 4c:43:41:04:1c:bc
Band                   : 5 GHz
Channel                : 149
Network type           : Infrastructure
Radio type             : 802.11ax
Authentication         : WPA3-Personal  (H2E)
Cipher                 : CCMP
Connection mode        : Auto Connect
Receive rate (Mbps)    : 864.7
Transmit rate (Mbps)   : 1201
Signal                 : 95%
Profile                : Flowers By Irene
QoS MSCS Configured         : 0
QoS Map Configured          : 0
QoS Map Allowed by Policy   : 0
Hosted network status  : Not available

In this case, my downlink data rate is 864.7 and my uplink rate is 1201. Unfortunately my DL is pretty ambiguous. Looking at the MCS table…

  • 864.7 Mbps could mean:
    • MCS 4 on EHT at 1 SS / 16-QAM / ¾ coding / 320 MHz / 0.8μs GI
    • MCS 8 on HE/EHT at 1 SS / 256-QAM / ¾ coding / 160 MHz / 0.8μs GI
    • MCS 2 on EHT at 2 SS / QPSK / ¾ coding / 320 MHz / 0.8μs GI
    • MCS 4 on HE/EHT at 2 SS / 16-QAM / ¾ coding / 160 MHz / 0.8μs GI
    • MCS 8 on HE/EHT at 2 SS / 256-QAM / ¾ coding / 80 MHz / 0.8μs GI
    • … etc
  • 1201 Mbps could mean:
    • MCS 11 on HE/EHT at 1 SS / 1024-QAM / ā…š coding / 160 MHz / 0.8μs GI
    • MCS 11 on HE/EHT at 2 SS / 1024-QAM / ā…š coding / 80 MHz / 0.8μs GI

In the scenarios above, what are the most logical conclusions? First, most modern mobile client stations have 2 radio chains and therefore likely 2 spatial streams (aka 2Ɨ2:2, meaning 2 Tx radio chains Ɨ 2 Rx radio chains : 2 spatial streams). In the 864.7 Mbps scenario, we can probably disregard the first two that have only 1 spatial stream. We can also disregard option 3, because we can see from the Windows output that it’s 802.11ax, aka HE, so it’s clearly not EHT. Unfortunately, there is no way to tell which MCS value we truly have, without querying the driver or doing a packet capture. With a data rate of 1201 Mbps, on the other hand, it’s obviously MCS 11, though Windows doesn’t tell us if it’s an 80 or a 160 MHz channel width. But if we assume it is also 2 spatial streams, we determine the channel width is then 80 MHz. If we ā€œback applyā€ that logic to the downlink, we can reasonably guess the downlink is MCS index 8, because the DL and UL bandwidth would be the same. Therefore:

  • UL is MCS 11
  • DL is MCS 8

I just had to show one more thing. I work for Calix, so I am privy to the some wiz-bang Wi-Fi systems (in this case, the GigaSpire 7u10t). I also have a Minisforum MS-01 Workstation Core i9-13900H with a Wi-Fi 7 PCIe card with 6 GHz, 320 MHz bandwidth, which shows as:

>netsh wlan show interface

There is 1 interface on the system:

Name                   : Wi-Fi
Description            : TP-Link Wi-Fi 7 PCIe Adapter
GUID                   : 7467bdb0-9d6f-4ee7-aa37-59285d91e6f7
Physical address       : fc:b0:de:cd:7e:0b
Interface type         : Primary
State                  : connected
SSID                   : Flowers By Irene
AP BSSID               : c2:43:41:04:1c:bd
Band                   : 6 GHz
Channel                : 37
Network type           : Infrastructure
Radio type             : 802.11be
Authentication         : WPA3-Personal  (H2E)
Cipher                 : CCMP
Connection mode        : Profile
Receive rate (Mbps)    : 5764.8
Transmit rate (Mbps)   : 5764.8
Signal                 : 88%
Profile                : Flowers By Irene
QoS MSCS Configured         : 0
QoS Map Configured          : 0
QoS Map Allowed by Policy   : 0

and my Calix Speed & Performance Insights server yield 3.4Ɨ2.6 Gbps over Wi-Fi… šŸ”„

As for the DL/UL rate? It’s the highest possible score for 2 spatial streams at:

MCS 13 on EHT at 2 SS / 4096-QAM / ā…š coding / 320 MHz / 0.8μs GI

In the near future, I will do the same MCS fiddling on macOS. Hint: macOS gives you the MCS index, but withholds certain other information, so we will still have some (different) detective work to do!