However, TCP isn't very appropriate for exchanging new player positions because they change so frequently and everybody needs to tell everybody else. The first idea is really bad because the number of connections increases quadratically with the number of players, as does the network traffic. Another reason to avoid TCP is that it has a lot of overhead. This overhead makes it reliable but slow. In fact, a packet getting delivered late is just as bad or worse than a packet that never gets delivered.
Multicast traffic increases linearly with the number of players so it scales well.
In other words, it's ideal for bzflag. The problem arises when TCP traffic to and from the server is delivered, but multicast traffic between players is not. This can easily happen since the two protocols are routed very differently, usually by different daemons and even by different systems. All subsequent positions are sent via multicast. If multicast routing is down, you'll see a tank but it won't appear to move even though the other player really is moving.