home *** CD-ROM | disk | FTP | other *** search
- Network Working Group David C. Plummer
- Request For Comments: 826 (DCP@MIT-MC)
- November 1982
-
-
- An Ethernet Address Resolution Protocol
- -- or --
- Converting Network Protocol Addresses
- to 48.bit Ethernet Address
- for Transmission on
- Ethernet Hardware
-
-
-
-
-
- Abstract
-
- The implementation of protocol P on a sending host S decides,
- through protocol P's routing mechanism, that it wants to transmit
- to a target host T located some place on a connected piece of
- 10Mbit Ethernet cable. To actually transmit the Ethernet packet
- a 48.bit Ethernet address must be generated. The addresses of
- hosts within protocol P are not always compatible with the
- corresponding Ethernet address (being different lengths or
- values). Presented here is a protocol that allows dynamic
- distribution of the information needed to build tables to
- translate an address A in protocol P's address space into a
- 48.bit Ethernet address.
-
- Generalizations have been made which allow the protocol to be
- used for non-10Mbit Ethernet hardware. Some packet radio
- networks are examples of such hardware.
-
- --------------------------------------------------------------------
-
- The protocol proposed here is the result of a great deal of
- discussion with several other people, most notably J. Noel
- Chiappa, Yogen Dalal, and James E. Kulp, and helpful comments
- from David Moon.
-
-
-
-
- [The purpose of this RFC is to present a method of Converting
- Protocol Addresses (e.g., IP addresses) to Local Network
- Addresses (e.g., Ethernet addresses). This is a issue of general
- concern in the ARPA Internet community at this time. The
- method proposed here is presented for your consideration and
- comment. This is not the specification of a Internet Standard.]
-
- Notes:
- ------
-
- This protocol was originally designed for the DEC/Intel/Xerox
- 10Mbit Ethernet. It has been generalized to allow it to be used
- for other types of networks. Much of the discussion will be
- directed toward the 10Mbit Ethernet. Generalizations, where
- applicable, will follow the Ethernet-specific discussion.
-
- DOD Internet Protocol will be referred to as Internet.
-
- Numbers here are in the Ethernet standard, which is high byte
- first. This is the opposite of the byte addressing of machines
- such as PDP-11s and VAXes. Therefore, special care must be taken
- with the opcode field (ar$op) described below.
-
- An agreed upon authority is needed to manage hardware name space
- values (see below). Until an official authority exists, requests
- should be submitted to
- David C. Plummer
- Symbolics, Inc.
- 243 Vassar Street
- Cambridge, Massachusetts 02139
- Alternatively, network mail can be sent to DCP@MIT-MC.
-
- The Problem:
- ------------
-
- The world is a jungle in general, and the networking game
- contributes many animals. At nearly every layer of a network
- architecture there are several potential protocols that could be
- used. For example, at a high level, there is TELNET and SUPDUP
- for remote login. Somewhere below that there is a reliable byte
- stream protocol, which might be CHAOS protocol, DOD TCP, Xerox
- BSP or DECnet. Even closer to the hardware is the logical
- transport layer, which might be CHAOS, DOD Internet, Xerox PUP,
- or DECnet. The 10Mbit Ethernet allows all of these protocols
- (and more) to coexist on a single cable by means of a type field
- in the Ethernet packet header. However, the 10Mbit Ethernet
- requires 48.bit addresses on the physical cable, yet most
- protocol addresses are not 48.bits long, nor do they necessarily
- have any relationship to the 48.bit Ethernet address of the
- hardware. For example, CHAOS addresses are 16.bits, DOD Internet
- addresses are 32.bits, and Xerox PUP addresses are 8.bits. A
- protocol is needed to dynamically distribute the correspondences
- between a <protocol, address> pair and a 48.bit Ethernet address.
-
- Motivation:
- -----------
-
- Use of the 10Mbit Ethernet is increasing as more manufacturers
- supply interfaces that conform to the specification published by
- DEC, Intel and Xerox. With this increasing availability, more
- and more software is being written for these interfaces. There
- are two alternatives: (1) Every implementor invents his/her own
- method to do some form of address resolution, or (2) every
- implementor uses a standard so that his/her code can be
- distributed to other systems without need for modification. This
- proposal attempts to set the standard.
-
- Definitions:
- ------------
-
- Define the following for referring to the values put in the TYPE
- field of the Ethernet packet header:
- ether_type$XEROX_PUP,
- ether_type$DOD_INTERNET,
- ether_type$CHAOS,
- and a new one:
- ether_type$ADDRESS_RESOLUTION.
- Also define the following values (to be discussed later):
- ares_op$REQUEST (= 1, high byte transmitted first) and
- ares_op$REPLY (= 2),
- and
- ares_hrd$Ethernet (= 1).
-
- Packet format:
- --------------
-
- To communicate mappings from <protocol, address> pairs to 48.bit
- Ethernet addresses, a packet format that embodies the Address
- Resolution protocol is needed. The format of the packet follows.
-
- Ethernet transmission layer (not necessarily accessible to
- the user):
- 48.bit: Ethernet address of destination
- 48.bit: Ethernet address of sender
- 16.bit: Protocol type = ether_type$ADDRESS_RESOLUTION
- Ethernet packet data:
- 16.bit: (ar$hrd) Hardware address space (e.g., Ethernet,
- Packet Radio Net.)
- 16.bit: (ar$pro) Protocol address space. For Ethernet
- hardware, this is from the set of type
- fields ether_typ$<protocol>.
- 8.bit: (ar$hln) byte length of each hardware address
- 8.bit: (ar$pln) byte length of each protocol address
- 16.bit: (ar$op) opcode (ares_op$REQUEST | ares_op$REPLY)
- nbytes: (ar$sha) Hardware address of sender of this
- packet, n from the ar$hln field.
- mbytes: (ar$spa) Protocol address of sender of this
- packet, m from the ar$pln field.
- nbytes: (ar$tha) Hardware address of target of this
- packet (if known).
- mbytes: (ar$tpa) Protocol address of target.
-
-
- Packet Generation:
- ------------------
-
- As a packet is sent down through the network layers, routing
- determines the protocol address of the next hop for the packet
- and on which piece of hardware it expects to find the station
- with the immediate target protocol address. In the case of the
- 10Mbit Ethernet, address resolution is needed and some lower
- layer (probably the hardware driver) must consult the Address
- Resolution module (perhaps implemented in the Ethernet support
- module) to convert the <protocol type, target protocol address>
- pair to a 48.bit Ethernet address. The Address Resolution module
- tries to find this pair in a table. If it finds the pair, it
- gives the corresponding 48.bit Ethernet address back to the
- caller (hardware driver) which then transmits the packet. If it
- does not, it probably informs the caller that it is throwing the
- packet away (on the assumption the packet will be retransmitted
- by a higher network layer), and generates an Ethernet packet with
- a type field of ether_type$ADDRESS_RESOLUTION. The Address
- Resolution module then sets the ar$hrd field to
- ares_hrd$Ethernet, ar$pro to the protocol type that is being
- resolved, ar$hln to 6 (the number of bytes in a 48.bit Ethernet
- address), ar$pln to the length of an address in that protocol,
- ar$op to ares_op$REQUEST, ar$sha with the 48.bit ethernet address
- of itself, ar$spa with the protocol address of itself, and ar$tpa
- with the protocol address of the machine that is trying to be
- accessed. It does not set ar$tha to anything in particular,
- because it is this value that it is trying to determine. It
- could set ar$tha to the broadcast address for the hardware (all
- ones in the case of the 10Mbit Ethernet) if that makes it
- convenient for some aspect of the implementation. It then causes
- this packet to be broadcast to all stations on the Ethernet cable
- originally determined by the routing mechanism.
-
-
-
- Packet Reception:
- -----------------
-
- When an address resolution packet is received, the receiving
- Ethernet module gives the packet to the Address Resolution module
- which goes through an algorithm similar to the following.
- Negative conditionals indicate an end of processing and a
- discarding of the packet.
-
- ?Do I have the hardware type in ar$hrd?
- Yes: (almost definitely)
- [optionally check the hardware length ar$hln]
- ?Do I speak the protocol in ar$pro?
- Yes:
- [optionally check the protocol length ar$pln]
- Merge_flag := false
- If the pair <protocol type, sender protocol address> is
- already in my translation table, update the sender
- hardware address field of the entry with the new
- information in the packet and set Merge_flag to true.
- ?Am I the target protocol address?
- Yes:
- If Merge_flag is false, add the triplet <protocol type,
- sender protocol address, sender hardware address> to
- the translation table.
- ?Is the opcode ares_op$REQUEST? (NOW look at the opcode!!)
- Yes:
- Swap hardware and protocol fields, putting the local
- hardware and protocol addresses in the sender fields.
- Set the ar$op field to ares_op$REPLY
- Send the packet to the (new) target hardware address on
- the same hardware on which the request was received.
-
- Notice that the <protocol type, sender protocol address, sender
- hardware address> triplet is merged into the table before the
- opcode is looked at. This is on the assumption that communcation
- is bidirectional; if A has some reason to talk to B, then B will
- probably have some reason to talk to A. Notice also that if an
- entry already exists for the <protocol type, sender protocol
- address> pair, then the new hardware address supersedes the old
- one. Related Issues gives some motivation for this.
-
- Generalization: The ar$hrd and ar$hln fields allow this protocol
- and packet format to be used for non-10Mbit Ethernets. For the
- 10Mbit Ethernet <ar$hrd, ar$hln> takes on the value <1, 6>. For
- other hardware networks, the ar$pro field may no longer
- correspond to the Ethernet type field, but it should be
- associated with the protocol whose address resolution is being
- sought.
-
-
- Why is it done this way??
- -------------------------
-
- Periodic broadcasting is definitely not desired. Imagine 100
- workstations on a single Ethernet, each broadcasting address
- resolution information once per 10 minutes (as one possible set
- of parameters). This is one packet every 6 seconds. This is
- almost reasonable, but what use is it? The workstations aren't
- generally going to be talking to each other (and therefore have
- 100 useless entries in a table); they will be mainly talking to a
- mainframe, file server or bridge, but only to a small number of
- other workstations (for interactive conversations, for example).
- The protocol described in this paper distributes information as
- it is needed, and only once (probably) per boot of a machine.
-
- This format does not allow for more than one resolution to be
- done in the same packet. This is for simplicity. If things were
- multiplexed the packet format would be considerably harder to
- digest, and much of the information could be gratuitous. Think
- of a bridge that talks four protocols telling a workstation all
- four protocol addresses, three of which the workstation will
- probably never use.
-
- This format allows the packet buffer to be reused if a reply is
- generated; a reply has the same length as a request, and several
- of the fields are the same.
-
- The value of the hardware field (ar$hrd) is taken from a list for
- this purpose. Currently the only defined value is for the 10Mbit
- Ethernet (ares_hrd$Ethernet = 1). There has been talk of using
- this protocol for Packet Radio Networks as well, and this will
- require another value as will other future hardware mediums that
- wish to use this protocol.
-
- For the 10Mbit Ethernet, the value in the protocol field (ar$pro)
- is taken from the set ether_type$. This is a natural reuse of
- the assigned protocol types. Combining this with the opcode
- (ar$op) would effectively halve the number of protocols that can
- be resolved under this protocol and would make a monitor/debugger
- more complex (see Network Monitoring and Debugging below). It is
- hoped that we will never see 32768 protocols, but Murphy made
- some laws which don't allow us to make this assumption.
-
- In theory, the length fields (ar$hln and ar$pln) are redundant,
- since the length of a protocol address should be determined by
- the hardware type (found in ar$hrd) and the protocol type (found
- in ar$pro). It is included for optional consistency checking,
- and for network monitoring and debugging (see below).
-
- The opcode is to determine if this is a request (which may cause
- a reply) or a reply to a previous request. 16 bits for this is
- overkill, but a flag (field) is needed.
-
- The sender hardware address and sender protocol address are
- absolutely necessary. It is these fields that get put in a
- translation table.
-
- The target protocol address is necessary in the request form of
- the packet so that a machine can determine whether or not to
- enter the sender information in a table or to send a reply. It
- is not necessarily needed in the reply form if one assumes a
- reply is only provoked by a request. It is included for
- completeness, network monitoring, and to simplify the suggested
- processing algorithm described above (which does not look at the
- opcode until AFTER putting the sender information in a table).
-
- The target hardware address is included for completeness and
- network monitoring. It has no meaning in the request form, since
- it is this number that the machine is requesting. Its meaning in
- the reply form is the address of the machine making the request.
- In some implementations (which do not get to look at the 14.byte
- ethernet header, for example) this may save some register
- shuffling or stack space by sending this field to the hardware
- driver as the hardware destination address of the packet.
-
- There are no padding bytes between addresses. The packet data
- should be viewed as a byte stream in which only 3 byte pairs are
- defined to be words (ar$hrd, ar$pro and ar$op) which are sent
- most significant byte first (Ethernet/PDP-10 byte style).
-
-
- Network monitoring and debugging:
- ---------------------------------
-
- The above Address Resolution protocol allows a machine to gain
- knowledge about the higher level protocol activity (e.g., CHAOS,
- Internet, PUP, DECnet) on an Ethernet cable. It can determine
- which Ethernet protocol type fields are in use (by value) and the
- protocol addresses within each protocol type. In fact, it is not
- necessary for the monitor to speak any of the higher level
- protocols involved. It goes something like this:
-
- When a monitor receives an Address Resolution packet, it always
- enters the <protocol type, sender protocol address, sender
- hardware address> in a table. It can determine the length of the
- hardware and protocol address from the ar$hln and ar$pln fields
- of the packet. If the opcode is a REPLY the monitor can then
- throw the packet away. If the opcode is a REQUEST and the target
- protocol address matches the protocol address of the monitor, the
- monitor sends a REPLY as it normally would. The monitor will
- only get one mapping this way, since the REPLY to the REQUEST
- will be sent directly to the requesting host. The monitor could
- try sending its own REQUEST, but this could get two monitors into
- a REQUEST sending loop, and care must be taken.
-
- Because the protocol and opcode are not combined into one field,
- the monitor does not need to know which request opcode is
- associated with which reply opcode for the same higher level
- protocol. The length fields should also give enough information
- to enable it to "parse" a protocol addresses, although it has no
- knowledge of what the protocol addresses mean.
-
- A working implementation of the Address Resolution protocol can
- also be used to debug a non-working implementation. Presumably a
- hardware driver will successfully broadcast a packet with Ethernet
- type field of ether_type$ADDRESS_RESOLUTION. The format of the
- packet may not be totally correct, because initial
- implementations may have bugs, and table management may be
- slightly tricky. Because requests are broadcast a monitor will
- receive the packet and can display it for debugging if desired.
-
-
- An Example:
- -----------
-
- Let there exist machines X and Y that are on the same 10Mbit
- Ethernet cable. They have Ethernet address EA(X) and EA(Y) and
- DOD Internet addresses IPA(X) and IPA(Y) . Let the Ethernet type
- of Internet be ET(IP). Machine X has just been started, and
- sooner or later wants to send an Internet packet to machine Y on
- the same cable. X knows that it wants to send to IPA(Y) and
- tells the hardware driver (here an Ethernet driver) IPA(Y). The
- driver consults the Address Resolution module to convert <ET(IP),
- IPA(Y)> into a 48.bit Ethernet address, but because X was just
- started, it does not have this information. It throws the
- Internet packet away and instead creates an ADDRESS RESOLUTION
- packet with
- (ar$hrd) = ares_hrd$Ethernet
- (ar$pro) = ET(IP)
- (ar$hln) = length(EA(X))
- (ar$pln) = length(IPA(X))
- (ar$op) = ares_op$REQUEST
- (ar$sha) = EA(X)
- (ar$spa) = IPA(X)
- (ar$tha) = don't care
- (ar$tpa) = IPA(Y)
- and broadcasts this packet to everybody on the cable.
-
- Machine Y gets this packet, and determines that it understands
- the hardware type (Ethernet), that it speaks the indicated
- protocol (Internet) and that the packet is for it
- ((ar$tpa)=IPA(Y)). It enters (probably replacing any existing
- entry) the information that <ET(IP), IPA(X)> maps to EA(X). It
- then notices that it is a request, so it swaps fields, putting
- EA(Y) in the new sender Ethernet address field (ar$sha), sets the
- opcode to reply, and sends the packet directly (not broadcast) to
- EA(X). At this point Y knows how to send to X, but X still
- doesn't know how to send to Y.
-
- Machine X gets the reply packet from Y, forms the map from
- <ET(IP), IPA(Y)> to EA(Y), notices the packet is a reply and
- throws it away. The next time X's Internet module tries to send
- a packet to Y on the Ethernet, the translation will succeed, and
- the packet will (hopefully) arrive. If Y's Internet module then
- wants to talk to X, this will also succeed since Y has remembered
- the information from X's request for Address Resolution.
-
- Related issue:
- ---------------
-
- It may be desirable to have table aging and/or timeouts. The
- implementation of these is outside the scope of this protocol.
- Here is a more detailed description (thanks to MOON@SCRC@MIT-MC).
-
- If a host moves, any connections initiated by that host will
- work, assuming its own address resolution table is cleared when
- it moves. However, connections initiated to it by other hosts
- will have no particular reason to know to discard their old
- address. However, 48.bit Ethernet addresses are supposed to be
- unique and fixed for all time, so they shouldn't change. A host
- could "move" if a host name (and address in some other protocol)
- were reassigned to a different physical piece of hardware. Also,
- as we know from experience, there is always the danger of
- incorrect routing information accidentally getting transmitted
- through hardware or software error; it should not be allowed to
- persist forever. Perhaps failure to initiate a connection should
- inform the Address Resolution module to delete the information on
- the basis that the host is not reachable, possibly because it is
- down or the old translation is no longer valid. Or perhaps
- receiving of a packet from a host should reset a timeout in the
- address resolution entry used for transmitting packets to that
- host; if no packets are received from a host for a suitable
- length of time, the address resolution entry is forgotten. This
- may cause extra overhead to scan the table for each incoming
- packet. Perhaps a hash or index can make this faster.
-
- The suggested algorithm for receiving address resolution packets
- tries to lessen the time it takes for recovery if a host does
- move. Recall that if the <protocol type, sender protocol
- address> is already in the translation table, then the sender
- hardware address supersedes the existing entry. Therefore, on a
- perfect Ethernet where a broadcast REQUEST reaches all stations
- on the cable, each station will be get the new hardware address.
-
- Another alternative is to have a daemon perform the timeouts.
- After a suitable time, the daemon considers removing an entry.
- It first sends (with a small number of retransmissions if needed)
- an address resolution packet with opcode REQUEST directly to the
- Ethernet address in the table. If a REPLY is not seen in a short
- amount of time, the entry is deleted. The request is sent
- directly so as not to bother every station on the Ethernet. Just
- forgetting entries will likely cause useful information to be
- forgotten, which must be regained.
-
- Since hosts don't transmit information about anyone other than
- themselves, rebooting a host will cause its address mapping table
- to be up to date. Bad information can't persist forever by being
- passed around from machine to machine; the only bad information
- that can exist is in a machine that doesn't know that some other
- machine has changed its 48.bit Ethernet address. Perhaps
- manually resetting (or clearing) the address mapping table will
- suffice.
-
- This issue clearly needs more thought if it is believed to be
- important. It is caused by any address resolution-like protocol.
-
-