Is this normal for this sort of consumer level wireless equipment?
Unfortunately, yes. I have had horrible results with consumer grade 802.11 equipment, in particular the famed Linksys WRT54G model line. This includes the pre-5.0 versions that have the full 16MB of system memory and 4MB of flash memory. The vxWorks stock firmware is barely stable in my experience - with reliable uptimes ranging from three weeks to a few months. Observed behavior is that clients can associate with the access point, ping the access point's LAN IP address with no unusual amount of latency or packet loss, the firmware itself can ping (again with no unusual amount of latency or packet loss) a site on the internet but for inexplicable reasons the clients cannot. Power-cycling will "cure" this for a limited time.
Additionally dd-wrt is notoriously unstable. I have been through at least a half dozen versions of the firmware and they have all been horrible. I know people love it, but I wouldn't consider recommending it to anyone.
Anything I can do to improve it?
Yes. Buy quality wireless access points. The economics of consumer grade wireless products optimizes for two things - 1) to be the fastest to the market with their product regardless of consequences in terms of quality or design and 2) to produce the cheapest possible product thus maximizing return per unit. This situation does not produce quality products.
We've been using D-Link's DWL-3200 managed access points with decent results, although they are a little rough around the edges (particularly with respect to their command line interface). But for entry level (at $250 a piece) "enterprise-grade" products they're a pretty good value. Cisco Aironet products are largely the defacto standard here (but are priced accordingly).
Why is wireless to wireless transfer slow when everything else isn't?
Because consumer grade 802.11 equipment sucks. AND because 802.11 sucks (here's why)...
You've already determined that you're running at 802.11g so let's start with your theoretical peak throughput of 54Mbps. You're immediately going to lose half that due to overhead in the 802.11 protocol (because its a shared stream, signalling is done "in-band" and due requirement for collision avoidance). You'll be lucky to see a peak throughput of 22Mbps. And this does not take into account signal interference (the 2.4Ghz band is heavily used by a whole number of things other than 802.11), distance the client is from the access point (inverse-square law) or overhead for encryption. In my experience, a realistic (or pessimistic) estimate of your actual real world throughput is about 1/4 of the advertised speed. This puts you right around your 16Mbps (or 2MBps) that you're getting when downloading from the internet. Add in the overhead for TCP/IP and for the Application Layer and things are looking grim. However you should be getting somewhere around 8-11Mbps, which is about an order of magnitude better than what you're seeing.
Whats steps might I take to figure out what is happening?
First things, first. You need a client with a wireshark and a wireless card capable of monitor mode (see Wireshark's wiki). This will let you see the 802.11 control and management packets. Without this you're going to have a real hard time troubleshooting.
Unfortunately, you have already done everything I would recommend:
- Ensure you're operating at 802.11g and not 802.11b/g mixed mode
- Ensure decent signal strength and signal to noise ratio (wavemon is OK, but the Fluke AirCheck is far superior).
- Check for channel overlap with other 802.11 traffic. Kismet or NetStumbler is helpful here.
- Ensure that your clients are associating with the closest access point (check the MAC address of the BSSID/SSID)
- Check the Tx/Rx power
- Look at your client-side drivers especially if you're using Linux or BSD - these are often half-working and full of bugs (through no fault of the developers).
- Check for polarization and alignment problems with your antennas (if applicable)
- Using Windows XP and a "hidden" SSID? This breaks horribly (XP will automatically try to associate with any broadcast-ed SSIDs even if your hidden one is on the Preferred Network list).
If you continue to use dd-wrt be advised that the "official" recommend builds are largely considered broken. The current recommend build is 14929. Read the wonderfully organized "peacock" thread for more information.
I suspect using higher quality access points will largely resolve your problem, but I doubt you'll ever see speeds above 16Mbps.