loftar wrote:I am painfully well aware. The problem seems to be caused by some map data packets being larger than others, and some are large enough that they are fragmented. To my great surprise and disappointment, it seems that there are a lot of routers (consumer-grade equipment, that is) that drop fragmented packets. Dropping fragmented packets is stupid, needless and in violation of IP specifications, but they do it nonetheless. I'm quite frustrated at it, because I hate those kinds of incompetent people destroying the 'net for all of us.
It seems there are some software "firewall" programs that do the same thing as well. If you have one of those, please check its settings. (I might also recommend that you remove it. Such programs are, nine times out of ten, written by the same kind of incompetent imbeciles who think they have some idea of what security is, messing everything up. And I can almost guarantee you that it's unnecessary to begin with.)
Obviously, because of these things, I'll have to revise the map-data transfer protocol, but I haven't been able to think of a good alternative yet.
I had this problem due to a packet filtering firewall, and was able to solve it. Here's how.
First the theory: (1) IP fragments of UDP datagrams do not repeat the source and destination ports. They do repeat the IP addresses, but the ports are only in the first fragment. (2) Routers do not tend to reassemble fragmented packets, unless they are doing "NAT", where they need the whole packet to check the checksum and such. (3) This means that a filtering rule based on source or destination port probably won't work for fragments. In particular, it won't work for (some?) firewall-routers based on linux's ipchains.
Then the practice: from the PAQ, I figured that all of havenandhearth.com had a single IP. I allowed all UDP packets from that IP, rather than giving permissions based on the port. End of problem. (Since it is a single IP, I could get it with nslookup or dig; this might not have worked so well for a large site with multiple hosts, especially if it was doing load balancing.)