summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc903.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc903.txt')
-rw-r--r--doc/rfc/rfc903.txt227
1 files changed, 227 insertions, 0 deletions
diff --git a/doc/rfc/rfc903.txt b/doc/rfc/rfc903.txt
new file mode 100644
index 0000000..663e7d6
--- /dev/null
+++ b/doc/rfc/rfc903.txt
@@ -0,0 +1,227 @@
+
+Network Working Group Finlayson, Mann, Mogul, Theimer
+Request for Comments: 903 Stanford University
+ June 1984
+
+ A Reverse Address Resolution Protocol
+
+
+ Ross Finlayson, Timothy Mann, Jeffrey Mogul, Marvin Theimer
+ Computer Science Department
+ Stanford University
+ June 1984
+
+Status of this Memo
+
+ This RFC suggests a method for workstations to dynamically find their
+ protocol address (e.g., their Internet Address), when they know only
+ their hardware address (e.g., their attached physical network
+ address).
+
+ This RFC specifies a proposed protocol for the ARPA Internet
+ community, and requests discussion and suggestions for improvements.
+
+I. Introduction
+
+ Network hosts such as diskless workstations frequently do not know
+ their protocol addresses when booted; they often know only their
+ hardware interface addresses. To communicate using higher-level
+ protocols like IP, they must discover their protocol address from
+ some external source. Our problem is that there is no standard
+ mechanism for doing so.
+
+ Plummer's "Address Resolution Protocol" (ARP) [1] is designed to
+ solve a complementary problem, resolving a host's hardware address
+ given its protocol address. This RFC proposes a "Reverse Address
+ Resolution Protocol" (RARP). As with ARP, we assume a broadcast
+ medium, such as Ethernet.
+
+II. Design Considerations
+
+ The following considerations guided our design of the RARP protocol.
+
+ A. ARP and RARP are different operations. ARP assumes that every
+ host knows the mapping between its own hardware address and protocol
+ address(es). Information gathered about other hosts is accumulated
+ in a small cache. All hosts are equal in status; there is no
+ distinction between clients and servers.
+
+ On the other hand, RARP requires one or more server hosts to maintain
+ a database of mappings from hardware address to protocol address and
+ respond to requests from client hosts.
+
+
+
+Finlayson, Mann, Mogul, Theimer [Page 1]
+
+
+
+RFC 903 June 1984
+
+
+ B. As mentioned, RARP requires that server hosts maintain large
+ databases. It is undesirable and in some cases impossible to maintain
+ such a database in the kernel of a host's operating system. Thus,
+ most implementations will require some form of interaction with a
+ program outside the kernel.
+
+ C. Ease of implementation and minimal impact on existing host
+ software are important. It would be a mistake to design a protocol
+ that required modifications to every host's software, whether or not
+ it intended to participate.
+
+ D. It is desirable to allow for the possibility of sharing code with
+ existing software, to minimize overhead and development costs.
+
+III. The Proposed Protocol
+
+ We propose that RARP be specified as a separate protocol at the
+ data-link level. For example, if the medium used is Ethernet, then
+ RARP packets will have an Ethertype (still to be assigned) different
+ from that of ARP. This recognizes that ARP and RARP are two
+ fundamentally different operations, not supported equally by all
+ hosts. The impact on existing systems is minimized; existing ARP
+ servers will not be confused by RARP packets. It makes RARP a general
+ facility that can be used for mapping hardware addresses to any
+ higher level protocol address.
+
+ This approach provides the simplest implementation for RARP client
+ hosts, but also provides the most difficulties for RARP server hosts.
+ However, these difficulties should not be insurmountable, as is shown
+ in Appendix A, where we sketch two possible implementations for
+ 4.2BSD Unix.
+
+ RARP uses the same packet format that is used by ARP, namely:
+
+ ar$hrd (hardware address space) - 16 bits
+ ar$pro (protocol address space) - 16 bits
+ ar$hln (hardware address length) - 8 bits
+ ar$pln (protocol address length) - 8 bits
+ ar$op (opcode) - 16 bits
+ ar$sha (source hardware address) - n bytes,
+ where n is from the ar$hln field.
+ ar$spa (source protocol address) - m bytes,
+ where m is from the ar$pln field.
+ ar$tha (target hardware address) - n bytes
+ ar$tpa (target protocol address) - m bytes
+
+ ar$hrd, ar$pro, ar$hln and ar$pln are the same as in regular ARP
+ (see [1]).
+
+
+Finlayson, Mann, Mogul, Theimer [Page 2]
+
+
+
+RFC 903 June 1984
+
+
+ Suppose, for example, that 'hardware' addresses are 48-bit Ethernet
+ addresses, and 'protocol' addresses are 32-bit Internet Addresses.
+ That is, we wish to determine Internet Addresses corresponding to
+ known Ethernet addresses. Then, in each RARP packet, ar$hrd = 1
+ (Ethernet), ar$pro = 2048 decimal (the Ethertype of IP packets),
+ ar$hln = 6, and ar$pln = 4.
+
+ There are two opcodes: 3 ('request reverse') and 4 ('reply reverse').
+ An opcode of 1 or 2 has the same meaning as in [1]; packets with such
+ opcodes may be passed on to regular ARP code. A packet with any
+ other opcode is undefined. As in ARP, there are no "not found" or
+ "error" packets, since many RARP servers are free to respond to a
+ request. The sender of a RARP request packet should timeout if it
+ does not receive a reply for this request within a reasonable amount
+ of time.
+
+ The ar$sha, ar$spa, $ar$tha, and ar$tpa fields of the RARP packet are
+ interpreted as follows:
+
+ When the opcode is 3 ('request reverse'):
+
+ ar$sha is the hardware address of the sender of the packet.
+
+ ar$spa is undefined.
+
+ ar$tha is the 'target' hardware address.
+
+ In the case where the sender wishes to determine his own
+ protocol address, this, like ar$sha, will be the hardware
+ address of the sender.
+
+ ar$tpa is undefined.
+
+ When the opcode is 4 ('reply reverse'):
+
+ ar$sha is the hardware address of the responder (the sender of the
+ reply packet).
+
+ ar$spa is the protocol address of the responder (see the note
+ below).
+
+ ar$tha is the hardware address of the target, and should be the
+ same as that which was given in the request.
+
+ ar$tpa is the protocol address of the target, that is, the desired
+ address.
+
+ Note that the requirement that ar$spa in opcode 4 packets be filled
+
+
+Finlayson, Mann, Mogul, Theimer [Page 3]
+
+
+
+RFC 903 June 1984
+
+
+ in with the responder's protocol is purely for convenience. For
+ instance, if a system were to use both ARP and RARP, then the
+ inclusion of the valid protocol-hardware address pair (ar$spa,
+ ar$sha) may eliminate the need for a subsequent ARP request.
+
+IV. References
+
+ [1] Plummer, D., "An Ethernet Address Resolution Protocol", RFC 826,
+ MIT-LCS, November 1982.
+
+Appendix A. Two Example Implementations for 4.2BSD Unix
+
+ The following implementation sketches outline two different
+ approaches to implementing a RARP server under 4.2BSD.
+
+ A. Provide access to data-link level packets outside the kernel. The
+ RARP server is implemented completely outside the kernel and
+ interacts with the kernel only to receive and send RARP packets. The
+ kernel has to be modified to provide the appropriate access for these
+ packets; currently the 4.2 kernel allows access only to IP packets.
+ One existing mechanism that provides this capability is the CMU
+ "packet-filter" pseudo driver. This has been used successfully at
+ CMU and Stanford to implement similar sorts of "user-level" network
+ servers.
+
+ B. Maintain a cache of database entries inside the kernel. The full
+ RARP server database is maintained outside the kernel by a user
+ process. The RARP server itself is implemented directly in the
+ kernel and employs a small cache of database entries for its
+ responses. This cache could be the same as is used for forward ARP.
+
+ The cache gets filled from the actual RARP database by means of two
+ new ioctls. (These are like SIOCIFADDR, in that they are not really
+ associated with a specific socket.) One means: "sleep until there is
+ a translation to be done, then pass the request out to the user
+ process"; the other means: "enter this translation into the kernel
+ table". Thus, when the kernel can't find an entry in the cache, it
+ puts the request on a (global) queue and then does a wakeup(). The
+ implementation of the first ioctl is to sleep() and then pull the
+ first item off of this queue and return it to the user process.
+ Since the kernel can't wait around at interrupt level until the user
+ process replies, it can either give up (and assume that the
+ requesting host will retransmit the request packet after a second) or
+ if the second ioctl passes a copy of the request back into the
+ kernel, formulate and send a response at that time.
+
+
+
+
+
+Finlayson, Mann, Mogul, Theimer [Page 4]
+