home *** CD-ROM | disk | FTP | other *** search
/ Hackers Toolkit 2.0 / Hackers_Toolkit_v2.0.iso / HTML / archive / Texts / Rfc / RFC1542.TXT < prev    next >
Encoding:
Text File  |  1999-11-04  |  51.7 KB  |  1,311 lines

  1. Network Working Group                                           W. Wimer
  2. Request for Comments: 1542                    Carnegie Mellon University
  3. Updates: 951                                                October 1993
  4. Obsoletes: 1532
  5. Category: Standards Track
  6.  
  7.  
  8.         Clarifications and Extensions for the Bootstrap Protocol
  9.  
  10. Status of this Memo
  11.  
  12.    This RFC specifies an Internet standards track protocol for the
  13.    Internet community, and requests discussion and suggestions for
  14.    improvements.  Please refer to the current edition of the "Internet
  15.    Official Protocol Standards" for the standardization state and status
  16.    of this protocol.  Distribution of this memo is unlimited.
  17.  
  18. Abstract
  19.  
  20.    Some aspects of the BOOTP protocol were rather loosely defined in its
  21.    original specification.  In particular, only a general description
  22.    was provided for the behavior of "BOOTP relay agents" (originally
  23.    called BOOTP forwarding agents").  The client behavior description
  24.    also suffered in certain ways.  This memo attempts to clarify and
  25.    strengthen the specification in these areas.  Due to some errors
  26.    introduced into RFC 1532 in the editorial process, this memo is
  27.    reissued as RFC 1542.
  28.  
  29.    In addition, new issues have arisen since the original specification
  30.    was written.  This memo also attempts to address some of these.
  31.  
  32. Table of Contents
  33.  
  34.    1. Introduction.................................................  2
  35.    1.1 Requirements................................................  3
  36.    1.2 Terminology.................................................  3
  37.    1.3 Data Transmission Order.....................................  4
  38.    2. General Issues...............................................  5
  39.    2.1 General BOOTP Processing....................................  5
  40.    2.2 Definition of the 'flags' Field.............................  5
  41.    2.3 Bit Ordering of Hardware Addresses..........................  7
  42.    2.4 BOOTP Over IEEE 802.5 Token Ring Networks...................  8
  43.    3. BOOTP Client Behavior........................................  9
  44.    3.1 Client use of the 'flags' field.............................  9
  45.    3.1.1 The BROADCAST flag........................................  9
  46.    3.1.2 The remainder of the 'flags' field........................  9
  47.    3.2 Definition of the 'secs' field.............................. 10
  48.    3.3 Use of the 'ciaddr' and 'yiaddr' fields..................... 10
  49.  
  50.  
  51.  
  52. Wimer                                                           [Page 1]
  53.  
  54.  
  55. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  56.  
  57.  
  58.    3.4 Interpretation of the 'giaddr' field........................ 11
  59.    3.5 Vendor information "magic cookie"........................... 12
  60.    4. BOOTP Relay Agents........................................... 13
  61.    4.1 General BOOTP Processing for Relay Agents................... 14
  62.    4.1.1 BOOTREQUEST Messages...................................... 14
  63.    4.1.2 BOOTREPLY Messages........................................ 17
  64.    5. BOOTP Server Behavior........................................ 18
  65.    5.1 Reception of BOOTREQUEST Messages........................... 18
  66.    5.2 Use of the 'secs' field..................................... 19
  67.    5.3 Use of the 'ciaddr' field................................... 19
  68.    5.4 Strategy for Delivery of BOOTREPLY Messages................. 20
  69.    Acknowledgements................................................ 21
  70.    References...................................................... 22
  71.    Security Considerations......................................... 23
  72.    Author's Address................................................ 23
  73.  
  74. 1. Introduction
  75.  
  76.    The Bootstrap Protocol (BOOTP) is a UDP/IP-based protocol which
  77.    allows a booting host to configure itself dynamically and without
  78.    user supervision.  BOOTP provides a means to notify a host of its
  79.    assigned IP address, the IP address of a boot server host, and the
  80.    name of a file to be loaded into memory and executed [1].  Other
  81.    configuration information such as the local subnet mask, the local
  82.    time offset, the addresses of default routers, and the addresses of
  83.    various Internet servers can also be communicated to a host using
  84.    BOOTP [2].
  85.  
  86.    Unfortunately, the original BOOTP specification [1] left some issues
  87.    of the protocol open to question.  The exact behavior of BOOTP relay
  88.    agents formerly called "BOOTP forwarding agents") was not clearly
  89.    specified.  Some parts of the overall protocol specification actually
  90.    conflict, while other parts have been subject to misinterpretation,
  91.    indicating that clarification is needed.  This memo addresses these
  92.    problems.
  93.  
  94.    Since the introduction of BOOTP, the IEEE 802.5 Token Ring Network
  95.    has been developed which presents a unique problem for BOOTP's
  96.    particular message-transfer paradigm.  This memo also suggests a
  97.    solution for this problem.
  98.  
  99.    NOTE: Unless otherwise specified in this document or a later
  100.    document, the information and requirements specified througout this
  101.    document also apply to extensions to BOOTP such as the Dynamic Host
  102.    Configuration Protocol (DHCP) [3].
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. Wimer                                                           [Page 2]
  110.  
  111.  
  112. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  113.  
  114.  
  115. 1.1 Requirements
  116.  
  117.    In this memo, the words that are used to define the significance of
  118.    particular requirements are capitalized.  These words are:
  119.  
  120.       o "MUST"
  121.  
  122.         This word or the adjective "REQUIRED" means that the item
  123.         is an absolute requirement of the specification.
  124.  
  125.       o "MUST NOT"
  126.  
  127.         This phrase means that the item is an absolute prohibition
  128.         of the specification.
  129.  
  130.       o "SHOULD"
  131.  
  132.         This word or the adjective "RECOMMENDED" means that there
  133.         may exist valid reasons in particular circumstances to
  134.         ignore this item, but the full implications should be
  135.         understood and the case carefully weighed before choosing a
  136.         different course.
  137.  
  138.       o "SHOULD NOT"
  139.  
  140.         This phrase means that there may exist valid reasons in
  141.         particular circumstances when the listed behavior is
  142.         acceptable or even useful, but the full implications should
  143.         be understood and the case carefully weighed before
  144.         implementing any behavior described with this label.
  145.  
  146.       o "MAY"
  147.  
  148.         This word or the adjective "OPTIONAL" means that this item
  149.         is truly optional.  One vendor may choose to include the
  150.         item because a particular marketplace requires it or
  151.         because it enhances the product, for example; another
  152.         vendor may omit the same item.
  153.  
  154. 1.2 Terminology
  155.  
  156.    This memo uses the following terms:
  157.  
  158.       BOOTREQUEST
  159.  
  160.          A BOOTREQUEST message is a BOOTP message sent from a BOOTP
  161.          client to a BOOTP server, requesting configuration information.
  162.  
  163.  
  164.  
  165.  
  166. Wimer                                                           [Page 3]
  167.  
  168.  
  169. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  170.  
  171.  
  172.       BOOTREPLY
  173.  
  174.          A BOOTREPLY message is a BOOTP message sent from a BOOTP server
  175.          to a BOOTP client, providing configuration information.
  176.  
  177.       Silently discard
  178.  
  179.          This memo specifies several cases where a BOOTP entity is to
  180.          "silently discard" a received BOOTP message.  This means that
  181.          the entity is to discard the message without further
  182.          processing, and that the entity will not send any ICMP error
  183.          message as a result.  However, for diagnosis of problems, the
  184.          entity SHOULD provide the capability of logging the error,
  185.          including the contents of the silently-discarded message, and
  186.          SHOULD record the event in a statistics counter.
  187.  
  188. 1.3 Data Transmission Order
  189.  
  190.    The order of transmission of the header and data described in this
  191.    document is resolved to the octet level.  Whenever a diagram shows a
  192.    group of octets, the order of transmission of those octets is the
  193.    normal order in which they are read in English.  For example, in the
  194.    following diagram, the octets are transmitted in the order they are
  195.    numbered.
  196.  
  197.                      0                   1
  198.                      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  199.                      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  200.                      |       1       |       2       |
  201.                      +-------------------------------+
  202.                      |       3       |       4       |
  203.                      +-------------------------------+
  204.                      |       5       |       6       |
  205.                      +-------------------------------+
  206.  
  207.    Whenever an octet represents a numeric quantity, the leftmost bit in
  208.    the diagram is the high order or most significant bit.  That is, the
  209.    bit labeled 0 is the most significant bit.  For example, the
  210.    following diagram represents the value 170 (decimal).
  211.  
  212.                                0 1 2 3 4 5 6 7
  213.                               +-+-+-+-+-+-+-+-+
  214.                               |1 0 1 0 1 0 1 0|
  215.                               +---------------+
  216.  
  217.    Similarly, whenever a multi-octet field represents a numeric quantity
  218.    the leftmost bit of the whole field is the most significant bit.
  219.    When a multi-octet quantity is transmitted the most significant octet
  220.  
  221.  
  222.  
  223. Wimer                                                           [Page 4]
  224.  
  225.  
  226. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  227.  
  228.  
  229.    is transmitted first.
  230.  
  231. 2. General Issues
  232.  
  233.    This section covers issues of general relevance to all BOOTP entities
  234.    (clients, servers, and relay agents).
  235.  
  236. 2.1 General BOOTP Processing
  237.  
  238.    The following consistency checks SHOULD be performed on BOOTP
  239.    messages:
  240.  
  241.       o The IP Total Length and UDP Length must be large enough to
  242.         contain the minimal BOOTP header of 300 octets (in the UDP
  243.         data field) specified in [1].
  244.  
  245.    NOTE: Future extensions to the BOOTP protocol may increase the size
  246.    of BOOTP messages.  Therefore, BOOTP messages which, according to the
  247.    IP Total Length and UDP Length fields, are larger than the minimum
  248.    size specified by [1] MUST also be accepted.
  249.  
  250.       o The 'op' (opcode) field of the message must contain either the
  251.         code for a BOOTREQUEST (1) or the code for a BOOTREPLY (2).
  252.  
  253.    BOOTP messages not meeting these consistency checks MUST be silently
  254.    discarded.
  255.  
  256. 2.2 Definition of the 'flags' Field
  257.  
  258.    The standard BOOTP message format defined in [1] includes a two-octet
  259.    field located between the 'secs' field and the 'ciaddr' field.  This
  260.    field is merely designated as "unused" and its contents left
  261.    unspecified, although Section 7.1 of [1] does offer the following
  262.    suggestion:
  263.  
  264.       "Before setting up the packet for the first time, it is a good
  265.       idea to clear the entire packet buffer to all zeros; this will
  266.       place all fields in their default state."
  267.  
  268.       This memo hereby designates this two-octet field as the 'flags'
  269.       field.
  270.  
  271.       This memo hereby defines the most significant bit of the 'flags'
  272.       field as the BROADCAST (B) flag.  The semantics of this flag are
  273.       discussed in Sections 3.1.1 and 4.1.2 of this memo.
  274.  
  275.       The remaining bits of the 'flags' field are reserved for future
  276.       use.  They MUST be set to zero by clients and ignored by servers
  277.  
  278.  
  279.  
  280. Wimer                                                           [Page 5]
  281.  
  282.  
  283. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  284.  
  285.  
  286.       and relay agents.
  287.  
  288.       The 'flags' field, then, appears as follows:
  289.  
  290.                      0                   1
  291.                      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  292.                      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  293.                      |B|             MBZ             |
  294.                      +-+-----------------------------+
  295.  
  296.    where:
  297.  
  298.       B    BROADCAST flag (discussed in Sections 3.1.1 and 4.1.2)
  299.  
  300.       MBZ  MUST BE ZERO (reserved for future use)
  301.  
  302.    The format of a BOOTP message is shown below.  The numbers in
  303.    parentheses indicate the size of each field in octets.
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337. Wimer                                                           [Page 6]
  338.  
  339.  
  340. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  341.  
  342.  
  343.    0                   1                   2                   3
  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.    +---------------+---------------+---------------+---------------+
  348.    |                            xid (4)                            |
  349.    +-------------------------------+-------------------------------+
  350.    |           secs (2)            |           flags (2)           |
  351.    +-------------------------------+-------------------------------+
  352.    |                           ciaddr (4)                          |
  353.    +---------------------------------------------------------------+
  354.    |                           yiaddr (4)                          |
  355.    +---------------------------------------------------------------+
  356.    |                           siaddr (4)                          |
  357.    +---------------------------------------------------------------+
  358.    |                           giaddr (4)                          |
  359.    +---------------------------------------------------------------+
  360.    |                                                               |
  361.    |                           chaddr (16)                         |
  362.    |                                                               |
  363.    |                                                               |
  364.    +---------------------------------------------------------------+
  365.    |                                                               |
  366.    |                           sname  (64)                         |
  367.    +---------------------------------------------------------------+
  368.    |                                                               |
  369.    |                           file   (128)                        |
  370.    +---------------------------------------------------------------+
  371.    |                                                               |
  372.    |                           vend   (64)                         |
  373.    +---------------------------------------------------------------+
  374.  
  375. 2.3 Bit Ordering of Hardware Addresses
  376.  
  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).
  381.  
  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.
  386.  
  387.       DISCUSSION:
  388.  
  389.          One of the primary reasons the 'chaddr' field exists is to
  390.          enable BOOTP servers and relay agents to communicate directly
  391.  
  392.  
  393.  
  394. Wimer                                                           [Page 7]
  395.  
  396.  
  397. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  398.  
  399.  
  400.          with clients without the use of broadcasts.  In practice, the
  401.          contents of the 'chaddr' field is often used to create an ARP-
  402.          cache entry in exactly the same way the normal ARP protocol
  403.          would have.  Clearly, interoperability can only be achieved if
  404.          a consistent interpretation of the 'chaddr' field is used.
  405.  
  406.          As a practical example, this means that the bit ordering used
  407.          for the 'chaddr' field by a BOOTP client on an IEEE 802.5 Token
  408.          Ring network is the opposite of the bit ordering used by a
  409.          BOOTP client on a DIX ethernet network.
  410.  
  411. 2.4 BOOTP Over IEEE 802.5 Token Ring Networks
  412.  
  413.    Special consideration of the client/server and client/relay agent
  414.    interactions must be given to IEEE 802.5 networks because of non-
  415.    transparent bridging.
  416.  
  417.    The client SHOULD send its broadcast BOOTREQUEST with an All Routes
  418.    Explorer RIF.  This will enable servers/relay agents to cache the
  419.    return route if they choose to do so.  For those server/relay agents
  420.    which cannot cache the return route (because they are stateless, for
  421.    example), the BOOTREPLY message SHOULD be sent to the client's
  422.    hardware address, as taken from the BOOTP message, with a Spanning
  423.    Tree Rooted RIF.  The actual bridge route will be recorded by the
  424.    client and server/relay agent by normal ARP processing code.
  425.  
  426.       DISCUSSION:
  427.  
  428.          In the simplest case, an unbridged, single ring network, the
  429.          broadcast behavior of the BOOTP protocol is identical to that
  430.          of Ethernet networks.  However, a BOOTP client cannot know, a
  431.          priori, that an 802.5 network is not bridged.  In fact, the
  432.          likelihood is that the server, or relay agent, will not know
  433.          either.
  434.  
  435.          Of the four possible scenerios, only two are interesting: where
  436.          the assumption is that the 802.5 network is not bridged and it
  437.          is, and the assumption that the network is bridged and it is
  438.          not.  In the former case, the Routing Information Field (RIF)
  439.          will not be used; therefore, if the server/relay agent are on
  440.          another segment of the ring, the client cannot reach it.  In
  441.          the latter case, the RIF field will be used, resulting in a few
  442.          extraneous bytes on the ring.  It is obvious that an almost
  443.          immeasurable inefficiency is to be preferred over a complete
  444.          failure to communicate.
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451. Wimer                                                           [Page 8]
  452.  
  453.  
  454. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  455.  
  456.  
  457.          Given that the assumption is that RIF fields will be needed, it
  458.          is necesary to determine the optimum method for the client to
  459.          reach the server/relay agent, and the optimum method for the
  460.          response to be returned.
  461.  
  462. 3. BOOTP Client Behavior
  463.  
  464.    This section clarifies various issues regarding BOOTP client
  465.    behavior.
  466.  
  467. 3.1 Client use of the 'flags' field
  468.  
  469. 3.1.1 The BROADCAST flag
  470.  
  471.    Normally, BOOTP servers and relay agents attempt to deliver BOOTREPLY
  472.    messages directly to a client using unicast delivery.  The IP
  473.    destination address (in the IP header) is set to the BOOTP 'yiaddr'
  474.    address and the link-layer destination address is set to the BOOTP
  475.    'chaddr' address.  Unfortunately, some client implementations are
  476.    unable to receive such unicast IP datagrams until they know their own
  477.    IP address (thus we have a "chicken and egg" issue).  Often, however,
  478.    they can receive broadcast IP datagrams (those with a valid IP
  479.    broadcast address as the IP destination and the link-layer broadcast
  480.    address as the link-layer destination).
  481.  
  482.    If a client falls into this category, it SHOULD set (to 1) the
  483.    newly-defined BROADCAST flag in the 'flags' field of BOOTREPLY
  484.    messages it generates.  This will provide a hint to BOOTP servers and
  485.    relay agents that they should attempt to broadcast their BOOTREPLY
  486.    messages to the client.
  487.  
  488.    If a client does not have this limitation (i.e., it is perfectly able
  489.    to receive unicast BOOTREPLY messages), it SHOULD NOT set the
  490.    BROADCAST flag (i.e., it SHOULD clear the BROADCAST flag to 0).
  491.  
  492.       DISCUSSION:
  493.  
  494.          This addition to the protocol is a workaround for old host
  495.          implementations.  Such implementations SHOULD be modified so
  496.          that they may receive unicast BOOTREPLY messages, thus making
  497.          use of this workaround unnecessary.  In general, the use of
  498.          this mechanism is discouraged.
  499.  
  500. 3.1.2 The remainder of the 'flags' field
  501.  
  502.    The remaining bits of the 'flags' field are reserved for future use.
  503.    A client MUST set these bits to zero in all BOOTREQUEST messages it
  504.    generates.  A client MUST ignore these bits in all BOOTREPLY messages
  505.  
  506.  
  507.  
  508. Wimer                                                           [Page 9]
  509.  
  510.  
  511. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  512.  
  513.  
  514.    it receives.
  515.  
  516. 3.2 Definition of the 'secs' field
  517.  
  518.    The 'secs' field of a BOOTREQUEST message SHOULD represent the
  519.    elapsed time, in seconds, since the client sent its first BOOTREQUEST
  520.    message.  Note that this implies that the 'secs' field of the first
  521.    BOOTREQUEST message SHOULD be set to zero.
  522.  
  523.    Clients SHOULD NOT set the 'secs' field to a value which is constant
  524.    for all BOOTREQUEST messages.
  525.  
  526.       DISCUSSION:
  527.  
  528.          The original definition of the 'secs' field was vague.  It was
  529.          not clear whether it represented the time since the first
  530.          BOOTREQUEST message was sent or some other time period such as
  531.          the time since the client machine was powered-up.  This has
  532.          limited its usefulness as a policy control mechanism for BOOTP
  533.          servers and relay agents.  Furthermore, certain client
  534.          implementations have been known to simply set this field to a
  535.          constant value or use incorrect byte-ordering.  Incorrect
  536.          byte-ordering usually makes it appear as if a client has been
  537.          waiting much longer than it really has, so a relay agent will
  538.          relay the BOOTREQUEST sooner than desired (usually
  539.          immediately).  These implementation errors have further
  540.          undermined the usefulness of the 'secs' field.  These incorrect
  541.          implementations SHOULD be corrected.
  542.  
  543. 3.3 Use of the 'ciaddr' and 'yiaddr' fields
  544.  
  545.    If a BOOTP client does not know what IP address it should be using,
  546.    the client SHOULD set the 'ciaddr' field to 0.0.0.0.  If the client
  547.    has the ability to remember the last IP address it was assigned, or
  548.    it has been preconfigured with an IP address via some alternate
  549.    mechanism, the client MAY fill the 'ciaddr' field with that IP
  550.    address.  If the client does place a non-zero IP address in the
  551.    'ciaddr' field, the client MUST be prepared to accept incoming
  552.    unicast datagrams addressed to that IP address and also answer ARP
  553.    requests for that IP address (if ARP is used on that network).
  554.  
  555.    The BOOTP server is free to assign a different IP address (in the
  556.    'yiaddr' field) than the client expressed in 'ciaddr'.  The client
  557.    SHOULD adopt the IP address specified in 'yiaddr' and begin using it
  558.    as soon as possible.
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565. Wimer                                                          [Page 10]
  566.  
  567.  
  568. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  569.  
  570.  
  571.       DISCUSSION:
  572.  
  573.          There are various interpretations about the purpose of the
  574.          'ciaddr' field and, unfortunately, no agreement on a single
  575.          correct interpretation.  One interpretation is that if a client
  576.          is willing to accept whatever IP address the BOOTP server
  577.          assigns to it, the client should always place 0.0.0.0 in the
  578.          'ciaddr' field, regardless of whether it knows its previously-
  579.          assigned address.  Conversely, if the client wishes to assert
  580.          that it must have a particular IP address (e.g., the IP address
  581.          was hand-configured by the host administrator and BOOTP is only
  582.          being used to obtain a boot file and/or information from the
  583.          'vend' field), the client will then fill the 'ciaddr' field
  584.          with the desired IP address and ignore the IP address assigned
  585.          by the BOOTP server as indicated in the 'yiaddr' field.  An
  586.          alternate interpretation holds that the client always fills the
  587.          'ciaddr' field with its most recently-assigned IP address (if
  588.          known) even if that address may be incorrect.  Such a client
  589.          will still accept and use the address assigned by the BOOTP
  590.          server as indicated in the 'yiaddr' field.  The motivation for
  591.          this interpretation is to aid the server in identifying the
  592.          client and/or in delivering the BOOTREPLY to the client.  Yet a
  593.          third (mis)interpretation allows the client to use 'ciaddr' to
  594.          express the client's desired IP address, even if the client has
  595.          never used that address before or is not currently using that
  596.          address.
  597.  
  598.          The last interpretation is incorrect as it may prevent the
  599.          BOOTREPLY from reaching the client.  The server will usually
  600.          unicast the reply to the address given in 'ciaddr' but the
  601.          client may not be listening on that address yet, or the client
  602.          may be connected to an incorrect subnet such that normal IP
  603.          routing (correctly) routes the reply to a different subnet.
  604.  
  605.          The second interpretation also suffers from the "incorrect
  606.          subnet" problem.
  607.  
  608.          The first interpretation seems to be the safest and most likely
  609.          to promote interoperability.
  610.  
  611. 3.4 Interpretation of the 'giaddr' field
  612.  
  613.    The 'giaddr' field is rather poorly named.  It exists to facilitate
  614.    the transfer of BOOTREQUEST messages from a client, through BOOTP
  615.    relay agents, to servers on different networks than the client.
  616.    Similarly, it facilitates the delivery of BOOTREPLY messages from the
  617.    servers, through BOOTP relay agents, back to the client.  In no case
  618.    does it represent a general IP router to be used by the client.  A
  619.  
  620.  
  621.  
  622. Wimer                                                          [Page 11]
  623.  
  624.  
  625. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  626.  
  627.  
  628.    BOOTP client MUST set the 'giaddr' field to zero (0.0.0.0) in all
  629.    BOOTREQUEST messages it generates.
  630.  
  631.    A BOOTP client MUST NOT interpret the 'giaddr' field of a BOOTREPLY
  632.    message to be the IP address of an IP router.  A BOOTP client SHOULD
  633.    completely ignore the contents of the 'giaddr' field in BOOTREPLY
  634.    messages.
  635.  
  636.       DISCUSSION:
  637.  
  638.          The semantics of the 'giaddr' field were poorly defined.
  639.          Section 7.5 of [1] states:
  640.  
  641.            "If 'giaddr' (gateway address) is nonzero, then the packets
  642.            should be forwarded there first, in order to get to the
  643.            server."
  644.  
  645.    In that sentence, "get to" refers to communication from the client to
  646.    the server subsequent to the BOOTP exchange, such as a TFTP session.
  647.    Unfortunately, the 'giaddr' field may contain the address of a BOOTP
  648.    relay agent that is not itself an IP router (according to [1],
  649.    Section 8, fifth paragraph), in which case, it will be useless as a
  650.    first-hop for TFTP packets sent to the server (since, by definition,
  651.    non-routers don't forward datagrams at the IP layer).
  652.  
  653.    Although now prohibited by Section 4.1.1 of this memo, the 'giaddr'
  654.    field might contain a broadcast address according to Section 8, sixth
  655.    paragraph of [1].  Not only would such an address be useless as a
  656.    router address, it might also cause the client to ARP for the
  657.    broadcast address (since, if the client didn't receive a subnet mask
  658.    in the BOOTREPLY message, it would be unable to recognize a subnet
  659.    broadcast address).  This is clearly undesirable.
  660.  
  661.    To reach a non-local server, clients can obtain a first-hop router
  662.    address from the "Gateway" subfield of the "Vendor Information
  663.    Extensions" [2] (if present), or via the ICMP router discovery
  664.    protocol [5] or other similar mechanism.
  665.  
  666. 3.5 Vendor information "magic cookie"
  667.  
  668.    It is RECOMMENDED that a BOOTP client always fill the first four
  669.    octets of the 'vend' (vendor information) field of a BOOTREQUEST with
  670.    a four-octet identifier called a "magic cookie."  A BOOTP client
  671.    SHOULD do this even if it has no special information to communicate
  672.    to the BOOTP server using the 'vend' field.  This aids the BOOTP
  673.    server in determining what vendor information format it should use in
  674.    its BOOTREPLY messages.
  675.  
  676.  
  677.  
  678.  
  679. Wimer                                                          [Page 12]
  680.  
  681.  
  682. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  683.  
  684.  
  685.    If a special vendor-specific magic cookie is not being used, a BOOTP
  686.    client SHOULD use the dotted decimal value 99.130.83.99 as specified
  687.    in [2].  In this case, if the client has no information to
  688.    communicate to the server, the octet immediately following the magic
  689.    cookie SHOULD be set to the "End" tag (255) and the remaining octets
  690.    of the 'vend' field SHOULD be set to zero.
  691.  
  692.       DISCUSSION:
  693.  
  694.          Sometimes different operating systems or networking packages
  695.          are run on the same machine at different times (or even at the
  696.          same time!).  Since the hardware address placed in the 'chaddr'
  697.          field will likely be the same, BOOTREQUESTs from completely
  698.          different BOOTP clients on the same machine will likely be
  699.          difficult for a BOOTP server to differentiate.  If the client
  700.          includes a magic cookie in its BOOTREQUESTs, the server will at
  701.          least know what format the client expects and can understand in
  702.          corresponding BOOTREPLY messages.
  703.  
  704. 4. BOOTP Relay Agents
  705.  
  706.          In many cases, BOOTP clients and their associated BOOTP
  707.          server(s) do not reside on the same IP network or subnet.  In
  708.          such cases, some kind of third-party agent is required to
  709.          transfer BOOTP messages between clients and servers.  Such an
  710.          agent was originally referred to as a "BOOTP forwarding agent."
  711.          However, in order to avoid confusion with the IP forwarding
  712.          function of an IP router, the name "BOOTP relay agent" is
  713.          hereby adopted instead.
  714.  
  715.       DISCUSSION:
  716.  
  717.          A BOOTP relay agent performs a task which is distinct from an
  718.          IP router's normal IP forwarding function.  While a router
  719.          normally switches IP datagrams between networks more-or-less
  720.          transparently, a BOOTP relay agent may more properly be thought
  721.          to receive BOOTP messages as a final destination and then
  722.          generate new BOOTP messages as a result.  It is incorrect for a
  723.          relay agent implementation to simply forward a BOOTP message
  724.          "straight through like a regular packet."
  725.  
  726.          This relay-agent functionality is most conveniently located in
  727.          the routers which interconnect the clients and servers, but may
  728.          alternatively be located in a host which is directly connected
  729.          to the client subnet.
  730.  
  731.          Any Internet host or router which provides BOOTP relay-agent
  732.          capability MUST conform to the specifications in this memo.
  733.  
  734.  
  735.  
  736. Wimer                                                          [Page 13]
  737.  
  738.  
  739. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  740.  
  741.  
  742. 4.1 General BOOTP Processing for Relay Agents
  743.  
  744.    All locally delivered UDP messages whose UDP destination port number
  745.    is BOOTPS (67) are considered for special processing by the host or
  746.    router's logical BOOTP relay agent.
  747.  
  748.    In the case of a host, locally delivered datagrams are simply all
  749.    datagrams normally received by that host, i.e., broadcast and
  750.    multicast datagrams as well as unicast datagrams addressed to IP
  751.    addresses of that host.
  752.  
  753.    In the case of a router, locally delivered datagrams are broadcast
  754.    and multicast datagrams as well as unicast datagrams addressed to IP
  755.    addresses of that router.  These are datagrams for which the router
  756.    should be considered an end destination as opposed to an intermediate
  757.    switching node.  Thus a unicast datagram with an IP destination not
  758.    matching any of the router's IP addresses is not considered for
  759.    processing by the router's logical BOOTP relay agent.
  760.  
  761.    Hosts and routers are usually required to silently discard incoming
  762.    datagrams containing illegal IP source addresses.  This is generally
  763.    known as "Martian address filtering."  One of these illegal addresses
  764.    is 0.0.0.0 (or actually anything on network 0).  However, hosts or
  765.    routers which support a BOOTP relay agent MUST accept for local
  766.    delivery to the relay agent BOOTREQUEST messages whose IP source
  767.    address is 0.0.0.0.  BOOTREQUEST messages from legal IP source
  768.    addresses MUST also be accepted.
  769.  
  770.    A relay agent MUST silently discard any received UDP messages whose
  771.    UDP destination port number is BOOTPC (68).
  772.  
  773.       DISCUSSION:
  774.  
  775.          There should be no need for a relay agent to process messages
  776.          addressed to the BOOTPC port.  Careful reading of the original
  777.          BOOTP specification [1] will show this.  Nevertheless, some
  778.          relay agent implementations incorrectly relay such messages.
  779.  
  780.    The consistency checks specified in Section 2.1 SHOULD be performed
  781.    by the relay agent.  BOOTP messages not meeting these consistency
  782.    checks MUST be silently discarded.
  783.  
  784. 4.1.1 BOOTREQUEST Messages
  785.  
  786.    Some configuration mechanism MUST exist to enable or disable the
  787.    relaying of BOOTREQUEST messages.  Relaying MUST be disabled by
  788.    default.
  789.  
  790.  
  791.  
  792.  
  793. Wimer                                                          [Page 14]
  794.  
  795.  
  796. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  797.  
  798.  
  799.    When the BOOTP relay agent receives a BOOTREQUEST message, it MAY use
  800.    the value of the 'secs' (seconds since client began booting) field of
  801.    the request as a factor in deciding whether to relay the request.  If
  802.    such a policy mechanism is implemented, its threshold SHOULD be
  803.    configurable.
  804.  
  805.       DISCUSSION:
  806.  
  807.          To date, this feature of the BOOTP protocol has not necessarily
  808.          been shown to be useful.  See Section 3.2 for a discussion.
  809.  
  810.    The relay agent MUST silently discard BOOTREQUEST messages whose
  811.    'hops' field exceeds the value 16.  A configuration option SHOULD be
  812.    provided to set this threshold to a smaller value if desired by the
  813.    network manager.  The default setting for a configurable threshold
  814.    SHOULD be 4.
  815.  
  816.    If the relay agent does decide to relay the request, it MUST examine
  817.    the 'giaddr' ("gateway" IP address) field.  If this field is zero,
  818.    the relay agent MUST fill this field with the IP address of the
  819.    interface on which the request was received.  If the interface has
  820.    more than one IP address logically associated with it, the relay
  821.    agent SHOULD choose one IP address associated with that interface and
  822.    use it consistently for all BOOTP messages it relays.  If the
  823.    'giaddr' field contains some non-zero value, the 'giaddr' field MUST
  824.    NOT be modified.  The relay agent MUST NOT, under any circumstances,
  825.    fill the 'giaddr' field with a broadcast address as is suggested in
  826.    [1] (Section 8, sixth paragraph).
  827.  
  828.    The value of the 'hops' field MUST be incremented.
  829.  
  830.    All other BOOTP fields MUST be preserved intact.
  831.  
  832.    At this point, the request is relayed to its new destination (or
  833.    destinations).  This destination MUST be configurable.  Further, this
  834.    destination configuration SHOULD be independent of the destination
  835.    configuration for any other so-called "broadcast forwarders" (e.g.,
  836.    for the UDP-based TFTP, DNS, Time, etc.  protocols).
  837.  
  838.       DISCUSSION:
  839.  
  840.          The network manager may wish the relaying destination to be an
  841.          IP unicast, multicast, broadcast, or some combination.  A
  842.          configurable list of destination IP addresses provides good
  843.          flexibility.  More flexible configuration schemes are
  844.          encouraged.  For example, it may be desirable to send to the
  845.          limited broadcast address (255.255.255.255) on specific
  846.          physical interfaces.  However, if the BOOTREQUEST message was
  847.  
  848.  
  849.  
  850. Wimer                                                          [Page 15]
  851.  
  852.  
  853. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  854.  
  855.  
  856.          received as a broadcast, the relay agent MUST NOT rebroadcast
  857.          the BOOTREQUEST on the physical interface from whence it came.
  858.  
  859.          A relay agent MUST use the same destination (or set of
  860.          destinations) for all BOOTREQUEST messages it relays from a
  861.          given client.
  862.  
  863.       DISCUSSION:
  864.  
  865.          At least one known relay agent implementation uses a round-
  866.          robin scheme to provide load balancing across multiple BOOTP
  867.          servers.  Each time it receives a new BOOTREQUEST message, it
  868.          relays the message to the next BOOTP server in a list of
  869.          servers.  Thus, with this relay agent, multiple consecutive
  870.          BOOTREQUEST messages from a given client will be delivered to
  871.          different servers.
  872.  
  873.          Unfortunately, this well-intentioned scheme reacts badly with
  874.          DHCP [3] and perhaps other variations of the BOOTP protocol
  875.          which depend on multiple exchanges of BOOTREQUEST and BOOTREPLY
  876.          messages between clients and servers.  Therefore, all
  877.          BOOTREQUEST messages from a given client MUST be relayed to the
  878.          same destination (or set of destinations).
  879.  
  880.          One way to meet this requirement while providing some load-
  881.          balancing benefit is to hash the client's link-layer address
  882.          (or some other reliable client-identifying information) and use
  883.          the resulting hash value to select the appropriate relay
  884.          destination (or set of destinations).  The simplest solution,
  885.          of course, is to not use a load-balancing scheme and just relay
  886.          ALL received BOOTREQUEST messages to the same destination (or
  887.          set of destinations).
  888.  
  889.          When transmitting the request to its next destination, the
  890.          relay agent may set the IP Time-To-Live field to either the
  891.          default value for new datagrams originated by the relay agent,
  892.          or to the TTL of the original BOOTREQUEST decremented by (at
  893.          least) one.
  894.  
  895.       DISCUSSION:
  896.  
  897.          As an extra precaution against BOOTREQUEST loops, it is
  898.          preferable to use the decremented TTL from the original
  899.          BOOTREQUEST.  Unfortunately, this may be difficult to do in
  900.          some implementations.
  901.  
  902.          If the BOOTREQUEST has a UDP checksum (i.e., the UDP checksum
  903.          is non-zero), the checksum must be recalculated before
  904.  
  905.  
  906.  
  907. Wimer                                                          [Page 16]
  908.  
  909.  
  910. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  911.  
  912.  
  913.          transmitting the request.
  914.  
  915. 4.1.2 BOOTREPLY Messages
  916.  
  917.    BOOTP relay agents relay BOOTREPLY messages only to BOOTP clients.
  918.    It is the responsibility of BOOTP servers to send BOOTREPLY messages
  919.    directly to the relay agent identified in the 'giaddr' field.
  920.    Therefore, a relay agent may assume that all BOOTREPLY messages it
  921.    receives are intended for BOOTP clients on its directly-connected
  922.    networks.
  923.  
  924.    When a relay agent receives a BOOTREPLY message, it should examine
  925.    the BOOTP 'giaddr', 'yiaddr', 'chaddr', 'htype', and 'hlen' fields.
  926.    These fields should provide adequate information for the relay agent
  927.    to deliver the BOOTREPLY message to the client.
  928.  
  929.    The 'giaddr' field can be used to identify the logical interface from
  930.    which the reply must be sent (i.e., the host or router interface
  931.    connected to the same network as the BOOTP client).  If the content
  932.    of the 'giaddr' field does not match one of the relay agent's
  933.    directly-connected logical interfaces, the BOOTREPLY messsage MUST be
  934.    silently discarded.
  935.  
  936.    The 'htype', 'hlen', and 'chaddr' fields supply the link-layer
  937.    hardware type, hardware address length, and hardware address of the
  938.    client as defined in the ARP protocol [4] and the Assigned Numbers
  939.    document [6].  The 'yiaddr' field is the IP address of the client, as
  940.    assigned by the BOOTP server.
  941.  
  942.    The relay agent SHOULD examine the newly-defined BROADCAST flag (see
  943.    Sections 2.2 and 3.1.1 for more information).  If this flag is set to
  944.    1, the reply SHOULD be sent as an IP broadcast using the IP limited
  945.    broadcast address 255.255.255.255 as the IP destination address and
  946.    the link-layer broadcast address as the link-layer destination
  947.    address.  If the BROADCAST flag is cleared (0), the reply SHOULD be
  948.    sent as an IP unicast to the IP address specified by the 'yiaddr'
  949.    field and the link-layer address specified in the 'chaddr' field.  If
  950.    unicasting is not possible, the reply MAY be sent as a broadcast, in
  951.    which case it SHOULD be sent to the link-layer broadcast address
  952.    using the IP limited broadcast address 255.255.255.255 as the IP
  953.    destination address.
  954.  
  955.       DISCUSSION:
  956.  
  957.          The addition of the BROADCAST flag to the protocol is a
  958.          workaround to help promote interoperability with certain client
  959.          implementations.
  960.  
  961.  
  962.  
  963.  
  964. Wimer                                                          [Page 17]
  965.  
  966.  
  967. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  968.  
  969.  
  970.          Note that since the 'flags' field was previously defined in [1]
  971.          simply as an "unused" field, it is possible that old client or
  972.          server implementations may accidentally and unknowingly set the
  973.          new BROADCAST flag.  It is actually expected that such
  974.          implementations will be rare (most implementations seem to
  975.          zero-out this field), but interactions with such
  976.          implementations must nevertheless be considered.  If an old
  977.          client or server does set the BROADCAST flag to 1 incorrectly,
  978.          conforming relay agents will generate broadcast BOOTREPLY
  979.          messages to the corresponding client.  The BOOTREPLY messages
  980.          should still properly reach the client, at the cost of one
  981.          (otherwise unnecessary) additional broadcast.  This, however,
  982.          is no worse than a server or relay agent which always
  983.          broadcasts its BOOTREPLY messages.
  984.  
  985.          Older client or server implementations which accidentally set
  986.          the BROADCAST flag SHOULD be corrected to properly comply with
  987.          this newer specification.
  988.  
  989.          All BOOTP fields MUST be preserved intact.  The relay agent
  990.          MUST NOT modify any BOOTP field of the BOOTREPLY message when
  991.          relaying it to the client.
  992.  
  993.          The reply MUST have its UDP destination port set to BOOTPC
  994.          (68).
  995.  
  996.          If the BOOTREPLY has a UDP checksum (i.e., the UDP checksum is
  997.          non-zero), the checksum must be recalculated before
  998.          transmitting the reply.
  999.  
  1000. 5. BOOTP Server Behavior
  1001.  
  1002.    This section provides clarifications on the behavior of BOOTP
  1003.    servers.
  1004.  
  1005. 5.1 Reception of BOOTREQUEST Messages
  1006.  
  1007.    All received UDP messages whose UDP destination port number is BOOTPS
  1008.    (67) are considered for processing by the BOOTP server.
  1009.  
  1010.    Hosts and routers are usually required to silently discard incoming
  1011.    datagrams containing illegal IP source addresses.  This is generally
  1012.    known as "Martian address filtering."  One of these illegal addresses
  1013.    is 0.0.0.0 (or actually anything on network 0).  However, hosts or
  1014.    routers which support a BOOTP server MUST accept for local delivery
  1015.    to the server BOOTREQUEST messages whose IP source address is
  1016.    0.0.0.0.  BOOTREQUEST messages from legal IP source addresses MUST
  1017.    also be accepted.
  1018.  
  1019.  
  1020.  
  1021. Wimer                                                          [Page 18]
  1022.  
  1023.  
  1024. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  1025.  
  1026.  
  1027.    A BOOTP server MUST silently discard any received UDP messages whose
  1028.    UDP destination port number is BOOTPC (68).
  1029.  
  1030.       DISCUSSION:
  1031.  
  1032.          There should be no need for a BOOTP server to process messages
  1033.          addressed to the BOOTPC port.  Careful reading of the original
  1034.          BOOTP specification [1] will show this.
  1035.  
  1036.          The consistency checks specified in Section 2.1 SHOULD be
  1037.          performed by the BOOTP server.  BOOTP messages not meeting
  1038.          these consistency checks MUST be silently discarded.
  1039.  
  1040. 5.2 Use of the 'secs' field
  1041.  
  1042.    When the BOOTP server receives a BOOTREQUEST message, it MAY use the
  1043.    value of the 'secs' (seconds since client began booting) field of the
  1044.    request as a factor in deciding whether and/or how to reply to the
  1045.    request.
  1046.  
  1047.       DISCUSSION:
  1048.  
  1049.          To date, this feature of the BOOTP protocol has not necessarily
  1050.          been shown to be useful.  See Section 3.2 for a discussion.
  1051.  
  1052. 5.3 Use of the 'ciaddr' field
  1053.  
  1054.    There have been various client interpretations of the 'ciaddr' field
  1055.    for which Section 3.3 should be consulted.  A BOOTP server SHOULD be
  1056.    prepared to deal with these varying interpretations.  In general, the
  1057.    'ciaddr' field SHOULD NOT be trusted as a sole key in identifying a
  1058.    client; the contents of the 'ciaddr', 'chaddr', 'htype', and 'hlen'
  1059.    fields, and probably other information (perhaps in the 'file' and
  1060.    'vend' fields) SHOULD all be considered together in deciding how to
  1061.    respond to a given client.
  1062.  
  1063.    BOOTP servers SHOULD preserve the contents of the 'ciaddr' field in
  1064.    BOOTREPLY messages; the contents of 'ciaddr' in a BOOTREPLY message
  1065.    SHOULD exactly match the contents of 'ciaddr' in the corresponding
  1066.    BOOTREQUEST message.
  1067.  
  1068.       DISCUSSION:
  1069.  
  1070.          It has been suggested that a client may wish to use the
  1071.          contents of 'ciaddr' to further verify that a particular
  1072.          BOOTREPLY message was indeed intended for it.
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078. Wimer                                                          [Page 19]
  1079.  
  1080.  
  1081. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  1082.  
  1083.  
  1084. 5.4 Strategy for Delivery of BOOTREPLY Messages
  1085.  
  1086.    Once the BOOTP server has created an appropriate BOOTREPLY message,
  1087.    that BOOTREPLY message must be properly delivered to the client.
  1088.  
  1089.    The server SHOULD first check the 'ciaddr' field.  If the 'ciaddr'
  1090.    field is non-zero, the BOOTREPLY message SHOULD be sent as an IP
  1091.    unicast to the IP address identified in the 'ciaddr' field.  The UDP
  1092.    destination port MUST be set to BOOTPC (68).  However, the server
  1093.    MUST be aware of the problems identified in Section 3.3.  The server
  1094.    MAY choose to ignore the 'ciaddr' field and act as if the 'ciaddr'
  1095.    field contains 0.0.0.0 (and thus continue with the rest of the
  1096.    delivery algorithm below).
  1097.  
  1098.    The server SHOULD next check the 'giaddr' field.  If this field is
  1099.    non-zero, the server SHOULD send the BOOTREPLY as an IP unicast to
  1100.    the IP address identified in the 'giaddr' field.  The UDP destination
  1101.    port MUST be set to BOOTPS (67).  This action will deliver the
  1102.    BOOTREPLY message directly to the BOOTP relay agent closest to the
  1103.    client; the relay agent will then perform the final delivery to the
  1104.    client.  If the BOOTP server has prior knowledge that a particular
  1105.    client cannot receive unicast BOOTREPLY messages (e.g., the network
  1106.    manager has explicitly configured the server with such knowledge),
  1107.    the server MAY set the newly-defined BROADCAST flag to indicate that
  1108.    relay agents SHOULD broadcast the BOOTREPLY message to the client.
  1109.    Otherwise, the server MUST preserve the state of the BROADCAST flag
  1110.    so that the relay agent can correctly act upon it.
  1111.  
  1112.    If the 'giaddr' field is set to 0.0.0.0, then the client resides on
  1113.    one of the same networks as the BOOTP server.  The server SHOULD
  1114.    examine the newly-defined BROADCAST flag (see Sections 2.2, 3.1.1 and
  1115.    4.1.2 for more information).  If this flag is set to 1 or the server
  1116.    has prior knowledge that the client is unable to receive unicast
  1117.    BOOTREPLY messages, the reply SHOULD be sent as an IP broadcast using
  1118.    the IP limited broadcast address 255.255.255.255 as the IP
  1119.    destination address and the link-layer broadcast address as the
  1120.    link-layer destination address.  If the BROADCAST flag is cleared
  1121.    (0), the reply SHOULD be sent as an IP unicast to the IP address
  1122.    specified by the 'yiaddr' field and the link-layer address specified
  1123.    in the 'chaddr' field.  If unicasting is not possible, the reply MAY
  1124.    be sent as a broadcast in which case it SHOULD be sent to the link-
  1125.    layer broadcast address using the IP limited broadcast address
  1126.    255.255.255.255 as the IP destination address.  In any case, the UDP
  1127.    destination port MUST be set to BOOTPC (68).
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135. Wimer                                                          [Page 20]
  1136.  
  1137.  
  1138. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  1139.  
  1140.  
  1141.       DISCUSSION:
  1142.  
  1143.          The addition of the BROADCAST flag to the protocol is a
  1144.          workaround to help promote interoperability with certain client
  1145.          implementations.
  1146.  
  1147.          The following table summarizes server delivery decisions for
  1148.          BOOTREPLY messages based upon information in BOOTREQUEST
  1149.          messages:
  1150.  
  1151.       BOOTREQUEST fields     BOOTREPLY values for UDP, IP, link-layer
  1152.    +-----------------------+-----------------------------------------+
  1153.    | 'ciaddr'  'giaddr'  B | UDP dest     IP destination   link dest |
  1154.    +-----------------------+-----------------------------------------+
  1155.    | non-zero     X      X | BOOTPC (68)  'ciaddr'         normal    |
  1156.    | 0.0.0.0   non-zero  X | BOOTPS (67)  'giaddr'         normal    |
  1157.    | 0.0.0.0   0.0.0.0   0 | BOOTPC (68)  'yiaddr'         'chaddr'  |
  1158.    | 0.0.0.0   0.0.0.0   1 | BOOTPC (68)  255.255.255.255  broadcast |
  1159.    +-----------------------+-----------------------------------------+
  1160.  
  1161.         B = BROADCAST flag
  1162.  
  1163.         X = Don't care
  1164.  
  1165.    normal = determine from the given IP destination using normal
  1166.             IP routing mechanisms and/or ARP as for any other
  1167.             normal datagram
  1168.  
  1169. Acknowledgements
  1170.  
  1171.    The author would like to thank Gary Malkin for his contribution of
  1172.    the "BOOTP over IEEE 802.5 Token Ring Networks" section, and Steve
  1173.    Deering for his observations on the problems associated with the
  1174.    'giaddr' field.
  1175.  
  1176.    Ralph Droms and the many members of the IETF Dynamic Host
  1177.    Configuration and Router Requirements working groups provided ideas
  1178.    for this memo as well as encouragement to write it.
  1179.  
  1180.    Philip Almquist and David Piscitello offered many helpful suggestions
  1181.    for improving the clarity, accuracy, and organization of this memo.
  1182.    These contributions are graciously acknowledged.
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192. Wimer                                                          [Page 21]
  1193.  
  1194.  
  1195. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  1196.  
  1197.  
  1198. References
  1199.  
  1200.    [1] Croft, B., and J. Gilmore, "Bootstrap Protocol (BOOTP)", RFC 951,
  1201.        Stanford University and Sun Microsystems, September 1985.
  1202.  
  1203.    [2] Reynolds, J., "BOOTP Vendor Information Extensions", RFC 1497,
  1204.        USC/Information Sciences Institute, August 1993.  This RFC is
  1205.        occasionally reissued with a new number.  Please be sure to
  1206.        consult the latest version.
  1207.  
  1208.    [3] Droms, R., "Dynamic Host Configuration Protocol", RFC 1541,
  1209.        Bucknell University, October 1993.
  1210.  
  1211.    [4] Plummer, D., "An Ethernet Address Resolution Protocol", STD 37,
  1212.        RFC 826, MIT, November 1982.
  1213.  
  1214.    [5] Deering, S., "ICMP Router Discovery Messages", RFC 1256, Xerox
  1215.        PARC, September 1991.
  1216.  
  1217.    [6] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1340,
  1218.        USC/Information Sciences Institute, July, 1992.  This RFC is
  1219.        periodically reissued with a new number.  Please be sure to
  1220.        consult the latest version.
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249. Wimer                                                          [Page 22]
  1250.  
  1251.  
  1252. RFC 1542        Clarifications and Extensions for BOOTP     October 1993
  1253.  
  1254.  
  1255. Security Considerations
  1256.  
  1257.    There are many factors which make BOOTP in its current form quite
  1258.    insecure.  BOOTP is built directly upon UDP and IP which are as yet
  1259.    inherently insecure themselves.  Furthermore, BOOTP is generally
  1260.    intended to make maintenance of remote and/or diskless hosts easier.
  1261.    While perhaps not impossible, configuring such hosts with passwords or
  1262.    keys may be difficult and inconvenient.  This makes it difficult to
  1263.    provide any form of reasonable authentication between servers and
  1264.    clients.
  1265.  
  1266.    Unauthorized BOOTP servers may easily be set up.  Such servers can
  1267.    then send false and potentially disruptive information to clients such
  1268.    as incorrect or duplicate IP addresses, incorrect routing information
  1269.    (including spoof routers, etc.), incorrect domain nameserver addresses
  1270.    (such as spoof nameservers), and so on.  Clearly, once this "seed"
  1271.    mis-information is planted, an attacker can further compromise the
  1272.    affected systems.
  1273.  
  1274.    Unauthorized BOOTP relay agents may present some of the same problems
  1275.    as unauthorized BOOTP servers.
  1276.  
  1277.    Malicious BOOTP clients could masquerade as legitimate clients and
  1278.    retrieve information intended for those legitimate clients.  Where
  1279.    dynamic allocation of resources is used, a malicious client could
  1280.    claim all resources for itself, thereby denying resources to
  1281.    legitimate clients.
  1282.  
  1283. Author's Address
  1284.  
  1285.    Walt Wimer
  1286.    Network Development
  1287.    Carnegie Mellon University
  1288.    5000 Forbes Avenue
  1289.    Pittsburgh, PA  15213-3890
  1290.  
  1291.    Phone: (412) 268-6252
  1292.    EMail:  Walter.Wimer@CMU.EDU
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306. Wimer                                                          [Page 23]
  1307.  
  1308.  
  1309.  
  1310.  
  1311.