There are certain “spaces” in our homes where the WiFi signal refuses to penetrate. What do we do? Simple…respect those “spaces”, call them dead-zones and do everything in your power to stay away from them, like placing the couches on the opposite side! Well, this works until someone in the house begins to walk around with a smart device, expecting YouTube to play seamlessly, especially in the dead-zones! Boundaries are broken, respect is lost and you wonder why your “WiFi Sucks”. Been there, done that?
I have heard these kind of stories from my friends but the gravity does not work on you unless you fall yourself. So I decided to get myself a budget mesh router that would cover most of my 177sq. mtr house. I found a good deal for DLINK COVR C1203 and bought one. Setup was easy and everyone seemed to be happy, except for the kid, who chooses to stream content sitting on a bed. This bed happens to be in one of the dead-zones. And the mesh network did not seem to improve the situation!
This is not cool! I had expected the mesh to solve connectivity issues in the dead-zones. Either the device is broken or then the dead-zone devices are not connecting to the closest mesh node (B). For some reason, speeds are affected in the dead-zones. I know something about wireless networks, but I am not an expert on WiFi. However I do consider myself an expert in Googling the right way. Everything that follows is a combination of these expertise.
First, a little bit about the mesh device — It is a DLINK COVR C1203 EU model. It has one central node (A) that connects to the broadband backbone and two satellite nodes (B and C) that are placed around the house to create a “mesh”. Ground rule is to place the satellite nodes half way between the main node and the dead-zones. I tried to follow this rule as seen in the picture, but that did not improve connectivity. I also dug into the details of the accompanying app to see how devices are connected to the nodes, but that did not help either.
Few google searches later, I decided to check the WiFi connection details. Since the mesh network contains 3 nodes, and it claims to intelligently steer client devices between the nodes, I was assuming the WiFi connection on the dead-zone laptops will throw some light about the node it is connected to. Apparently not! The WiFi name or the SSID (Service Set Identifier) points to the common WiFi network name managed by the mesh. This is exactly the point of using a mesh network — seamless and unified network around the house! Conclusion — SSID does not help!
Few more “searches” later, I was enlightened by a new term called BSSID (Basic Service Set Identifier), which is similar to the SSID, but identifies the access point of a wireless network. Access points in my mesh network are the nodes-A, B and C. Gotcha! This is exactly what I was looking for! But wait a minute, I only configured the SSID when setting up the mesh. I never did anything for the BSSID, so how do I know the BSSIDs of my access points? Back to Google!
It seems that access points use the device MAC (Media Access Control) address as the BSSID (most of the time!). I believe this is the case because inherently device MAC addresses are unique. See! This is how Google works it’s magic on you. Few paragraphs before I was a newbie and a few searches later, I already have opinions and theories on the technology! Google rocks! Back to the problem — Now I know that I need to find which BSSID the dead-zone laptops are connecting to.
More “searches” later, it seems BSSID cannot be tracked by simply sniffing a WiFi network using a tool like Wireshark. BSSID is part of the “wireless management functions” and is broadcast locally on something called an “AP beacon”. In other words, it needs specialised tuning and tools for monitoring. This blog has some interesting information about capturing “AP beacon frames”, but the most important part that caught my eye was the functioning “mode” for a WiFi adapter. Apparently, the WiFi adapter or card has to be in “monitoring mode” in order to capture the management information, i.e., the beacon frames. If you are interested about the different WiFi modes, this blog can help.
All this wisdom gave me the important search terms — BSSID, AP Beacon and WiFi monitoring mode, that I needed to further solve my issue. Armed with this and couple more search crusades later, I had a breakthrough. Among the many available tools, I was attracted by a linux package called “Aircrack-ng”. It can be used for all kinds of WiFi monitoring, hacking and analysis. Once a WiFi adapter is changed to “monitoring mode”, it will stop sending data on the network and will start sniffing “AP beacon frames”. In other words, do not plan to research on internet and setup monitoring station on the same device unless you have multiple wireless adapters on the device. All good! Let’s do this.
Step-1: Identify MAC Addresses
Reports generated by “Aircrack-ng” contain device MAC addresses (no IP addresses). Hence, we need to identify the MAC addresses of all devices on the wireless network, including the mesh nodes. For the client devices (smart phones, laptops etc.), this is quite easy, if you can identify the WiFi settings of the device. In most of the devices, MAC address is shown as part of network settings (if not, Google to the rescue!). However, identifying MAC addresses of the mesh nodes is not very straightforward!
If you read through the BSSID blog, you would have noticed that an access point can have multiple MAC addresses depending on the interfaces it supports. For e.g., the COVR node in case here, has 2 Ethernet ports and 2 WiFi bands (2.4Ghz and 5Ghz). Thus a single node has 4 MAC addresses. How do I associate a MAC address to an interface? Honestly this is the aspect that took most of my research time. There is no clear guidance or documentation for this and in all probability this kind of association would vary from manufacture to manufacturer. Anyway, based on some of the wireless know-how, I decided to run an experiment. The idea was simple:
- Find a WiFi analyser mobile app (that shows BSSIDs) of surrounding access points. There are plenty in the app stores and I selected WiFi Analyzer.
- Place an android phone (that supports dual band WiFi) close to the mesh node.
- Disable WiFi on the android device, wait for a while and then enable WiFi.
- Check the WiFi details displayed by the WiFi Analyzer app.
With multiple rounds of this experiment, I could safely shortlist the MAC addresses of the 2.4Ghz and 5Ghz radios of the mesh nodes. Comparing them to the MAC address printed on the sticker of the mesh node, I can identify the interfaces associated with the addresses:
Step-2: Monitor network
Time to monitor the WiFi network using “Aircrack-ng”. I enabled the monitoring for a day. At the end of the day, I gathered all the generated files and imported the “csv” into an excel. This is what I see (MAC addresses are just examples here):
Exactly what I had suspected!! I was assuming both laptops in the dead-zone are connecting to mesh node B which is closest to them, but it seems that only one laptop (with power -39) connects to mesh node B and this laptop does not have any bandwidth or connectivity issues. The other laptop (with power -75 ~poor signal strength) seems to be connecting to mesh node A. I have absolutely no clue why this happens, but I do know why there is still a dead-zone in my house. Devices are not connecting to the right mesh node!
I moved mesh node B slightly closer to mesh node A and that solved the issue! Running the same monitoring steps above shows that all devices in the “late” dead-zones now connect to mesh node B. It should have been the dry walls interfering with the signal strength, signal quality or maybe something else all together, who knows!. Anyhow, I do know which mesh node my device connects to and by moving them around I can perhaps find the best possible placement for best possible internet connectivity.
If you are also trying to nail down the mesh node connecting your devices, I hope you find the details in this article helpful in your endeavour.