Ok -
so now we know how data gets to and from and about on the Internet.
It all sounds cool and froody, so what's the problem? Why doesn't
Quake play well then? Well, there are many potential problems.
I'll list some - and by all means not all - here.
The
routers.
Routers
have a finite capacity. They can only examine and forward one
packet at a time. The rest sit in a 'queue' waiting to be dealt
with. Once the queue is full, any packet that gets submitted will
be ignored. Welcome to the world of dropped packetsJ Actually,
this is pretty rare, you have to have a real heavy load on a router
before it does this, but it does happen. Another problem with
queuing is that it takes time. It delays your packet before it's
processed and adds to the round trip time it takes for your packet
to get to its destination.
More often
there are problems with the router itself, or it leads to a dead
end. To explain, when a packet hits a router, its destination
address (its destination IP) is examined, and the router compares
it against its own route tables. These routes come in two flavors,
static and dynamic, (at least they do now - older routers have
only the static lists). Route Tables are basically a list of destination
addresses it knows about. For instance router A gets a packet
that wants to go to Router F. Router A can see routers B and C
- but not router F. What does it do? It requests those routers
that B and C can see (and in this case both know where router
F is), and decides based on the info it receives which one to
send it to. This info includes loads on the B & C routers,
number of hops to get to Router F and so on. Since loads can vary
second to second, the decision to send it via B or C can change
second to second. Hence you can see how multiple paths can be
used for packets going to the same destination. So what's the
difference between static and dynamic trace routes? Static are
routes that are 'programmed in' to the router. It KNOWS these
routes exist, and expects them to be there at all times. Dynamic
routes are those that it gets from other routers. This list is
constantly changing and updating dependant on what routers are
up, what routes are the fastest and what routers may be inoperable
further up the chain. If a line goes down somewhere, or a router
breaks down, most routers with only static lists don't know/care.
They send it on, since they KNOW the route is supposed to be there,
but once it gets to the next one, there is nowhere for it to go,
because a line was down. Before dynamic trace routes were around,
if a line went down between you and your destination, you could
well be SOL. Obviously I've take some liberties with exactly how
routers work and simplified it considerably, but this is more
a layman's document than a programmers guide.
One of
the worst things about all this is that there is nothing that
you, as the user, can do about this. The Internet was designed
to be robust, in real time, but not instant. It's a shame, but
Quake wasn't on their minds at design time. :)
As an
aside, you might be interested to know that with the new IP design
that has 6 IP numbers instead of 4 (apparently we are going to
run out of IP addresses by 2014). Some new addressing schemes
include a 'preferred route' in the header for IP packets. This
way the router itself won't be doing the decision-making, but
letting the packet creator chose the route itself. At least this
will gain consistency, and reduce lost packets & out of order
packets, but at the risk of speed of transmission.
TCP/IP
- UDP.
As we
learned in the last section, you can't guarantee that packets
are going to be delivered at all. Another draw back to this situation
is packet ordering. You may transmit your packets in order, but
they may end up going via different paths and encounter different
delays in getting to their destination, with the practical upshot
that they get there out of order. This is a problem, and there
is not much that the hardware of the Internet can do about this.
But a solution is in hand in the shape of Internet Protocols.
We've all heard about TCP/IP but what does it mean? Well, it stands
for Transmission Control Protocol / Internet Protocols. While
we are talking about initials lets define UDP as well. Thats
User Datagram Protocol. So we know that they stand for. Does this
make everything clear? No. Ahhh.