Off the top of my head here are a few:
- Wrong network speed. For example, a card running at 54Mbs isn't going to talk to an AP running 11Mbs. Yeah, they should auto-adjust but don't always.
-Flaky DHCP server and/or locked down DHCP server. When I'm on the road, I frequently have a nightmare of a time trying to get an IP in Linux due to some weird setting on the server. Windows picks it up without a problem. I have no idea why, but I see it very frequently.
-Flaky DHCP client. I've seen a lot of trouble with dhclient, but for me dhcpcd always seems to work.
I'm not sure there is a single common answer to your question however. I know what you see happens a LOT, but it is rarely clear why.