[comp.protocols.tcp-ip] More than one IP

dnwcv@dcatla.UUCP (William C. VerSteeg) (12/12/87)

I have bumped into a distressing situation dealing with getting a generic host 
to communicate with other host with different IP network numbers on the same
network. 

Let's assume that the following scenario for demonstration purposes.

Through the process of adding link-level (hardware) bridges, I have had the
unenviable situation of having more than one internet network appear on 
what appears to be one ethernet cable. I want to telnet from my PC to a 
SUN. They have different IP network numbers. 

The PC will not generate a packet to this host in the absence of gateway 
information.

The only way I can think of to make this work is to have the PC route to 
a gateway, which sends an ICMP redirect back to the PC.

This leads me to my questions. What can be done to make the PC (or any other
device for that matter) directly access differring IP networks 
that are directly connected to
its local ethernet? This situation runs against "normal" IP addressing
schemes. But does it violate any specific rules? Are there implementations 
that handle this situation gracefully?



				    Bill VerSteeg

JBVB@AI.AI.MIT.EDU ("James B. VanBokkelen") (12/18/87)

If a gateway is present, it should be configured as such.  If there is no
gateway, I can either return an error to the user, or ARP the address
on the other network anyway.  If it is on another subnet which has suddenly
become irrelevant, re-configure and unset the subnet bits.

If I ARP it, maybe it is a spurious broadcast, maybe it works.  If it
works, various clever bits of code that treat things routed via a gateway
differently break down, but the connection probably survives.  To me, the
tradeoffs have seemed to favor returning the error.  If the user is in the
what I think to be the mainstream, he has a configuration problem, and
should know about it.

Our code was recently reported (by a customer) to be willing to ARP any
address configured as a gateway, although it won't ARP off-net addresses
if no gateway is configured.  I didn't design it, but it seems reasonable.

Comments?

James B. VanBokkelen
FTP Software

dnwcv@dcatla.UUCP (William C. VerSteeg) (12/19/87)

The topic of discussion is how to tell a device that an IP network other
than his own is on his local cable. This _is_ an atypical configuration, 
but one that can arise in the following situation. 

A user has two ethernet cables joined by a link level (hardware address)
bridge. From each of these cables he has lots of IP traffic to the world
at large. He would want an IP router for each cable. The network numbers
should be different to limit traffic on the link level bridge. If the IP
network numbers were the same, the world would be forced to guess which
IP router to use, thus increasing load on the link level bridge.

Assuming distinct IP network numbers, an IP speaking
device on the first cable would then think that it had 
to go out the IP router to the world. Each packet would then 
rattle around the world, then go back in the second cable's 
router to gain access to a machine on the other cable. A more efficient,
direct method would be to use the link level bridge.

This could be done in two ways that I know of. 

1- Each device (router or non-router) could be told of
   networks that co-reside with his own on
   a particular interface. Are there any implementations that do this?
   Does anybody have source code to a package that does this?

2- The router on each cable could know about multiple networks on a single
   interface. The router could then send ICMP redirects. These redirects
   should straighten the route. Proteon claims
   to support this. Sun, among others does not.
   Are there any other implementations that do this? Does anybody have source 
   code to a package that does this?

	Thanks

	Bill VerSteeg

tsuchiya@gateway.mitre.ORG (Paul Tsuchiya) (12/20/87)

I have a hard time believing that optimazation of non_local
traffic through a bridge is a valid reason for going through the
hassle of having two network numbers for what is otherwise
a single network.  If you have so much traffic that you need two
gateways, then have two, but give them the same network number.
If you really want to keep traffic from segment a on segment a
and traffic from segment b on segment b, then put a gateway
between the two Ethernet segments.

What is the point between putting two different Internet networks
on a single extended LAN?  Is this commonly done?  Is there a good
reason that is not occuring to me?

_________________________________________________________________
Paul F. Tsuchiya		The MITRE Corp.
tsuchiya@gateway.mitre.org	7525 Colshire Dr.
703-883-7352			McLean, VA 22102 USA
_________________________________________________________________

slevy@UMN-REI-UC.ARPA (Stuart Levy) (12/20/87)

The reason we do it is something like this, in my opinion ...

  a)  Some of us want IP-router like isolation, so we either get a bunch
      of separate networks or we do subnetting.  Being good Internet citizens
      we're doing the latter.
  b)  Not all of us want to do subnetting (who needs a gateway for 3 machines).
  c) Not all of us can do subnetting (some implementations still can't).
  d)  All subnetting implementations available to us demand that ALL
      subnets on a net be of the same size.
  e)  We like to put separate groups in separate chunks of address space,
      with the idea that they can choose to become a subnet later
      without having to change all their IP addresses.
  f)  We have enough groups who might potentially become subnets that
      we want to allow for a couple of hundred at least, and so chose
      class-C subnetting on our class-B net.
  g)  The resulting subnets are too small to stuff all miscellaneous hosts
      in just one of them, even if we wanted to.  One or a few large
      subnets plus a lot of small ones would be nice but we can't get it.
      A hierarchy of subnets would be nice too, but we can't get that either,
      at least not if we follow the normal rules.

				Stuart Levy, slevy@uc.msc.umn.edu
				Minn. Supercomputer Center & U. of Minnesota

martillo@ATHENA.MIT.EDU (12/20/87)

Wouldn't it be reasonable to have two network numbers if some machinese
were relatively more secure and was encrypting the IP packets?  It might
be desirable to have a mail gateway between the somewhat more secure
encrypted (logical) network and the unencrypted (logical) network.

Yaqim Martillo

RAF@NIHCU.BITNET ("Roger Fajman") (12/21/87)

> What is the point between putting two different Internet networks
> on a single extended LAN?  Is this commonly done?  Is there a good
> reason that is not occuring to me?

In the case of multiple subnets on one LAN with a class B address, a
reason is that you have many small subnets and a few large ones.  If
you set your subnet mask to accomodate the size of the large
subnets, then you may not have enough subnet numbers to accomodate
the quantity of small subnets that you have.  The reverse is also
true.  One possible solution is to have the subnet size be small,
but assign multiple subnet numbers to the large LANs.

mckenzie@LABS-N.BBN.COM (Alex McKenzie) (12/21/87)

A (temporary) reason we had at BBN for having two IP nets on a single Ethernet
was a restructuring of our campus network.  We built one big Ethernet to
replace several smaller ones.  It was extremely convenient to be able to
change which physical Ethernet a system was connected to asynchronously from
changing what IP address that host was using.  In fact, if I recall correctly,
some hosts began using their new IP address before discontinuing use of their
old IP address, as another way of maintaining uninterrupted service during the
cutover.

Alex McKenzie
 

mar@ATHENA.MIT.EDU (12/22/87)

But there is a simpler solution to the one you described, and it is
even documented in RFC 1027.  This is ARP subnet routing, or the ARP
hack, as it is sometimes called.

This means having your gateway respond to arp requests for machines on
other subnets, giving it's own ethernet address.  For instance, if you
have a machine on subnet 1 of your class B network which does not
understand subnet routing, and this machine wants to send a packet to
a host on subnet 2, not knowing about subnets it would assume that it
can send directly and arp for the destination host's IP address.  The
gateway on subnet 1 receives this ARP, and responds with it's own
hardware address so that the packet gets sent to the gateway, which
can forward it to the correct destination.  So the ARP hack works in
the case of smart gateways and dumb hosts.

Proteon gateways support this, and I think Cisco ones do too.  There
are mods available for the 4.2 kernel, and it is already in 4.3, if
you enable it.
					-Mark

slevy@UMN-REI-UC.ARPA (Stuart Levy) (12/22/87)

We're already doing subnet (proxy) ARP -- not exactly with our gateways,
which don't have this feature built in (they're things like SUNs)
but using a program employing the SUN `nit' ethernet-tap interface
to listen for ARPs and respond from a table, giving the Ethernet address
of the gateway, just as you suggest.

This works fine for really dumb hosts that aren't using subnetting,
and gives us "transparent" subnets.

The case where it -doesn't- work is for hosts that -are- using subnetting,
e.g. for the subnet gateways themselves.  Say we want to give a default
route (to 128.101.1.3) to one of them on a subnet other than 128.101.1.*.
The UNIX routing software won't permit this -- it demands that gateways
be on the same (sub)net as some interface address.  So we synthesize
these fake gateways (actually by building them into the same table that
handles subnet ARPs) so that every subnet has a fake gateway within reach.

JBVB@AI.AI.MIT.EDU ("James B. VanBokkelen") (12/22/87)

Ok.  There are a number of situations where this configuration (more than
one net or subnet on a single broadcast medium) seems to bring some benefit.

However, it goes against a fairly fundamental paradigm of RFC 791 and
RFC 950, the use of the network (and subnet) mask to make a simple routing
decision.   My present code, and its installation, configuration, debugging
& documentation all benefit from this.

I assume that if you're going to break the paradigm, you want to go whole
hog and have different classes of networks, and different numbers of subnet
bits, all on the same cable?  So the configuration would have to look like:

 mask 255.255.224.0	net 128.4.32.0	local	; class B, 3 subnet bits

 mask 255.255.0.0	net 18.10.0.0	local	; Class A, 8 subnet bits

 mask 255.255.255.0	net 192.9.1.0	local	; Class C, 0 subnet bits

Three nets wouldn't be enough - I'd better design for 8, or 16.  The list
gets scanned for every miss on the ARP cache.  Not too expensive.  However,
the configuration would have to be set, correctly, on every host on the net.
Is it still safe to assume that everything which is not on the list should
go through a default gateway, or do workstations need explicit routes there,
too?

We can write the code, we can document it, we can probably even explain it
to the non-guru (to whom setting up an IP network is already a major
adventure).  Right now, I don't think it is justified.  Maybe once automatic,
central configuration initialization & control is available, maybe once the
Unix manufacturers all get into agreement about the nature of broadcast
packets, maybe once IP Multicast is generally understood, and implementations
are beginning to show up (in DC, Postel warned that this was something
vendors should keep their eyes on).  It looks like a low priority to me. 

Are there people with money to spend that say otherwise?

jbvb

tsuchiya@GATEWAY.MITRE.ORG (Paul Tsuchiya) (12/23/87)

Maybe I am about to say something that is obvious and that everybody
already knows, but here goes............

The purpose of subnetting (as I understand it) is to allow gateways
and separated (sub)networks to exist in what appears to be a single network
outside, therefore making routing decisions outside of the network
to not be concerned with is going on inside the network.  This does
not, however, mean that one can change the topology inside their
network without expecting some IP addresses to change, just as one
would not expect to move their host from MITRE to SRI with getting
a new IP address.

The problem is that the name-domain function apparently does not
allow other hosts to dynamically rediscover that some host has
a new IP address.  I don't know is this is an implementation problem
or a design problem, although I assume the former.

If I might indulge in a little self-promotion, the algorithms I
have been working on, which are collectively called Landmark
Routing, cause gateways to self-configure automatically, assign
addresses to gateways, and bind host "names" to those addresses in
an efficient and dynamic fashion (at least they do if my design
is correct.  We have no implementation to date, although we are
now embarking on simulation).  What this means is that hosts are
assign permanent IP addresses that NEVER change even if the host
moves, and that the Landmark Routing function automatically handles
all (landmark) address assignments.  Then assignment of IP addresses
is then purely an administrative consideration, and not a topological
one.  If this is of interest to folks, please let me know so that
I can focus my work appropriately and work towards a testbed.  I
plan some RFCs on this topic later in 1988.


_________________________________________________________________
Paul F. Tsuchiya		The MITRE Corp.
tsuchiya@gateway.mitre.org	7525 Colshire Dr.
703-883-7352			McLean, VA 22102 USA
_________________________________________________________________

JBVB@AI.AI.MIT.EDU ("James B. VanBokkelen") (12/23/87)

One point I hadn't made in the earlier messages is that I am looking
at the issue from the standpoint of a single-user PC workstation.
We don't presently support more than one interface, and so we aren't
blessed with all the configuration issues (and problems) that a
multi-homed host has from the beginning.

Support for multiple networks on one cable (however primitive) seems
to be associated with multi-homedness, and I think I see why.  If I
wind up doing it, my routing code gets elaborate, but the primitive
O/S prevents me from taking much advantage of it.  Hi ho.

jbvb