Difference between revisions of "RFC1027"

From RFC-Wiki
imported>Admin
(Created page with "Network Working Group Smoot Carl-Mitchell Request for Comments: 1027 Texas Internet Consulting ...")
 
Line 1: Line 1:
Network Working Group                                Smoot Carl-Mitchell
+
Network Working Group                                Smoot Carl-MitchellRequest for Comments: 1027                    Texas Internet Consulting                                                     John S. Quarterman                                               Texas Internet Consulting                                                           October 1987           Using ARP to Implement Transparent Subnet GatewaysStatus of this Memo   This RFC describes the use of the Ethernet Address Resolution   Protocol (ARP) by subnet gateways to permit hosts on the connected   subnets to communicate without being aware of the existence of   subnets, using the technique of "Proxy ARP" [6].  It is based on   RFC-950 [1], RFC-922 [2], and RFC-826 [3] and is a restricted subset   of the mechanism of RFC-925 [4].  Distribution of this memo is   unlimited.Acknowledgment   The work described in this memo was performed while the authors were   employed by the Computer Sciences Department of the University of   Texas at Austin.Introduction   The purpose of this memo is to describe in detail the implementation   of transparent subnet ARP gateways using the technique of Proxy ARP.   The intent is to document this widely used technique.1.  Motivation   The Ethernet at the University of Texas at Austin is a large   installation connecting over ten buildings.  It currently has more   than one hundred hosts connected to it [5].  The size of the   Ethernet and the amount of traffic it handles prohibit tying it   together by use of repeaters.  The use of subnets provided an   attractive alternative for separating the network into smaller   distinct units.   This is exactly the situation for which Internet subnets as   described in RFC-950 are intended.  Unfortunately, many vendors had   not yet implemented subnets, and it was not practical to modify the   more than half a dozen different operating systems running on hosts   on the local networks.Carl-Mitchell & Quarterman                                      [Page 1]RFC 1027          ARP and Transparent Subnet Gateways      October 1987    Therefore a method for hiding the existence of subnets from hosts   was highly desirable.  Since all the local area networks supported   ARP, an ARP-based method (commonly known as "Proxy ARP" or the "ARP   hack") was chosen.  In this memo, whenever the term "subnet" occurs   the "RFC-950 subnet method" is assumed.2.  Design2.1  Basic method   On a network that supports ARP, when host A (the source) broadcasts   an ARP request for the network address corresponding to the IP   address of host B (the target), host B will recognize the IP address   as its own and will send a point-to-point ARP reply.  Host A keeps   the IP-to-network-address mapping found in the reply in a local   cache and uses it for later communication with host B.   If hosts A and B are on different physical networks, host B will not   receive the ARP broadcast request from host A and cannot respond to   it.  However, if the physical network of host A is connected by a   gateway to the physical network of host B, the gateway will see the   ARP request from host A.  Assuming that subnet numbers are made to   correspond to physical networks, the gateway can also tell that the   request is for a host that is on a different physical network from   the requesting host.  The gateway can then respond for host B,   saying that the network address for host B is that of the gateway   itself.  Host A will see this reply, cache it, and send future IP   packets for host B to the gateway.  The gateway will forward such   packets to host B by the usual IP routing mechanisms.  The gateway   is acting as an agent for host B, which is why this technique is   called "Proxy ARP"; we will refer to this as a transparent subnet   gateway or ARP subnet gateway.   When host B replies to traffic from host A, the same algorithm   happens in reverse: the gateway connected to the network of host B   answers the request for the network address of host A, and host B   then sends IP packets for host A to gateway.  The physical networks   of host A and B need not be connected to the same gateway. All that   is necessary is that the networks be reachable from the gateway.   With this approach, all ARP subnet handling is done in the ARP   subnet gateways.  No changes to the normal ARP protocol or routing   need to be made to the source and target hosts.  From the host point   of view, there are no subnets, and their physical networks are   simply one big IP network.  If a host has an implementation of   subnets, its network masks must be set to cover only the IP network   number, excluding the subnet bits, for the system to work properly.Carl-Mitchell & Quarterman                                      [Page 2]RFC 1027          ARP and Transparent Subnet Gateways      October 19872.2  Routing   As part of the implementation of subnets, it is expected that the   elements of routing tables will include network numbers including   both the IP network number and the subnet bits, as specified by the   subnet mask, where appropriate.  When an ARP request is seen, the   ARP subnet gateway can determine whether it knows a route to the   target host by looking in the ordinary routing table.  If attempts   to reach foreign IP networks are eliminated early (see Sanity Checks   below), only a request for an address on the local IP network will   reach this point.  We will assume that the same network mask applies   to every subnet of the same IP network.  The network mask of the   network interface on which the ARP request arrived can then be   applied to the target IP address to produce the network part to be   looked up in the routing table.   In 4.3BSD (and probably in other operating systems), a default route   is possible.  This default route specifies an address to forward a   packet to when no other route is found.  The default route must not   be used when checking for a route to the target host of an ARP   request.  If the default route were used, the check would always   succeed.  But the host specified by the default route is unlikely to   know about subnet routing (since it is usually an Internet gateway),   and thus packets sent to it will probably be lost.  This special   case in the routing lookup method is the only implementation change   needed to the routing mechanism.   If the network interfaces on which the request was received and   through which the route to the target passes are the same, the   gateway must not reply.  In this case, either the target host is on   the same physical network as the gateway (and thus the host should   reply for itself), or this gateway is not on the most direct path to   the desired network, i.e., there is another gateway on the same   physical network that is on a more direct path and the other gateway   should respond.   RFC-925 [4] describes a general mechanism for dynamic subnet routing   using Proxy ARP and routing caches in the gateways.  Our technique   is restricted subset of RFC-925, in which we use static subnet   routes which are determined administratively.  As a result, our   transparent subnet gateways require no new network routing table   entries nor ARP cache entries; the only tables which are affected   are the ARP caches in the host.   In our implementation, routing loops are prevented by proper   administration of the subnet routing tables in the gateways.Carl-Mitchell & Quarterman                                      [Page 3]RFC 1027          ARP and Transparent Subnet Gateways      October 19872.3  Multiple gateways    The simplest subnet organization to administer is a tree structure,   which cannot have loops.  However, it may be desirable for   reliability or traffic accommodation to have more than one gateway   (or path) between two physical networks.  ARP subnet gateways may be   used in such a situation:  a requesting host will use the first ARP   response it receives, even if more than one gateway supplies one.   This may even provide a rudimentary load balancing service, since if   two gateways are otherwise similar, the one most lightly loaded is   the more likely to reply first.   More complex mechanisms could be built in the form of gateway-to-   gateway protocols, and will no doubt become necessary in networks   with large numbers of subnets and gateways, in the same way that   gateway-to-gateway protocols are generally necessary among IP   gateways.2.4  Sanity checks   Care must be taken by the network and gateway administrators to keep   the network masks the same on all the subnet gateway machines.  The   most common error is to set the network mask on a host without a   subnet implementation to include the subnet number.  This causes the   host to fail to attempt to send packets to hosts not on its local   subnet.  Adjusting its routing tables will not help, since it will   not know how to route to subnets.   If the IP networks of the source and target hosts of an ARP request   are different, an ARP subnet gateway implementation should not   reply.  This is to prevent the ARP subnet gateway from being used to   reach foreign IP networks and thus possibly bypass security checks   provided by IP gateways.   An ARP subnet gateway implementation must not reply if the physical   networks of the source and target of an ARP request are the same.   In this case, either the target host is presumably either on the   same physical network as the source host and can answer for itself,   or the target host lies in the same direction from the gateway as   does the source host, and an ARP reply from the would cause a loop.   An ARP request for a broadcast address must elicit no reply,   regardless of the source address or physical networks involved.  If   the gateway were to respond with an ARP reply in this situation, it   would be inviting the original source to send actual traffic to a   broadcast address.  This could result in the "Chernobyl effect"   wherein every host on the network replies to such traffic, causing   network "meltdown".Carl-Mitchell & Quarterman                                      [Page 4]RFC 1027          ARP and Transparent Subnet Gateways      October 19872.5  Multiple logical subnets per physical network   The most straightforward way to assign subnet numbers is one to one   with physical networks.  There are, however, circumstances in which   multiple logical subnets per physical network are quite useful.  One   of the more common is when it is planned that a group of   workstations will be put on their own physical network but the   gateway to the new physical network needs to be tested first.  (A   repeater might be used when the gateway was not usable).  If a rule   of one subnet per physical network is enforced, the addresses of the   workstations must be changed every time the gateway is tested.  If   they may be assigned addresses using a new subnet number while they   are still on the old physical network, no further address changes   are needed.   To permit multiple subnets per physical network, an ARP subnet   gateway must use the physical network interface, not the subnet   number to determine when to reply to an ARP request.  That is, it   should send a proxy ARP reply only when the source network interface   differs from the target network interface. In addition, appropriate   routing table entries for these "phantom" subnets must be added to   the subnet gateway routing tables.2.6  Broadcast addresses   There are two kinds of IP broadcast addresses:  main IP directed   network broadcast and subnet broadcast.  An IP network broadcast   address consists of the network number plus a well-known value in   the rest (local part) of the address.  An IP subnet broadcast is   similar, except both the IP network number and the subnet number   bits are included.  RFC-922 standardized the use of all ones in the   local part, but there were two conventions in use before that:  all   ones and all zeros.  For example, 4.2BSD used all zeros, and 4.3BSD   uses all ones.  Thus there are four kinds of IP directed broadcast   addresses still currently in use on many networks.   With transparent subnetting a subnet gateway must not issue an IP   broadcast using the subnet broadcast address, e.g., 128.83.138.255.   Hosts on the physical network that receive the broadcast will not   understand such an address as a broadcast address, since they will   not have subnets enabled (or will not have subnet implementations).   In fact, 4.2BSD hosts (with or without subnet implementations) will   instead treat an address with all ones in the local part as a   specific host address and try to forward the packet.  Since there is   no such target host, there will be no entry in the forwarding host's   ARP tables and it will generate an ARP request for the target host.   This presents the scenario (actually observed) of a 4.3BSD gateway   running the rwho program, which broadcasts a packet once a minute,Carl-Mitchell & Quarterman                                      [Page 5]RFC 1027          ARP and Transparent Subnet Gateways      October 1987    causing every 4.2BSD host on the local physical network to generate   an ARP request at the same time.  The same problem occurs with any   subnet broadcast address, whether the local part is all zeros or all   ones.   Thus a subnet gateway in a network with hosts that do not understand   subnets must take care not to use subnet broadcast addresses:   instead it must use the IP network directed broadcast address   instead.   Finally, since many hosts running out-of-date software will still be   using (and expecting) old-style all-zeros IP network broadcast   addresses, the gateway must send its broadcast addresses out in that   form, e.g., 128.83.0.0.  It might be safe to also send a duplicate   packet with all ones in the local part, e.g., 128.83.255.255.  It is   not clear whether the local network broadcast address of all ones,   255.255.255.255, will cause ill effects, but it is very likely that   it will not be recognized by many hosts that are running older   software.3.  Implementation in 4.3BSD   Subnet gateways using ARP have been implemented by a number of   different people.  The particular method described in this memo was   first implemented in 4.2BSD on top of retrofitted beta-test 4.3BSD   subnet code, and has since been reimplemented as an add-on to the   distributed 4.3BSD sources.  The latter implementation is described   here.   Most of the new kernel code for the subnet ARP gatewaying function   is in the generic Ethernet interface module, netinet/if_ether.c.  It   consists of eight lines in in_arpinput that perform a couple of   quick checks (to ensure that the facility is enabled on the source   interface and that the source and target addresses are on different   subnets), call a new routine, if_subarp, for further checks, and   then build the ARP response if all checks succeed.  This code is   only reached when an ARP request is received, and does nothing if   the facility is not enabled on the source interface.  Thus   performance of the gateway should be very little degraded by this   addition.  (Performance of the requesting host should also be   similar to the latter case, as the only difference there is between   efficiency of the ARP cache and of the routing tables).   The routine if_subarp (about sixty lines) ensures that the source   and target addresses are on the same IP network and that the target   address is none of the four kinds of directed broadcast address.  It   then attempts to find a path to the target either by finding a   network interface with the desired subnet or by looking in theCarl-Mitchell & Quarterman                                      [Page 6]RFC 1027          ARP and Transparent Subnet Gateways      October 1987    routing tables.  Even if a network interface is found that leads to   the target, for a reply to be sent the ARP gateway must be enabled   on that interface and the target and source interfaces must be   different.   The file netinet/route.c has a static routing entry structure   definition added, and modifications of about eight lines are made to   the main routing table lookup routine, rtalloc, to recognize a   pointer to that structure (when passed by if_subarp) as a direction   to not use the default route in this routing check.  The processor   priority level (critical section protection) around the inner   routing lookup check is changed to a higher value, as the routine   may now be called from network interface interrupts as well as from   the internal software interrupts that drive processing of IP and   other high level protocols.  This raised processor priority could   conceivably slow the whole kernel somewhat if there are many routing   checks, but since the critical section is fast, the effect should be   small.   A key kernel modification is about fifteen lines added to the   routine ip_output in netinet/ip_output.c.  It changes subnet   broadcast addresses in packets originating at the gateway to IP   network broadcast addresses so that hosts without subnet code (or   with their network masks set to ignore subnets) will recognize them   as broadcast addresses.  This section of code is only used if the   ARP gateway is turned on for the outgoing interface, and only   affects subnet broadcast addresses.   A new routine, in_mainnetof, of about fifteen lines, is added to   netinet/in.c to return the IP network number (without subnet number)   from an IP address.  It is called from if_subarp and ip_output.   Two kernel parameter files have one line added to each:  net/if.h   has a definition of a bit in the network interface structure to   indicate whether subnet ARP gateways are enabled, and netinet/in.h   refers to in_mainnetof.   In addition to these approximately 110 lines of kernel source   additions, there is one user-level modification.  The source to the   command ifconfig, which is used to set addresses and network masks   of network interfaces, has four lines added to allow it to turn the   subnet ARP gateway facility on or off, for each interface.  This is   documented in eleven new lines in the manual entry for that command.Carl-Mitchell & Quarterman                                      [Page 7]RFC 1027          ARP and Transparent Subnet Gateways      October 19874.  Availability   The 4.3BSD implementation is currently available by anonymous FTP   (login anonymous, password guest) from sally.utexas.edu as   pub/subarp, which is a 4.3BSD "diff -c" listing from the 4.3BSD   sources that were distributed in September 1986.   This implementation was not included in the 4.3BSD distribution   proper because U.C. Berkeley CSRG thought that that would reduce the   incentive for vendors to implement subnets per RFC-950.  The authors   concur.  Nonetheless, there are circumstances in which the use of   transparent subnet ARP gateways is indispensable.References   1.  Mogul, J., and J. Postel, "Internet Standard Subnetting       Procedure", RFC-950, Stanford University and USC/Information       Sciences Institute, August 1985.   2.  Mogul, J., "Broadcasting Internet Datagrams in the Presence of       Subnets", RFC-922, Computer Science Department, Stanford       University, October 1984.   3.  Plummer, D., "An Ethernet Address Resolution Protocol or       Converting Network Protocol Addresses to 48-bit Ethernet       Addresses for Transmission on Ethernet Hardware", RFC-826,       Symbolics, November 1982.   4.  Postel, J., "Multi-LAN Address Resolution", RFC-925,       USC/Information Sciences Institute, October 1984.   5.  Carl-Mitchell, S., and J. S. Quarterman, "Nameservers in a Campus       Domain", SIGCUE Outlook, Vol.19, No.1/2, pp.78-88, ACM SIG       Computer Uses in Education, P.O. Box 64145, Baltimore, MD 21264,       Spring/Summer 1986.   6.  Braden, R., and J. Postel, "Requirements for Internet Gateways",       RFC-1009, USC/Information Sciences Institute, June 1987.Carl-Mitchell & Quarterman                                      [Page 8]
Request for Comments: 1027                    Texas Internet Consulting
 
                                                  John S. Quarterman
 
                                            Texas Internet Consulting
 
                                                        October 1987
 
 
 
 
 
        Using ARP to Implement Transparent Subnet Gateways
 
 
 
 
 
Status of this Memo
 
 
 
This RFC describes the use of the Ethernet Address Resolution
 
Protocol (ARP) by subnet gateways to permit hosts on the connected
 
subnets to communicate without being aware of the existence of
 
subnets, using the technique of "Proxy ARP" [6].  It is based on
 
RFC-950 [1], RFC-922 [2], and RFC-826 [3] and is a restricted subset
 
of the mechanism of RFC-925 [4].  Distribution of this memo is
 
unlimited.
 
 
 
Acknowledgment
 
 
 
The work described in this memo was performed while the authors were
 
employed by the Computer Sciences Department of the University of
 
Texas at Austin.
 
 
 
Introduction
 
 
 
The purpose of this memo is to describe in detail the implementation
 
of transparent subnet ARP gateways using the technique of Proxy ARP.
 
The intent is to document this widely used technique.
 
 
 
== Motivation ==
 
 
 
The Ethernet at the University of Texas at Austin is a large
 
installation connecting over ten buildings.  It currently has more
 
than one hundred hosts connected to it [5].  The size of the
 
Ethernet and the amount of traffic it handles prohibit tying it
 
together by use of repeaters.  The use of subnets provided an
 
attractive alternative for separating the network into smaller
 
distinct units.
 
 
 
This is exactly the situation for which Internet subnets as
 
described in RFC-950 are intended.  Unfortunately, many vendors had
 
not yet implemented subnets, and it was not practical to modify the
 
more than half a dozen different operating systems running on hosts
 
on the local networks.
 
 
 
 
 
 
 
 
 
 
 
 
 
Therefore a method for hiding the existence of subnets from hosts
 
was highly desirable.  Since all the local area networks supported
 
ARP, an ARP-based method (commonly known as "Proxy ARP" or the "ARP
 
hack") was chosen.  In this memo, whenever the term "subnet" occurs
 
the "RFC-950 subnet method" is assumed.
 
 
 
== Design ==
 
 
 
2.1  Basic method
 
 
 
On a network that supports ARP, when host A (the source) broadcasts
 
an ARP request for the network address corresponding to the IP
 
address of host B (the target), host B will recognize the IP address
 
as its own and will send a point-to-point ARP reply.  Host A keeps
 
the IP-to-network-address mapping found in the reply in a local
 
cache and uses it for later communication with host B.
 
 
 
If hosts A and B are on different physical networks, host B will not
 
receive the ARP broadcast request from host A and cannot respond to
 
it.  However, if the physical network of host A is connected by a
 
gateway to the physical network of host B, the gateway will see the
 
ARP request from host A.  Assuming that subnet numbers are made to
 
correspond to physical networks, the gateway can also tell that the
 
request is for a host that is on a different physical network from
 
the requesting host.  The gateway can then respond for host B,
 
saying that the network address for host B is that of the gateway
 
itself.  Host A will see this reply, cache it, and send future IP
 
packets for host B to the gateway.  The gateway will forward such
 
packets to host B by the usual IP routing mechanisms.  The gateway
 
is acting as an agent for host B, which is why this technique is
 
called "Proxy ARP"; we will refer to this as a transparent subnet
 
gateway or ARP subnet gateway.
 
 
 
When host B replies to traffic from host A, the same algorithm
 
happens in reverse: the gateway connected to the network of host B
 
answers the request for the network address of host A, and host B
 
then sends IP packets for host A to gateway.  The physical networks
 
of host A and B need not be connected to the same gateway. All that
 
is necessary is that the networks be reachable from the gateway.
 
 
 
With this approach, all ARP subnet handling is done in the ARP
 
subnet gateways.  No changes to the normal ARP protocol or routing
 
need to be made to the source and target hosts.  From the host point
 
of view, there are no subnets, and their physical networks are
 
simply one big IP network.  If a host has an implementation of
 
subnets, its network masks must be set to cover only the IP network
 
number, excluding the subnet bits, for the system to work properly.
 
 
 
 
 
 
 
 
 
 
 
 
 
2.2  Routing
 
 
 
As part of the implementation of subnets, it is expected that the
 
elements of routing tables will include network numbers including
 
both the IP network number and the subnet bits, as specified by the
 
subnet mask, where appropriate.  When an ARP request is seen, the
 
ARP subnet gateway can determine whether it knows a route to the
 
target host by looking in the ordinary routing table.  If attempts
 
to reach foreign IP networks are eliminated early (see Sanity Checks
 
below), only a request for an address on the local IP network will
 
reach this point.  We will assume that the same network mask applies
 
to every subnet of the same IP network.  The network mask of the
 
network interface on which the ARP request arrived can then be
 
applied to the target IP address to produce the network part to be
 
looked up in the routing table.
 
 
 
In 4.3BSD (and probably in other operating systems), a default route
 
is possible.  This default route specifies an address to forward a
 
packet to when no other route is found.  The default route must not
 
be used when checking for a route to the target host of an ARP
 
request.  If the default route were used, the check would always
 
succeed.  But the host specified by the default route is unlikely to
 
know about subnet routing (since it is usually an Internet gateway),
 
and thus packets sent to it will probably be lost.  This special
 
case in the routing lookup method is the only implementation change
 
needed to the routing mechanism.
 
 
 
If the network interfaces on which the request was received and
 
through which the route to the target passes are the same, the
 
gateway must not reply.  In this case, either the target host is on
 
the same physical network as the gateway (and thus the host should
 
reply for itself), or this gateway is not on the most direct path to
 
the desired network, i.e., there is another gateway on the same
 
physical network that is on a more direct path and the other gateway
 
should respond.
 
 
 
RFC-925 [4] describes a general mechanism for dynamic subnet routing
 
using Proxy ARP and routing caches in the gateways.  Our technique
 
is restricted subset of RFC-925, in which we use static subnet
 
routes which are determined administratively.  As a result, our
 
transparent subnet gateways require no new network routing table
 
entries nor ARP cache entries; the only tables which are affected
 
are the ARP caches in the host.
 
 
 
In our implementation, routing loops are prevented by proper
 
administration of the subnet routing tables in the gateways.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2.3 Multiple gateways
 
 
 
The simplest subnet organization to administer is a tree structure,
 
which cannot have loops.  However, it may be desirable for
 
reliability or traffic accommodation to have more than one gateway
 
(or path) between two physical networks.  ARP subnet gateways may be
 
used in such a situation:  a requesting host will use the first ARP
 
response it receives, even if more than one gateway supplies one.
 
This may even provide a rudimentary load balancing service, since if
 
two gateways are otherwise similar, the one most lightly loaded is
 
the more likely to reply first.
 
 
 
More complex mechanisms could be built in the form of gateway-to-
 
gateway protocols, and will no doubt become necessary in networks
 
with large numbers of subnets and gateways, in the same way that
 
gateway-to-gateway protocols are generally necessary among IP
 
gateways.
 
 
 
2.4  Sanity checks
 
 
 
Care must be taken by the network and gateway administrators to keep
 
the network masks the same on all the subnet gateway machines.  The
 
most common error is to set the network mask on a host without a
 
subnet implementation to include the subnet number.  This causes the
 
host to fail to attempt to send packets to hosts not on its local
 
subnet.  Adjusting its routing tables will not help, since it will
 
not know how to route to subnets.
 
 
 
If the IP networks of the source and target hosts of an ARP request
 
are different, an ARP subnet gateway implementation should not
 
reply.  This is to prevent the ARP subnet gateway from being used to
 
reach foreign IP networks and thus possibly bypass security checks
 
provided by IP gateways.
 
 
 
An ARP subnet gateway implementation must not reply if the physical
 
networks of the source and target of an ARP request are the same.
 
In this case, either the target host is presumably either on the
 
same physical network as the source host and can answer for itself,
 
or the target host lies in the same direction from the gateway as
 
does the source host, and an ARP reply from the would cause a loop.
 
 
 
An ARP request for a broadcast address must elicit no reply,
 
regardless of the source address or physical networks involved.  If
 
the gateway were to respond with an ARP reply in this situation, it
 
would be inviting the original source to send actual traffic to a
 
broadcast address.  This could result in the "Chernobyl effect"
 
wherein every host on the network replies to such traffic, causing
 
network "meltdown".
 
 
 
 
 
 
 
 
 
 
 
2.5  Multiple logical subnets per physical network
 
 
 
The most straightforward way to assign subnet numbers is one to one
 
with physical networks.  There are, however, circumstances in which
 
multiple logical subnets per physical network are quite useful.  One
 
of the more common is when it is planned that a group of
 
workstations will be put on their own physical network but the
 
gateway to the new physical network needs to be tested first.  (A
 
repeater might be used when the gateway was not usable).  If a rule
 
of one subnet per physical network is enforced, the addresses of the
 
workstations must be changed every time the gateway is tested.  If
 
they may be assigned addresses using a new subnet number while they
 
are still on the old physical network, no further address changes
 
are needed.
 
 
 
To permit multiple subnets per physical network, an ARP subnet
 
gateway must use the physical network interface, not the subnet
 
number to determine when to reply to an ARP request.  That is, it
 
should send a proxy ARP reply only when the source network interface
 
differs from the target network interface. In addition, appropriate
 
routing table entries for these "phantom" subnets must be added to
 
the subnet gateway routing tables.
 
 
 
2.6  Broadcast addresses
 
 
 
There are two kinds of IP broadcast addresses:  main IP directed
 
network broadcast and subnet broadcast.  An IP network broadcast
 
address consists of the network number plus a well-known value in
 
the rest (local part) of the address.  An IP subnet broadcast is
 
similar, except both the IP network number and the subnet number
 
bits are included.  RFC-922 standardized the use of all ones in the
 
local part, but there were two conventions in use before that:  all
 
ones and all zeros.  For example, 4.2BSD used all zeros, and 4.3BSD
 
uses all ones.  Thus there are four kinds of IP directed broadcast
 
addresses still currently in use on many networks.
 
 
 
With transparent subnetting a subnet gateway must not issue an IP
 
broadcast using the subnet broadcast address, e.g., 128.83.138.255.
 
Hosts on the physical network that receive the broadcast will not
 
understand such an address as a broadcast address, since they will
 
not have subnets enabled (or will not have subnet implementations).
 
In fact, 4.2BSD hosts (with or without subnet implementations) will
 
instead treat an address with all ones in the local part as a
 
specific host address and try to forward the packet.  Since there is
 
no such target host, there will be no entry in the forwarding host's
 
ARP tables and it will generate an ARP request for the target host.
 
This presents the scenario (actually observed) of a 4.3BSD gateway
 
running the rwho program, which broadcasts a packet once a minute,
 
 
 
 
 
 
 
 
 
 
 
causing every 4.2BSD host on the local physical network to generate
 
an ARP request at the same time.  The same problem occurs with any
 
subnet broadcast address, whether the local part is all zeros or all
 
ones.
 
 
 
Thus a subnet gateway in a network with hosts that do not understand
 
subnets must take care not to use subnet broadcast addresses:
 
instead it must use the IP network directed broadcast address
 
instead.
 
 
 
Finally, since many hosts running out-of-date software will still be
 
using (and expecting) old-style all-zeros IP network broadcast
 
addresses, the gateway must send its broadcast addresses out in that
 
form, e.g., 128.83.0.0.  It might be safe to also send a duplicate
 
packet with all ones in the local part, e.g., 128.83.255.255.  It is
 
not clear whether the local network broadcast address of all ones,
 
255.255.255.255, will cause ill effects, but it is very likely that
 
it will not be recognized by many hosts that are running older
 
software.
 
 
 
== Implementation in 4.3BSD ==
 
 
 
Subnet gateways using ARP have been implemented by a number of
 
different people.  The particular method described in this memo was
 
first implemented in 4.2BSD on top of retrofitted beta-test 4.3BSD
 
subnet code, and has since been reimplemented as an add-on to the
 
distributed 4.3BSD sources.  The latter implementation is described
 
here.
 
 
 
Most of the new kernel code for the subnet ARP gatewaying function
 
is in the generic Ethernet interface module, netinet/if_ether.c.  It
 
consists of eight lines in in_arpinput that perform a couple of
 
quick checks (to ensure that the facility is enabled on the source
 
interface and that the source and target addresses are on different
 
subnets), call a new routine, if_subarp, for further checks, and
 
then build the ARP response if all checks succeed.  This code is
 
only reached when an ARP request is received, and does nothing if
 
the facility is not enabled on the source interface.  Thus
 
performance of the gateway should be very little degraded by this
 
addition.  (Performance of the requesting host should also be
 
similar to the latter case, as the only difference there is between
 
efficiency of the ARP cache and of the routing tables).
 
 
 
The routine if_subarp (about sixty lines) ensures that the source
 
and target addresses are on the same IP network and that the target
 
address is none of the four kinds of directed broadcast address.  It
 
then attempts to find a path to the target either by finding a
 
network interface with the desired subnet or by looking in the
 
 
 
 
 
 
 
 
 
 
 
routing tables.  Even if a network interface is found that leads to
 
the target, for a reply to be sent the ARP gateway must be enabled
 
on that interface and the target and source interfaces must be
 
different.
 
 
 
The file netinet/route.c has a static routing entry structure
 
definition added, and modifications of about eight lines are made to
 
the main routing table lookup routine, rtalloc, to recognize a
 
pointer to that structure (when passed by if_subarp) as a direction
 
to not use the default route in this routing check.  The processor
 
priority level (critical section protection) around the inner
 
routing lookup check is changed to a higher value, as the routine
 
may now be called from network interface interrupts as well as from
 
the internal software interrupts that drive processing of IP and
 
other high level protocols.  This raised processor priority could
 
conceivably slow the whole kernel somewhat if there are many routing
 
checks, but since the critical section is fast, the effect should be
 
small.
 
 
 
A key kernel modification is about fifteen lines added to the
 
routine ip_output in netinet/ip_output.c.  It changes subnet
 
broadcast addresses in packets originating at the gateway to IP
 
network broadcast addresses so that hosts without subnet code (or
 
with their network masks set to ignore subnets) will recognize them
 
as broadcast addresses.  This section of code is only used if the
 
ARP gateway is turned on for the outgoing interface, and only
 
affects subnet broadcast addresses.
 
 
 
A new routine, in_mainnetof, of about fifteen lines, is added to
 
netinet/in.c to return the IP network number (without subnet number)
 
from an IP address.  It is called from if_subarp and ip_output.
 
 
 
Two kernel parameter files have one line added to each:  net/if.h
 
has a definition of a bit in the network interface structure to
 
indicate whether subnet ARP gateways are enabled, and netinet/in.h
 
refers to in_mainnetof.
 
 
 
In addition to these approximately 110 lines of kernel source
 
additions, there is one user-level modification.  The source to the
 
command ifconfig, which is used to set addresses and network masks
 
of network interfaces, has four lines added to allow it to turn the
 
subnet ARP gateway facility on or off, for each interface.  This is
 
documented in eleven new lines in the manual entry for that command.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
== Availability ==
 
 
 
The 4.3BSD implementation is currently available by anonymous FTP
 
(login anonymous, password guest) from sally.utexas.edu as
 
pub/subarp, which is a 4.3BSD "diff -c" listing from the 4.3BSD
 
sources that were distributed in September 1986.
 
 
 
This implementation was not included in the 4.3BSD distribution
 
proper because U.C. Berkeley CSRG thought that that would reduce the
 
incentive for vendors to implement subnets per RFC-950.  The authors
 
concur.  Nonetheless, there are circumstances in which the use of
 
transparent subnet ARP gateways is indispensable.
 
 
 
References
 
 
 
1.  Mogul, J., and J. Postel, "Internet Standard Subnetting
 
    Procedure", RFC-950, Stanford University and USC/Information
 
    Sciences Institute, August 1985.
 
 
 
2.  Mogul, J., "Broadcasting Internet Datagrams in the Presence of
 
    Subnets", RFC-922, Computer Science Department, Stanford
 
    University, October 1984.
 
 
 
3.  Plummer, D., "An Ethernet Address Resolution Protocol or
 
    Converting Network Protocol Addresses to 48-bit Ethernet
 
    Addresses for Transmission on Ethernet Hardware", RFC-826,
 
    Symbolics, November 1982.
 
 
 
4.  Postel, J., "Multi-LAN Address Resolution", RFC-925,
 
    USC/Information Sciences Institute, October 1984.
 
 
 
5.  Carl-Mitchell, S., and J. S. Quarterman, "Nameservers in a Campus
 
    Domain", SIGCUE Outlook, Vol.19, No.1/2, pp.78-88, ACM SIG
 
    Computer Uses in Education, P.O. Box 64145, Baltimore, MD 21264,
 
    Spring/Summer 1986.
 
 
 
6.  Braden, R., and J. Postel, "Requirements for Internet Gateways",
 
    RFC-1009, USC/Information Sciences Institute, June 1987.
 

Revision as of 22:28, 22 September 2020

Network Working Group Smoot Carl-MitchellRequest for Comments: 1027 Texas Internet Consulting John S. Quarterman Texas Internet Consulting October 1987 Using ARP to Implement Transparent Subnet GatewaysStatus of this Memo This RFC describes the use of the Ethernet Address Resolution Protocol (ARP) by subnet gateways to permit hosts on the connected subnets to communicate without being aware of the existence of subnets, using the technique of "Proxy ARP" [6]. It is based on RFC-950 [1], RFC-922 [2], and RFC-826 [3] and is a restricted subset of the mechanism of RFC-925 [4]. Distribution of this memo is unlimited.Acknowledgment The work described in this memo was performed while the authors were employed by the Computer Sciences Department of the University of Texas at Austin.Introduction The purpose of this memo is to describe in detail the implementation of transparent subnet ARP gateways using the technique of Proxy ARP. The intent is to document this widely used technique.1. Motivation The Ethernet at the University of Texas at Austin is a large installation connecting over ten buildings. It currently has more than one hundred hosts connected to it [5]. The size of the Ethernet and the amount of traffic it handles prohibit tying it together by use of repeaters. The use of subnets provided an attractive alternative for separating the network into smaller distinct units. This is exactly the situation for which Internet subnets as described in RFC-950 are intended. Unfortunately, many vendors had not yet implemented subnets, and it was not practical to modify the more than half a dozen different operating systems running on hosts on the local networks.Carl-Mitchell & Quarterman [Page 1]RFC 1027 ARP and Transparent Subnet Gateways October 1987 Therefore a method for hiding the existence of subnets from hosts was highly desirable. Since all the local area networks supported ARP, an ARP-based method (commonly known as "Proxy ARP" or the "ARP hack") was chosen. In this memo, whenever the term "subnet" occurs the "RFC-950 subnet method" is assumed.2. Design2.1 Basic method On a network that supports ARP, when host A (the source) broadcasts an ARP request for the network address corresponding to the IP address of host B (the target), host B will recognize the IP address as its own and will send a point-to-point ARP reply. Host A keeps the IP-to-network-address mapping found in the reply in a local cache and uses it for later communication with host B. If hosts A and B are on different physical networks, host B will not receive the ARP broadcast request from host A and cannot respond to it. However, if the physical network of host A is connected by a gateway to the physical network of host B, the gateway will see the ARP request from host A. Assuming that subnet numbers are made to correspond to physical networks, the gateway can also tell that the request is for a host that is on a different physical network from the requesting host. The gateway can then respond for host B, saying that the network address for host B is that of the gateway itself. Host A will see this reply, cache it, and send future IP packets for host B to the gateway. The gateway will forward such packets to host B by the usual IP routing mechanisms. The gateway is acting as an agent for host B, which is why this technique is called "Proxy ARP"; we will refer to this as a transparent subnet gateway or ARP subnet gateway. When host B replies to traffic from host A, the same algorithm happens in reverse: the gateway connected to the network of host B answers the request for the network address of host A, and host B then sends IP packets for host A to gateway. The physical networks of host A and B need not be connected to the same gateway. All that is necessary is that the networks be reachable from the gateway. With this approach, all ARP subnet handling is done in the ARP subnet gateways. No changes to the normal ARP protocol or routing need to be made to the source and target hosts. From the host point of view, there are no subnets, and their physical networks are simply one big IP network. If a host has an implementation of subnets, its network masks must be set to cover only the IP network number, excluding the subnet bits, for the system to work properly.Carl-Mitchell & Quarterman [Page 2]RFC 1027 ARP and Transparent Subnet Gateways October 19872.2 Routing As part of the implementation of subnets, it is expected that the elements of routing tables will include network numbers including both the IP network number and the subnet bits, as specified by the subnet mask, where appropriate. When an ARP request is seen, the ARP subnet gateway can determine whether it knows a route to the target host by looking in the ordinary routing table. If attempts to reach foreign IP networks are eliminated early (see Sanity Checks below), only a request for an address on the local IP network will reach this point. We will assume that the same network mask applies to every subnet of the same IP network. The network mask of the network interface on which the ARP request arrived can then be applied to the target IP address to produce the network part to be looked up in the routing table. In 4.3BSD (and probably in other operating systems), a default route is possible. This default route specifies an address to forward a packet to when no other route is found. The default route must not be used when checking for a route to the target host of an ARP request. If the default route were used, the check would always succeed. But the host specified by the default route is unlikely to know about subnet routing (since it is usually an Internet gateway), and thus packets sent to it will probably be lost. This special case in the routing lookup method is the only implementation change needed to the routing mechanism. If the network interfaces on which the request was received and through which the route to the target passes are the same, the gateway must not reply. In this case, either the target host is on the same physical network as the gateway (and thus the host should reply for itself), or this gateway is not on the most direct path to the desired network, i.e., there is another gateway on the same physical network that is on a more direct path and the other gateway should respond. RFC-925 [4] describes a general mechanism for dynamic subnet routing using Proxy ARP and routing caches in the gateways. Our technique is restricted subset of RFC-925, in which we use static subnet routes which are determined administratively. As a result, our transparent subnet gateways require no new network routing table entries nor ARP cache entries; the only tables which are affected are the ARP caches in the host. In our implementation, routing loops are prevented by proper administration of the subnet routing tables in the gateways.Carl-Mitchell & Quarterman [Page 3]RFC 1027 ARP and Transparent Subnet Gateways October 19872.3 Multiple gateways The simplest subnet organization to administer is a tree structure, which cannot have loops. However, it may be desirable for reliability or traffic accommodation to have more than one gateway (or path) between two physical networks. ARP subnet gateways may be used in such a situation: a requesting host will use the first ARP response it receives, even if more than one gateway supplies one. This may even provide a rudimentary load balancing service, since if two gateways are otherwise similar, the one most lightly loaded is the more likely to reply first. More complex mechanisms could be built in the form of gateway-to- gateway protocols, and will no doubt become necessary in networks with large numbers of subnets and gateways, in the same way that gateway-to-gateway protocols are generally necessary among IP gateways.2.4 Sanity checks Care must be taken by the network and gateway administrators to keep the network masks the same on all the subnet gateway machines. The most common error is to set the network mask on a host without a subnet implementation to include the subnet number. This causes the host to fail to attempt to send packets to hosts not on its local subnet. Adjusting its routing tables will not help, since it will not know how to route to subnets. If the IP networks of the source and target hosts of an ARP request are different, an ARP subnet gateway implementation should not reply. This is to prevent the ARP subnet gateway from being used to reach foreign IP networks and thus possibly bypass security checks provided by IP gateways. An ARP subnet gateway implementation must not reply if the physical networks of the source and target of an ARP request are the same. In this case, either the target host is presumably either on the same physical network as the source host and can answer for itself, or the target host lies in the same direction from the gateway as does the source host, and an ARP reply from the would cause a loop. An ARP request for a broadcast address must elicit no reply, regardless of the source address or physical networks involved. If the gateway were to respond with an ARP reply in this situation, it would be inviting the original source to send actual traffic to a broadcast address. This could result in the "Chernobyl effect" wherein every host on the network replies to such traffic, causing network "meltdown".Carl-Mitchell & Quarterman [Page 4]RFC 1027 ARP and Transparent Subnet Gateways October 19872.5 Multiple logical subnets per physical network The most straightforward way to assign subnet numbers is one to one with physical networks. There are, however, circumstances in which multiple logical subnets per physical network are quite useful. One of the more common is when it is planned that a group of workstations will be put on their own physical network but the gateway to the new physical network needs to be tested first. (A repeater might be used when the gateway was not usable). If a rule of one subnet per physical network is enforced, the addresses of the workstations must be changed every time the gateway is tested. If they may be assigned addresses using a new subnet number while they are still on the old physical network, no further address changes are needed. To permit multiple subnets per physical network, an ARP subnet gateway must use the physical network interface, not the subnet number to determine when to reply to an ARP request. That is, it should send a proxy ARP reply only when the source network interface differs from the target network interface. In addition, appropriate routing table entries for these "phantom" subnets must be added to the subnet gateway routing tables.2.6 Broadcast addresses There are two kinds of IP broadcast addresses: main IP directed network broadcast and subnet broadcast. An IP network broadcast address consists of the network number plus a well-known value in the rest (local part) of the address. An IP subnet broadcast is similar, except both the IP network number and the subnet number bits are included. RFC-922 standardized the use of all ones in the local part, but there were two conventions in use before that: all ones and all zeros. For example, 4.2BSD used all zeros, and 4.3BSD uses all ones. Thus there are four kinds of IP directed broadcast addresses still currently in use on many networks. With transparent subnetting a subnet gateway must not issue an IP broadcast using the subnet broadcast address, e.g., 128.83.138.255. Hosts on the physical network that receive the broadcast will not understand such an address as a broadcast address, since they will not have subnets enabled (or will not have subnet implementations). In fact, 4.2BSD hosts (with or without subnet implementations) will instead treat an address with all ones in the local part as a specific host address and try to forward the packet. Since there is no such target host, there will be no entry in the forwarding host's ARP tables and it will generate an ARP request for the target host. This presents the scenario (actually observed) of a 4.3BSD gateway running the rwho program, which broadcasts a packet once a minute,Carl-Mitchell & Quarterman [Page 5]RFC 1027 ARP and Transparent Subnet Gateways October 1987 causing every 4.2BSD host on the local physical network to generate an ARP request at the same time. The same problem occurs with any subnet broadcast address, whether the local part is all zeros or all ones. Thus a subnet gateway in a network with hosts that do not understand subnets must take care not to use subnet broadcast addresses: instead it must use the IP network directed broadcast address instead. Finally, since many hosts running out-of-date software will still be using (and expecting) old-style all-zeros IP network broadcast addresses, the gateway must send its broadcast addresses out in that form, e.g., 128.83.0.0. It might be safe to also send a duplicate packet with all ones in the local part, e.g., 128.83.255.255. It is not clear whether the local network broadcast address of all ones, 255.255.255.255, will cause ill effects, but it is very likely that it will not be recognized by many hosts that are running older software.3. Implementation in 4.3BSD Subnet gateways using ARP have been implemented by a number of different people. The particular method described in this memo was first implemented in 4.2BSD on top of retrofitted beta-test 4.3BSD subnet code, and has since been reimplemented as an add-on to the distributed 4.3BSD sources. The latter implementation is described here. Most of the new kernel code for the subnet ARP gatewaying function is in the generic Ethernet interface module, netinet/if_ether.c. It consists of eight lines in in_arpinput that perform a couple of quick checks (to ensure that the facility is enabled on the source interface and that the source and target addresses are on different subnets), call a new routine, if_subarp, for further checks, and then build the ARP response if all checks succeed. This code is only reached when an ARP request is received, and does nothing if the facility is not enabled on the source interface. Thus performance of the gateway should be very little degraded by this addition. (Performance of the requesting host should also be similar to the latter case, as the only difference there is between efficiency of the ARP cache and of the routing tables). The routine if_subarp (about sixty lines) ensures that the source and target addresses are on the same IP network and that the target address is none of the four kinds of directed broadcast address. It then attempts to find a path to the target either by finding a network interface with the desired subnet or by looking in theCarl-Mitchell & Quarterman [Page 6]RFC 1027 ARP and Transparent Subnet Gateways October 1987 routing tables. Even if a network interface is found that leads to the target, for a reply to be sent the ARP gateway must be enabled on that interface and the target and source interfaces must be different. The file netinet/route.c has a static routing entry structure definition added, and modifications of about eight lines are made to the main routing table lookup routine, rtalloc, to recognize a pointer to that structure (when passed by if_subarp) as a direction to not use the default route in this routing check. The processor priority level (critical section protection) around the inner routing lookup check is changed to a higher value, as the routine may now be called from network interface interrupts as well as from the internal software interrupts that drive processing of IP and other high level protocols. This raised processor priority could conceivably slow the whole kernel somewhat if there are many routing checks, but since the critical section is fast, the effect should be small. A key kernel modification is about fifteen lines added to the routine ip_output in netinet/ip_output.c. It changes subnet broadcast addresses in packets originating at the gateway to IP network broadcast addresses so that hosts without subnet code (or with their network masks set to ignore subnets) will recognize them as broadcast addresses. This section of code is only used if the ARP gateway is turned on for the outgoing interface, and only affects subnet broadcast addresses. A new routine, in_mainnetof, of about fifteen lines, is added to netinet/in.c to return the IP network number (without subnet number) from an IP address. It is called from if_subarp and ip_output. Two kernel parameter files have one line added to each: net/if.h has a definition of a bit in the network interface structure to indicate whether subnet ARP gateways are enabled, and netinet/in.h refers to in_mainnetof. In addition to these approximately 110 lines of kernel source additions, there is one user-level modification. The source to the command ifconfig, which is used to set addresses and network masks of network interfaces, has four lines added to allow it to turn the subnet ARP gateway facility on or off, for each interface. This is documented in eleven new lines in the manual entry for that command.Carl-Mitchell & Quarterman [Page 7]RFC 1027 ARP and Transparent Subnet Gateways October 19874. Availability The 4.3BSD implementation is currently available by anonymous FTP (login anonymous, password guest) from sally.utexas.edu as pub/subarp, which is a 4.3BSD "diff -c" listing from the 4.3BSD sources that were distributed in September 1986. This implementation was not included in the 4.3BSD distribution proper because U.C. Berkeley CSRG thought that that would reduce the incentive for vendors to implement subnets per RFC-950. The authors concur. Nonetheless, there are circumstances in which the use of transparent subnet ARP gateways is indispensable.References 1. Mogul, J., and J. Postel, "Internet Standard Subnetting Procedure", RFC-950, Stanford University and USC/Information Sciences Institute, August 1985. 2. Mogul, J., "Broadcasting Internet Datagrams in the Presence of Subnets", RFC-922, Computer Science Department, Stanford University, October 1984. 3. Plummer, D., "An Ethernet Address Resolution Protocol or Converting Network Protocol Addresses to 48-bit Ethernet Addresses for Transmission on Ethernet Hardware", RFC-826, Symbolics, November 1982. 4. Postel, J., "Multi-LAN Address Resolution", RFC-925, USC/Information Sciences Institute, October 1984. 5. Carl-Mitchell, S., and J. S. Quarterman, "Nameservers in a Campus Domain", SIGCUE Outlook, Vol.19, No.1/2, pp.78-88, ACM SIG Computer Uses in Education, P.O. Box 64145, Baltimore, MD 21264, Spring/Summer 1986. 6. Braden, R., and J. Postel, "Requirements for Internet Gateways", RFC-1009, USC/Information Sciences Institute, June 1987.Carl-Mitchell & Quarterman [Page 8]