Annotation of embedaddon/ipguard/doc/rfc826.txt, revision 1.1.1.1
1.1 misho 1: Network Working Group David C. Plummer
2: Request For Comments: 826 (DCP@MIT-MC)
3: November 1982
4:
5:
6: An Ethernet Address Resolution Protocol
7: -- or --
8: Converting Network Protocol Addresses
9: to 48.bit Ethernet Address
10: for Transmission on
11: Ethernet Hardware
12:
13:
14:
15:
16:
17: Abstract
18:
19: The implementation of protocol P on a sending host S decides,
20: through protocol P's routing mechanism, that it wants to transmit
21: to a target host T located some place on a connected piece of
22: 10Mbit Ethernet cable. To actually transmit the Ethernet packet
23: a 48.bit Ethernet address must be generated. The addresses of
24: hosts within protocol P are not always compatible with the
25: corresponding Ethernet address (being different lengths or
26: values). Presented here is a protocol that allows dynamic
27: distribution of the information needed to build tables to
28: translate an address A in protocol P's address space into a
29: 48.bit Ethernet address.
30:
31: Generalizations have been made which allow the protocol to be
32: used for non-10Mbit Ethernet hardware. Some packet radio
33: networks are examples of such hardware.
34:
35: --------------------------------------------------------------------
36:
37: The protocol proposed here is the result of a great deal of
38: discussion with several other people, most notably J. Noel
39: Chiappa, Yogen Dalal, and James E. Kulp, and helpful comments
40: from David Moon.
41:
42:
43:
44:
45: [The purpose of this RFC is to present a method of Converting
46: Protocol Addresses (e.g., IP addresses) to Local Network
47: Addresses (e.g., Ethernet addresses). This is a issue of general
48: concern in the ARPA Internet community at this time. The
49: method proposed here is presented for your consideration and
50: comment. This is not the specification of a Internet Standard.]
51:
52: Notes:
53: ------
54:
55: This protocol was originally designed for the DEC/Intel/Xerox
56: 10Mbit Ethernet. It has been generalized to allow it to be used
57: for other types of networks. Much of the discussion will be
58: directed toward the 10Mbit Ethernet. Generalizations, where
59: applicable, will follow the Ethernet-specific discussion.
60:
61: DOD Internet Protocol will be referred to as Internet.
62:
63: Numbers here are in the Ethernet standard, which is high byte
64: first. This is the opposite of the byte addressing of machines
65: such as PDP-11s and VAXes. Therefore, special care must be taken
66: with the opcode field (ar$op) described below.
67:
68: An agreed upon authority is needed to manage hardware name space
69: values (see below). Until an official authority exists, requests
70: should be submitted to
71: David C. Plummer
72: Symbolics, Inc.
73: 243 Vassar Street
74: Cambridge, Massachusetts 02139
75: Alternatively, network mail can be sent to DCP@MIT-MC.
76:
77: The Problem:
78: ------------
79:
80: The world is a jungle in general, and the networking game
81: contributes many animals. At nearly every layer of a network
82: architecture there are several potential protocols that could be
83: used. For example, at a high level, there is TELNET and SUPDUP
84: for remote login. Somewhere below that there is a reliable byte
85: stream protocol, which might be CHAOS protocol, DOD TCP, Xerox
86: BSP or DECnet. Even closer to the hardware is the logical
87: transport layer, which might be CHAOS, DOD Internet, Xerox PUP,
88: or DECnet. The 10Mbit Ethernet allows all of these protocols
89: (and more) to coexist on a single cable by means of a type field
90: in the Ethernet packet header. However, the 10Mbit Ethernet
91: requires 48.bit addresses on the physical cable, yet most
92: protocol addresses are not 48.bits long, nor do they necessarily
93: have any relationship to the 48.bit Ethernet address of the
94: hardware. For example, CHAOS addresses are 16.bits, DOD Internet
95: addresses are 32.bits, and Xerox PUP addresses are 8.bits. A
96: protocol is needed to dynamically distribute the correspondences
97: between a <protocol, address> pair and a 48.bit Ethernet address.
98:
99: Motivation:
100: -----------
101:
102: Use of the 10Mbit Ethernet is increasing as more manufacturers
103: supply interfaces that conform to the specification published by
104: DEC, Intel and Xerox. With this increasing availability, more
105: and more software is being written for these interfaces. There
106: are two alternatives: (1) Every implementor invents his/her own
107: method to do some form of address resolution, or (2) every
108: implementor uses a standard so that his/her code can be
109: distributed to other systems without need for modification. This
110: proposal attempts to set the standard.
111:
112: Definitions:
113: ------------
114:
115: Define the following for referring to the values put in the TYPE
116: field of the Ethernet packet header:
117: ether_type$XEROX_PUP,
118: ether_type$DOD_INTERNET,
119: ether_type$CHAOS,
120: and a new one:
121: ether_type$ADDRESS_RESOLUTION.
122: Also define the following values (to be discussed later):
123: ares_op$REQUEST (= 1, high byte transmitted first) and
124: ares_op$REPLY (= 2),
125: and
126: ares_hrd$Ethernet (= 1).
127:
128: Packet format:
129: --------------
130:
131: To communicate mappings from <protocol, address> pairs to 48.bit
132: Ethernet addresses, a packet format that embodies the Address
133: Resolution protocol is needed. The format of the packet follows.
134:
135: Ethernet transmission layer (not necessarily accessible to
136: the user):
137: 48.bit: Ethernet address of destination
138: 48.bit: Ethernet address of sender
139: 16.bit: Protocol type = ether_type$ADDRESS_RESOLUTION
140: Ethernet packet data:
141: 16.bit: (ar$hrd) Hardware address space (e.g., Ethernet,
142: Packet Radio Net.)
143: 16.bit: (ar$pro) Protocol address space. For Ethernet
144: hardware, this is from the set of type
145: fields ether_typ$<protocol>.
146: 8.bit: (ar$hln) byte length of each hardware address
147: 8.bit: (ar$pln) byte length of each protocol address
148: 16.bit: (ar$op) opcode (ares_op$REQUEST | ares_op$REPLY)
149: nbytes: (ar$sha) Hardware address of sender of this
150: packet, n from the ar$hln field.
151: mbytes: (ar$spa) Protocol address of sender of this
152: packet, m from the ar$pln field.
153: nbytes: (ar$tha) Hardware address of target of this
154: packet (if known).
155: mbytes: (ar$tpa) Protocol address of target.
156:
157:
158: Packet Generation:
159: ------------------
160:
161: As a packet is sent down through the network layers, routing
162: determines the protocol address of the next hop for the packet
163: and on which piece of hardware it expects to find the station
164: with the immediate target protocol address. In the case of the
165: 10Mbit Ethernet, address resolution is needed and some lower
166: layer (probably the hardware driver) must consult the Address
167: Resolution module (perhaps implemented in the Ethernet support
168: module) to convert the <protocol type, target protocol address>
169: pair to a 48.bit Ethernet address. The Address Resolution module
170: tries to find this pair in a table. If it finds the pair, it
171: gives the corresponding 48.bit Ethernet address back to the
172: caller (hardware driver) which then transmits the packet. If it
173: does not, it probably informs the caller that it is throwing the
174: packet away (on the assumption the packet will be retransmitted
175: by a higher network layer), and generates an Ethernet packet with
176: a type field of ether_type$ADDRESS_RESOLUTION. The Address
177: Resolution module then sets the ar$hrd field to
178: ares_hrd$Ethernet, ar$pro to the protocol type that is being
179: resolved, ar$hln to 6 (the number of bytes in a 48.bit Ethernet
180: address), ar$pln to the length of an address in that protocol,
181: ar$op to ares_op$REQUEST, ar$sha with the 48.bit ethernet address
182: of itself, ar$spa with the protocol address of itself, and ar$tpa
183: with the protocol address of the machine that is trying to be
184: accessed. It does not set ar$tha to anything in particular,
185: because it is this value that it is trying to determine. It
186: could set ar$tha to the broadcast address for the hardware (all
187: ones in the case of the 10Mbit Ethernet) if that makes it
188: convenient for some aspect of the implementation. It then causes
189: this packet to be broadcast to all stations on the Ethernet cable
190: originally determined by the routing mechanism.
191:
192:
193:
194: Packet Reception:
195: -----------------
196:
197: When an address resolution packet is received, the receiving
198: Ethernet module gives the packet to the Address Resolution module
199: which goes through an algorithm similar to the following.
200: Negative conditionals indicate an end of processing and a
201: discarding of the packet.
202:
203: ?Do I have the hardware type in ar$hrd?
204: Yes: (almost definitely)
205: [optionally check the hardware length ar$hln]
206: ?Do I speak the protocol in ar$pro?
207: Yes:
208: [optionally check the protocol length ar$pln]
209: Merge_flag := false
210: If the pair <protocol type, sender protocol address> is
211: already in my translation table, update the sender
212: hardware address field of the entry with the new
213: information in the packet and set Merge_flag to true.
214: ?Am I the target protocol address?
215: Yes:
216: If Merge_flag is false, add the triplet <protocol type,
217: sender protocol address, sender hardware address> to
218: the translation table.
219: ?Is the opcode ares_op$REQUEST? (NOW look at the opcode!!)
220: Yes:
221: Swap hardware and protocol fields, putting the local
222: hardware and protocol addresses in the sender fields.
223: Set the ar$op field to ares_op$REPLY
224: Send the packet to the (new) target hardware address on
225: the same hardware on which the request was received.
226:
227: Notice that the <protocol type, sender protocol address, sender
228: hardware address> triplet is merged into the table before the
229: opcode is looked at. This is on the assumption that communcation
230: is bidirectional; if A has some reason to talk to B, then B will
231: probably have some reason to talk to A. Notice also that if an
232: entry already exists for the <protocol type, sender protocol
233: address> pair, then the new hardware address supersedes the old
234: one. Related Issues gives some motivation for this.
235:
236: Generalization: The ar$hrd and ar$hln fields allow this protocol
237: and packet format to be used for non-10Mbit Ethernets. For the
238: 10Mbit Ethernet <ar$hrd, ar$hln> takes on the value <1, 6>. For
239: other hardware networks, the ar$pro field may no longer
240: correspond to the Ethernet type field, but it should be
241: associated with the protocol whose address resolution is being
242: sought.
243:
244:
245: Why is it done this way??
246: -------------------------
247:
248: Periodic broadcasting is definitely not desired. Imagine 100
249: workstations on a single Ethernet, each broadcasting address
250: resolution information once per 10 minutes (as one possible set
251: of parameters). This is one packet every 6 seconds. This is
252: almost reasonable, but what use is it? The workstations aren't
253: generally going to be talking to each other (and therefore have
254: 100 useless entries in a table); they will be mainly talking to a
255: mainframe, file server or bridge, but only to a small number of
256: other workstations (for interactive conversations, for example).
257: The protocol described in this paper distributes information as
258: it is needed, and only once (probably) per boot of a machine.
259:
260: This format does not allow for more than one resolution to be
261: done in the same packet. This is for simplicity. If things were
262: multiplexed the packet format would be considerably harder to
263: digest, and much of the information could be gratuitous. Think
264: of a bridge that talks four protocols telling a workstation all
265: four protocol addresses, three of which the workstation will
266: probably never use.
267:
268: This format allows the packet buffer to be reused if a reply is
269: generated; a reply has the same length as a request, and several
270: of the fields are the same.
271:
272: The value of the hardware field (ar$hrd) is taken from a list for
273: this purpose. Currently the only defined value is for the 10Mbit
274: Ethernet (ares_hrd$Ethernet = 1). There has been talk of using
275: this protocol for Packet Radio Networks as well, and this will
276: require another value as will other future hardware mediums that
277: wish to use this protocol.
278:
279: For the 10Mbit Ethernet, the value in the protocol field (ar$pro)
280: is taken from the set ether_type$. This is a natural reuse of
281: the assigned protocol types. Combining this with the opcode
282: (ar$op) would effectively halve the number of protocols that can
283: be resolved under this protocol and would make a monitor/debugger
284: more complex (see Network Monitoring and Debugging below). It is
285: hoped that we will never see 32768 protocols, but Murphy made
286: some laws which don't allow us to make this assumption.
287:
288: In theory, the length fields (ar$hln and ar$pln) are redundant,
289: since the length of a protocol address should be determined by
290: the hardware type (found in ar$hrd) and the protocol type (found
291: in ar$pro). It is included for optional consistency checking,
292: and for network monitoring and debugging (see below).
293:
294: The opcode is to determine if this is a request (which may cause
295: a reply) or a reply to a previous request. 16 bits for this is
296: overkill, but a flag (field) is needed.
297:
298: The sender hardware address and sender protocol address are
299: absolutely necessary. It is these fields that get put in a
300: translation table.
301:
302: The target protocol address is necessary in the request form of
303: the packet so that a machine can determine whether or not to
304: enter the sender information in a table or to send a reply. It
305: is not necessarily needed in the reply form if one assumes a
306: reply is only provoked by a request. It is included for
307: completeness, network monitoring, and to simplify the suggested
308: processing algorithm described above (which does not look at the
309: opcode until AFTER putting the sender information in a table).
310:
311: The target hardware address is included for completeness and
312: network monitoring. It has no meaning in the request form, since
313: it is this number that the machine is requesting. Its meaning in
314: the reply form is the address of the machine making the request.
315: In some implementations (which do not get to look at the 14.byte
316: ethernet header, for example) this may save some register
317: shuffling or stack space by sending this field to the hardware
318: driver as the hardware destination address of the packet.
319:
320: There are no padding bytes between addresses. The packet data
321: should be viewed as a byte stream in which only 3 byte pairs are
322: defined to be words (ar$hrd, ar$pro and ar$op) which are sent
323: most significant byte first (Ethernet/PDP-10 byte style).
324:
325:
326: Network monitoring and debugging:
327: ---------------------------------
328:
329: The above Address Resolution protocol allows a machine to gain
330: knowledge about the higher level protocol activity (e.g., CHAOS,
331: Internet, PUP, DECnet) on an Ethernet cable. It can determine
332: which Ethernet protocol type fields are in use (by value) and the
333: protocol addresses within each protocol type. In fact, it is not
334: necessary for the monitor to speak any of the higher level
335: protocols involved. It goes something like this:
336:
337: When a monitor receives an Address Resolution packet, it always
338: enters the <protocol type, sender protocol address, sender
339: hardware address> in a table. It can determine the length of the
340: hardware and protocol address from the ar$hln and ar$pln fields
341: of the packet. If the opcode is a REPLY the monitor can then
342: throw the packet away. If the opcode is a REQUEST and the target
343: protocol address matches the protocol address of the monitor, the
344: monitor sends a REPLY as it normally would. The monitor will
345: only get one mapping this way, since the REPLY to the REQUEST
346: will be sent directly to the requesting host. The monitor could
347: try sending its own REQUEST, but this could get two monitors into
348: a REQUEST sending loop, and care must be taken.
349:
350: Because the protocol and opcode are not combined into one field,
351: the monitor does not need to know which request opcode is
352: associated with which reply opcode for the same higher level
353: protocol. The length fields should also give enough information
354: to enable it to "parse" a protocol addresses, although it has no
355: knowledge of what the protocol addresses mean.
356:
357: A working implementation of the Address Resolution protocol can
358: also be used to debug a non-working implementation. Presumably a
359: hardware driver will successfully broadcast a packet with Ethernet
360: type field of ether_type$ADDRESS_RESOLUTION. The format of the
361: packet may not be totally correct, because initial
362: implementations may have bugs, and table management may be
363: slightly tricky. Because requests are broadcast a monitor will
364: receive the packet and can display it for debugging if desired.
365:
366:
367: An Example:
368: -----------
369:
370: Let there exist machines X and Y that are on the same 10Mbit
371: Ethernet cable. They have Ethernet address EA(X) and EA(Y) and
372: DOD Internet addresses IPA(X) and IPA(Y) . Let the Ethernet type
373: of Internet be ET(IP). Machine X has just been started, and
374: sooner or later wants to send an Internet packet to machine Y on
375: the same cable. X knows that it wants to send to IPA(Y) and
376: tells the hardware driver (here an Ethernet driver) IPA(Y). The
377: driver consults the Address Resolution module to convert <ET(IP),
378: IPA(Y)> into a 48.bit Ethernet address, but because X was just
379: started, it does not have this information. It throws the
380: Internet packet away and instead creates an ADDRESS RESOLUTION
381: packet with
382: (ar$hrd) = ares_hrd$Ethernet
383: (ar$pro) = ET(IP)
384: (ar$hln) = length(EA(X))
385: (ar$pln) = length(IPA(X))
386: (ar$op) = ares_op$REQUEST
387: (ar$sha) = EA(X)
388: (ar$spa) = IPA(X)
389: (ar$tha) = don't care
390: (ar$tpa) = IPA(Y)
391: and broadcasts this packet to everybody on the cable.
392:
393: Machine Y gets this packet, and determines that it understands
394: the hardware type (Ethernet), that it speaks the indicated
395: protocol (Internet) and that the packet is for it
396: ((ar$tpa)=IPA(Y)). It enters (probably replacing any existing
397: entry) the information that <ET(IP), IPA(X)> maps to EA(X). It
398: then notices that it is a request, so it swaps fields, putting
399: EA(Y) in the new sender Ethernet address field (ar$sha), sets the
400: opcode to reply, and sends the packet directly (not broadcast) to
401: EA(X). At this point Y knows how to send to X, but X still
402: doesn't know how to send to Y.
403:
404: Machine X gets the reply packet from Y, forms the map from
405: <ET(IP), IPA(Y)> to EA(Y), notices the packet is a reply and
406: throws it away. The next time X's Internet module tries to send
407: a packet to Y on the Ethernet, the translation will succeed, and
408: the packet will (hopefully) arrive. If Y's Internet module then
409: wants to talk to X, this will also succeed since Y has remembered
410: the information from X's request for Address Resolution.
411:
412: Related issue:
413: ---------------
414:
415: It may be desirable to have table aging and/or timeouts. The
416: implementation of these is outside the scope of this protocol.
417: Here is a more detailed description (thanks to MOON@SCRC@MIT-MC).
418:
419: If a host moves, any connections initiated by that host will
420: work, assuming its own address resolution table is cleared when
421: it moves. However, connections initiated to it by other hosts
422: will have no particular reason to know to discard their old
423: address. However, 48.bit Ethernet addresses are supposed to be
424: unique and fixed for all time, so they shouldn't change. A host
425: could "move" if a host name (and address in some other protocol)
426: were reassigned to a different physical piece of hardware. Also,
427: as we know from experience, there is always the danger of
428: incorrect routing information accidentally getting transmitted
429: through hardware or software error; it should not be allowed to
430: persist forever. Perhaps failure to initiate a connection should
431: inform the Address Resolution module to delete the information on
432: the basis that the host is not reachable, possibly because it is
433: down or the old translation is no longer valid. Or perhaps
434: receiving of a packet from a host should reset a timeout in the
435: address resolution entry used for transmitting packets to that
436: host; if no packets are received from a host for a suitable
437: length of time, the address resolution entry is forgotten. This
438: may cause extra overhead to scan the table for each incoming
439: packet. Perhaps a hash or index can make this faster.
440:
441: The suggested algorithm for receiving address resolution packets
442: tries to lessen the time it takes for recovery if a host does
443: move. Recall that if the <protocol type, sender protocol
444: address> is already in the translation table, then the sender
445: hardware address supersedes the existing entry. Therefore, on a
446: perfect Ethernet where a broadcast REQUEST reaches all stations
447: on the cable, each station will be get the new hardware address.
448:
449: Another alternative is to have a daemon perform the timeouts.
450: After a suitable time, the daemon considers removing an entry.
451: It first sends (with a small number of retransmissions if needed)
452: an address resolution packet with opcode REQUEST directly to the
453: Ethernet address in the table. If a REPLY is not seen in a short
454: amount of time, the entry is deleted. The request is sent
455: directly so as not to bother every station on the Ethernet. Just
456: forgetting entries will likely cause useful information to be
457: forgotten, which must be regained.
458:
459: Since hosts don't transmit information about anyone other than
460: themselves, rebooting a host will cause its address mapping table
461: to be up to date. Bad information can't persist forever by being
462: passed around from machine to machine; the only bad information
463: that can exist is in a machine that doesn't know that some other
464: machine has changed its 48.bit Ethernet address. Perhaps
465: manually resetting (or clearing) the address mapping table will
466: suffice.
467:
468: This issue clearly needs more thought if it is believed to be
469: important. It is caused by any address resolution-like protocol.
470:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>