Observations on setting up and running a 802.11b wireless link.
Problems with fading and with duplicate packets, and attempts at solutions
The wireless link between me and the point of presence runs 8.0 km over water.
Planning and installing the link,buying the radios and antennaehas been pretty much a trial and error affair, with me learning as I go. The original plan was to buy two linksys wap11 bridging access points, build two cantennae, modify two expressview DSS dishes with a cantenna for each dish as a feed point, and enjoy a high speed wireless link to ADSL service. I have to say that though the modified dish and cantenna operated fairly well, I went commercial for the dish and driven element to have characterised antenna components.
The present setup still uses the wap11 version-2.2 access point radios with flashed to dlink-900AP+ firmware; two commercial 24db grid parabolic dishes, one on a tower at about 85 feet above high tide and the other dish at a site about 240 feet elevation in the town with ADSL (co-ordinates). Horizontal polarization is used.
Fresnel zone calculator found on the net yields 50 feet (15meters) as the first Fresnel zone halfway along the path This path has at least that clearance.Using a wlan budget calculator for 15dBm radios 24dBi dishes, path loss of -120 dB, 3dB cable loss at each end, and -78dB receiver sensitivity leaves me with a 27dB margin.
This configuration provides a usable link most of the time, with a data rate about ten times faster than my dialup rate of 49000 bps. The wireless link fails though. At some times in the day the link dies for up to three hours. At first I attributed the outages to local interference, then to remote interference, then to atmospheric ducting, then to malicious jamming.
Then I decided to log the outage events. After a few days of logging time vs outage, I plotted the results. The plot made little sense; the outages still appeared random through the days. Replotting to show the daily outages in one 24 hour period showed the outages to be progressing later in each day, and changing in duration. A little thought provided a correlation to the tide cycle; the outages were in step with the tides -- the low tides. The link went down at low tide! To show this dependence on the tide cycle I put a little more effort into the logging routine, using the xtide program to plot the value of the tide every five minutes (crontab) when the link was up. Plotting this data gave me a daily tide table with gaps in the curve when the wireless link was down.Take a look at large plot of October or November.
Be aware that the tide curve is generated by tidal harmonic tables for the nearest tide site, Alert Bay, which is about 8 mi (13 km) away. Tide heights as plotted have corelational value for my outages, not for navigational accuracy.
September 2003 was the first month I collected data on the outages; the tide range here is rather moderate in September. The tidal range reaches its maximum here in late November. The increasing extremes of tide level have shown further outage events; now the high tide levels are causing outages, and even more interesting, the low tide extremes now show the link functioning again. This behavior I attribute to classical multipath destructive interference. Another feature shown on the plot is that some low tide events do not result in an outage. These events correlate to the state of the water surface: when the wind is blowing and a storm is causing choppy water, the water surface is rough and scatters the reflection from its surface, preventing the outage. Conversely, when the water surface is glassy smooth, the outages begin sooner and last longer.
Lloyd's mirror, a variation on the classical two-slit experiment:
Microwave experiment that demonstrates the multipath interference condition.
PING 192.168.0.251 (192.168.0.251) 56(84) bytes of data.
64 bytes from 192.168.0.251: icmp_seq=1 ttl=127 time=0.080 ms
64 bytes from 192.168.0.251: icmp_seq=1 ttl=127 time=0.313 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=1 ttl=127 time=2.62 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=1 ttl=127 time=3.54 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=1 ttl=127 time=9.59 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=2 ttl=127 time=2.85 ms
64 bytes from 192.168.0.251: icmp_seq=2 ttl=127 time=15.7 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=2 ttl=127 time=17.0 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=2 ttl=127 time=17.2 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=3 ttl=127 time=0.085 ms
64 bytes from 192.168.0.251: icmp_seq=3 ttl=127 time=0.407 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=3 ttl=127 time=0.573 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=3 ttl=127 time=0.731 ms (DUP!)
64 bytes from 192.168.0.251: icmp_seq=3 ttl=127 time=10.0 ms (DUP!)
--- 192.168.0.251 ping statistics ---
3 packets transmitted, 3 received, +11 duplicates, 0% packet loss, time 2028ms
This example shows about 4 duplicate packets for each ping; at times the ping would return up to 50 DUPs per ping. You can imagine what the throughput of the wireless link was with all those duplicate packets in the pipeline! Use of a packet sniffer like tcpdump showed that the duplicate packet problem was present in all TCP protocols, too. I monitored the link bandwidth with the "iperf" tool. At worst,the bandwidth was about 200 kilobits/second. Some firmware flashing improved the bandwidth to about 400kbit/sec. After some further firmware fiddling, I could demonstrate a bandwidth of around 700kbits/sec, but I could not pinpoint just what the problem was that caused the duplicate packets.
Let me be more specific about the hardware involved. In July, 2002 I bought two linksys WAP11, ver-2.2 access points. These are still the units operating the link. The lowest bandwidth was with the linksys firmware. I discovered the linksys to Dlink firmware hack and when I had given uphope of getting anywhere with that junk Linksys sells I risked it all and flashed the units to the Dlink firmware. After the firmware flash, the bandwidth was up to around 400kbits/sec. I could then use Dlink firmware and changed the firmware to ver-2.57 on one end and ver-2.60 on the other end of the link. The bandwidth was 700kbits/sec after that change, and I was pleased with the improvement. The duplicate pings were running around 12 duplicates per ping.
I fiddled with antenna pointing, clearing the line of sight (big bucks to top some spruce and cedar trees), postings to wireless user groups, etc. No improvement..
In November, Dlink released ver-2.61 firmware so I tried that in both units. My bandwidth dropped back to 400 kbit/sec! Duplicates were back to 22. What had gone wrong?
Each time I flashed the units, I went through a fixed procedure: 1) restore to defaults; 2) power cycle; 3) flash firmware; 4) power cycle; 5) customise settings; 6) power cycle. I had customized the speed of the radios to the "1-2, 5.5, 11" before doing any testing believing that Faster is Better. For lack of any better ideas, I changed the default setting of "long preamble" to "short preamble', and got better bandwidth and fewer DUPs - just 4 DUPs. I was on a roll.... I changed both radios to "short preamble" and speed settings to 1-2 mbits; the bandwidth went up to 1.44mbits/sec, with NO duplicate packets at all. Slower is faster! Slower is better.
These improvements were made on November 22; the plot of time vs tide shows a more defined pattern of outage after that date. Notice the right hand side of the graph; the outage begins at a lower tide, has a shorter duration, and ends at an even lower tide. The window of outage lasts a shorter time with the radio speed set to 1-2 mbit.
The lesson learned in all of this is that the setup parameters are very important in cheap consumer wireless products when using them over long distances. The slow speed settings are much more robust than the high speed settings, and can deliver much better bandwidth.
Last update December 7, 2003