Having said all
this, you should not conclude that I believe bandwidth is unimportant.
It is very important, but not in the way most people think. Bandwidth
is valuable for its own sake, but also for its effect on overall latency
- the important issue is the total end-to-end transmission delay for
a data packet.
Remember the example
in the first part of this article comparing the capacity of a Boeing
747 to a 737? Here's a real world example of the same issue. Many people
believe that a private 64 Kbps ISDN connection is as good (or even better)
as a 1/160 share of a 10 Mbps Ethernet connection. Telephone companies
argue that ISDN is as good as new technologies like cable modems because
though cable modems have much higher bandwidth, that bandwidth is shared
between lots of users so the average works out the same. This reasoning
is flawed, as the following example will show.
Say we have a game
where the data representing the game's overall state amounts to 40K.
We have a game server, and in this simple example, the server transmits
the entire game state to a player once every ten seconds. That's 40K
every 10 seconds, an average of 4K per second or 32 Kbps. That's only
half the capacity of a 64 Kbps ISDN line, and 160 users doing this on
an Ethernet network will utilize only half the capacity of the Ethernet.
So far so good: both links are running at 50 percent capacity, so the
performance should be the same, right?
Wrong. On the Ethernet,
when the server sends the 40K to a player, the player can receive that
data as little as 32 ms later (40K / 10 Mbps). If the game server is
not the only machine sending packets on the Ethernet, then there could
be contention for the shared medium, but even in that case the average
delay before the player receives the data is only 64 ms. On the ISDN
line, when the server sends the 40K to a player, the player receives
that data five seconds later (40K / 64 Kbps). In both cases the users
have the same average bandwidth, but the actual performance is different.
In the Ethernet case, the player receives the data almost instantly
because of the connection's high capacity. But in the ISDN case, the
connection's lower capacity means the information is already 5 seconds
old when the player receives it.
The problem is that
sending a 40K chunk every ten seconds and sending data at a uniform
rate of 4K per second are not the same thing. If they were, ISDN, ATM,
and other telephone company schemes would be good ideas. Telephone companies
assume all communications are like the flow of fluid in a pipe. You
just tell them the rate of flow you need, and they tell you how big
the pipe has to be. Voice calls work like the flow of fluid in a pipe,
but computer data does not. Computer data comes in lumps. A common mistake
is to think that sending 60K of data once per minute is exactly the
same as sending 1K per second. It's not. A 1K per second connection
may be sufficient "capacity" to carry the amount of data you're
sending, but that doesn't mean it will deliver the entire 60K in a timely
fashion. It won't. By the time the lump finishes arriving, it will be
one minute old.