Keep it beautiful
Everything here is my opinion. I do not speak for your employer.
January 2014
February 2014

2014-01-08 »

Serious wifi quiz question of the day:

Let's say the typical wifi noise level is -90 dBm, and you know packets can be exchanged generally without problem with a 20 dB SNR and mostly reasonably with even 10 dB SNR, and when you sniff the network for a bit, you can see a bunch of packets from your neighbours in the -70 to -80 dBm range.  Meanwhile, you can see your link partner with say -50 dBm because they're in the same room as you.  This puts them 20 dB above the background packets.  Your neighbour is sending a lot of packets at high speed between his devices, which come through for you with bit errors (too much speed for a low signal strength) but you can see the headers (which are sent at a lower speed).

Do you:

1. Avoid this channel because your neighbour is using it heavily, preferring instead a channel with higher-powered but fewer packets?

2. Choose the channel because it's far away and so, on the whole, you're mostly not overlapping, and then don't transmit at the same time as you see packets from your neighbour?

3. Choose the channel and pretend the noise level is actually -70 dBm, then broadcast whenever you want, even on top of your neighbour's packets, because you know your devices will pick up your packets more srongly instead of his, and vice versa?

I think if you're building dense wifi networks (eg. with an AP in every room) then #3 is actually pretty viable, and would make a lot more channels available for use, even though technically you can overhear your neighbours.

Once again, it's when you try to max out your range - where your AP and your neighbour's AP are competing at -70 dBm - that things start to fall apart.

Analogy: in a crowded restaurant, it's rude to talk while someone next to you is talking, but it's not rude to talk at the same time as someone at another table.  It is, however, ineffective if everyone in the restaurant is trying to yell across the room to their friends, all at the same time.  Or at least you'd have to take turns.

Part of the problem, though, is that both ends of a given connection would need to agree on it.  If you tweaked your router's wifi chipset to assume it doesn't see a carrier when the carrier is only at -70 dBm, then it would be able to send, but the client device might not know to do this.  (I also don't know if there even are ways to tweak the expected noise level from software.  I assume there must be, but they might be undocumented hardware flags.)  Or maybe you don't need to cooperate that much, if you use the standard assumption that downlink is more important.  A client device could choose to transmit uplink packets in the spaces between your neighbour's packets, and the AP could stomp on the neighbour's packets, and things could still work.

Am I missing anything here?

I'm CEO at Tailscale, where we make network problems disappear.

Why would you follow me on twitter? Use RSS.

apenwarr on gmail.com