Uh... where are YOU doing y our field tests?! My experience is that, indeed, UDP is faster. I can't remember ever seeing a performance test where TCP was faster than UDP,
TCP and UDP use the same underlying internet transport mechanism. Under good communication circumstances where you are not getting packet loss and with enough bandwidth to cover what you are transmitting plus your packet overhead, timing by definition MUST be identical. If you don't believe me, go buy a textbook.
At TEN (Total Entertainment Network) we did solely TCP/IP because its actually lower bandwith over PPP, which was our last critical mile for most of our customers. (Most customers were dial-up back then.)
We had the best QUAKE2 play on the internet and ran DukeNukem3D and Nascar Online Racing flawlessly for anyone with a decent connection.
Many people do not understand TCP and misuse it. In these "timing tests" you speak of, did you disable nagle's algorithym? The problem with a benchmark generally is that, unless you are an expert on the thing you think your measuring, its likely the results don't mean what you think they do.
UDP becomes *worse* then TCP as soon as you need TCPs gaurantees. You end up having to reinvent TCP, but in a way that the net does not understand and can't therefor help you optimize.
* Under what circumstances does the SGS team recommend using "reliable", "unreliable" or "unordered reliable" channels?
(Please don't say "if you need reliable communications, unreliable communications or reliable-but-unordered communications", or we'll have to send you to work at MS-tech-support
Heh, well I wasn't going to say that, but I was going to say something equivalent... always ask for the lowest level of guarantees that you need for your app. In general the lower the guarantees you ask more, the more room the underlying protocol has to optimize things.
What I mean is: in the context of a multi-player game (specifically an MMO-type), what are their intended purposes?
Totally depends on how you design your MMO.
Guildwars is 100% TCP/IP and runs fine because it was designed for that. (If you dont believe me, fire it up and do a netstat.) Often, MMO desigenrs go for a mix where they seperate data that is critical or needs to be ordered from data that doesn't and use seperate communication paths for each. The gain for the added complexity is not clear, but it makes some developers more comfortable.
* Do y'all have any field-test performance data (i.e., "real 'net", as opposed to LAN) on the various channel types? (...That you can share with us, I mean
No we really havent gotten to the point of stress testing the comm layer in a scientific way. Among other things, until we finish the production (multi-node) servers there are parts of the equation that shoudl be included that we can't measure.
* I read "reliable channel" as "TCP" and "unreliable channel" as UDP. (a) Is that right? (b) What does "unordered reliable" represent? Is that what some people refer to as "a reliable protocol over UDP"?
This is up to the protocol handler, which ultimately means its up to you.
Our default protocol handler does "unordered/unreliable" over UDP and anything with gaurantees over TCP. However, it would be incorrect for you to start building a client-level reliability scheme ontop of our unordered/unreliable. Rather, if you want a different mapping such as an actual UDP based "unordered/reliable", you should do it through a custom protocol handler.