7 Network Working Group W. Wimer
8 Request for Comments: 1542 Carnegie Mellon University
9 Updates: 951 October 1993
11 Category: Standards Track
14 Clarifications and Extensions for the Bootstrap Protocol
18 This RFC specifies an Internet standards track protocol for the
19 Internet community, and requests discussion and suggestions for
20 improvements. Please refer to the current edition of the "Internet
21 Official Protocol Standards" for the standardization state and status
22 of this protocol. Distribution of this memo is unlimited.
26 Some aspects of the BOOTP protocol were rather loosely defined in its
27 original specification. In particular, only a general description
28 was provided for the behavior of "BOOTP relay agents" (originally
29 called BOOTP forwarding agents"). The client behavior description
30 also suffered in certain ways. This memo attempts to clarify and
31 strengthen the specification in these areas. Due to some errors
32 introduced into RFC 1532 in the editorial process, this memo is
35 In addition, new issues have arisen since the original specification
36 was written. This memo also attempts to address some of these.
40 1. Introduction................................................. 2
41 1.1 Requirements................................................ 3
42 1.2 Terminology................................................. 3
43 1.3 Data Transmission Order..................................... 4
44 2. General Issues............................................... 5
45 2.1 General BOOTP Processing.................................... 5
46 2.2 Definition of the 'flags' Field............................. 5
47 2.3 Bit Ordering of Hardware Addresses.......................... 7
48 2.4 BOOTP Over IEEE 802.5 Token Ring Networks................... 8
49 3. BOOTP Client Behavior........................................ 9
50 3.1 Client use of the 'flags' field............................. 9
51 3.1.1 The BROADCAST flag........................................ 9
52 3.1.2 The remainder of the 'flags' field........................ 9
53 3.2 Definition of the 'secs' field.............................. 10
54 3.3 Use of the 'ciaddr' and 'yiaddr' fields..................... 10
60 RFC 1542 Clarifications and Extensions for BOOTP October 1993
63 3.4 Interpretation of the 'giaddr' field........................ 11
64 3.5 Vendor information "magic cookie"........................... 12
65 4. BOOTP Relay Agents........................................... 13
66 4.1 General BOOTP Processing for Relay Agents................... 14
67 4.1.1 BOOTREQUEST Messages...................................... 14
68 4.1.2 BOOTREPLY Messages........................................ 17
69 5. BOOTP Server Behavior........................................ 18
70 5.1 Reception of BOOTREQUEST Messages........................... 18
71 5.2 Use of the 'secs' field..................................... 19
72 5.3 Use of the 'ciaddr' field................................... 19
73 5.4 Strategy for Delivery of BOOTREPLY Messages................. 20
74 Acknowledgements................................................ 21
75 References...................................................... 22
76 Security Considerations......................................... 23
77 Author's Address................................................ 23
81 The Bootstrap Protocol (BOOTP) is a UDP/IP-based protocol which
82 allows a booting host to configure itself dynamically and without
83 user supervision. BOOTP provides a means to notify a host of its
84 assigned IP address, the IP address of a boot server host, and the
85 name of a file to be loaded into memory and executed [1]. Other
86 configuration information such as the local subnet mask, the local
87 time offset, the addresses of default routers, and the addresses of
88 various Internet servers can also be communicated to a host using
91 Unfortunately, the original BOOTP specification [1] left some issues
92 of the protocol open to question. The exact behavior of BOOTP relay
93 agents formerly called "BOOTP forwarding agents") was not clearly
94 specified. Some parts of the overall protocol specification actually
95 conflict, while other parts have been subject to misinterpretation,
96 indicating that clarification is needed. This memo addresses these
99 Since the introduction of BOOTP, the IEEE 802.5 Token Ring Network
100 has been developed which presents a unique problem for BOOTP's
101 particular message-transfer paradigm. This memo also suggests a
102 solution for this problem.
104 NOTE: Unless otherwise specified in this document or a later
105 document, the information and requirements specified througout this
106 document also apply to extensions to BOOTP such as the Dynamic Host
107 Configuration Protocol (DHCP) [3].
116 RFC 1542 Clarifications and Extensions for BOOTP October 1993
121 In this memo, the words that are used to define the significance of
122 particular requirements are capitalized. These words are:
126 This word or the adjective "REQUIRED" means that the item
127 is an absolute requirement of the specification.
131 This phrase means that the item is an absolute prohibition
132 of the specification.
136 This word or the adjective "RECOMMENDED" means that there
137 may exist valid reasons in particular circumstances to
138 ignore this item, but the full implications should be
139 understood and the case carefully weighed before choosing a
144 This phrase means that there may exist valid reasons in
145 particular circumstances when the listed behavior is
146 acceptable or even useful, but the full implications should
147 be understood and the case carefully weighed before
148 implementing any behavior described with this label.
152 This word or the adjective "OPTIONAL" means that this item
153 is truly optional. One vendor may choose to include the
154 item because a particular marketplace requires it or
155 because it enhances the product, for example; another
156 vendor may omit the same item.
160 This memo uses the following terms:
164 A BOOTREQUEST message is a BOOTP message sent from a BOOTP
165 client to a BOOTP server, requesting configuration information.
172 RFC 1542 Clarifications and Extensions for BOOTP October 1993
177 A BOOTREPLY message is a BOOTP message sent from a BOOTP server
178 to a BOOTP client, providing configuration information.
182 This memo specifies several cases where a BOOTP entity is to
183 "silently discard" a received BOOTP message. This means that
184 the entity is to discard the message without further
185 processing, and that the entity will not send any ICMP error
186 message as a result. However, for diagnosis of problems, the
187 entity SHOULD provide the capability of logging the error,
188 including the contents of the silently-discarded message, and
189 SHOULD record the event in a statistics counter.
191 1.3 Data Transmission Order
193 The order of transmission of the header and data described in this
194 document is resolved to the octet level. Whenever a diagram shows a
195 group of octets, the order of transmission of those octets is the
196 normal order in which they are read in English. For example, in the
197 following diagram, the octets are transmitted in the order they are
201 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
202 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
204 +-------------------------------+
206 +-------------------------------+
208 +-------------------------------+
210 Whenever an octet represents a numeric quantity, the leftmost bit in
211 the diagram is the high order or most significant bit. That is, the
212 bit labeled 0 is the most significant bit. For example, the
213 following diagram represents the value 170 (decimal).
220 Similarly, whenever a multi-octet field represents a numeric quantity
221 the leftmost bit of the whole field is the most significant bit.
222 When a multi-octet quantity is transmitted the most significant octet
228 RFC 1542 Clarifications and Extensions for BOOTP October 1993
231 is transmitted first.
235 This section covers issues of general relevance to all BOOTP entities
236 (clients, servers, and relay agents).
238 2.1 General BOOTP Processing
240 The following consistency checks SHOULD be performed on BOOTP
243 o The IP Total Length and UDP Length must be large enough to
244 contain the minimal BOOTP header of 300 octets (in the UDP
245 data field) specified in [1].
247 NOTE: Future extensions to the BOOTP protocol may increase the size
248 of BOOTP messages. Therefore, BOOTP messages which, according to the
249 IP Total Length and UDP Length fields, are larger than the minimum
250 size specified by [1] MUST also be accepted.
252 o The 'op' (opcode) field of the message must contain either the
253 code for a BOOTREQUEST (1) or the code for a BOOTREPLY (2).
255 BOOTP messages not meeting these consistency checks MUST be silently
258 2.2 Definition of the 'flags' Field
260 The standard BOOTP message format defined in [1] includes a two-octet
261 field located between the 'secs' field and the 'ciaddr' field. This
262 field is merely designated as "unused" and its contents left
263 unspecified, although Section 7.1 of [1] does offer the following
266 "Before setting up the packet for the first time, it is a good
267 idea to clear the entire packet buffer to all zeros; this will
268 place all fields in their default state."
270 This memo hereby designates this two-octet field as the 'flags'
273 This memo hereby defines the most significant bit of the 'flags'
274 field as the BROADCAST (B) flag. The semantics of this flag are
275 discussed in Sections 3.1.1 and 4.1.2 of this memo.
277 The remaining bits of the 'flags' field are reserved for future
278 use. They MUST be set to zero by clients and ignored by servers
284 RFC 1542 Clarifications and Extensions for BOOTP October 1993
289 The 'flags' field, then, appears as follows:
292 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
293 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
295 +-+-----------------------------+
299 B BROADCAST flag (discussed in Sections 3.1.1 and 4.1.2)
301 MBZ MUST BE ZERO (reserved for future use)
303 The format of a BOOTP message is shown below. The numbers in
304 parentheses indicate the size of each field in octets.
340 RFC 1542 Clarifications and Extensions for BOOTP October 1993
344 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
345 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
346 | op (1) | htype (1) | hlen (1) | hops (1) |
347 +---------------+---------------+---------------+---------------+
349 +-------------------------------+-------------------------------+
350 | secs (2) | flags (2) |
351 +-------------------------------+-------------------------------+
353 +---------------------------------------------------------------+
355 +---------------------------------------------------------------+
357 +---------------------------------------------------------------+
359 +---------------------------------------------------------------+
364 +---------------------------------------------------------------+
367 +---------------------------------------------------------------+
370 +---------------------------------------------------------------+
373 +---------------------------------------------------------------+
375 2.3 Bit Ordering of Hardware Addresses
377 The bit ordering used for link-level hardware addresses in the
378 'chaddr' field SHOULD be the same as the ordering used for the ARP
379 protocol [4] on the client's link-level network (assuming ARP is
380 defined for that network).
382 The 'chaddr' field MUST be preserved as it was specified by the BOOTP
383 client. A relay agent MUST NOT reverse the bit ordering of the
384 'chaddr' field even if it happens to be relaying a BOOTREQUEST
385 between two networks which use different bit orderings.
389 One of the primary reasons the 'chaddr' field exists is to
390 enable BOOTP servers and relay agents to communicate directly
396 RFC 1542 Clarifications and Extensions for BOOTP October 1993
399 with clients without the use of broadcasts. In practice, the
400 contents of the 'chaddr' field is often used to create an ARP-
401 cache entry in exactly the same way the normal ARP protocol
402 would have. Clearly, interoperability can only be achieved if
403 a consistent interpretation of the 'chaddr' field is used.
405 As a practical example, this means that the bit ordering used
406 for the 'chaddr' field by a BOOTP client on an IEEE 802.5 Token
407 Ring network is the opposite of the bit ordering used by a
408 BOOTP client on a DIX ethernet network.
410 2.4 BOOTP Over IEEE 802.5 Token Ring Networks
412 Special consideration of the client/server and client/relay agent
413 interactions must be given to IEEE 802.5 networks because of non-
414 transparent bridging.
416 The client SHOULD send its broadcast BOOTREQUEST with an All Routes
417 Explorer RIF. This will enable servers/relay agents to cache the
418 return route if they choose to do so. For those server/relay agents
419 which cannot cache the return route (because they are stateless, for
420 example), the BOOTREPLY message SHOULD be sent to the client's
421 hardware address, as taken from the BOOTP message, with a Spanning
422 Tree Rooted RIF. The actual bridge route will be recorded by the
423 client and server/relay agent by normal ARP processing code.
427 In the simplest case, an unbridged, single ring network, the
428 broadcast behavior of the BOOTP protocol is identical to that
429 of Ethernet networks. However, a BOOTP client cannot know, a
430 priori, that an 802.5 network is not bridged. In fact, the
431 likelihood is that the server, or relay agent, will not know
434 Of the four possible scenerios, only two are interesting: where
435 the assumption is that the 802.5 network is not bridged and it
436 is, and the assumption that the network is bridged and it is
437 not. In the former case, the Routing Information Field (RIF)
438 will not be used; therefore, if the server/relay agent are on
439 another segment of the ring, the client cannot reach it. In
440 the latter case, the RIF field will be used, resulting in a few
441 extraneous bytes on the ring. It is obvious that an almost
442 immeasurable inefficiency is to be preferred over a complete
443 failure to communicate.
452 RFC 1542 Clarifications and Extensions for BOOTP October 1993
455 Given that the assumption is that RIF fields will be needed, it
456 is necesary to determine the optimum method for the client to
457 reach the server/relay agent, and the optimum method for the
458 response to be returned.
460 3. BOOTP Client Behavior
462 This section clarifies various issues regarding BOOTP client
465 3.1 Client use of the 'flags' field
467 3.1.1 The BROADCAST flag
469 Normally, BOOTP servers and relay agents attempt to deliver BOOTREPLY
470 messages directly to a client using unicast delivery. The IP
471 destination address (in the IP header) is set to the BOOTP 'yiaddr'
472 address and the link-layer destination address is set to the BOOTP
473 'chaddr' address. Unfortunately, some client implementations are
474 unable to receive such unicast IP datagrams until they know their own
475 IP address (thus we have a "chicken and egg" issue). Often, however,
476 they can receive broadcast IP datagrams (those with a valid IP
477 broadcast address as the IP destination and the link-layer broadcast
478 address as the link-layer destination).
480 If a client falls into this category, it SHOULD set (to 1) the
481 newly-defined BROADCAST flag in the 'flags' field of BOOTREPLY
482 messages it generates. This will provide a hint to BOOTP servers and
483 relay agents that they should attempt to broadcast their BOOTREPLY
484 messages to the client.
486 If a client does not have this limitation (i.e., it is perfectly able
487 to receive unicast BOOTREPLY messages), it SHOULD NOT set the
488 BROADCAST flag (i.e., it SHOULD clear the BROADCAST flag to 0).
492 This addition to the protocol is a workaround for old host
493 implementations. Such implementations SHOULD be modified so
494 that they may receive unicast BOOTREPLY messages, thus making
495 use of this workaround unnecessary. In general, the use of
496 this mechanism is discouraged.
498 3.1.2 The remainder of the 'flags' field
500 The remaining bits of the 'flags' field are reserved for future use.
501 A client MUST set these bits to zero in all BOOTREQUEST messages it
502 generates. A client MUST ignore these bits in all BOOTREPLY messages
508 RFC 1542 Clarifications and Extensions for BOOTP October 1993
513 3.2 Definition of the 'secs' field
515 The 'secs' field of a BOOTREQUEST message SHOULD represent the
516 elapsed time, in seconds, since the client sent its first BOOTREQUEST
517 message. Note that this implies that the 'secs' field of the first
518 BOOTREQUEST message SHOULD be set to zero.
520 Clients SHOULD NOT set the 'secs' field to a value which is constant
521 for all BOOTREQUEST messages.
525 The original definition of the 'secs' field was vague. It was
526 not clear whether it represented the time since the first
527 BOOTREQUEST message was sent or some other time period such as
528 the time since the client machine was powered-up. This has
529 limited its usefulness as a policy control mechanism for BOOTP
530 servers and relay agents. Furthermore, certain client
531 implementations have been known to simply set this field to a
532 constant value or use incorrect byte-ordering. Incorrect
533 byte-ordering usually makes it appear as if a client has been
534 waiting much longer than it really has, so a relay agent will
535 relay the BOOTREQUEST sooner than desired (usually
536 immediately). These implementation errors have further
537 undermined the usefulness of the 'secs' field. These incorrect
538 implementations SHOULD be corrected.
540 3.3 Use of the 'ciaddr' and 'yiaddr' fields
542 If a BOOTP client does not know what IP address it should be using,
543 the client SHOULD set the 'ciaddr' field to 0.0.0.0. If the client
544 has the ability to remember the last IP address it was assigned, or
545 it has been preconfigured with an IP address via some alternate
546 mechanism, the client MAY fill the 'ciaddr' field with that IP
547 address. If the client does place a non-zero IP address in the
548 'ciaddr' field, the client MUST be prepared to accept incoming
549 unicast datagrams addressed to that IP address and also answer ARP
550 requests for that IP address (if ARP is used on that network).
552 The BOOTP server is free to assign a different IP address (in the
553 'yiaddr' field) than the client expressed in 'ciaddr'. The client
554 SHOULD adopt the IP address specified in 'yiaddr' and begin using it
564 RFC 1542 Clarifications and Extensions for BOOTP October 1993
569 There are various interpretations about the purpose of the
570 'ciaddr' field and, unfortunately, no agreement on a single
571 correct interpretation. One interpretation is that if a client
572 is willing to accept whatever IP address the BOOTP server
573 assigns to it, the client should always place 0.0.0.0 in the
574 'ciaddr' field, regardless of whether it knows its previously-
575 assigned address. Conversely, if the client wishes to assert
576 that it must have a particular IP address (e.g., the IP address
577 was hand-configured by the host administrator and BOOTP is only
578 being used to obtain a boot file and/or information from the
579 'vend' field), the client will then fill the 'ciaddr' field
580 with the desired IP address and ignore the IP address assigned
581 by the BOOTP server as indicated in the 'yiaddr' field. An
582 alternate interpretation holds that the client always fills the
583 'ciaddr' field with its most recently-assigned IP address (if
584 known) even if that address may be incorrect. Such a client
585 will still accept and use the address assigned by the BOOTP
586 server as indicated in the 'yiaddr' field. The motivation for
587 this interpretation is to aid the server in identifying the
588 client and/or in delivering the BOOTREPLY to the client. Yet a
589 third (mis)interpretation allows the client to use 'ciaddr' to
590 express the client's desired IP address, even if the client has
591 never used that address before or is not currently using that
594 The last interpretation is incorrect as it may prevent the
595 BOOTREPLY from reaching the client. The server will usually
596 unicast the reply to the address given in 'ciaddr' but the
597 client may not be listening on that address yet, or the client
598 may be connected to an incorrect subnet such that normal IP
599 routing (correctly) routes the reply to a different subnet.
601 The second interpretation also suffers from the "incorrect
604 The first interpretation seems to be the safest and most likely
605 to promote interoperability.
607 3.4 Interpretation of the 'giaddr' field
609 The 'giaddr' field is rather poorly named. It exists to facilitate
610 the transfer of BOOTREQUEST messages from a client, through BOOTP
611 relay agents, to servers on different networks than the client.
612 Similarly, it facilitates the delivery of BOOTREPLY messages from the
613 servers, through BOOTP relay agents, back to the client. In no case
614 does it represent a general IP router to be used by the client. A
620 RFC 1542 Clarifications and Extensions for BOOTP October 1993
623 BOOTP client MUST set the 'giaddr' field to zero (0.0.0.0) in all
624 BOOTREQUEST messages it generates.
626 A BOOTP client MUST NOT interpret the 'giaddr' field of a BOOTREPLY
627 message to be the IP address of an IP router. A BOOTP client SHOULD
628 completely ignore the contents of the 'giaddr' field in BOOTREPLY
633 The semantics of the 'giaddr' field were poorly defined.
634 Section 7.5 of [1] states:
636 "If 'giaddr' (gateway address) is nonzero, then the packets
637 should be forwarded there first, in order to get to the
640 In that sentence, "get to" refers to communication from the client to
641 the server subsequent to the BOOTP exchange, such as a TFTP session.
642 Unfortunately, the 'giaddr' field may contain the address of a BOOTP
643 relay agent that is not itself an IP router (according to [1],
644 Section 8, fifth paragraph), in which case, it will be useless as a
645 first-hop for TFTP packets sent to the server (since, by definition,
646 non-routers don't forward datagrams at the IP layer).
648 Although now prohibited by Section 4.1.1 of this memo, the 'giaddr'
649 field might contain a broadcast address according to Section 8, sixth
650 paragraph of [1]. Not only would such an address be useless as a
651 router address, it might also cause the client to ARP for the
652 broadcast address (since, if the client didn't receive a subnet mask
653 in the BOOTREPLY message, it would be unable to recognize a subnet
654 broadcast address). This is clearly undesirable.
656 To reach a non-local server, clients can obtain a first-hop router
657 address from the "Gateway" subfield of the "Vendor Information
658 Extensions" [2] (if present), or via the ICMP router discovery
659 protocol [5] or other similar mechanism.
661 3.5 Vendor information "magic cookie"
663 It is RECOMMENDED that a BOOTP client always fill the first four
664 octets of the 'vend' (vendor information) field of a BOOTREQUEST with
665 a four-octet identifier called a "magic cookie." A BOOTP client
666 SHOULD do this even if it has no special information to communicate
667 to the BOOTP server using the 'vend' field. This aids the BOOTP
668 server in determining what vendor information format it should use in
669 its BOOTREPLY messages.
676 RFC 1542 Clarifications and Extensions for BOOTP October 1993
679 If a special vendor-specific magic cookie is not being used, a BOOTP
680 client SHOULD use the dotted decimal value 99.130.83.99 as specified
681 in [2]. In this case, if the client has no information to
682 communicate to the server, the octet immediately following the magic
683 cookie SHOULD be set to the "End" tag (255) and the remaining octets
684 of the 'vend' field SHOULD be set to zero.
688 Sometimes different operating systems or networking packages
689 are run on the same machine at different times (or even at the
690 same time!). Since the hardware address placed in the 'chaddr'
691 field will likely be the same, BOOTREQUESTs from completely
692 different BOOTP clients on the same machine will likely be
693 difficult for a BOOTP server to differentiate. If the client
694 includes a magic cookie in its BOOTREQUESTs, the server will at
695 least know what format the client expects and can understand in
696 corresponding BOOTREPLY messages.
698 4. BOOTP Relay Agents
700 In many cases, BOOTP clients and their associated BOOTP
701 server(s) do not reside on the same IP network or subnet. In
702 such cases, some kind of third-party agent is required to
703 transfer BOOTP messages between clients and servers. Such an
704 agent was originally referred to as a "BOOTP forwarding agent."
705 However, in order to avoid confusion with the IP forwarding
706 function of an IP router, the name "BOOTP relay agent" is
707 hereby adopted instead.
711 A BOOTP relay agent performs a task which is distinct from an
712 IP router's normal IP forwarding function. While a router
713 normally switches IP datagrams between networks more-or-less
714 transparently, a BOOTP relay agent may more properly be thought
715 to receive BOOTP messages as a final destination and then
716 generate new BOOTP messages as a result. It is incorrect for a
717 relay agent implementation to simply forward a BOOTP message
718 "straight through like a regular packet."
720 This relay-agent functionality is most conveniently located in
721 the routers which interconnect the clients and servers, but may
722 alternatively be located in a host which is directly connected
723 to the client subnet.
725 Any Internet host or router which provides BOOTP relay-agent
726 capability MUST conform to the specifications in this memo.
732 RFC 1542 Clarifications and Extensions for BOOTP October 1993
735 4.1 General BOOTP Processing for Relay Agents
737 All locally delivered UDP messages whose UDP destination port number
738 is BOOTPS (67) are considered for special processing by the host or
739 router's logical BOOTP relay agent.
741 In the case of a host, locally delivered datagrams are simply all
742 datagrams normally received by that host, i.e., broadcast and
743 multicast datagrams as well as unicast datagrams addressed to IP
744 addresses of that host.
746 In the case of a router, locally delivered datagrams are broadcast
747 and multicast datagrams as well as unicast datagrams addressed to IP
748 addresses of that router. These are datagrams for which the router
749 should be considered an end destination as opposed to an intermediate
750 switching node. Thus a unicast datagram with an IP destination not
751 matching any of the router's IP addresses is not considered for
752 processing by the router's logical BOOTP relay agent.
754 Hosts and routers are usually required to silently discard incoming
755 datagrams containing illegal IP source addresses. This is generally
756 known as "Martian address filtering." One of these illegal addresses
757 is 0.0.0.0 (or actually anything on network 0). However, hosts or
758 routers which support a BOOTP relay agent MUST accept for local
759 delivery to the relay agent BOOTREQUEST messages whose IP source
760 address is 0.0.0.0. BOOTREQUEST messages from legal IP source
761 addresses MUST also be accepted.
763 A relay agent MUST silently discard any received UDP messages whose
764 UDP destination port number is BOOTPC (68).
768 There should be no need for a relay agent to process messages
769 addressed to the BOOTPC port. Careful reading of the original
770 BOOTP specification [1] will show this. Nevertheless, some
771 relay agent implementations incorrectly relay such messages.
773 The consistency checks specified in Section 2.1 SHOULD be performed
774 by the relay agent. BOOTP messages not meeting these consistency
775 checks MUST be silently discarded.
777 4.1.1 BOOTREQUEST Messages
779 Some configuration mechanism MUST exist to enable or disable the
780 relaying of BOOTREQUEST messages. Relaying MUST be disabled by
788 RFC 1542 Clarifications and Extensions for BOOTP October 1993
791 When the BOOTP relay agent receives a BOOTREQUEST message, it MAY use
792 the value of the 'secs' (seconds since client began booting) field of
793 the request as a factor in deciding whether to relay the request. If
794 such a policy mechanism is implemented, its threshold SHOULD be
799 To date, this feature of the BOOTP protocol has not necessarily
800 been shown to be useful. See Section 3.2 for a discussion.
802 The relay agent MUST silently discard BOOTREQUEST messages whose
803 'hops' field exceeds the value 16. A configuration option SHOULD be
804 provided to set this threshold to a smaller value if desired by the
805 network manager. The default setting for a configurable threshold
808 If the relay agent does decide to relay the request, it MUST examine
809 the 'giaddr' ("gateway" IP address) field. If this field is zero,
810 the relay agent MUST fill this field with the IP address of the
811 interface on which the request was received. If the interface has
812 more than one IP address logically associated with it, the relay
813 agent SHOULD choose one IP address associated with that interface and
814 use it consistently for all BOOTP messages it relays. If the
815 'giaddr' field contains some non-zero value, the 'giaddr' field MUST
816 NOT be modified. The relay agent MUST NOT, under any circumstances,
817 fill the 'giaddr' field with a broadcast address as is suggested in
818 [1] (Section 8, sixth paragraph).
820 The value of the 'hops' field MUST be incremented.
822 All other BOOTP fields MUST be preserved intact.
824 At this point, the request is relayed to its new destination (or
825 destinations). This destination MUST be configurable. Further, this
826 destination configuration SHOULD be independent of the destination
827 configuration for any other so-called "broadcast forwarders" (e.g.,
828 for the UDP-based TFTP, DNS, Time, etc. protocols).
832 The network manager may wish the relaying destination to be an
833 IP unicast, multicast, broadcast, or some combination. A
834 configurable list of destination IP addresses provides good
835 flexibility. More flexible configuration schemes are
836 encouraged. For example, it may be desirable to send to the
837 limited broadcast address (255.255.255.255) on specific
838 physical interfaces. However, if the BOOTREQUEST message was
844 RFC 1542 Clarifications and Extensions for BOOTP October 1993
847 received as a broadcast, the relay agent MUST NOT rebroadcast
848 the BOOTREQUEST on the physical interface from whence it came.
850 A relay agent MUST use the same destination (or set of
851 destinations) for all BOOTREQUEST messages it relays from a
856 At least one known relay agent implementation uses a round-
857 robin scheme to provide load balancing across multiple BOOTP
858 servers. Each time it receives a new BOOTREQUEST message, it
859 relays the message to the next BOOTP server in a list of
860 servers. Thus, with this relay agent, multiple consecutive
861 BOOTREQUEST messages from a given client will be delivered to
864 Unfortunately, this well-intentioned scheme reacts badly with
865 DHCP [3] and perhaps other variations of the BOOTP protocol
866 which depend on multiple exchanges of BOOTREQUEST and BOOTREPLY
867 messages between clients and servers. Therefore, all
868 BOOTREQUEST messages from a given client MUST be relayed to the
869 same destination (or set of destinations).
871 One way to meet this requirement while providing some load-
872 balancing benefit is to hash the client's link-layer address
873 (or some other reliable client-identifying information) and use
874 the resulting hash value to select the appropriate relay
875 destination (or set of destinations). The simplest solution,
876 of course, is to not use a load-balancing scheme and just relay
877 ALL received BOOTREQUEST messages to the same destination (or
878 set of destinations).
880 When transmitting the request to its next destination, the
881 relay agent may set the IP Time-To-Live field to either the
882 default value for new datagrams originated by the relay agent,
883 or to the TTL of the original BOOTREQUEST decremented by (at
888 As an extra precaution against BOOTREQUEST loops, it is
889 preferable to use the decremented TTL from the original
890 BOOTREQUEST. Unfortunately, this may be difficult to do in
891 some implementations.
893 If the BOOTREQUEST has a UDP checksum (i.e., the UDP checksum
894 is non-zero), the checksum must be recalculated before
900 RFC 1542 Clarifications and Extensions for BOOTP October 1993
903 transmitting the request.
905 4.1.2 BOOTREPLY Messages
907 BOOTP relay agents relay BOOTREPLY messages only to BOOTP clients.
908 It is the responsibility of BOOTP servers to send BOOTREPLY messages
909 directly to the relay agent identified in the 'giaddr' field.
910 Therefore, a relay agent may assume that all BOOTREPLY messages it
911 receives are intended for BOOTP clients on its directly-connected
914 When a relay agent receives a BOOTREPLY message, it should examine
915 the BOOTP 'giaddr', 'yiaddr', 'chaddr', 'htype', and 'hlen' fields.
916 These fields should provide adequate information for the relay agent
917 to deliver the BOOTREPLY message to the client.
919 The 'giaddr' field can be used to identify the logical interface from
920 which the reply must be sent (i.e., the host or router interface
921 connected to the same network as the BOOTP client). If the content
922 of the 'giaddr' field does not match one of the relay agent's
923 directly-connected logical interfaces, the BOOTREPLY messsage MUST be
926 The 'htype', 'hlen', and 'chaddr' fields supply the link-layer
927 hardware type, hardware address length, and hardware address of the
928 client as defined in the ARP protocol [4] and the Assigned Numbers
929 document [6]. The 'yiaddr' field is the IP address of the client, as
930 assigned by the BOOTP server.
932 The relay agent SHOULD examine the newly-defined BROADCAST flag (see
933 Sections 2.2 and 3.1.1 for more information). If this flag is set to
934 1, the reply SHOULD be sent as an IP broadcast using the IP limited
935 broadcast address 255.255.255.255 as the IP destination address and
936 the link-layer broadcast address as the link-layer destination
937 address. If the BROADCAST flag is cleared (0), the reply SHOULD be
938 sent as an IP unicast to the IP address specified by the 'yiaddr'
939 field and the link-layer address specified in the 'chaddr' field. If
940 unicasting is not possible, the reply MAY be sent as a broadcast, in
941 which case it SHOULD be sent to the link-layer broadcast address
942 using the IP limited broadcast address 255.255.255.255 as the IP
947 The addition of the BROADCAST flag to the protocol is a
948 workaround to help promote interoperability with certain client
956 RFC 1542 Clarifications and Extensions for BOOTP October 1993
959 Note that since the 'flags' field was previously defined in [1]
960 simply as an "unused" field, it is possible that old client or
961 server implementations may accidentally and unknowingly set the
962 new BROADCAST flag. It is actually expected that such
963 implementations will be rare (most implementations seem to
964 zero-out this field), but interactions with such
965 implementations must nevertheless be considered. If an old
966 client or server does set the BROADCAST flag to 1 incorrectly,
967 conforming relay agents will generate broadcast BOOTREPLY
968 messages to the corresponding client. The BOOTREPLY messages
969 should still properly reach the client, at the cost of one
970 (otherwise unnecessary) additional broadcast. This, however,
971 is no worse than a server or relay agent which always
972 broadcasts its BOOTREPLY messages.
974 Older client or server implementations which accidentally set
975 the BROADCAST flag SHOULD be corrected to properly comply with
976 this newer specification.
978 All BOOTP fields MUST be preserved intact. The relay agent
979 MUST NOT modify any BOOTP field of the BOOTREPLY message when
980 relaying it to the client.
982 The reply MUST have its UDP destination port set to BOOTPC
985 If the BOOTREPLY has a UDP checksum (i.e., the UDP checksum is
986 non-zero), the checksum must be recalculated before
987 transmitting the reply.
989 5. BOOTP Server Behavior
991 This section provides clarifications on the behavior of BOOTP
994 5.1 Reception of BOOTREQUEST Messages
996 All received UDP messages whose UDP destination port number is BOOTPS
997 (67) are considered for processing by the BOOTP server.
999 Hosts and routers are usually required to silently discard incoming
1000 datagrams containing illegal IP source addresses. This is generally
1001 known as "Martian address filtering." One of these illegal addresses
1002 is 0.0.0.0 (or actually anything on network 0). However, hosts or
1003 routers which support a BOOTP server MUST accept for local delivery
1004 to the server BOOTREQUEST messages whose IP source address is
1005 0.0.0.0. BOOTREQUEST messages from legal IP source addresses MUST
1012 RFC 1542 Clarifications and Extensions for BOOTP October 1993
1015 A BOOTP server MUST silently discard any received UDP messages whose
1016 UDP destination port number is BOOTPC (68).
1020 There should be no need for a BOOTP server to process messages
1021 addressed to the BOOTPC port. Careful reading of the original
1022 BOOTP specification [1] will show this.
1024 The consistency checks specified in Section 2.1 SHOULD be
1025 performed by the BOOTP server. BOOTP messages not meeting
1026 these consistency checks MUST be silently discarded.
1028 5.2 Use of the 'secs' field
1030 When the BOOTP server receives a BOOTREQUEST message, it MAY use the
1031 value of the 'secs' (seconds since client began booting) field of the
1032 request as a factor in deciding whether and/or how to reply to the
1037 To date, this feature of the BOOTP protocol has not necessarily
1038 been shown to be useful. See Section 3.2 for a discussion.
1040 5.3 Use of the 'ciaddr' field
1042 There have been various client interpretations of the 'ciaddr' field
1043 for which Section 3.3 should be consulted. A BOOTP server SHOULD be
1044 prepared to deal with these varying interpretations. In general, the
1045 'ciaddr' field SHOULD NOT be trusted as a sole key in identifying a
1046 client; the contents of the 'ciaddr', 'chaddr', 'htype', and 'hlen'
1047 fields, and probably other information (perhaps in the 'file' and
1048 'vend' fields) SHOULD all be considered together in deciding how to
1049 respond to a given client.
1051 BOOTP servers SHOULD preserve the contents of the 'ciaddr' field in
1052 BOOTREPLY messages; the contents of 'ciaddr' in a BOOTREPLY message
1053 SHOULD exactly match the contents of 'ciaddr' in the corresponding
1054 BOOTREQUEST message.
1058 It has been suggested that a client may wish to use the
1059 contents of 'ciaddr' to further verify that a particular
1060 BOOTREPLY message was indeed intended for it.
1068 RFC 1542 Clarifications and Extensions for BOOTP October 1993
1071 5.4 Strategy for Delivery of BOOTREPLY Messages
1073 Once the BOOTP server has created an appropriate BOOTREPLY message,
1074 that BOOTREPLY message must be properly delivered to the client.
1076 The server SHOULD first check the 'ciaddr' field. If the 'ciaddr'
1077 field is non-zero, the BOOTREPLY message SHOULD be sent as an IP
1078 unicast to the IP address identified in the 'ciaddr' field. The UDP
1079 destination port MUST be set to BOOTPC (68). However, the server
1080 MUST be aware of the problems identified in Section 3.3. The server
1081 MAY choose to ignore the 'ciaddr' field and act as if the 'ciaddr'
1082 field contains 0.0.0.0 (and thus continue with the rest of the
1083 delivery algorithm below).
1085 The server SHOULD next check the 'giaddr' field. If this field is
1086 non-zero, the server SHOULD send the BOOTREPLY as an IP unicast to
1087 the IP address identified in the 'giaddr' field. The UDP destination
1088 port MUST be set to BOOTPS (67). This action will deliver the
1089 BOOTREPLY message directly to the BOOTP relay agent closest to the
1090 client; the relay agent will then perform the final delivery to the
1091 client. If the BOOTP server has prior knowledge that a particular
1092 client cannot receive unicast BOOTREPLY messages (e.g., the network
1093 manager has explicitly configured the server with such knowledge),
1094 the server MAY set the newly-defined BROADCAST flag to indicate that
1095 relay agents SHOULD broadcast the BOOTREPLY message to the client.
1096 Otherwise, the server MUST preserve the state of the BROADCAST flag
1097 so that the relay agent can correctly act upon it.
1099 If the 'giaddr' field is set to 0.0.0.0, then the client resides on
1100 one of the same networks as the BOOTP server. The server SHOULD
1101 examine the newly-defined BROADCAST flag (see Sections 2.2, 3.1.1 and
1102 4.1.2 for more information). If this flag is set to 1 or the server
1103 has prior knowledge that the client is unable to receive unicast
1104 BOOTREPLY messages, the reply SHOULD be sent as an IP broadcast using
1105 the IP limited broadcast address 255.255.255.255 as the IP
1106 destination address and the link-layer broadcast address as the
1107 link-layer destination address. If the BROADCAST flag is cleared
1108 (0), the reply SHOULD be sent as an IP unicast to the IP address
1109 specified by the 'yiaddr' field and the link-layer address specified
1110 in the 'chaddr' field. If unicasting is not possible, the reply MAY
1111 be sent as a broadcast in which case it SHOULD be sent to the link-
1112 layer broadcast address using the IP limited broadcast address
1113 255.255.255.255 as the IP destination address. In any case, the UDP
1114 destination port MUST be set to BOOTPC (68).
1124 RFC 1542 Clarifications and Extensions for BOOTP October 1993
1129 The addition of the BROADCAST flag to the protocol is a
1130 workaround to help promote interoperability with certain client
1133 The following table summarizes server delivery decisions for
1134 BOOTREPLY messages based upon information in BOOTREQUEST
1137 BOOTREQUEST fields BOOTREPLY values for UDP, IP, link-layer
1138 +-----------------------+-----------------------------------------+
1139 | 'ciaddr' 'giaddr' B | UDP dest IP destination link dest |
1140 +-----------------------+-----------------------------------------+
1141 | non-zero X X | BOOTPC (68) 'ciaddr' normal |
1142 | 0.0.0.0 non-zero X | BOOTPS (67) 'giaddr' normal |
1143 | 0.0.0.0 0.0.0.0 0 | BOOTPC (68) 'yiaddr' 'chaddr' |
1144 | 0.0.0.0 0.0.0.0 1 | BOOTPC (68) 255.255.255.255 broadcast |
1145 +-----------------------+-----------------------------------------+
1151 normal = determine from the given IP destination using normal
1152 IP routing mechanisms and/or ARP as for any other
1157 The author would like to thank Gary Malkin for his contribution of
1158 the "BOOTP over IEEE 802.5 Token Ring Networks" section, and Steve
1159 Deering for his observations on the problems associated with the
1162 Ralph Droms and the many members of the IETF Dynamic Host
1163 Configuration and Router Requirements working groups provided ideas
1164 for this memo as well as encouragement to write it.
1166 Philip Almquist and David Piscitello offered many helpful suggestions
1167 for improving the clarity, accuracy, and organization of this memo.
1168 These contributions are graciously acknowledged.
1180 RFC 1542 Clarifications and Extensions for BOOTP October 1993
1185 [1] Croft, B., and J. Gilmore, "Bootstrap Protocol (BOOTP)", RFC 951,
1186 Stanford University and Sun Microsystems, September 1985.
1188 [2] Reynolds, J., "BOOTP Vendor Information Extensions", RFC 1497,
1189 USC/Information Sciences Institute, August 1993. This RFC is
1190 occasionally reissued with a new number. Please be sure to
1191 consult the latest version.
1193 [3] Droms, R., "Dynamic Host Configuration Protocol", RFC 1541,
1194 Bucknell University, October 1993.
1196 [4] Plummer, D., "An Ethernet Address Resolution Protocol", STD 37,
1197 RFC 826, MIT, November 1982.
1199 [5] Deering, S., "ICMP Router Discovery Messages", RFC 1256, Xerox
1200 PARC, September 1991.
1202 [6] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1340,
1203 USC/Information Sciences Institute, July, 1992. This RFC is
1204 periodically reissued with a new number. Please be sure to
1205 consult the latest version.
1236 RFC 1542 Clarifications and Extensions for BOOTP October 1993
1239 Security Considerations
1241 There are many factors which make BOOTP in its current form quite
1242 insecure. BOOTP is built directly upon UDP and IP which are as yet
1243 inherently insecure themselves. Furthermore, BOOTP is generally
1244 intended to make maintenance of remote and/or diskless hosts easier.
1245 While perhaps not impossible, configuring such hosts with passwords or
1246 keys may be difficult and inconvenient. This makes it difficult to
1247 provide any form of reasonable authentication between servers and
1250 Unauthorized BOOTP servers may easily be set up. Such servers can
1251 then send false and potentially disruptive information to clients such
1252 as incorrect or duplicate IP addresses, incorrect routing information
1253 (including spoof routers, etc.), incorrect domain nameserver addresses
1254 (such as spoof nameservers), and so on. Clearly, once this "seed"
1255 mis-information is planted, an attacker can further compromise the
1258 Unauthorized BOOTP relay agents may present some of the same problems
1259 as unauthorized BOOTP servers.
1261 Malicious BOOTP clients could masquerade as legitimate clients and
1262 retrieve information intended for those legitimate clients. Where
1263 dynamic allocation of resources is used, a malicious client could
1264 claim all resources for itself, thereby denying resources to
1271 Carnegie Mellon University
1273 Pittsburgh, PA 15213-3890
1275 Phone: (412) 268-6252
1276 EMail: Walter.Wimer@CMU.EDU