Re: [colorforth] DARPA takes aim at IT sacred cows
- Subject: Re: [colorforth] DARPA takes aim at IT sacred cows
- From: "Samuel A. Falvo II" <kc5tja@xxxxxxxx>
- Date: Sat, 27 Mar 2004 23:34:07 -0800
On Saturday 27 March 2004 08:38 pm, wtanksleyjr@xxxxxxx wrote:
> We'll have to understand the problem first. So, who's going
> first? Let's see the network re-implemented in the spirit
> of Forth!
I have already done this, actually. Though it won't appear in my Kestrel
kit's peripheral interconnect bus, I did take some time out of my busy
day to entertain a thought experiment: if I had to re-engineer a
networking system, from scratch, using the Forth philosophy, how would I
do it?
Assumptions:
1. The network runs over wires.
2. The network uses a bus architecture, physically or simulated (as with
a switch or hub)
3. There is no logical distinction between a computer node address and a
software socket. You can't send "a computer" a packet and expect it to
know what to do with it. It's always sent to a specific end-point.
Sometimes this end-point is implied in the 'upper protocol' (e.g., ARP
is an example of an implicit end-point, specified by Ethernet's protocol
ID field), but it is always there.
Basically, we start out with the simplest possible network: two
computers, connected point to point over a common wire. Each computer
represents a single end-point, as it's assumed one application on each
end point "owns" the link. There is no need for addressing information:
if a byte of data is received, *clearly* it came from the other
computer.
But in a multitasking operating environment, it's not desirable to let
one application own the whole link. What if we want to chat on IRC
while downloading a file? We need specific end-points that terminate in
specific applications. Yet, it's clear that we also want to preserve
the lack of latency that the former situation had. Therefore, we can
establish a sense of modality on the network: the currently addressed
end-point is who receives the bytes. Note that each side of the
connection can have independent end-points, since we always know who
sent the data if a byte is received. We need some way to notify the
node that we're changing who we're talking to; hence, an escape
mechanism is used. Let's use the $AA byte for this purpose. The format
is $AA <epID>, where <epID> identifies the target end-point on the other
computer.
The next level up occurs when we have three or more computers. Suddenly,
if we were to receive a byte, we *don't* know who sent it. Therefore,
we now need some means of identifying who sent a particular piece of
data. But since most (like, over 80%) end-points aren't shared amongst
multiple nodes, it's possible to leave off source address information --
clearly, any data coming into a Telnet connection MUST have originated
from the server the Telnet session is engaged with. Therefore, when
sending a packet of data, only the destination endpoint need be
specified. This must necessarily include the machine ID. However, with
proper scheduling, data to multiple end-points on that machine can be
trunked! There's no need to keep re-transmitting the machine's address
over and over again! Hence, applying the same principle above once
again, we make a new escape sequence, $BB, to handle this job.
So far, a typical packet looks like this:
$BB <mID> $AA <eID> ...data... $AA <eID'> ...data... $AA <eID''> ...
Thus, as far as the receiving nodes are concerned, it may as well still
be connected to a point-to-point link. Note that all the eIDs are
within the scope of a machine ID.
Internetworking can be accomplished using yet another escape sequence,
and as usual, all packets intended for that network can be trunked,
again with the goal of minimizing bytes transmitted in mind.
Does this networking system work? Well, there is zero indication to say
it won't. In fact, ATM networks already employ a virtual circuit
identifier approach towards labeling data flows, and it works *great*.
MPLS for the Internet strives to do the same basic thing; unfortunately,
it keeps that insideous IP header overhead.
Unlike even TCP/IP, this networking system doesn't even need to depend on
packets. The concept of a 'packet' falls out naturally from its design,
in a multi-computer environment. But when connecting two computers, and
data flows are limited to only a few applications, latencies and
throughputs approach those of a direct, point-to-point connection.
You can't beat it. At least, I haven't found anything that can yet.
--
Samuel A. Falvo II
---------------------------------------------------------------------
To unsubscribe, e-mail: colorforth-unsubscribe@xxxxxxxxxxxxxxxxxx
For additional commands, e-mail: colorforth-help@xxxxxxxxxxxxxxxxxx
Main web page - http://www.colorforth.com