[comp.protocols.tcp-ip] A fuzzy proposal

Mills@UDEL.EDU.UUCP (06/05/87)

Folks,

This is a proposal for a modification to the data base used by the NIC and
other organizations which identifies hosts and gateways. The modification is
suggested by certain routing configurations that commonly occur in the NSFNET 
community and also elsewhere. These configurations involve cases where the
internal structure of an autonomous system is to be hidden from outside the
system for various good reasons.

The issues involved are best raised by an example involving a gateway/host
called the fuzzball and used in the NSFNET Backbone system, as well in other
systems. First a few words on fuzzballs and routing. In order to minimize
consumption of network numbers and local-net addresses, a peculiar addressing
model is enjoyed by the fuzzies. Each one is assigned a "home address,"
usually on the local Ether, which represents its entity title in ISOspeak.
This address is unique, so that unambiguous routes can always be computed.

When two fuzzies are spliced together by a serial line, each sends the other a
hello message with its home address in the IP source-address field. The other
one saves this address and uses it to update its local-entity routing tables
and network-entity routing tables (if both are on different networks). Thus,
fuzzies automatically build routing tables for not only the local routes, but
routes to adjacent networks. Additional data in the hello message is used to
construct routes to other than adjacent networks.

In order to reduce consumption of net numbers and local-net addresses, two
fuzzies connected as above do not need to know their address (if any) on the
adjacent network. This avoids the "null net" problem sometimes encountered
when two gateways belonging to different autonomous systems are connected by a
point-to-point line. Nevertheless, if necessary for other reasons, fuzzy
addresses can be assigned with appropriate handcrafted entries in the routing
data base (this is in fact done sometimes to create a "tunnel" where a host
physically connected to one network is assigned an address on some other
network). However, this defeats a very desirable self-configuration
characteristic and considerably complicates configuration control and
management.

Following is an example scenario involving UMICHNET (35) and MACOMNET
(192.5.8). The 35.1.1.1 fuzzy is connected to the 192.5.8.6 fuzzy by a serial
line. To the 35.1.1.1 fuzzy its end of the line appears an extension of net
192.5.8 while, to the 192.5.8.6 fuzzy its end of the line appears an extension
of net 35; however, neither fuzzy knows or cares about its specific address on
the other network (in fact no such address is used). However, each fuzzy
determines from the source address of received hello messages the specific net
number and updates its tables accordingly.

		     +---------------+		  ARPANET
		     |192.5.8.x	     |35.x.x.x	     |
+---------+	+----+----+	+----+----+	+----+----+
| net 35  |	|35.1.1.1 |	|192.5.8.6|	|192.5.8.1|
|  host   |	| umich1  |	|swamprat |	| macom1  |
+----+----+	+----+----+	+----+----+	+----+----+
     |		     |		     |		     |
=====O===============O====	=====O===============O=====
       net 35 Ether		     net 192.5.8 Ether

Although attractive in these aspects, the fuzzball scheme does create some
problems. For instance, it is not possible to determine an unambiguous return
route, since a fuzzy may not know its address on the previous network. Also,
it is not possible to produce an unambiguous interface list suitable for
recording in the NIC or similar data bases. In fact, it is not possible to
contact either the 35.1.1.1 or 192.5.8.6 fuzzies using addresses on their
respective adjacent nets, since such addresses do not exist.

Comes now a proposal to deal with this problem. Henceforth, gateways in this
embarrasing situation shall be assigned synthetic addresses in the form
<net>*, where * indicates unknown or unassigned. For example, the
fuzzies above would be recorded as

	GATEWAY : 35.1.1.1, 192.5.8.* : UMICH1
	GATEWAY : 192,5,8,6 35.*.*.* : SWAMPRAT .

It is possible in the case of subnets to indicate finer granularity by
replacing * fields with assigned numbers; however, the subnet mask can only be
inferred and then only if it corresponds to octet fields.

The above notation can also be used when two or more gateways are operated as
a single autonomous system and where the internal structure of that system is
to be hidden. For instance, assume the ARPANET gateway 192.5.8.1 above wishes
to hide the other two gateays. This could be done by

	GATEWAY : 10.0.0.111, 192.5.8.*, 35.*.*.* : MACOM1 .

The implication is that routing computations are to be done under the
assumption that MACOM1 has in fact direct interfaces to the nets listed and
that it will take responsibility for all traffic to those nets received at
10.0.0.111.

How might this proposal affect global routing schemes such as proposed for
the Dissimilar Gateway Protocol (DGP)? The DGP routing algorithm synthesizes
routes directly from interface lists in the form

			<gate> <net1> <net2> ... ,

where <gate> is a unique gateway identifier and <net1>, etc., are the
interface addresses assigned to it. The algorithm constructs a path between
desginated endpoint addresses <source> and <destination> in the form

   <source> <gate1> <net1> <gate2> <net2> ... <gaten> <destination> .

The particular algorithm used is a variant of the Dijkstra (SPF) algorithm
modified for a hierarchical data base, but this is not important for the
present discussion. However, note that the Dijkstra algorithm (and many other
ones similar to it) operate by extending paths from a given node to each of
several possible successor nodes. Say the algorithm is currently extending
paths from <gate1>, for example. It then adds to the path ending in <gate1>
new edges for each interface address, which according to the proposal above
could involve an incompletely specified address.

In some following step the incompletely specified node will be found. When
extending the path from that node the set of interface lists will be searched
for interface addresses on the same network and for each one found the
associated gateway will be added to the path. There are two cases:

1. The interface address on the next hop is completely specified. In this case
   a complete source route can be constructed in the usual way.

3. The interface address on the next hop is not completely specified. A source
   route must then be constructed to the previous-hop gateway, which then
   has the responsibility to determine the remainder of the route.

Your advice and comment on this proposal will be appreciated.

Dave

hwb@MCR.UMICH.EDU (Hans-Werner Braun) (06/06/87)

Dave:

Why don't you leave the *'s out, as they seem redundant. All you are asking
for is to leave host parts out to allow for net and subnet connections.
It's obvious without marking explicit *'s. In fact, may be addresses not
fully qualified (like 192.5.8) should be followed by a bit mask, to allow
for subnets. E.g.:

 GATEWAY : 35.1.1.4, (35.128 : 255.128.0.0) : MERIT-DIRECT
 GATEWAY : 35.1.1.4, (35.1.128 : 255.255.224.0) : CITI

Another possibility would be to use zeroes instead:

 GATEWAY : 35.1.1.4, (35.128.0.0 : 255.128.0.0) : MERIT-DIRECT
 GATEWAY : 35.1.1.4, (35.1.128.0 : 255.255.224.0) : CITI

Note that the Merit packet switching nodes allow for the same addressing
flexibility Fuzzballs do. However due to some of the limitations you outlined
we will soon be able to "let devices know (additionally) what address they
should use." This is important for, e.g., ARPs if you have more then one
Ethernet interface.

	-- Hans-Werner

Mills@UDEL.EDU.UUCP (06/06/87)

HW,

Well, I like the idea of including bitmasks to indicate address ranges, but
I thought that a bit radical to propose at this time. In fact, I have a whole
bunch of really radical things to propose, all in good time. Meanwhile, I
suggest using zeros instead of * might break something somewhere, like
(old) local-net brodcasts.

Dave

CERF@A.ISI.EDU (06/09/87)

I'm with Dave on zeroes - the syntax should be explicit about intended
"don't cares" as in logic design (0, 1, X).

Vint

braden@BRADEN.ISI.EDU.UUCP (06/19/87)

Dave Mills,

This is a delayed reply to your "fuzzy proposal" for a way to represent
in HOSTS.TXT the Fuzzballs and other gateways which follow the
gateway-half model. We too have been grappling with this problem, in the
process of gathering a database specifying the connectivity of NSFnet. We
have arrived at a scheme which differs from yours.

We think that your scheme does not make the topology readily
apparent. Consider your example:  
    
        GATEWAY : 35.1.1.1, 192.5.8.* : UMICH1
        GATEWAY : 192.5.8.6, 35.*.*.* : SWAMPRAT 

Now, it may be possible to infer from this pair of entries that UMICH1 is
connected to SWAMPRAT.  One can construct more complex cases where this
is ambiguous. For example, suppose we have two parallel connections:
    
        GATEWAY : 35.1.1.1, 192.5.8.* : UMICH1
        GATEWAY : 192,5,8,6, 35.*.*.* : SWAMPRAT1 
        GATEWAY : 35.1.1.1, 192.5.8.* : UMICH2
        GATEWAY : 192.5.8.6, 35.*.*.* : SWAMPRAT2 
        
Which one is connected to which? Another example, with two serial
lines from UMICH1 to two different gateway-halves on 192.5.8, might
be:
    
        GATEWAY : 35.1.1.1, 192.5.8.*, 192.5.8.* : UMICH1
        GATEWAY : 192.5.8.6, 35.*.*.* : SWAMPRAT1 
        GATEWAY : 192.5.8.6, 35.*.*.* : SWAMPRAT2 

We suggest that the primary purpose for the databases like the NIC
HOSTS.TXT is to show how things are connected together; derivation
of routing rules would be a secondary activity.  Your scheme, which
is based on routing rules rather than actual connectivity, may
hide what we most want to be explicit. 

The scheme which we adopted is to use symbolic interface addresses for
the un-numbered serial lines between gateway-halves.  Specifically, we
chose names of the form:

    <Network name>-<GWhalf 1>-<GWhalf 2>
    
between two gateway halves with names <GWhalf 1> and <GWhalf 2>. For
consistency, the two GWhalf names are always written in alphabetical
order.  We believe, by the way, that for consistency every network ought
to have both a name and a number assigned, even if the number is never
explicitly used because the network is comprised of half gateways
connected with serial lines.  In the absence of a network name, you
may think of the first component as an Autonomous System name.

For example, we might list your first example as:

    GATEWAY: 35.1.1.1, SWAMP-SWAMPRAT-UMICH1 : UMICH1
    GATEWAY:  192.5.8.6, SWAMP-SWAMPRAT-UMICH1 : SWAMPRAT
  
    
Suppose one tries to draw a network map based on your entries, without
doing the implied telescoping of entries; one ends up with a
set of two one-way connections between each network pair.  For
example:

                                                          -------
   -------          |----------------------------------->(       )
  (       )      --------                  --------      ( net   )
  (  net  )<----| umich1 |                |swamprat|---->(192.5.8)
  (  35   )      --------                  --------      (       )
  (       )<----------------------------------|           -------
   -------          


Using our symbolic names, one gets directly the correct topology,
without any telescoping:

   ------- 
  (       )     --------    
  ( net 35)<---| umich1 |
  (       )     -------- 
   -------         |       -------
                   |----> ( SWAMP )  <----|             -------
                           --------       |            (       )
                                        ---------      ( net   )
                                       | swamprat|---->(192.5.8)
                                        ---------      (       )
                                                        -------


In short, HOSTS.TXT is one of the main sources of information on network
configuration that is generally available, and we would like to see it
contain clear connectivity information on the fuzzballs and any other
gateway-halves.
   
By the way, your discussion of the use of the notation for hiding the
internal structure of an autonmous system should not be relevant to
databases such as HOSTS.TXT.  We want this to contain as much information
as possible, not to hide information.

Neither scheme, yours or ours, seems quite right. Maybe we are solving
the wrong problem?
  
    Bob Braden
    Annette DeSchon

Mills@UDEL.EDU (06/19/87)

Bob and Annette,

Thanks for your thoughtful reply. There are merits in your scheme that
would indeed by appropriate in some cases; however, I have reservations.
First, your suggestion on using synthetic meta-entities (!?) would
be appropriate for the half-gateway model, where the halves are separated
by a featureless transmission line or tunnel. I have no problem with that
and would support your suggestion over mine when such is the case.

My problem is the more general one. In addition to the cases I presented,
consider one even more bizarre. In some of the NSFNET swamps there are
multi-homed fuzzballs which respond to both local-net and ARPANET (!)
addresses. It's all done with logical tunneling, which is possible
because the routing algorithm can be configured for arbitrary address
ranges. Thus, in point of real fact, udel1.udel.edu appears as directly
connected to nets 128.4, 192.5.39 and 10. If I indicate the real truth
HOSTS.TXT would be cluttered up with a lot of confusing and strange
entries which, even if looking straightforward, would be actual lies.

Returning to our example case with linkabit-gw and swamprat, which may
be less controversial and move common than the above, I don't see how
the connectivity could be accurately recorded with your scheme unless
every intervening local-net node were recorded. In my last example I
wanted to hide the internals of the swamp, but offered to take responsibility
for the delivery of traffic to three nets, some of which are also connected
via other gateways. You take exception on the basis that HOSTS.TXT should
accurately reflect physical connectivity, not necessarily logical
connectivity.

I take the strongest objection. If in my autonomous system I refuse to
publish every detail that, in my opinion, policy or prescriptive fiat
is private and not to be revealed, then thus it verily be so. There is
a whole lot of precedent in this policy, not only in the common-carrier
community, but in many places in the Internet community as well. If the
price to be paid to carry third-party traffic between two POPs is to
reveal all the switches in between, then HOSTS.TXT is wholly inadequate
and inappropriate.

I submit there is room for both your scheme and mine. As you see, it is
not possible for me to accurately reflect the connectivity of the cases
I submit in either the existing HOSTS.TXT or your scheme.

Dave