1 The client identifier chosen by a DHCP client MUST be unique to that client within the subnet to which the client is attached. If the client uses a client identifier in one message, it MUST use that same identifier in all subsequent messages, to ensure that all servers correctly identify the client. 2131 -

2 A DHCP client must be prepared to receive DHCP messages with an options field of at least length 312 octets. This requirement implies that a DHCP client must be prepared to receive a message of up to 576 octets, the minimum IP datagram size an IP host must be prepared to accept [3]. 2131 c

3 The remaining bits of the flags field are reserved for future use. They MUST be set to zero by clients and ignored by servers and relay agents. 2131 c

4 The first four octets of the options field of the DHCP message contain the (decimal) values 99, 130, 83 and 99, respectively (this is the same magic cookie as is defined in RFC 1497 [17]). 2131 c

5 The client broadcasts a DHCPREQUEST message that MUST include the server identifier option to indicate which server it has selected, and that MAY include other options specifying desired configuration values. The requested IP address option MUST be set to the value of yiaddr in the DHCPOFFER message from the server. 2131 c

6 To help ensure that any BOOTP relay agents forward the DHCPREQUEST message to the same set of DHCP servers that received the original DHCPDISCOVER message, the DHCPREQUEST message MUST use the same value in the DHCP message header’s secs field and be sent to the same IP broadcast address as the original DHCPDISCOVER message. 2131 c

7 If the client detects that the address is already in use (e.g., through the use of ARP), the client MUST send a DHCPDECLINE message to the server and restarts the configuration process. 2131

5227 c

8 If the client used a client identifier when it obtained the lease, it MUST use the same client identifier in the DHCPRELEASE message. 2131 -

9 {REBOOT} As the client has not received its network address, it MUST NOT fill in the ciaddr field. 2131 -

10 If the client used a client identifier to obtain its address, the client MUST use the same client identifier in the DHCPREQUEST message. 2131 -

11 If giaddr is 0x0 in the DHCPREQUEST message, the client is on the same subnet as the server. The server MUST broadcast the DHCPNAK message to the 0xffffffff broadcast address because the client may not have a correct network address or subnet mask, and the client may not be answering ARP requests. Otherwise, the server MUST send the DHCPNAK message to the IP address of the BOOTP relay agent, as recorded in giaddr. 2131 -

12 If the client detects that the IP address in the DHCPACK message is already in use, the client MUST send a DHCPDECLINE message to the server and restarts the configuration process by requesting a new network address. 2131

5227 c

13 If the client receives no parameters from the server that override the defaults, a client uses those default values. 2131 c

14 If the client includes a list of parameters in a DHCPDISCOVER message, it MUST include that list in any subsequent DHCPREQUEST messages. 2131 c

15 The requested IP address option is to be filled in only in a DHCPREQUEST message when the client is verifying network parameters obtained previously. The client fills in the ciaddr field only when correctly configured with an IP address in BOUND, RENEWING or REBINDING state. 2131 c

16 A client with multiple network interfaces must use DHCP through each interface independently to obtain configuration information parameters for those separate interfaces. 2131 c

17 If the lease expires before the client can contact a DHCP server, the client must immediately discontinue use of the previous network address and may inform local users of the problem. 2131 -

18 The last option must always be the end option. 2131 c

19 DHCP messages from a client to a server are sent to the DHCP server port (67), and DHCP messages from a server to a client are sent to the DHCP client port (68). 2131 c

20 A server with multiple network addresses MUST be prepared to to accept any of its network addresses as identifying that server in a DHCP message. To accommodate potentially incomplete network connectivity, a server MUST choose an address as a server identifier that, to the best of the server’s knowledge, is reachable from the client 2131 -

21 DHCP clients MUST use the IP address provided in the server identifier option for any unicast requests to the DHCP server. 2131 c

22 DHCP messages broadcast by a client prior to that client obtaining its IP address must have the source address field in the IP header set to 0. 2131 c

23 If the options in a DHCP message extend into the sname and file fields, the option overload option MUST appear in the options field, with value 1, 2 or 3, as specified in RFC 1533. If the option overload option is present in the options field, the options in the options field MUST be terminated by an end option, and MAY contain one or more pad options to fill the options field. The options in the sname and file fields (if in use as indicated by the options overload option) MUST begin with the first octet of the field, MUST be terminated by an end option, and MUST be followed by pad options to fill the remainder of the field. Any individual option in the options, sname and file fields MUST be entirely contained in that field. The options in the options field MUST be interpreted first, so that any option overload options may be interpreted. The file field MUST be interpreted next (if the option overload option indicates that the file field contains DHCP options), followed by the sname field. 2131 -

24 Options may appear only once, unless otherwise specified in the options document. The client concatenates the values of multiple instances of the same option into a single parameter list for configuration. 2131 x

25 The client MUST adopt a retransmission strategy that incorporates a randomized exponential backoff algorithm to determine the delay between retransmissions. 2131 x

26 The xid field is used by the client to match incoming DHCP messages with pending requests. A DHCP client MUST choose xid’s in such a way as to minimize the chance of using an 'xid identical to one used by another client. 2131 c

27 If the client supplies a client identifier, the client MUST use the same client identifier in all subsequent messages, and the server MUST use that identifier to identify the client. If the client does not provide a client identifier option, the server MUST use the contents of the chaddr field to identify the client. 2131 c

28 {DHCPREQUEST during SELECTING} Client inserts the address of the selected server in server identifier, ciaddr MUST be zero, requested IP address MUST be filled in with the yiaddr value from the chosen DHCPOFFER. 2131 c

29 {DHCPREQUEST during INIT-REBOOT} server identifier MUST NOT be filled in, requested IP address option MUST be filled in with client’s notion of its previously assigned address. ciaddr MUST be zero. 2131 -

30 {DHCPREQUEST during RENEWING} server identifier MUST NOT be filled in, requested IP address option MUST NOT be filled in, ciaddr MUST be filled in with client’s IP address. 2131 c

31 {DHCPREQUEST during REBINDING} server identifier MUST NOT be filled in, requested IP address option MUST NOT be filled in, ciaddr MUST be filled in with client’s IP address. 2131 c

32 The client sets ciaddr to 0x00000000. 2131 c

33 The client MUST include its hardware address in the chaddr field, if necessary for delivery of DHCP reply messages. 2131 c

34 If the client included a list of requested parameters in a DHCPDISCOVER message, it MUST include that list in all subsequent messages. 2131 c

35 The client generates and records a random transaction identifier and inserts that identifier into the xid field. The client records its own local time for later use in computing the lease expiration. The client then broadcasts the DHCPDISCOVER on the local hardware broadcast address to the 0xffffffff IP broadcast address and DHCP server UDP port. 2131 c

36 If the xid of an arriving DHCPOFFER message does not match the xid of the most recent DHCPDISCOVER message, the DHCPOFFER message must be silently discarded. Any arriving DHCPACK messages must be silently discarded. 2131 c

37 The client collects DHCPOFFER messages over a period of time, selects one DHCPOFFER message from the (possibly many) incoming DHCPOFFER messages (e.g., the first DHCPOFFER message or the DHCPOFFER message from the previously used server) and extracts the server address from the server identifier option in the DHCPOFFER message. 2131 c

38 If the parameters are acceptable, the client records the address of the server that supplied the parameters from the server identifier field and sends that address in the server identifier field of a DHCPREQUEST broadcast message. Once the DHCPACK message from the server arrives, the client is initialized and moves to BOUND state. The DHCPREQUEST message contains the same xid as the DHCPOFFER message. The client records the lease expiration time as the sum of the time at which the original request was sent and the duration of the lease from the DHCPACK message. 2131 c

39 The client MUST insert its known network address as a requested IP address option in the DHCPREQUEST message. 2131 c

40 The client generates and records a random transaction identifier and inserts that identifier into the xid field. The client records its own local time for later use in computing the lease expiration. The client MUST NOT include a server identifier in the DHCPREQUEST message. The client then broadcasts the DHCPREQUEST on the local hardware broadcast address to the DHCP server UDP port. 2131 c

41 Once a DHCPACK message with an xid field matching that in the client’s DHCPREQUEST message arrives from any server, the client is initialized and moves to BOUND state. The client records the lease expiration time as the sum of the time at which the DHCPREQUEST message was sent and the duration of the lease from the DHCPACK message. 2131 c

42 The client then unicasts the DHCPINFORM to the DHCP server if it knows the server’s address, otherwise it broadcasts the message to the limited (all 1s) broadcast address. DHCPINFORM messages MUST be directed to the DHCP server UDP port. 2131 -

43 The client maintains two times, T1 and T2, that specify the times at which the client tries to extend its lease on its network address. T1 is the time at which the client enters the RENEWING state and attempts to contact the server that originally issued the client’s network address. T2 is the time at which the client enters the REBINDING state and attempts to contact any server. T1 MUST be earlier than T2, which, in turn, MUST be earlier than the time at which the client’s lease will expire. 2131 c

44 At time T1 the client moves to RENEWING state and sends (via unicast) a DHCPREQUEST message to the server to extend its lease. The client sets the ciaddr field in the DHCPREQUEST to its current network address. The client records the local time at which the DHCPREQUEST message is sent for computation of the lease expiration time. The client MUST NOT include a server identifier in the DHCPREQUEST message. 2131 c

45 Any DHCPACK messages that arrive with an xid that does not match the xid of the client’s DHCPREQUEST message are silently discarded. When the client receives a DHCPACK from the server, the client computes the lease expiration time as the sum of the time at which the client sent the DHCPREQUEST message and the duration of the lease in the DHCPACK message. The client has successfully reacquired its network address, returns to BOUND state and may continue network processing. 2131 c

46 If no DHCPACK arrives before time T2, the client moves to REBINDING state and sends (via broadcast) a DHCPREQUEST message to extend its lease. The client sets the ciaddr field in the DHCPREQUEST to its current network address. The client MUST NOT include a server identifier in the DHCPREQUEST message. 2131 c

47 Times T1 and T2 are configurable by the server through options. T1 defaults to (0.5 * duration_of_lease). T2 defaults to (0.875 * duration_of_lease). 2131 c

48 If the lease expires before the client receives a DHCPACK, the client moves to INIT state, MUST immediately stop any other network processing and requests network initialization parameters as if the client were uninitialized. 2131 -

49 If the client is given a new network address, it MUST NOT continue using the previous network address and SHOULD notify the local users of the problem. 2131 c

50 This memo hereby defines the most significant bit of the flags field as the BROADCAST (B) flag. The semantics of this flag are discussed in Sections 3.1.1 and 4.1.2 of this memo. The remaining bits of the flags field are reserved for future use. They MUST be set to zero by clients and ignored by servers and relay agents. 1542 c

51 The chaddr field MUST be preserved as it was specified by the BOOTP client. A relay agent MUST NOT reverse the bit ordering of the chaddr field even if it happens to be relaying a BOOTREQUEST between two networks which use different bit orderings. 1542 c

52 The remaining bits of the flags field are reserved for future use. A client MUST set these bits to zero in all BOOTREQUEST messages it generates. 1542 c

53 A client MUST ignore these bits in all BOOTREPLY messages it receives. 1542 c

54 If the client does place a non-zero IP address in the ciaddr field, the client MUST be prepared to accept incoming unicast datagrams addressed to that IP address and also answer ARP requests for that IP address (if ARP is used on that network). 1542 c

55 A BOOTP client MUST set the giaddr field to zero (0.0.0.0) in all BOOTREQUEST messages it generates 1542 c.

56 A BOOTP client MUST NOT interpret the giaddr field of a BOOTREPLY message to be the IP address of an IP router. 1542 c

57 Any Internet host or router which provides BOOTP relay-agent capability MUST conform to the specifications in this memo. 1542 c

58 However, hosts or routers which support a BOOTP relay agent MUST accept for local delivery to the relay agent BOOTREQUEST messages whose IP source address is 0.0.0.0. BOOTREQUEST messages from legal IP source addresses MUST also be accepted. 1542 c

59 A relay agent MUST silently discard any received UDP messages whose UDP destination port number is BOOTPC (68). 1542 c

60 BOOTP messages not meeting these consistency checks MUST be silently discarded. 1542 c

61 Some configuration mechanism MUST exist to enable or disable the relaying of BOOTREQUEST messages. Relaying MUST be disabled by default. 1542 -

62 The relay agent MUST silently discard BOOTREQUEST messages whose hops field exceeds the value 16. 1542 c

63 If the relay agent does decide to relay the request, it MUST examine the giaddr ("gateway" IP address) field. If this field is zero, the relay agent MUST fill this field with the IP address of the interface on which the request was received. 1542 c

64 If the giaddr field contains some non-zero value, the giaddr field MUST NOT be modified. The relay agent MUST NOT, under any circumstances, fill the giaddr field with a broadcast address as is suggested in [1] (Section 8, sixth paragraph). 1542 c

65 The value of the hops field MUST be incremented. 1542 c

66 All other BOOTP fields MUST be preserved intact. 1542 c

67 At this point, the request is relayed to its new destination (or destinations). This destination MUST be configurable. 1542 c

68 However, if the BOOTREQUEST message was received as a broadcast, the relay agent MUST NOT rebroadcast the BOOTREQUEST on the physical interface from whence it came. 1542 c

69 A relay agent MUST use the same destination (or set of destinations) for all BOOTREQUEST messages it relays from a given client. 1542 c

70 If the BOOTREQUEST has a UDP checksum (i.e., the UDP checksum is non-zero), the checksum must be recalculated before transmitting the request. 1542 c

71 If the content of the giaddr field does not match one of the relay agent’s directly-connected logical interfaces, the BOOTREPLY message MUST be silently discarded. 1542 c

72 All BOOTP fields MUST be preserved intact. The relay agent MUST NOT modify any BOOTP field of the BOOTREPLY message when relaying it to the client. 1542 c

73 The reply MUST have its UDP destination port set to BOOTPC (68). 1542 c

74 If the BOOTREPLY has a UDP checksum (i.e., the UDP checksum is non-zero), the checksum must be recalculated before transmitting the reply. 1542 c