summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc1027.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc1027.txt')
-rw-r--r--doc/rfc/rfc1027.txt445
1 files changed, 445 insertions, 0 deletions
diff --git a/doc/rfc/rfc1027.txt b/doc/rfc/rfc1027.txt
new file mode 100644
index 0000000..fa8e233
--- /dev/null
+++ b/doc/rfc/rfc1027.txt
@@ -0,0 +1,445 @@
+Network Working Group Smoot Carl-Mitchell
+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.
+
+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. 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.
+
+
+
+
+Carl-Mitchell & Quarterman [Page 2]
+
+RFC 1027 ARP and Transparent Subnet Gateways October 1987
+
+
+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.
+
+
+
+
+
+Carl-Mitchell & Quarterman [Page 3]
+
+RFC 1027 ARP and Transparent Subnet Gateways October 1987
+
+
+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".
+
+
+
+Carl-Mitchell & Quarterman [Page 4]
+
+RFC 1027 ARP and Transparent Subnet Gateways October 1987
+
+
+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,
+
+
+
+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 the
+
+
+
+Carl-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 1987
+
+
+4. 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]
+