Wanted to post my notes as plain text, but the bullets / sub-bullets get lost.
Here is a 2 page PDF with my notes on Research Datakit:
https://www.jslite.net/notes/rdk.pdf
The main takeaway is that connection build-up and tear-down is considerably more expensive
than with TCP. The first cost is in the network, which builds up a dedicated path for each
connection. Bandwidth is not allocated/reserved, but a path is and routing information is
set up at each hop. The other cost is in the relatively verbose switch-host communication
in this phase. This compares to the 3 packets exchanged at the hosts’ driver level to set
up a TCP connection, with no permanent resources consumed in the network.
In compensation, the cost to use a connection is considerably lower: the routing is known
and the host-host link protocol (“URP") can be light-weight, as the network
guarantees in-order delivery without duplicates but packets may be corrupted or lost (i.e.
as if the connection is a phone line with a modem). No need to deal with packet
fragmentation, stream reassembly and congestion storms as in the TCP of the early 80’s.
Doing UDP traffic to a fixed remote host is easily mapped to using URP with no error
correction and no flow control. Doing UDP where the remote host is different all the time
is not practical on a Datakit network (i.e. a virtual circuit would be set up anyway).
A secondary takeaway is that Research Datakit eventually settled on a three-level ascii
namespace: “area/trunk/switch”. On each switch, the hosts would be known by name, and each
connection request had a service name as parameter. In an alternate reality we would maybe
have used “ca/stclara/mtnview!google!www” to do a search.